{ config, pkgs, ... }: let plugins = pkgs.vimPlugins; theme = config.colorScheme.palette; in { programs.nixvim = { enable = true; globals.mapleader = " "; # Sets the leader key to space options = { clipboard="unnamedplus"; number = true; # Show line numbers relativenumber = true; # Show relative line numbers shiftwidth = 2; # Tab width should be 2 softtabstop = 2; smartindent = true; wrap = false; swapfile = false; backup = false; hlsearch = false; incsearch = true; termguicolors = true; scrolloff = 8; updatetime = 50; }; colorschemes.base16.enable = true; colorschemes.base16.customColorScheme = { base00 = "#${theme.base00}"; base01 = "#${theme.base01}"; base02 = "#${theme.base02}"; base03 = "#${theme.base03}"; base04 = "#${theme.base04}"; base05 = "#${theme.base05}"; base06 = "#${theme.base06}"; base07 = "#${theme.base07}"; base08 = "#${theme.base08}"; base09 = "#${theme.base09}"; base0A = "#${theme.base0A}"; base0B = "#${theme.base0B}"; base0C = "#${theme.base0C}"; base0D = "#${theme.base0D}"; base0E = "#${theme.base0E}"; base0F = "#${theme.base0F}"; }; plugins = { barbecue.enable = true; gitsigns.enable = true; toggleterm.enable = true; telescope = { enable = true; keymaps = { "ff" = "find_files"; }; }; neo-tree.enable = true; indent-blankline.enable = true; nvim-colorizer.enable = true; nvim-autopairs.enable = true; nix.enable = true; comment-nvim.enable = true; lualine = { enable = true; }; startup = { enable = true; theme = "dashboard"; }; lint = { enable = true; lintersByFt = { text = ["vale"]; json = ["jsonlint"]; markdown = ["vale"]; rst = ["vale"]; ruby = ["ruby"]; janet = ["janet"]; inko = ["inko"]; clojure = ["clj-kondo"]; dockerfile = ["hadolint"]; terraform = ["tflint"]; typscriptreact = ["prettier_eslint"]; }; }; lsp = { enable = true; servers = { tsserver.enable = true; lua-ls.enable = true; bashls.enable = true; rust-analyzer = { enable = true; installRustc = true; installCargo = true; }; nixd.enable = true; html.enable = true; ccls.enable = true; cmake.enable = true; csharp-ls.enable = true; cssls.enable = true; gopls.enable = true; jsonls.enable = true; pyright.enable = true; tailwindcss.enable = true; }; }; lsp-lines.enable = true; treesitter = { enable = true; nixGrammars = true; }; nvim-cmp = { enable = true; autoEnableSources = true; sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; mapping = { "" = "cmp.mapping.confirm({ select = true })"; "" = { action = ''cmp.mapping.select_next_item()''; modes = [ "i" "s" ]; }; }; }; }; # FOR NEOVIDE extraConfigLua = '' vim.opt.guifont = "JetBrainsMono\\ NFM,Noto_Color_Emoji:h14" vim.g.neovide_cursor_animation_length = 0.05 local colors = { blue = '#${theme.base0D}', cyan = '#${theme.base0C}', black = '#${theme.base00}', white = '#${theme.base05}', red = '#${theme.base08}', violet = '#${theme.base0E}', grey = '#${theme.base02}', } local bubbles_theme = { normal = { a = { fg = colors.black, bg = colors.violet }, b = { fg = colors.white, bg = colors.grey }, c = { fg = colors.black, bg = colors.black }, }, insert = { a = { fg = colors.black, bg = colors.blue } }, visual = { a = { fg = colors.black, bg = colors.cyan } }, replace = { a = { fg = colors.black, bg = colors.red } }, inactive = { a = { fg = colors.white, bg = colors.black }, b = { fg = colors.white, bg = colors.black }, c = { fg = colors.black, bg = colors.black }, }, } require('lualine').setup { options = { theme = bubbles_theme, component_separators = '|', section_separators = { left = '', right = '' }, }, sections = { lualine_a = { { 'mode', separator = { left = '' }, right_padding = 2 }, }, lualine_b = { 'filename', 'branch' }, lualine_c = { 'fileformat' }, lualine_x = {}, lualine_y = { 'filetype', 'progress' }, lualine_z = { { 'location', separator = { right = '' }, left_padding = 2 }, }, }, inactive_sections = { lualine_a = { 'filename' }, lualine_b = {}, lualine_c = {}, lualine_x = {}, lualine_y = {}, lualine_z = { 'location' }, }, tabline = {}, extensions = {}, } ''; extraConfigVim = '' set noshowmode inoremap jj nnoremap exe v:count1 . "ToggleTerm" inoremap exe v:count1 . "ToggleTerm" ''; keymaps = [ { mode = "n"; key = "fb"; action = "Neotree reveal right"; options.silent = false; } { key = ""; action = ":bnext"; options.silent = false; } { key = ""; action = ":bprev"; options.silent = false; } ]; }; }