10 nvim-impure = "/home/julm/work/sourcephile/nix/julm-nix/home-manager/profiles/nvim/";
11 optionalPlugin = plugin: {
17 # Explanation(maint/modifiability):
18 # home-manager provides a (convoluted) wrapper around pkgs.wrapNeovimUnstable,
19 # and writes a minimal ~/.config/nvim/init.lua
20 # which is here configured to source ./nvim from:
21 # - either ${nvim-impure} which is where I store ./nvim before it gets into the Nix store.
22 # - or ./nvim copied into the Nix store when rebuilding the system with home-manager.
24 # So, for quick feedback:
25 # - if only ./nvim has changed: relaunch nvim
26 # - or if only new plugin packages are required, rebuild nvim:
27 # nix -L build .#nixosConfigurations.nan2gua1.config.home-manager.users.julm.programs.neovim.finalPackage &&
29 # - or if external packages need to be install: reinstall normally
31 enable = lib.mkDefault true;
32 extraLuaConfig = lib.concatStringsSep "\n" [
33 # Lua config for normal usage
34 "vim.opt.runtimepath:prepend('${./nvim}')"
35 # Lua config for quick feedback when changing ./nvim
36 "vim.opt.runtimepath:prepend('${nvim-impure}')"
37 # Load ./nvim/lua/config
39 # Lazy load ./nvim/lua/plugins
40 "require('lz.n').load('plugins')"
41 # Overrides `require()` to also search for optional plugins and load them with lz.n
42 "require('lzn-auto-require').enable()"
46 pkgs.vimPlugins.lzn-auto-require
48 ++ lib.map optionalPlugin [
49 pkgs.vimPlugins.blink-cmp
50 pkgs.vimPlugins.blink-emoji-nvim
51 (pkgs.vimUtils.buildVimPlugin {
54 src = inputs.bufstack;
56 (pkgs.vimUtils.buildVimPlugin {
59 src = inputs.eagle-nvim;
61 pkgs.vimPlugins.comment-nvim
62 pkgs.vimPlugins.conform-nvim
63 pkgs.vimPlugins.diffview-nvim
64 pkgs.vimPlugins.fastaction-nvim
65 pkgs.vimPlugins.FixCursorHold-nvim # For neotest
66 #pkgs.vimPlugins.fine-cmdline-nvim
67 pkgs.vimPlugins.git-conflict-nvim
68 pkgs.vimPlugins.github-nvim-theme
69 #pkgs-unstable.vimPlugins.vim-moonfly-colors
70 pkgs.vimPlugins.gitlinker-nvim
71 pkgs.vimPlugins.gitsigns-nvim
72 pkgs.vimPlugins.haskell-tools-nvim
73 (pkgs.vimUtils.buildVimPlugin {
74 pname = "jj-fugitive.nvim";
76 src = inputs.jj-fugitive;
78 (pkgs.vimUtils.buildVimPlugin {
79 pname = "jj-diffconflicts.nvim";
81 src = inputs.jj-diffconflicts;
83 pkgs.vimPlugins.elixir-tools-nvim
84 pkgs.vimPlugins.hunk-nvim
85 pkgs.vimPlugins.image-nvim
86 (pkgs.vimUtils.buildVimPlugin {
89 src = inputs.sivansh11-jj-nvim;
91 pkgs.vimPlugins.lualine-nvim
93 (pkgs.vimUtils.buildVimPlugin {
96 src = inputs.modes-nvim;
99 pkgs.vimPlugins.monokai-pro-nvim
100 pkgs.vimPlugins.neo-tree-nvim
101 pkgs.vimPlugins.neotest
102 pkgs.vimPlugins.neotest-haskell
103 pkgs.vimPlugins.neotest-plenary
104 #pkgs.vimPlugins.neovim-ayu
105 pkgs.vimPlugins.noice-nvim
106 pkgs.vimPlugins.nui-nvim
107 pkgs.vimPlugins.nvim-colorizer-lua
108 pkgs.vimPlugins.nvim-fzf # For telescope
109 pkgs.vimPlugins.nvim-lint
110 pkgs.vimPlugins.nvim-navbuddy
111 pkgs.vimPlugins.nvim-navic # For navbuddy
112 pkgs.vimPlugins.nvim-nio
113 pkgs.vimPlugins.nvim-rg
114 pkgs.vimPlugins.nvim-treesitter.withAllGrammars
115 pkgs.vimPlugins.nvim-web-devicons
116 pkgs.vimPlugins.octo-nvim
117 pkgs.vimPlugins.snacks-nvim
119 (pkgs.vimUtils.buildVimPlugin {
120 pname = "solarized-osaka.nvim";
122 src = inputs.solarized-osaka-nvim;
126 # pkgs.vimPlugins.sqlite-lua # For telescope-smart-history.nvim
127 pkgs.vimPlugins.telescope-fzf-native-nvim
128 pkgs.vimPlugins.telescope-git-conflicts-nvim
129 pkgs.vimPlugins.telescope-live-grep-args-nvim
130 pkgs.vimPlugins.telescope-nvim
131 pkgs.vimPlugins.telescope-smart-history-nvim
132 pkgs.vimPlugins.toggleterm-nvim
133 pkgs.vimPlugins.trouble-nvim
134 pkgs.vimPlugins.vim-illuminate
135 #pkgs-unstable-latest.vimPlugins.vscode-diff-nvim
136 pkgs.vimPlugins.which-key-nvim
147 extraLuaPackages = ps: [ ps.magick ];
148 extraPackages = [ pkgs.imagemagick ];
153 package = pkgs.neovim-unwrapped;
160 inherit (pkgs.neovim-unwrapped) lua;
163 xdg.configFile."firejail/nvim.local".text = lib.concatStringsSep "\n" [
165 "include ${firejail/allow-jujutsu.inc}"
167 "noblacklist /tmp/tmux-*"
168 # For git status, eg. ~/.config/git/ignore
169 "noblacklist \${HOME}/.config/git"
170 # Reallow cc for LSPs, including Haskell's LSP
171 "ignore include disable-devel.inc"
173 home.packages = lib.mkIf config.programs.neovim.enable (
178 pkgs.nixfmt-rfc-style
191 pkgs.bash-language-server
193 pkgs.lua-language-server
207 ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [