diff options
author | Minijackson <minijackson@riseup.net> | 2025-01-27 19:27:50 +0100 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2025-01-27 19:27:50 +0100 |
commit | 17cebbffeb4714b9849f2f109c1b34e6feb6a8c2 (patch) | |
tree | dba3f013ad6b056895d614807885a9c1b349df90 | |
parent | f83e57067a61373157a08cad6ab0a8847e6bd400 (diff) | |
download | nixos-config-reborn-17cebbffeb4714b9849f2f109c1b34e6feb6a8c2.tar.gz nixos-config-reborn-17cebbffeb4714b9849f2f109c1b34e6feb6a8c2.zip |
nixvim: import properly, which fixes infinite recursion
-rw-r--r-- | common/nixvim.nix | 1200 | ||||
-rw-r--r-- | flake.nix | 1 |
2 files changed, 596 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 @@ | |||
1 | inputs: | 1 | inputs: |
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 = { | |
9 | let | 11 | mapleader = ";"; |
10 | inherit (inputs.nixvim.legacyPackages.x86_64-linux) makeNixvim; | 12 | maplocalleader = ","; |
11 | in | 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 | } |
@@ -35,6 +35,7 @@ | |||
35 | default = { ... }: { | 35 | default = { ... }: { |
36 | imports = [ | 36 | imports = [ |
37 | home-manager.nixosModules.home-manager | 37 | home-manager.nixosModules.home-manager |
38 | inputs.nixvim.nixosModules.nixvim | ||
38 | (import ./configuration.nix inputs) | 39 | (import ./configuration.nix inputs) |
39 | ]; | 40 | ]; |
40 | }; | 41 | }; |