{ unstable, ... }: { programs.neovim = let toLua = str: "lua << EOF\n${str}\nEOF\n"; toLuaFile = file: "lua << EOF\n${builtins.readFile file}\nEOF\n"; grammarsPath = unstable.symlinkJoin { name = "treesitter-grammars"; paths = unstable.vimPlugins.nvim-treesitter.withAllGrammars.dependencies; }; in { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; vimdiffAlias = true; extraPackages = with unstable; [ inotify-tools # debuggers delve # golang debugger lldb # rust, c, etc, debugger # format rustfmt dprint # platform for many formatters yamlfmt # LSP biome # javascript, biome clippy # rust error checking clang-tools # C dprint # format engine for multiple langeuages dprint-plugins.dprint-plugin-markdown # markdown dprint-plugins.dprint-plugin-toml # toml dprint-plugins.g-plane-malva # css dprint-plugins.g-plane-markup_fmt # html dprint-plugins.g-plane-pretty_yaml # yaml fish-lsp # fish gopls # golang ltex-ls # latex, markdown lua-language-server # lua nil # lsp server for nix nodePackages.bash-language-server # bash nodePackages.typescript-language-server # javascript validation ruff # python format and lint rust-analyzer tex-fmt # latex texlab # latex lsp tree-sitter # generate tree-sitter grammars ty # python type checker written in rust vale-ls # prose (md, asciidoc) ]; extraPython3Packages = ps: [ ps.debugpy ps.pynvim ]; plugins = with unstable.vimPlugins; [ { plugin = nvim-dap; config = toLuaFile ./plugins/dap.lua; } { plugin = which-key-nvim; config = toLuaFile ./plugins/which.lua; } { plugin = undotree; config = toLuaFile ./plugins/undotree.lua; } { plugin = mini-nvim; config = toLuaFile ./plugins/mini.lua; } { plugin = nvim-treesitter.withAllGrammars; config = toLuaFile ./plugins/treesitter.lua; } hardtime-nvim nord-nvim nvim-dap-view nvim-dap-virtual-text tokyonight-nvim ]; extraLuaConfig = '' -- Manually append Tree-sitter plugin and grammars to runtimepath vim.opt.runtimepath:append("${unstable.vimPlugins.nvim-treesitter}") vim.opt.runtimepath:append("${grammarsPath}") ${builtins.readFile ./lsp.lua} ${builtins.readFile ./autocommands.lua} ${builtins.readFile ./keymaps.lua} ${builtins.readFile ./options.lua} ${builtins.readFile ./plugins/other.lua} ''; }; }