Flake for my NixOS devices

Use nix-develop.nvim

bwc9876.dev 88b8078a 0395d10d

verified
+182 -154
+7 -7
nixosModules/dev/misc.nix
··· 26 package = pkgs.wireshark; 27 }; 28 29 - home-manager.users.bean.programs.direnv = { 30 - enable = true; 31 - enableBashIntegration = true; 32 - enableNushellIntegration = true; 33 - nix-direnv.enable = true; 34 - silent = true; 35 - }; 36 }
··· 26 package = pkgs.wireshark; 27 }; 28 29 + # home-manager.users.bean.programs.direnv = { 30 + # enable = true; 31 + # enableBashIntegration = true; 32 + # enableNushellIntegration = true; 33 + # nix-direnv.enable = true; 34 + # silent = true; 35 + # }; 36 }
+148 -140
nixosModules/dev/nvim.nix
··· 4 config, 5 lib, 6 ... 7 - }: 8 - { 9 environment.systemPackages = with pkgs; [ 10 ripgrep 11 fd 12 ]; 13 14 home-manager.users.bean = { 15 - imports = [ inputs.nixvim.homeManagerModules.nixvim ]; 16 17 programs.nixvim = { 18 enable = true; ··· 20 defaultEditor = true; 21 viAlias = true; 22 vimAlias = true; 23 - 24 - dependencies = { 25 - direnv.enable = true; 26 - }; 27 28 nixpkgs.pkgs = pkgs; 29 ··· 63 background = true; 64 }; 65 virtual_text = { 66 - errors = [ "italic" ]; 67 - hints = [ "italic" ]; 68 - information = [ "italic" ]; 69 - warnings = [ "italic" ]; 70 - ok = [ "italic" ]; 71 }; 72 underlines = { 73 - errors = [ "underline" ]; 74 - hints = [ "underline" ]; 75 - information = [ "underline" ]; 76 - warnings = [ "underline" ]; 77 }; 78 }; 79 }; ··· 95 ''; 96 97 autoGroups = { 98 - restore_cursor = { }; 99 - open_neotree = { }; 100 }; 101 102 opts = { ··· 117 autoCmd = [ 118 { 119 group = "restore_cursor"; 120 - event = [ "BufReadPost" ]; 121 pattern = "*"; 122 callback.__raw = '' 123 function() ··· 134 } 135 { 136 group = "open_neotree"; 137 - event = [ "BufRead" ]; 138 pattern = "*"; 139 once = true; 140 callback.__raw = '' ··· 162 }; 163 }; 164 165 - keymaps = 166 - let 167 - prefixMap = 168 - pre: maps: 169 - builtins.map (k: { 170 - action = "<cmd>${k.action}<cr>"; 171 - key = "${pre}${k.key}"; 172 - options = k.options; 173 - }) maps; 174 - in 175 lib.lists.flatten ( 176 - builtins.map (g: if builtins.hasAttr "group" g then prefixMap g.prefix g.keys else g) [ 177 { 178 group = "Tab Navigation"; 179 prefix = "<Tab>"; ··· 294 } 295 { 296 action.__raw = "[[<C-\\><C-n><C-w>]]"; 297 - mode = [ "t" ]; 298 key = "<C-w>"; 299 } 300 { 301 action.__raw = "[[<C-\\><C-n>]]"; 302 - mode = [ "t" ]; 303 key = "<esc>"; 304 } 305 { ··· 310 ); 311 312 extraPlugins = with pkgs.vimPlugins; [ 313 - { plugin = pkgs.nvim-mdx; } 314 - { plugin = satellite-nvim; } 315 - { plugin = flatten-nvim; } 316 - { plugin = tiny-devicons-auto-colors-nvim; } 317 ]; 318 319 plugins = { ··· 385 opts = { 386 position = "center"; 387 }; 388 - layout = 389 - let 390 - o = { 391 - position = "center"; 392 - }; 393 - txt = s: { 394 - type = "text"; 395 - val = s; 396 - opts = { 397 - hl = "Keyword"; 398 - } // o; 399 - }; 400 - grp = g: { 401 - type = "group"; 402 - val = g; 403 - opts.spacing = 1; 404 - }; 405 - btn = 406 - { 407 - val, 408 - onClick, 409 - ... 410 - }: 411 - { 412 - type = "button"; 413 - inherit val; 414 - opts = o; 415 - on_press.__raw = "function() vim.cmd[[${onClick}]] end"; 416 - }; 417 - cmd = 418 - { 419 - command, 420 - width, 421 - height, 422 - }: 423 { 424 - type = "terminal"; 425 - inherit command width height; 426 - opts = o; 427 - }; 428 - pad = { 429 - type = "padding"; 430 - val = 2; 431 - }; 432 - in 433 [ 434 pad 435 pad ··· 439 ( 440 let 441 banner = 442 - pkgs.runCommand "nvim-banner" { } 443 - ''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out''; 444 # bannerText = builtins.readFile banner; 445 in 446 - cmd { 447 - command = ''open ${banner} | ${pkgs.lolcat}/bin/lolcat -f -S (random int 1..360)''; 448 - # Hardcoding to prevent IFD 449 - width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3; 450 - height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1; 451 - } 452 ) 453 (grp [ 454 (btn { ··· 469 ]) 470 (txt "::<シ>") 471 ]) 472 - ++ [ pad ]; 473 }; 474 475 trouble = { ··· 591 hover = { 592 enabled = true; 593 delay = 150; 594 - reveal = [ "close" ]; 595 }; 596 sort_by = "insert_at_end"; 597 diagnostics = "nvim_lsp"; ··· 606 607 statuscol = { 608 enable = true; 609 - settings.segments = 610 - let 611 - dispCond = { 612 - __raw = '' 613 - function(ln) 614 - return vim.bo.filetype ~= "neo-tree" 615 - end 616 - ''; 617 - }; 618 - in 619 - [ 620 - { 621 - click = "v:lua.ScSa"; 622 - condition = [ 623 - dispCond 624 - ]; 625 - text = [ 626 - "%s" 627 - ]; 628 - } 629 - { 630 - click = "v:lua.ScLa"; 631 - condition = [ dispCond ]; 632 - text = [ 633 - { 634 - __raw = "require('statuscol.builtin').lnumfunc"; 635 - } 636 - ]; 637 - } 638 - { 639 - click = "v:lua.ScFa"; 640 - condition = [ 641 - dispCond 642 - { 643 - __raw = "require('statuscol.builtin').not_empty"; 644 - } 645 - ]; 646 - text = [ 647 - { 648 - __raw = "require('statuscol.builtin').foldfunc"; 649 - } 650 - " " 651 - ]; 652 - } 653 - ]; 654 }; 655 656 dropbar = { ··· 676 677 options = { 678 theme = "catppuccin"; 679 - disabled_filetypes = [ "neo-tree" ]; 680 - ignore_focus = [ "neo-tree" ]; 681 }; 682 }; 683 }; 684 685 - direnv.enable = true; 686 687 project-nvim = { 688 enable = true; ··· 742 fidget = { 743 enable = true; 744 settings.notification = { 745 window = { 746 y_padding = 2; 747 x_padding = 2; ··· 771 cmp = { 772 enable = true; 773 settings = { 774 - sources = map (name: { inherit name; }) [ 775 "nvim_lsp" 776 "nvim_lsp_signature_help" 777 "path"
··· 4 config, 5 lib, 6 ... 7 + }: { 8 environment.systemPackages = with pkgs; [ 9 ripgrep 10 fd 11 ]; 12 13 home-manager.users.bean = { 14 + imports = [inputs.nixvim.homeManagerModules.nixvim]; 15 16 programs.nixvim = { 17 enable = true; ··· 19 defaultEditor = true; 20 viAlias = true; 21 vimAlias = true; 22 23 nixpkgs.pkgs = pkgs; 24 ··· 58 background = true; 59 }; 60 virtual_text = { 61 + errors = ["italic"]; 62 + hints = ["italic"]; 63 + information = ["italic"]; 64 + warnings = ["italic"]; 65 + ok = ["italic"]; 66 }; 67 underlines = { 68 + errors = ["underline"]; 69 + hints = ["underline"]; 70 + information = ["underline"]; 71 + warnings = ["underline"]; 72 }; 73 }; 74 }; ··· 90 ''; 91 92 autoGroups = { 93 + restore_cursor = {}; 94 + open_neotree = {}; 95 }; 96 97 opts = { ··· 112 autoCmd = [ 113 { 114 group = "restore_cursor"; 115 + event = ["BufReadPost"]; 116 pattern = "*"; 117 callback.__raw = '' 118 function() ··· 129 } 130 { 131 group = "open_neotree"; 132 + event = ["BufRead"]; 133 pattern = "*"; 134 once = true; 135 callback.__raw = '' ··· 157 }; 158 }; 159 160 + keymaps = let 161 + prefixMap = pre: maps: 162 + builtins.map (k: { 163 + action = "<cmd>${k.action}<cr>"; 164 + key = "${pre}${k.key}"; 165 + options = k.options; 166 + }) 167 + maps; 168 + in 169 lib.lists.flatten ( 170 + builtins.map (g: 171 + if builtins.hasAttr "group" g 172 + then prefixMap g.prefix g.keys 173 + else g) [ 174 { 175 group = "Tab Navigation"; 176 prefix = "<Tab>"; ··· 291 } 292 { 293 action.__raw = "[[<C-\\><C-n><C-w>]]"; 294 + mode = ["t"]; 295 key = "<C-w>"; 296 } 297 { 298 action.__raw = "[[<C-\\><C-n>]]"; 299 + mode = ["t"]; 300 key = "<esc>"; 301 } 302 { ··· 307 ); 308 309 extraPlugins = with pkgs.vimPlugins; [ 310 + {plugin = pkgs.nvim-mdx;} 311 + {plugin = satellite-nvim;} 312 + {plugin = flatten-nvim;} 313 + {plugin = tiny-devicons-auto-colors-nvim;} 314 ]; 315 316 plugins = { ··· 382 opts = { 383 position = "center"; 384 }; 385 + layout = let 386 + o = { 387 + position = "center"; 388 + }; 389 + txt = s: { 390 + type = "text"; 391 + val = s; 392 + opts = 393 { 394 + hl = "Keyword"; 395 + } 396 + // o; 397 + }; 398 + grp = g: { 399 + type = "group"; 400 + val = g; 401 + opts.spacing = 1; 402 + }; 403 + btn = { 404 + val, 405 + onClick, 406 + ... 407 + }: { 408 + type = "button"; 409 + inherit val; 410 + opts = o; 411 + on_press.__raw = "function() vim.cmd[[${onClick}]] end"; 412 + }; 413 + cmd = { 414 + command, 415 + width, 416 + height, 417 + }: { 418 + type = "terminal"; 419 + inherit command width height; 420 + opts = o; 421 + }; 422 + pad = { 423 + type = "padding"; 424 + val = 2; 425 + }; 426 + in 427 [ 428 pad 429 pad ··· 433 ( 434 let 435 banner = 436 + pkgs.runCommand "nvim-banner" {} 437 + ''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out''; 438 # bannerText = builtins.readFile banner; 439 in 440 + cmd { 441 + command = ''open ${banner} | ${pkgs.lolcat}/bin/lolcat -f -S (random int 1..360)''; 442 + # Hardcoding to prevent IFD 443 + width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3; 444 + height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1; 445 + } 446 ) 447 (grp [ 448 (btn { ··· 463 ]) 464 (txt "::<シ>") 465 ]) 466 + ++ [pad]; 467 }; 468 469 trouble = { ··· 585 hover = { 586 enabled = true; 587 delay = 150; 588 + reveal = ["close"]; 589 }; 590 sort_by = "insert_at_end"; 591 diagnostics = "nvim_lsp"; ··· 600 601 statuscol = { 602 enable = true; 603 + settings.segments = let 604 + dispCond = { 605 + __raw = '' 606 + function(ln) 607 + return vim.bo.filetype ~= "neo-tree" 608 + end 609 + ''; 610 + }; 611 + in [ 612 + { 613 + click = "v:lua.ScSa"; 614 + condition = [ 615 + dispCond 616 + ]; 617 + text = [ 618 + "%s" 619 + ]; 620 + } 621 + { 622 + click = "v:lua.ScLa"; 623 + condition = [dispCond]; 624 + text = [ 625 + { 626 + __raw = "require('statuscol.builtin').lnumfunc"; 627 + } 628 + ]; 629 + } 630 + { 631 + click = "v:lua.ScFa"; 632 + condition = [ 633 + dispCond 634 + { 635 + __raw = "require('statuscol.builtin').not_empty"; 636 + } 637 + ]; 638 + text = [ 639 + { 640 + __raw = "require('statuscol.builtin').foldfunc"; 641 + } 642 + " " 643 + ]; 644 + } 645 + ]; 646 }; 647 648 dropbar = { ··· 668 669 options = { 670 theme = "catppuccin"; 671 + disabled_filetypes = ["neo-tree"]; 672 + ignore_focus = ["neo-tree"]; 673 }; 674 }; 675 }; 676 677 + nix-develop = { 678 + enable = true; 679 + package = 680 + pkgs.vimPlugins.nix-develop-nvim.overrideAttrs ( 681 + prev: next: { 682 + src = 683 + pkgs.fetchFromGitHub { 684 + owner = "Bwc9876"; 685 + repo = "nix-develop.nvim"; 686 + rev = "089cd52191ccbb3726594e21cd96567af6088dd5"; 687 + sha256 = "sha256-EIEJk8/IAuG+UICUJ2F8QakgRpFrQ1ezDSJ79NAVuD8= 688 + "; 689 + }; 690 + } 691 + ); 692 + }; 693 694 project-nvim = { 695 enable = true; ··· 749 fidget = { 750 enable = true; 751 settings.notification = { 752 + override_vim_notify = true; 753 window = { 754 y_padding = 2; 755 x_padding = 2; ··· 779 cmp = { 780 enable = true; 781 settings = { 782 + sources = map (name: {inherit name;}) [ 783 "nvim_lsp" 784 "nvim_lsp_signature_help" 785 "path"
+27 -7
nixosModules/imperm.nix
··· 22 23 fileSystems."/tmp/nix-build" = { 24 device = "${cacheRoot}/nix-build"; 25 - options = ["bind" "X-fstrim.notrim" "x-gvfs-hide"]; 26 }; 27 28 systemd.services.nix-daemon = { 29 environment.TMPDIR = "/tmp/nix-build"; 30 - unitConfig.RequiresMountsFor = ["/tmp/nix-build" "/nix/store"]; 31 }; 32 33 environment.persistence.${cacheRoot} = { 34 enable = true; 35 hideMounts = true; 36 directories = 37 - (preWith "/var" ([ 38 "log" 39 ] 40 ++ preWith "lib" ( ··· 48 "backlight" 49 "rfkill" 50 ] 51 - ))) 52 ++ [ 53 { 54 directory = "/var/lib/colord"; ··· 65 ".pnpm" 66 ".local/state/wireplumber" 67 ] 68 - ++ (preShare ["Steam" "Trash" "dolphin"]) 69 - ++ (preConf ["gh" "GitHub Desktop" "spotify" "vesktop" "kdeconnect" "keepassxc"]); 70 }; 71 72 environment.persistence.${persistRoot} = { ··· 107 "Cemu" 108 ]) 109 ++ (preShare [ 110 - "direnv" 111 "ow-mod-man" 112 "OuterWildsModManager" 113 "PrismLauncher"
··· 22 23 fileSystems."/tmp/nix-build" = { 24 device = "${cacheRoot}/nix-build"; 25 + options = [ 26 + "bind" 27 + "X-fstrim.notrim" 28 + "x-gvfs-hide" 29 + ]; 30 }; 31 32 systemd.services.nix-daemon = { 33 environment.TMPDIR = "/tmp/nix-build"; 34 + unitConfig.RequiresMountsFor = [ 35 + "/tmp/nix-build" 36 + "/nix/store" 37 + ]; 38 }; 39 40 environment.persistence.${cacheRoot} = { 41 enable = true; 42 hideMounts = true; 43 directories = 44 + (preWith "/var" ( 45 + [ 46 "log" 47 ] 48 ++ preWith "lib" ( ··· 56 "backlight" 57 "rfkill" 58 ] 59 + ) 60 + )) 61 ++ [ 62 { 63 directory = "/var/lib/colord"; ··· 74 ".pnpm" 75 ".local/state/wireplumber" 76 ] 77 + ++ (preShare [ 78 + "Steam" 79 + "Trash" 80 + "dolphin" 81 + ]) 82 + ++ (preConf [ 83 + "gh" 84 + "GitHub Desktop" 85 + "spotify" 86 + "vesktop" 87 + "kdeconnect" 88 + "keepassxc" 89 + ]); 90 }; 91 92 environment.persistence.${persistRoot} = { ··· 127 "Cemu" 128 ]) 129 ++ (preShare [ 130 + # "direnv" 131 "ow-mod-man" 132 "OuterWildsModManager" 133 "PrismLauncher"