summaryrefslogtreecommitdiffstats
path: root/common/nixvim.nix
diff options
context:
space:
mode:
Diffstat (limited to 'common/nixvim.nix')
-rw-r--r--common/nixvim.nix1200
1 files changed, 595 insertions, 605 deletions
diff --git a/common/nixvim.nix b/common/nixvim.nix
index 6b1690f..bdad652 100644
--- a/common/nixvim.nix
+++ b/common/nixvim.nix
@@ -1,693 +1,683 @@
1inputs: 1inputs:
2{ lib, pkgs, ... }:
3
2{ 4{
3 config, 5 programs.nixvim = {
4 lib, 6 enable = true;
5 pkgs, 7 nixpkgs.useGlobalPackages = true;
6 ... 8 luaLoader.enable = true;
7}: 9
8 10 globals = {
9let 11 mapleader = ";";
10 inherit (inputs.nixvim.legacyPackages.x86_64-linux) makeNixvim; 12 maplocalleader = ",";
11in 13 polyglot_disabled = [
12{ 14 # ftdetect messes up `vim.filetype.add`
13 options.programs.nixvim = lib.mkOption { 15 "ftdetect"
14 type = lib.types.submodule { 16 "autoindent"
15 # Cheating, in order to properly merge values 17 "sensible"
16 freeformType = (pkgs.formats.json { }).type; 18 ];
17 config.finalPackage = makeNixvim (builtins.removeAttrs config.programs.nixvim [ "finalPackage" ]);
18 }; 19 };
19 };
20 20
21 config = { 21 opts = {
22 programs.nixvim = { 22 backup = true;
23 # enable = true; 23 # Use `//` at the end to store the absolute file name
24 luaLoader.enable = true; 24 backupdir.__raw = "vim.fn.stdpath('data') .. '/backup//'";
25 25 colorcolumn = "80";
26 globals = { 26 completeopt = [
27 mapleader = ";"; 27 "menu"
28 maplocalleader = ","; 28 "menuone"
29 polyglot_disabled = [ 29 "noinsert"
30 # ftdetect messes up `vim.filetype.add` 30 "noselect"
31 "ftdetect" 31 ];
32 "autoindent" 32 cursorline = true;
33 "sensible" 33 diffopt = [
34 ]; 34 "internal"
35 "filler"
36 "closeoff"
37 "linematch:60"
38 ];
39 grepprg = "${lib.getExe pkgs.ripgrep} --vimgrep --smart-case";
40 ignorecase = true;
41 inccommand = "split";
42 list = true;
43 listchars = {
44 extends = ">";
45 nbsp = "+";
46 precedes = "<";
47 tab = " ";
48 trail = "-";
35 }; 49 };
50 scrolloff = 3;
51 shiftwidth = 4;
52 shortmess = "ncAxoTOtfFli";
53 showmode = false;
54 sidescrolloff = 5;
55 smartcase = true;
56 smartindent = true;
57 tabstop = 4;
58 title = true;
59 undofile = true;
60 updatetime = 1000;
61 wildmode = [
62 "longest:full"
63 "full"
64 ];
65 };
36 66
37 opts = { 67 colorschemes.gruvbox = {
38 backup = true; 68 enable = true;
39 # Use `//` at the end to store the absolute file name 69
40 backupdir.__raw = "vim.fn.stdpath('data') .. '/backup//'"; 70 settings = {
41 colorcolumn = "80"; 71 # bold = true;
42 completeopt = [ 72 # italics = true;
43 "menu" 73 # underline = true;
44 "menuone" 74 # undercurl = true;
45 "noinsert" 75 italic.strings = false;
46 "noselect" 76 overrides = {
47 ]; 77 GitSignsAdd.link = "GruvboxGreenSign";
48 cursorline = true; 78 GitSignsChange.link = "GruvboxOrangeSign";
49 diffopt = [ 79 GitSignsDelete.link = "GruvboxRedSign";
50 "internal" 80 IblScope.link = "GruvboxAqua";
51 "filler"
52 "closeoff"
53 "linematch:60"
54 ];
55 grepprg = "${lib.getExe pkgs.ripgrep} --vimgrep --smart-case";
56 ignorecase = true;
57 inccommand = "split";
58 list = true;
59 listchars = {
60 extends = ">";
61 nbsp = "+";
62 precedes = "<";
63 tab = " ";
64 trail = "-";
65 }; 81 };
66 scrolloff = 3;
67 shiftwidth = 4;
68 shortmess = "ncAxoTOtfFli";
69 showmode = false;
70 sidescrolloff = 5;
71 smartcase = true;
72 smartindent = true;
73 tabstop = 4;
74 title = true;
75 undofile = true;
76 updatetime = 1000;
77 wildmode = [
78 "longest:full"
79 "full"
80 ];
81 }; 82 };
83 };
82 84
83 colorschemes.gruvbox = { 85 highlight = {
84 enable = true; 86 TSDefinition.link = "GruvboxBlueSign";
87 TSDefinitionUsage.link = "GruvboxAquaSign";
88 };
85 89
86 settings = { 90 keymaps =
87 # bold = true; 91 let
88 # italics = true; 92 toggle = key: option: {
89 # underline = true; 93 mode = "n";
90 # undercurl = true; 94 key = "yo${key}";
91 italic.strings = false; 95 action = "<Cmd>setlocal ${option}! ${option}?<CR>";
92 overrides = { 96 options.desc = "Toggle ${option}";
93 GitSignsAdd.link = "GruvboxGreenSign";
94 GitSignsChange.link = "GruvboxOrangeSign";
95 GitSignsDelete.link = "GruvboxRedSign";
96 IblScope.link = "GruvboxAqua";
97 };
98 }; 97 };
99 }; 98 in
100 99 [
101 highlight = { 100 {
102 TSDefinition.link = "GruvboxBlueSign"; 101 key = "-";
103 TSDefinitionUsage.link = "GruvboxAquaSign"; 102 action.__raw = "require('oil').open";
104 }; 103 options.desc = "Open parent directory";
105 104 }
106 keymaps = 105
107 let 106 # Git
108 toggle = key: option: { 107
109 mode = "n"; 108 {
110 key = "yo${key}"; 109 key = "<leader>gg";
111 action = "<Cmd>setlocal ${option}! ${option}?<CR>"; 110 action = "<cmd>Neogit<cr>";
112 options.desc = "Toggle ${option}"; 111 options.desc = "Open Neogit";
112 }
113
114 {
115 key = "<leader>gd";
116 action = "<cmd>DiffviewOpen<cr>";
117 options.desc = "Open Diffview";
118 }
119
120 # TODO: noremap? buffer local? silent?
121 {
122 key = "<leader>gs";
123 action.__raw = "require('gitsigns').stage_hunk";
124 options.desc = "Stage hunk";
125 }
126
127 {
128 key = "<leader>gr";
129 action.__raw = "require('gitsigns').reset_hunk";
130 options.desc = "Reset hunk";
131 }
132
133 # TODO: visual stage/reset
134
135 {
136 key = "<leader>gS";
137 action.__raw = "require('gitsigns').stage_buffer";
138 options.desc = "Stage buffer";
139 }
140
141 {
142 key = "<leader>gR";
143 action.__raw = "require('gitsigns').reset_buffer";
144 options.desc = "Stage buffer";
145 }
146
147 {
148 key = "<leader>gu";
149 action.__raw = "require('gitsigns').undo_stage_hunk";
150 options.desc = "Undo stage hunk";
151 }
152
153 {
154 key = "<leader>gp";
155 action.__raw = "require('gitsigns').preview_hunk_inline";
156 options.desc = "Preview hunk";
157 }
158
159 {
160 key = "<leader>gb";
161 action.__raw = "function() require('gitsigns').blame_line { full = true } end";
162 options.desc = "Blame line";
163 }
164
165 {
166 key = "]g";
167 action.__raw = ''
168 function()
169 if vim.wo.diff then return ']c' end
170 vim.schedule(function() package.loaded.gitsigns.next_hunk() end)
171 return '<Ignore>'
172 end
173 '';
174 options = {
175 expr = true;
176 desc = "Next hunk";
113 }; 177 };
114 in 178 }
115 [ 179
116 { 180 {
117 key = "-"; 181 key = "[g";
118 action.__raw = "require('oil').open"; 182 action.__raw = ''
119 options.desc = "Open parent directory"; 183 function()
120 } 184 if vim.wo.diff then return '[c' end
121 185 vim.schedule(function() package.loaded.gitsigns.prev_hunk() end)
122 # Git 186 return '<Ignore>'
123 187 end
124 { 188 '';
125 key = "<leader>gg"; 189 options = {
126 action = "<cmd>Neogit<cr>"; 190 expr = true;
127 options.desc = "Open Neogit"; 191 desc = "Next hunk";
128 } 192 };
129 193 }
130 { 194
131 key = "<leader>gd"; 195 # Leap
132 action = "<cmd>DiffviewOpen<cr>"; 196
133 options.desc = "Open Diffview"; 197 {
134 } 198 key = "<Space>";
135 199 mode = [
136 # TODO: noremap? buffer local? silent? 200 "n"
137 { 201 "x"
138 key = "<leader>gs"; 202 "o"
139 action.__raw = "require('gitsigns').stage_hunk"; 203 ];
140 options.desc = "Stage hunk"; 204 action = "<Plug>(leap-forward)";
141 } 205 options.desc = "Leap forward to";
142 206 }
143 { 207
144 key = "<leader>gr"; 208 {
145 action.__raw = "require('gitsigns').reset_hunk"; 209 key = "<C-Space>";
146 options.desc = "Reset hunk"; 210 mode = [
147 } 211 "n"
148 212 "x"
149 # TODO: visual stage/reset 213 "o"
150 214 ];
151 { 215 action = "<Plug>(leap-backward)";
152 key = "<leader>gS"; 216 options.desc = "Leap backward to";
153 action.__raw = "require('gitsigns').stage_buffer"; 217 }
154 options.desc = "Stage buffer"; 218
155 } 219 {
156 220 key = "g<Space>";
157 { 221 mode = [
158 key = "<leader>gR"; 222 "n"
159 action.__raw = "require('gitsigns').reset_buffer"; 223 "x"
160 options.desc = "Stage buffer"; 224 "o"
161 } 225 ];
162 226 action = "<Plug>(leap-from-window)";
163 { 227 options.desc = "Leap from window";
164 key = "<leader>gu"; 228 }
165 action.__raw = "require('gitsigns').undo_stage_hunk"; 229
166 options.desc = "Undo stage hunk"; 230 {
167 } 231 key = "gnn";
168 232 mode = [
169 { 233 "n"
170 key = "<leader>gp"; 234 "x"
171 action.__raw = "require('gitsigns').preview_hunk_inline"; 235 "o"
172 options.desc = "Preview hunk"; 236 ];
173 } 237 action.__raw = ''
174 238 function()
175 { 239 require('leap.treesitter').select()
176 key = "<leader>gb"; 240 end
177 action.__raw = "function() require('gitsigns').blame_line { full = true } end"; 241 '';
178 options.desc = "Blame line"; 242 options.desc = "Start incremental selection";
179 } 243 }
180 244
181 { 245 {
182 key = "]g"; 246 key = "gnN";
183 action.__raw = '' 247 mode = [
184 function() 248 "n"
185 if vim.wo.diff then return ']c' end 249 "x"
186 vim.schedule(function() package.loaded.gitsigns.next_hunk() end) 250 "o"
187 return '<Ignore>' 251 ];
188 end 252 action = "V<cmd>lua require('leap.treesitter').select()<cr>";
189 ''; 253 options.desc = "Start linewise incremental selection";
190 options = { 254 }
191 expr = true; 255
192 desc = "Next hunk"; 256 # Toggle options
193 }; 257 (toggle "c" "cursorline")
194 } 258 (toggle "C" "cursorcolumn")
195 259 (toggle "h" "hlsearch")
196 { 260 (toggle "i" "ignorecase")
197 key = "[g"; 261 (toggle "l" "list")
198 action.__raw = '' 262 (toggle "n" "number")
199 function() 263 (toggle "r" "relativenumber")
200 if vim.wo.diff then return '[c' end 264 (toggle "s" "spell")
201 vim.schedule(function() package.loaded.gitsigns.prev_hunk() end) 265 (toggle "w" "wrap")
202 return '<Ignore>' 266
203 end 267 {
204 ''; 268 mode = "n";
205 options = { 269 key = "yod";
206 expr = true; 270 action.__raw = ''
207 desc = "Next hunk"; 271 function()
208 }; 272 if vim.wo.diff then
209 } 273 vim.cmd.diffoff()
210 274 print('diffoff')
211 # Leap 275 else
212 276 vim.cmd.diffthis()
213 { 277 print('diffthis')
214 key = "<Space>";
215 mode = [
216 "n"
217 "x"
218 "o"
219 ];
220 action = "<Plug>(leap-forward)";
221 options.desc = "Leap forward to";
222 }
223
224 {
225 key = "<C-Space>";
226 mode = [
227 "n"
228 "x"
229 "o"
230 ];
231 action = "<Plug>(leap-backward)";
232 options.desc = "Leap backward to";
233 }
234
235 {
236 key = "g<Space>";
237 mode = [
238 "n"
239 "x"
240 "o"
241 ];
242 action = "<Plug>(leap-from-window)";
243 options.desc = "Leap from window";
244 }
245
246 {
247 key = "gnn";
248 mode = [
249 "n"
250 "x"
251 "o"
252 ];
253 action.__raw = ''
254 function()
255 require('leap.treesitter').select()
256 end
257 '';
258 options.desc = "Start incremental selection";
259 }
260
261 {
262 key = "gnN";
263 mode = [
264 "n"
265 "x"
266 "o"
267 ];
268 action = "V<cmd>lua require('leap.treesitter').select()<cr>";
269 options.desc = "Start linewise incremental selection";
270 }
271
272 # Toggle options
273 (toggle "c" "cursorline")
274 (toggle "C" "cursorcolumn")
275 (toggle "h" "hlsearch")
276 (toggle "i" "ignorecase")
277 (toggle "l" "list")
278 (toggle "n" "number")
279 (toggle "r" "relativenumber")
280 (toggle "s" "spell")
281 (toggle "w" "wrap")
282
283 {
284 mode = "n";
285 key = "yod";
286 action.__raw = ''
287 function()
288 if vim.wo.diff then
289 vim.cmd.diffoff()
290 print('diffoff')
291 else
292 vim.cmd.diffthis()
293 print('diffthis')
294 end
295 end 278 end
296 ''; 279 end
297 options.desc = "Toggle diff"; 280 '';
298 } 281 options.desc = "Toggle diff";
299 ]; 282 }
283 ];
300 284
301 # TODO: 285 # TODO:
302 # extraPlugins = with pkgs.unstable.vimPlugins; [ 286 extraPlugins = with pkgs.unstable.vimPlugins; [
303 extraPlugins = with inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.vimPlugins; [ 287 highlight-undo-nvim
304 highlight-undo-nvim 288 vim-abolish
305 vim-abolish
306 289
307 # TODO: make that modular 290 # TODO: make that modular
308 playground 291 playground
309 292
310 vim-rhubarb 293 vim-rhubarb
311 fugitive-gitlab-vim 294 fugitive-gitlab-vim
295 hunk-nvim
296 nui-nvim
312 297
313 vim-polyglot 298 vim-polyglot
314 299
315 nvim-surround 300 nvim-surround
316 ]; 301 ];
317 302
318 plugins = { 303 plugins = {
319 cmp = { 304 cmp = {
320 enable = true; 305 enable = true;
321 306
322 settings = { 307 settings = {
323 mapping.__raw = '' 308 mapping.__raw = ''
324 cmp.mapping.preset.insert { 309 cmp.mapping.preset.insert {
325 ['<CR>'] = cmp.mapping.confirm({ select = false }), 310 ['<CR>'] = cmp.mapping.confirm({ select = false }),
326 311
327 ["<Tab>"] = cmp.mapping(function(fallback) 312 ["<Tab>"] = cmp.mapping(function(fallback)
328 local luasnip = require("luasnip") 313 local luasnip = require("luasnip")
329 if luasnip.locally_jumpable(1) then 314 if luasnip.locally_jumpable(1) then
330 luasnip.jump(1) 315 luasnip.jump(1)
331 else 316 else
332 fallback() 317 fallback()
333 end 318 end
334 end, { "i", "s" }), 319 end, { "i", "s" }),
335
336 ["<S-Tab>"] = cmp.mapping(function(fallback)
337 local luasnip = require("luasnip")
338 if luasnip.locally_jumpable(-1) then
339 luasnip.jump(-1)
340 else
341 fallback()
342 end
343 end, { "i", "s" }),
344 }
345 '';
346 320
347 snippet.expand = '' 321 ["<S-Tab>"] = cmp.mapping(function(fallback)
348 function(args) 322 local luasnip = require("luasnip")
349 require('luasnip').lsp_expand(args.body) 323 if luasnip.locally_jumpable(-1) then
350 end 324 luasnip.jump(-1)
351 ''; 325 else
326 fallback()
327 end
328 end, { "i", "s" }),
329 }
330 '';
352 331
353 sources = [ 332 snippet.expand = ''
354 { name = "nvim_lsp"; } 333 function(args)
355 { name = "nvim_lsp_signature_help"; } 334 require('luasnip').lsp_expand(args.body)
356 { name = "cmp_pandoc"; } 335 end
357 # TODO: make this modular 336 '';
358 { name = "crates"; } 337
359 { name = "luasnip"; } 338 sources = [
360 { name = "calc"; } 339 { name = "nvim_lsp"; }
361 { name = "path"; } 340 { name = "nvim_lsp_signature_help"; }
362 { name = "treesitter"; } 341 { name = "cmp_pandoc"; }
363 { name = "git"; } 342 # TODO: make this modular
364 { name = "tmux"; } 343 { name = "crates"; }
365 { name = "spell"; } 344 { name = "luasnip"; }
366 # Use \k for iskeyword because of UTF-8 345 { name = "calc"; }
367 { 346 { name = "path"; }
368 name = "buffer"; 347 { name = "treesitter"; }
369 option.keyword_pattern = ''\k\+''; 348 { name = "git"; }
370 } 349 { name = "tmux"; }
371 ]; 350 { name = "spell"; }
372 }; 351 # Use \k for iskeyword because of UTF-8
352 {
353 name = "buffer";
354 option.keyword_pattern = ''\k\+'';
355 }
356 ];
373 }; 357 };
374 # cmp-buffer.enable = true; 358 };
375 # cmp-calc.enable = true; 359 # cmp-buffer.enable = true;
376 # cmp-cmdline.enable = true; 360 # cmp-calc.enable = true;
377 # cmp-git.enable = true; 361 # cmp-cmdline.enable = true;
362 # cmp-git.enable = true;
378 363
379 diffview.enable = true; 364 diffview.enable = true;
380 365
381 dressing.enable = true; 366 dressing.enable = true;
382 367
383 fidget = { 368 fidget = {
384 enable = true; 369 enable = true;
385 settings.notification.override_vim_notify = true; 370 settings.notification.override_vim_notify = true;
386 }; 371 };
387 372
388 fugitive.enable = true; 373 fugitive.enable = true;
389 374
390 gitignore.enable = true; 375 gitignore.enable = true;
391 376
392 gitsigns.enable = true; 377 gitsigns.enable = true;
393 378
394 indent-blankline = { 379 indent-blankline = {
395 enable = true; 380 enable = true;
396 settings.indent = { 381 settings.indent = {
397 char = "│"; 382 char = "│";
398 tab_char = "│"; 383 tab_char = "│";
399 };
400 }; 384 };
385 };
401 386
402 lastplace.enable = true; 387 lastplace.enable = true;
403 388
404 leap = { 389 leap = {
405 enable = true; 390 enable = true;
406 addDefaultMappings = false; 391 addDefaultMappings = false;
407 }; 392 };
408 393
409 lualine = { 394 lualine = {
410 enable = true; 395 enable = true;
411 settings.options = { 396 settings.options = {
412 component_separators.left = ""; 397 component_separators.left = "";
413 component_separators.right = ""; 398 component_separators.right = "";
414 399
415 section_separators.left = ""; 400 section_separators.left = "";
416 section_separators.right = ""; 401 section_separators.right = "";
417 402
418 icons_enabled = false; 403 icons_enabled = false;
419 };
420 }; 404 };
405 };
421 406
422 luasnip.enable = true; 407 luasnip.enable = true;
423 408
424 mini = { 409 mini = {
425 enable = true; 410 enable = true;
426 modules = { 411 modules = {
427 ai.custom_textobjects = { 412 ai.custom_textobjects = {
428 search_method = "cover_or_nearest"; 413 search_method = "cover_or_nearest";
429 414
430 f.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@function.outer', i = '@function.inner' })"; 415 f.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@function.outer', i = '@function.inner' })";
431 F.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@call.outer', i = '@call.inner' })"; 416 F.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@call.outer', i = '@call.inner' })";
432 c.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@comment.outer', i = '@comment.inner' })"; 417 c.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@comment.outer', i = '@comment.inner' })";
433 b.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@block.outer', i = '@block.inner' })"; 418 b.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@block.outer', i = '@block.inner' })";
434 a.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@parameter.outer', i = '@parameter.inner' })"; 419 a.__raw = "require('mini.ai').gen_spec.treesitter({ a = '@parameter.outer', i = '@parameter.inner' })";
435 o.__raw = '' 420 o.__raw = ''
436 require('mini.ai').gen_spec.treesitter({ 421 require('mini.ai').gen_spec.treesitter({
437 a = { '@conditional.outer', '@loop.outer' }, 422 a = { '@conditional.outer', '@loop.outer' },
438 i = { '@conditional.inner', '@loop.inner' }, 423 i = { '@conditional.inner', '@loop.inner' },
439 }) 424 })
440 ''; 425 '';
441 }; 426 };
442 align = { }; 427 align = { };
443 bracketed = { }; 428 bracketed = { };
444 clue = { 429 clue = {
445 triggers = [ 430 triggers = [
446 { 431 {
447 mode = "n"; 432 mode = "n";
448 keys = "yo"; 433 keys = "yo";
449 } 434 }
450 { 435 {
451 mode = "n"; 436 mode = "n";
452 keys = "["; 437 keys = "[";
453 } 438 }
454 { 439 {
455 mode = "n"; 440 mode = "n";
456 keys = "]"; 441 keys = "]";
457 } 442 }
458 { 443 {
459 mode = "n"; 444 mode = "n";
460 keys = "<leader>"; 445 keys = "<leader>";
461 } 446 }
462 ]; 447 ];
463 };
464 trailspace = { };
465 }; 448 };
449 trailspace = { };
466 }; 450 };
451 };
467 452
468 neogit = { 453 neogit = {
469 enable = true; 454 enable = true;
470 settings = { 455 settings = {
471 graph_style = "unicode"; 456 graph_style = "unicode";
472 integrations = { 457 integrations = {
473 diffview = true; 458 diffview = true;
474 telescope = true; 459 telescope = true;
475 };
476 }; 460 };
477 }; 461 };
462 };
478 463
479 none-ls = { 464 none-ls = {
480 enable = true; 465 enable = true;
481 sources = { 466 sources = {
482 code_actions = { 467 code_actions = {
483 gitrebase.enable = true; 468 gitrebase.enable = true;
484 gitsigns.enable = true; 469 gitsigns.enable = true;
485 # TODO: maybe? 470 # TODO: maybe?
486 #refactoring.enable = true; 471 #refactoring.enable = true;
487 statix.enable = true; 472 statix.enable = true;
488 }; 473 };
489 474
490 diagnostics = { 475 diagnostics = {
491 deadnix.enable = true; 476 deadnix.enable = true;
492 statix = { 477 statix = {
493 enable = true; 478 enable = true;
494 settings.extra_args = 479 settings.extra_args =
495 let 480 let
496 config = (pkgs.formats.toml { }).generate "statix.toml" { 481 config = (pkgs.formats.toml { }).generate "statix.toml" {
497 disabled = [ "repeated_keys" ]; 482 disabled = [ "repeated_keys" ];
498 }; 483 };
499 in 484 in
500 [ 485 [
501 "-c" 486 "-c"
502 "${config}" 487 "${config}"
503 ];
504 };
505 vale = {
506 enable = true;
507 settings.extra_filetypes = [
508 "pandoc"
509 "rst"
510 ]; 488 ];
511 };
512 }; 489 };
513 490 vale = {
514 formatting = { 491 enable = true;
515 shfmt.enable = true; 492 settings.extra_filetypes = [
516 typstyle.enable = true; 493 "pandoc"
494 "rst"
495 ];
517 }; 496 };
518 }; 497 };
498
499 formatting = {
500 shfmt.enable = true;
501 typstyle.enable = true;
502 };
519 }; 503 };
504 };
520 505
521 oil.enable = true; 506 oil.enable = true;
522 507
523 # TODO: maybe 508 # TODO: maybe
524 #refactoring.enable = true; 509 #refactoring.enable = true;
525 510
526 spider = { 511 spider = {
527 enable = true; 512 enable = true;
528 keymaps.motions = { 513 keymaps.motions = {
529 b = "<localleader>b"; 514 b = "<localleader>b";
530 e = "<localleader>e"; 515 e = "<localleader>e";
531 ge = "<localleader>ge"; 516 ge = "<localleader>ge";
532 w = "<localleader>w"; 517 w = "<localleader>w";
533 };
534 }; 518 };
519 };
535 520
536 telescope = { 521 telescope = {
537 enable = true; 522 enable = true;
538 settings = { }; 523 settings = { };
539 524
540 extensions.undo.enable = true; 525 extensions.undo.enable = true;
541 526
542 keymaps = { 527 keymaps = {
543 "<leader>fb" = { 528 "<leader>fb" = {
544 action = "buffers"; 529 action = "buffers";
545 options.desc = "Telescope buffers"; 530 options.desc = "Telescope buffers";
546 }; 531 };
547 532
548 "<leader>ff" = { 533 "<leader>ff" = {
549 action = "find_files"; 534 action = "find_files";
550 options.desc = "Telescope find files"; 535 options.desc = "Telescope find files";
551 }; 536 };
552 537
553 "<leader>fg" = { 538 "<leader>fg" = {
554 action = "live_grep"; 539 action = "live_grep";
555 options.desc = "Telescope live grep"; 540 options.desc = "Telescope live grep";
556 }; 541 };
557 542
558 "<leader>fh" = { 543 "<leader>fh" = {
559 action = "help_tags"; 544 action = "help_tags";
560 options.desc = "Telescope help tags"; 545 options.desc = "Telescope help tags";
561 }; 546 };
562 547
563 "<leader>fo" = { 548 "<leader>fo" = {
564 action = "oldfiles"; 549 action = "oldfiles";
565 options.desc = "Telescope old files"; 550 options.desc = "Telescope old files";
566 }; 551 };
567 552
568 "<leader>fs" = { 553 "<leader>fs" = {
569 action = "spell_suggest"; 554 action = "spell_suggest";
570 options.desc = "Telescope spell suggest"; 555 options.desc = "Telescope spell suggest";
571 }; 556 };
572 557
573 "<leader>ft" = { 558 "<leader>ft" = {
574 action = "treesitter"; 559 action = "treesitter";
575 options.desc = "Telescope treesitter"; 560 options.desc = "Telescope treesitter";
576 }; 561 };
577 562
578 "<leader>fu" = { 563 "<leader>fu" = {
579 action = "undo"; 564 action = "undo";
580 options.desc = "Telescope undo"; 565 options.desc = "Telescope undo";
581 }; 566 };
582 567
583 "<leader>fw" = { 568 "<leader>fw" = {
584 action = "git_status"; 569 action = "git_status";
585 options.desc = "Telescope git status"; 570 options.desc = "Telescope git status";
586 };
587 }; 571 };
588 }; 572 };
573 };
589 574
590 treesitter = { 575 treesitter = {
591 enable = true; 576 enable = true;
592 nixvimInjections = true; 577 nixvimInjections = true;
593 578
594 settings = { 579 settings = {
595 highlight.enable = true; 580 highlight.enable = true;
596 indent.enable = true; 581 indent.enable = true;
597 };
598 }; 582 };
583 };
599 584
600 treesitter-context = { 585 treesitter-context = {
601 enable = true; 586 enable = true;
602 settings = { 587 settings = {
603 max_lines = 5; 588 max_lines = 5;
604 min_window_height = 20; 589 min_window_height = 20;
605 };
606 }; 590 };
591 };
607 592
608 treesitter-textobjects = { 593 treesitter-textobjects = {
594 enable = true;
595 lspInterop = {
609 enable = true; 596 enable = true;
610 lspInterop = { 597 peekDefinitionCode = {
611 enable = true; 598 "<leader>df" = {
612 peekDefinitionCode = { 599 query = "@function.outer";
613 "<leader>df" = { 600 desc = "Peek outer function";
614 query = "@function.outer"; 601 };
615 desc = "Peek outer function"; 602 "<leader>dF" = {
616 }; 603 query = "@class.outer";
617 "<leader>dF" = { 604 desc = "Peek outer class";
618 query = "@class.outer";
619 desc = "Peek outer class";
620 };
621 }; 605 };
622 }; 606 };
623 }; 607 };
608 };
624 609
625 vim-matchup = { 610 vim-matchup = {
626 enable = true; 611 enable = true;
627 treesitter.enable = true; 612 treesitter.enable = true;
628 };
629
630 web-devicons.enable = true;
631 }; 613 };
632 614
633 extraConfigLua = '' 615 web-devicons.enable = true;
634 vim.api.nvim_create_autocmd("TextYankPost", { 616 };
635 desc = "Highlight yanked text",
636 callback = function()
637 vim.highlight.on_yank()
638 end,
639 })
640
641 require('highlight-undo').setup({
642 keymaps = {
643 -- Right now messes up registers
644 paste = { disabled = true, },
645 Paste = { disabled = true, },
646 },
647 })
648
649 -- For fugitive's :GBrowse
650 vim.api.nvim_create_user_command("Browse", function(opts)
651 vim.ui.open(opts.args)
652 end, { nargs = 1 })
653
654 require("nvim-surround").setup()
655 '';
656
657 extraConfigLuaPost = ''
658 -- Load local config
659
660 local function isModuleAvailable(name)
661 if package.loaded[name] then
662 return true
663 else
664 for _, searcher in ipairs(package.searchers or package.loaders) do
665 local loader = searcher(name)
666 if type(loader) == "function" then
667 package.preload[name] = loader
668 return true
669 end
670 end
671 return false
672 end
673 end
674 617
675 vim.opt.runtimepath:append(vim.fn.stdpath("config")) -- ~/.config/nvim 618 extraConfigLua = ''
619 vim.api.nvim_create_autocmd("TextYankPost", {
620 desc = "Highlight yanked text",
621 callback = function()
622 vim.highlight.on_yank()
623 end,
624 })
625
626 require('highlight-undo').setup({
627 keymaps = {
628 -- Right now messes up registers
629 paste = { disabled = true, },
630 Paste = { disabled = true, },
631 },
632 })
633
634 -- For fugitive's :GBrowse
635 vim.api.nvim_create_user_command("Browse", function(opts)
636 vim.ui.open(opts.args)
637 end, { nargs = 1 })
638
639 require("nvim-surround").setup()
640
641 require("hunk").setup({
642 ui = {
643 layout = "horizontal",
644 },
645 })
646 '';
647
648 extraConfigLuaPost = ''
649 -- Load local config
650
651 local function isModuleAvailable(name)
652 if package.loaded[name] then
653 return true
654 else
655 for _, searcher in ipairs(package.searchers or package.loaders) do
656 local loader = searcher(name)
657 if type(loader) == "function" then
658 package.preload[name] = loader
659 return true
660 end
661 end
662 return false
663 end
664 end
676 665
677 if isModuleAvailable "local_config" then 666 vim.opt.runtimepath:append(vim.fn.stdpath("config")) -- ~/.config/nvim
678 require "local_config"
679 end
680 '';
681 };
682 667
683 environment.systemPackages = [ config.programs.nixvim.finalPackage ]; 668 if isModuleAvailable "local_config" then
669 require "local_config"
670 end
671 '';
672 };
684 673
685 environment.variables = { 674 # environment.systemPackages = [ config.programs.nixvim.finalPackage ];
686 EDITOR = "nvim";
687 MANPAGER = "nvim +Man!";
688 };
689 675
690 home-manager.users.minijackson.xdg.dataFile."nvim/backup/.keep".text = ""; 676 environment.variables = {
691 home-manager.users.root.xdg.dataFile."nvim/backup/.keep".text = ""; 677 EDITOR = "nvim";
678 MANPAGER = "nvim +Man!";
692 }; 679 };
680
681 home-manager.users.minijackson.xdg.dataFile."nvim/backup/.keep".text = "";
682 home-manager.users.root.xdg.dataFile."nvim/backup/.keep".text = "";
693} 683}