{pkgs, ...}: { programs.neovim = { enable = true; defaultEditor = true; extraLuaConfig = '' ${builtins.readFile ./config.lua} ''; extraPackages = with pkgs; [ nodePackages_latest.typescript-language-server vscode-langservers-extracted gopls nil rust-analyzer ]; plugins = with pkgs.vimPlugins; [ { plugin = nvim-surround; type = "lua"; config = '' require("nvim-surround").setup() ''; } { plugin = comment-nvim; type = "lua"; config = '' require("Comment").setup() ''; } { plugin = vimwiki; config = '' let g:vimwiki_list = [{'path': '~/Documents/vimwiki/', 'syntax': 'markdown', 'ext': '.md'}] ''; } { plugin = telescope-nvim; type = "lua"; config = '' local builtin = require('telescope.builtin') vim.keymap.set('n', 'ff', builtin.find_files, {}) vim.keymap.set('n', 'fg', builtin.live_grep, {}) vim.keymap.set('n', 'fb', builtin.buffers, {}) vim.keymap.set('n', 'fh', builtin.help_tags, {}) ''; } { plugin = nvim-lspconfig; type = "lua"; config = builtins.readFile ./lspconfig.lua; } ]; }; programs.vscode = { extensions = [pkgs.vscode-extensions.asvetliakov.vscode-neovim]; userSettings = { "vscode-neovim.neovimExecutablePaths.linux" = "${pkgs.neovim}/bin/nvim"; "extensions.experimental.affinity" = { "asvetliakov.vscode-neovim" = 1; }; }; }; home.shellAliases = { v = "nvim ."; }; }