{ inputs, pkgs, lib, ... }: { programs.neovim = let toLua = str: "lua << EOF\n${str}\nEOF\n"; toLuaFile = file: "lua << EOF\n${builtins.readFile file}\nEOF\n"; fromGitHub = rev: ref: repo: pkgs.vimUtils.buildVimPlugin { pname = "${lib.strings.sanitizeDerivationName repo}"; version = ref; src = builtins.fetchGit { url = "https://github.com/${repo}.git"; ref = ref; rev = rev; }; }; in { enable = true; viAlias = true; vimAlias = true; vimdiffAlias = true; defaultEditor = true; plugins = with pkgs; [ # Colorschemes { plugin = vimPlugins.catppuccin-nvim; config = toLuaFile ./plugins/colorschemes/catppuccin.lua; } # LSP { plugin = vimPlugins.nvim-lspconfig; config = toLuaFile ./plugins/lsp.lua; } vimPlugins.cmp-buffer vimPlugins.cmp-cmdline vimPlugins.cmp-nvim-lsp vimPlugins.cmp-nvim-lua vimPlugins.cmp-path vimPlugins.cmp_luasnip vimPlugins.luasnip vimPlugins.nvim-cmp # The rest { plugin = vimPlugins.indent-blankline-nvim; config = toLuaFile ./plugins/indent.lua; } # HTML # TODO: enable this when treesitter is installed # { # plugin = vimPlugins.nvim-ts-autotag; # config = toLuaFile ./plugins/autotag.lua; # } { plugin = vimPlugins.nvim-colorizer-lua; config = toLuaFile ./plugins/colorizer.lua; } # GIT { plugin = vimPlugins.gitsigns-nvim; config = toLuaFile ./plugins/gitsigns.lua; } vimPlugins.vim-fugitive { plugin = (fromGitHub "3af6232c8d39d51062702e875ff6407c1eeb0391" "main" "xiyaowong/transparent.nvim"); config = toLuaFile ./plugins/transparent.lua; } { plugin = vimPlugins.presence-nvim; config = toLuaFile ./plugins/presence.lua; } { plugin = vimPlugins.comment-nvim; config = toLuaFile ./plugins/comment.lua; } { plugin = vimPlugins.which-key-nvim; config = toLuaFile ./plugins/whichkey.lua; } ]; extraLuaConfig = '' ${builtins.readFile ./core/colors.lua} ${builtins.readFile ./core/options.lua} ''; extraPackages = with pkgs; [ lua-language-server nodePackages_latest.vscode-langservers-extracted nixd ]; }; }