{ lib, config, pkgs, ... }: with lib; { options.desktop.enableNeovim = mkOption { type = types.bool; default = true; example = false; description = '' Whether to use Neovim and its config. ''; }; config.programs.neovim = mkIf config.desktop.enableNeovim { enable = true; viAlias = true; vimAlias = true; vimdiffAlias = true; extraConfig = '' luafile ${./luaconfig/settings.lua} luafile ${./luaconfig/keybindings.lua} luafile ${./luaconfig/lspconfig.lua} ''; extraPackages = with pkgs; [ nixfmt nil ripgrep entr ]; plugins = with pkgs.vimPlugins; [ # Theming { plugin = onenord-nvim; type = "lua"; config = '' require('onenord').setup() ''; } { plugin = lualine-nvim; type = "lua"; config = '' require('lualine').setup() ''; } vim-devicons # Utility plugins { plugin = nerdtree; type = "lua"; config = '' vim.g.NERDTreeShowHidden = 1 vim.keymap.set('n', '', ':NERDTreeToggle', { desc = 'Toogle NERDTree pane' }) vim.keymap.set('n', '', ':NERDTreeFind', { desc = 'Search file in NERDTree' }) vim.keymap.set('n', '', ':NERDTreeFocus', { desc = 'Focus on the NERDTreePane' }) -- Keep the same NERDTree pane on each window vim.api.nvim_create_autocmd("BufWinEnter", { pattern = "*", command = "if getcmdwintype() == \'\' | silent NERDTreeMirror | endif" }) ''; } nerdtree-git-plugin { plugin = toggleterm-nvim; type = "lua"; config = '' require("toggleterm").setup{} vim.keymap.set('n', 'tf', ':ToggleTerm direction=float', { desc = 'Open a new terminal in float buffer' }) vim.keymap.set('n', 'tt', ':ToggleTerm direction=tab', { desc = 'Open a new terminal in a new tab' }) vim.keymap.set('n', 'tv', ':ToggleTerm direction=vertical', { desc = 'Open in a vertical splitted buffer' }) vim.keymap.set('n', 'th', ':ToggleTerm', { desc = 'Open in a horizontal splitted buffer' }) ''; } { plugin = neogit; type = "lua"; config = '' require('neogit').setup {} ''; } { plugin = gitsigns-nvim; type = "lua"; config = '' require('gitsigns').setup() ''; } vim-multiple-cursors vim-sleuth vim-commentary { plugin = telescope-nvim; type = "lua"; config = '' local telescope = require('telescope.builtin') vim.keymap.set('n', 'ff', telescope.find_files, { desc = 'Search file with Telescope' }) vim.keymap.set('n', 'fg', telescope.live_grep, { desc = 'Live grep with Telescope'}) vim.keymap.set('n', 'fb', telescope.buffers, { desc = 'Search amongst current buffers (opened files)'}) vim.keymap.set('n', 'fh', telescope.help_tags, { desc = 'Search within nvim manual'}) vim.keymap.set('n', 'fs', telescope.lsp_workspace_symbols, { desc = 'Search symbol' }) ''; } plenary-nvim telescope-fzy-native-nvim # Language support plugins vim-nix vim-nixhash { plugin = rust-vim; type = "lua"; config = '' vim.g.rustfmt_autosave = 1 ''; } vim-markdown markdown-preview-nvim { plugin = vimtex; type = "viml"; config = '' let g:vimtex_view_method = 'zathura' let g:vimtex_compiler_method = 'tectonic' let g:vimtex_compiler_tectonic = { \'out_dir' : ' ', \'hooks' : [], \'options' : [ \ '--keep-logs', \ '--synctex', \ '-Zshell-escape', \ '-Zshell-escape-cwd=$PWD' \], \} ''; } # Autocompletion and LSP server nvim-lspconfig nvim-cmp cmp-path cmp-cmdline cmp-buffer cmp-nvim-lsp vim-vsnip ]; }; config.xdg.configFile.nvim = mkIf config.desktop.enableNeovim { source = ./luaconfig; recursive = true; }; }