]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim.nix
+user/operability(ui): add jj-conflict
[julm/julm-nix.git] / home-manager / profiles / nvim.nix
1 {
2 inputs,
3 lib,
4 pkgs,
5 #pkgs-unstable-latest,
6 config,
7 ...
8 }:
9 let
10 nvim-impure = "/home/julm/work/sourcephile/nix/julm-nix/home-manager/profiles/nvim/";
11 optionalPlugin = plugin: {
12 inherit plugin;
13 optional = true;
14 };
15 in
16 {
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.
23 #
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 &&
28 # result/bin/nvim
29 # - or if external packages need to be install: reinstall normally
30 programs.neovim = {
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
38 "require('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()"
43 ];
44 plugins = [
45 pkgs.vimPlugins.lz-n
46 pkgs.vimPlugins.lzn-auto-require
47 ]
48 ++ lib.map optionalPlugin [
49 pkgs.vimPlugins.blink-cmp
50 pkgs.vimPlugins.blink-emoji-nvim
51 (pkgs.vimUtils.buildVimPlugin {
52 pname = "bufstack";
53 version = "main";
54 src = inputs.bufstack;
55 })
56 (pkgs.vimUtils.buildVimPlugin {
57 pname = "eagle.nvim";
58 version = "main";
59 src = inputs.eagle-nvim;
60 })
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 /*
74 (pkgs.vimUtils.buildVimPlugin {
75 pname = "jj-fugitive.nvim";
76 version = "main";
77 src = inputs.jj-fugitive;
78 })
79 */
80 (pkgs.vimUtils.buildVimPlugin {
81 pname = "jj-diffconflicts.nvim";
82 version = "main";
83 src = inputs.jj-diffconflicts;
84 })
85 (pkgs.vimUtils.buildVimPlugin {
86 pname = "jj-conflict.nvim";
87 version = "main";
88 src = inputs.jj-conflict;
89 })
90 pkgs.vimPlugins.elixir-tools-nvim
91 pkgs.vimPlugins.hunk-nvim
92 pkgs.vimPlugins.image-nvim
93 (pkgs.vimUtils.buildVimPlugin {
94 pname = "jj.nvim";
95 version = "master";
96 src = inputs.NicolasGB-jj-nvim;
97 })
98 /*
99 (pkgs.vimUtils.buildVimPlugin {
100 pname = "jj.nvim";
101 version = "master";
102 src = inputs.sivansh11-jj-nvim;
103 })
104 */
105 pkgs.vimPlugins.lspsaga-nvim
106 pkgs.vimPlugins.lualine-nvim
107 /*
108 (pkgs.vimUtils.buildVimPlugin {
109 pname = "modes.nvim";
110 version = "master";
111 src = inputs.modes-nvim;
112 })
113 */
114 pkgs.vimPlugins.monokai-pro-nvim
115 pkgs.vimPlugins.neo-tree-nvim
116 pkgs.vimPlugins.neotest
117 pkgs.vimPlugins.neotest-haskell
118 pkgs.vimPlugins.neotest-plenary
119 #pkgs.vimPlugins.neovim-ayu
120 pkgs.vimPlugins.noice-nvim
121 pkgs.vimPlugins.nui-nvim
122 pkgs.vimPlugins.nvim-colorizer-lua
123 pkgs.vimPlugins.nvim-fzf # For telescope
124 pkgs.vimPlugins.nvim-lint
125 pkgs.vimPlugins.nvim-navbuddy
126 pkgs.vimPlugins.nvim-navic # For navbuddy
127 pkgs.vimPlugins.nvim-nio
128 pkgs.vimPlugins.nvim-rg
129 pkgs.vimPlugins.nvim-treesitter.withAllGrammars
130 pkgs.vimPlugins.nvim-web-devicons
131 pkgs.vimPlugins.octo-nvim
132 pkgs.vimPlugins.snacks-nvim
133 /*
134 (pkgs.vimUtils.buildVimPlugin {
135 pname = "solarized-osaka.nvim";
136 version = "master";
137 src = inputs.solarized-osaka-nvim;
138 doCheck = false;
139 })
140 */
141 # pkgs.vimPlugins.sqlite-lua # For telescope-smart-history.nvim
142 pkgs.vimPlugins.telescope-fzf-native-nvim
143 pkgs.vimPlugins.telescope-git-conflicts-nvim
144 pkgs.vimPlugins.telescope-live-grep-args-nvim
145 pkgs.vimPlugins.telescope-nvim
146 pkgs.vimPlugins.telescope-smart-history-nvim
147 pkgs.vimPlugins.toggleterm-nvim
148 pkgs.vimPlugins.trouble-nvim
149 pkgs.vimPlugins.vim-illuminate
150 #pkgs-unstable-latest.vimPlugins.vscode-diff-nvim
151 pkgs.vimPlugins.which-key-nvim
152 ];
153
154 viAlias = true;
155 vimAlias = false;
156
157 withNodeJs = false;
158 #withPerl = false;
159 withPython3 = false;
160 withRuby = false;
161 # For image-nvim
162 extraLuaPackages = ps: [ ps.magick ];
163 extraPackages = [ pkgs.imagemagick ];
164
165 # Jailing neovim
166 package =
167 pkgs.firejailWrap {
168 package = pkgs.neovim-unwrapped;
169 args = [
170 "--quiet"
171 "--profile=nvim"
172 ];
173 }
174 // {
175 inherit (pkgs.neovim-unwrapped) lua;
176 };
177 };
178 xdg.configFile."firejail/nvim.local".text = lib.concatStringsSep "\n" [
179 # For jj
180 "include ${firejail/allow-jujutsu.inc}"
181 # For image-nvim
182 "noblacklist /tmp/tmux-*"
183 # For git status, eg. ~/.config/git/ignore
184 "noblacklist \${HOME}/.config/git"
185 # Reallow cc for LSPs, including Haskell's LSP
186 "ignore include disable-devel.inc"
187 ];
188 home.packages = lib.mkIf config.programs.neovim.enable (
189 lib.flatten (
190 lib.attrValues {
191 formatters = [
192 pkgs.gdtoolkit_4
193 pkgs.nixfmt-rfc-style
194 #pkgs.fourmolu
195 #pkgs.rustfmt
196 pkgs.shfmt
197 pkgs.stylua
198 ];
199 linters = [
200 pkgs.deadnix
201 pkgs.shellcheck
202 pkgs.statix
203 pkgs.typos-lsp
204 #pkgs.hlint
205 ];
206 lsp = [
207 pkgs.elmPackages.elm-language-server
208 pkgs.bash-language-server
209 #pkgs.elixir-ls
210 pkgs.lua-language-server
211 #pkgs.next-ls
212 pkgs.nil
213 pkgs.nixd
214 #pkgs.rust-analyzer
215 pkgs.taplo
216 ];
217 snacks = [
218 pkgs.fd
219 pkgs.ripgrep
220 ];
221 neovim = [
222 pkgs.ripgrep
223 ]
224 ++ lib.optionals pkgs.stdenv.hostPlatform.isLinux [
225 pkgs.xclip
226 pkgs.wl-clipboard
227 ];
228 }
229 )
230 );
231 }