Flake for my NixOS devices

Keybind for which key

bwc9876.dev 92c52cc0 fb3e3f41

verified
+139 -131
+139 -131
nixosModules/dev/nvim.nix
··· 4 4 config, 5 5 lib, 6 6 ... 7 - }: { 7 + }: 8 + { 8 9 environment.systemPackages = with pkgs; [ 9 10 ripgrep 10 11 fd 11 12 ]; 12 13 13 14 home-manager.users.bean = { 14 - imports = [inputs.nixvim.homeManagerModules.nixvim]; 15 + imports = [ inputs.nixvim.homeManagerModules.nixvim ]; 15 16 16 17 programs.nixvim = { 17 18 enable = true; ··· 62 63 background = true; 63 64 }; 64 65 virtual_text = { 65 - errors = ["italic"]; 66 - hints = ["italic"]; 67 - information = ["italic"]; 68 - warnings = ["italic"]; 69 - ok = ["italic"]; 66 + errors = [ "italic" ]; 67 + hints = [ "italic" ]; 68 + information = [ "italic" ]; 69 + warnings = [ "italic" ]; 70 + ok = [ "italic" ]; 70 71 }; 71 72 underlines = { 72 - errors = ["underline"]; 73 - hints = ["underline"]; 74 - information = ["underline"]; 75 - warnings = ["underline"]; 73 + errors = [ "underline" ]; 74 + hints = [ "underline" ]; 75 + information = [ "underline" ]; 76 + warnings = [ "underline" ]; 76 77 }; 77 78 }; 78 79 }; ··· 93 94 ''; 94 95 95 96 autoGroups = { 96 - restore_cursor = {}; 97 - open_neotree = {}; 97 + restore_cursor = { }; 98 + open_neotree = { }; 98 99 }; 99 100 100 101 opts = { ··· 115 116 autoCmd = [ 116 117 { 117 118 group = "restore_cursor"; 118 - event = ["BufReadPost"]; 119 + event = [ "BufReadPost" ]; 119 120 pattern = "*"; 120 121 callback.__raw = '' 121 122 function() ··· 132 133 } 133 134 { 134 135 group = "open_neotree"; 135 - event = ["BufRead"]; 136 + event = [ "BufRead" ]; 136 137 pattern = "*"; 137 138 once = true; 138 139 callback.__raw = '' ··· 160 161 }; 161 162 }; 162 163 163 - keymaps = let 164 - prefixMap = pre: maps: 165 - builtins.map (k: { 166 - action = "<cmd>${k.action}<cr>"; 167 - key = "${pre}${k.key}"; 168 - options = k.options; 169 - }) 170 - maps; 171 - in 164 + keymaps = 165 + let 166 + prefixMap = 167 + pre: maps: 168 + builtins.map (k: { 169 + action = "<cmd>${k.action}<cr>"; 170 + key = "${pre}${k.key}"; 171 + options = k.options; 172 + }) maps; 173 + in 172 174 lib.lists.flatten ( 173 - builtins.map (g: 174 - if builtins.hasAttr "group" g 175 - then prefixMap g.prefix g.keys 176 - else g) [ 175 + builtins.map (g: if builtins.hasAttr "group" g then prefixMap g.prefix g.keys else g) [ 177 176 { 178 177 group = "Tab Navigation"; 179 178 prefix = "<Tab>"; ··· 294 293 } 295 294 { 296 295 action.__raw = "[[<C-\\><C-n><C-w>]]"; 297 - mode = ["t"]; 296 + mode = [ "t" ]; 298 297 key = "<C-w>"; 299 298 } 300 299 { 301 300 action.__raw = "[[<C-\\><C-n>]]"; 302 - mode = ["t"]; 301 + mode = [ "t" ]; 303 302 key = "<esc>"; 304 303 } 304 + { 305 + action = "<cmd>WhichKey<cr>"; 306 + key = "<C-/>"; 307 + } 305 308 ] 306 309 ); 307 310 308 311 extraPlugins = with pkgs.vimPlugins; [ 309 - {plugin = pkgs.nvim-mdx;} 310 - {plugin = pkgs.nvim-flatten;} 311 - {plugin = tiny-devicons-auto-colors-nvim;} 312 - {plugin = nvim-biscuits;} 312 + { plugin = pkgs.nvim-mdx; } 313 + { plugin = pkgs.nvim-flatten; } 314 + { plugin = tiny-devicons-auto-colors-nvim; } 315 + { plugin = nvim-biscuits; } 313 316 ]; 314 317 315 318 plugins = { ··· 381 384 opts = { 382 385 position = "center"; 383 386 }; 384 - layout = let 385 - o = { 386 - position = "center"; 387 - }; 388 - txt = s: { 389 - type = "text"; 390 - val = s; 391 - opts = 392 - { 387 + layout = 388 + let 389 + o = { 390 + position = "center"; 391 + }; 392 + txt = s: { 393 + type = "text"; 394 + val = s; 395 + opts = { 393 396 hl = "Keyword"; 394 - } 395 - // o; 396 - }; 397 - grp = g: { 398 - type = "group"; 399 - val = g; 400 - opts.spacing = 1; 401 - }; 402 - btn = { 403 - val, 404 - onClick, 405 - ... 406 - }: { 407 - type = "button"; 408 - inherit val; 409 - opts = o; 410 - on_press.__raw = "function() vim.cmd[[${onClick}]] end"; 411 - }; 412 - cmd = { 413 - command, 414 - width, 415 - height, 416 - }: { 417 - type = "terminal"; 418 - inherit command width height; 419 - opts = o; 420 - }; 421 - pad = { 422 - type = "padding"; 423 - val = 2; 424 - }; 425 - in 397 + } // o; 398 + }; 399 + grp = g: { 400 + type = "group"; 401 + val = g; 402 + opts.spacing = 1; 403 + }; 404 + btn = 405 + { 406 + val, 407 + onClick, 408 + ... 409 + }: 410 + { 411 + type = "button"; 412 + inherit val; 413 + opts = o; 414 + on_press.__raw = "function() vim.cmd[[${onClick}]] end"; 415 + }; 416 + cmd = 417 + { 418 + command, 419 + width, 420 + height, 421 + }: 422 + { 423 + type = "terminal"; 424 + inherit command width height; 425 + opts = o; 426 + }; 427 + pad = { 428 + type = "padding"; 429 + val = 2; 430 + }; 431 + in 426 432 [ 427 433 pad 428 434 pad ··· 432 438 ( 433 439 let 434 440 banner = 435 - pkgs.runCommand "nvim-banner" {} 436 - ''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out''; 441 + pkgs.runCommand "nvim-banner" { } 442 + ''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out''; 437 443 # bannerText = builtins.readFile banner; 438 444 in 439 - cmd { 440 - command = ''open ${banner} | ${pkgs.lolcat}/bin/lolcat -f -S (random int 1..360)''; 441 - # Hardcoding to prevent IFD 442 - width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3; 443 - height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1; 444 - } 445 + cmd { 446 + command = ''open ${banner} | ${pkgs.lolcat}/bin/lolcat -f -S (random int 1..360)''; 447 + # Hardcoding to prevent IFD 448 + width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3; 449 + height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1; 450 + } 445 451 ) 446 452 (grp [ 447 453 (btn { ··· 462 468 ]) 463 469 (txt "::<シ>") 464 470 ]) 465 - ++ [pad]; 471 + ++ [ pad ]; 466 472 }; 467 473 468 474 trouble = { ··· 586 592 hover = { 587 593 enabled = true; 588 594 delay = 150; 589 - reveal = ["close"]; 595 + reveal = [ "close" ]; 590 596 }; 591 597 sort_by = "insert_at_end"; 592 598 diagnostics = "nvim_lsp"; ··· 601 607 602 608 statuscol = { 603 609 enable = true; 604 - settings.segments = let 605 - dispCond = { 606 - __raw = '' 607 - function(ln) 608 - return vim.bo.filetype ~= "neo-tree" 609 - end 610 - ''; 611 - }; 612 - in [ 613 - { 614 - click = "v:lua.ScSa"; 615 - condition = [ 616 - dispCond 617 - ]; 618 - text = [ 619 - "%s" 620 - ]; 621 - } 622 - { 623 - click = "v:lua.ScLa"; 624 - condition = [dispCond]; 625 - text = [ 626 - { 627 - __raw = "require('statuscol.builtin').lnumfunc"; 628 - } 629 - ]; 630 - } 631 - { 632 - click = "v:lua.ScFa"; 633 - condition = [ 634 - dispCond 635 - { 636 - __raw = "require('statuscol.builtin').not_empty"; 637 - } 638 - ]; 639 - text = [ 640 - { 641 - __raw = "require('statuscol.builtin').foldfunc"; 642 - } 643 - " " 644 - ]; 645 - } 646 - ]; 610 + settings.segments = 611 + let 612 + dispCond = { 613 + __raw = '' 614 + function(ln) 615 + return vim.bo.filetype ~= "neo-tree" 616 + end 617 + ''; 618 + }; 619 + in 620 + [ 621 + { 622 + click = "v:lua.ScSa"; 623 + condition = [ 624 + dispCond 625 + ]; 626 + text = [ 627 + "%s" 628 + ]; 629 + } 630 + { 631 + click = "v:lua.ScLa"; 632 + condition = [ dispCond ]; 633 + text = [ 634 + { 635 + __raw = "require('statuscol.builtin').lnumfunc"; 636 + } 637 + ]; 638 + } 639 + { 640 + click = "v:lua.ScFa"; 641 + condition = [ 642 + dispCond 643 + { 644 + __raw = "require('statuscol.builtin').not_empty"; 645 + } 646 + ]; 647 + text = [ 648 + { 649 + __raw = "require('statuscol.builtin').foldfunc"; 650 + } 651 + " " 652 + ]; 653 + } 654 + ]; 647 655 }; 648 656 649 657 dropbar = { ··· 669 677 670 678 options = { 671 679 theme = "catppuccin"; 672 - disabled_filetypes = ["neo-tree"]; 673 - ignore_focus = ["neo-tree"]; 680 + disabled_filetypes = [ "neo-tree" ]; 681 + ignore_focus = [ "neo-tree" ]; 674 682 }; 675 683 }; 676 684 }; ··· 764 772 cmp = { 765 773 enable = true; 766 774 settings = { 767 - sources = map (name: {inherit name;}) [ 775 + sources = map (name: { inherit name; }) [ 768 776 "nvim_lsp" 769 777 "nvim_lsp_signature_help" 770 778 "path"