Flake for my NixOS devices

More Nvim!! Also switch to kitty

bwc9876.dev b85119e9 f916bd28

verified
+82 -104
+2 -2
res/news-open.nu
··· 15 if ($type == "image/svg+xml") { 16 xdg-open $url 17 } else if ($type | str starts-with "image/") { 18 - http get $url | img2sixel 19 input "Press enter to close the image viewer" 20 } else if ($type | str starts-with "video/") or ($url =~ $YT_REGEX) { 21 qmplay2 --open $url 22 } else if ($type | str starts-with "text/html") { 23 - let w3m_opts = $"-sixel -no-cookie -o confirm_qq=FALSE -o display_link_number=TRUE -o extbrowser=($env.CURRENT_FILE)"; 24 let w3m_cmd = $"w3m ($w3m_opts)"; 25 let s = (term size).columns; 26 stty cols 90;
··· 15 if ($type == "image/svg+xml") { 16 xdg-open $url 17 } else if ($type | str starts-with "image/") { 18 + http get $url | kitten icat 19 input "Press enter to close the image viewer" 20 } else if ($type | str starts-with "video/") or ($url =~ $YT_REGEX) { 21 qmplay2 --open $url 22 } else if ($type | str starts-with "text/html") { 23 + let w3m_opts = $"-no-cookie -o confirm_qq=FALSE -o display_link_number=TRUE -o extbrowser=($env.CURRENT_FILE)"; 24 let w3m_cmd = $"w3m ($w3m_opts)"; 25 let s = (term size).columns; 26 stty cols 90;
-20
res/rofi/rofi-code.nu
··· 1 - #!/usr/bin/env nu 2 - 3 - let paths = ls ~/.config/Code/User/workspaceStorage/*/workspace.json 4 - | get name 5 - | each {|it| open $it | get folder | str substring 7..}; 6 - 7 - let paths_display = $paths | each {|it| $it | str replace $"/home/($env.USER)" "󰋜 " | str replace "󰋜 /Documents/GitHub" "󰊤 "}; 8 - 9 - let res = $paths_display | str join "\n" | rofi -dmenu -i -p "VSCode" | complete; 10 - 11 - if $res.exit_code == 1 { 12 - echo "Cancelled" 13 - } else { 14 - let choice = $res.stdout | str trim; 15 - let idx = $paths_display | enumerate | where {|it| $it.item == $choice} | first | get index; 16 - let path = $paths | get $idx; 17 - echo $"Opening ($path)" 18 - code $path 19 - } 20 -
···
+1 -1
res/rofi/rofi-zoxide.nu
··· 10 echo "Cancelled" 11 } else { 12 let dir = $res.stdout | split row " <span color=\"#A2A2A2\"><i><small>(" | get 1 | split row ")</small>" | get 0 13 - foot -D ($dir | str replace "~" $"/home/($env.USER)") 14 }
··· 10 echo "Cancelled" 11 } else { 12 let dir = $res.stdout | split row " <span color=\"#A2A2A2\"><i><small>(" | get 1 | split row ")</small>" | get 0 13 + kitty -d ($dir | str replace "~" $"/home/($env.USER)") 14 }
+2 -2
res/theming/kdeglobals
··· 2 ShowDeleteCommand=false 3 4 [General] 5 - TerminalApplication=foot 6 7 [KFileDialog Settings] 8 Allow Expansion=false ··· 25 View Style=DetailTree 26 27 [PreviewSettings] 28 - MaximumRemoteSize=0
··· 2 ShowDeleteCommand=false 3 4 [General] 5 + TerminalApplication=kitty 6 7 [KFileDialog Settings] 8 Allow Expansion=false ··· 25 View Style=DetailTree 26 27 [PreviewSettings] 28 + MaximumRemoteSize=0
+51 -12
roles/dev/nvim.nix
··· 15 16 programs.nixvim = { 17 enable = true; 18 defaultEditor = true; 19 viAlias = true; 20 vimAlias = true; ··· 36 cursorline = true; 37 showtabline = 2; 38 breakindent = true; 39 - foldenable = true; 40 }; 41 42 autoCmd = [ ··· 75 76 keymaps = [ 77 { 78 action = "<cmd>Lspsaga code_action code_action<cr>"; 79 key = "<C-.>a"; 80 options.desc = "Code Actions"; ··· 141 } 142 ]; 143 144 - extraPlugins = with pkgs.vimPlugins; [{plugin = nvim-scrollview;} {plugin = tiny-devicons-auto-colors-nvim;}]; 145 146 plugins = { 147 telescope = { ··· 248 ++ (lib.intersperse pad [ 249 (let 250 banner = pkgs.runCommand "nvim-banner" {} ''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out''; 251 - bannerText = builtins.readFile banner; 252 in 253 cmd { 254 command = ''mut i = 1; loop { let s = (open ${banner}) | ${pkgs.lolcat}/bin/lolcat -f -S $i; clear; print -n -r $s; sleep 50ms; $i += 3; }''; 255 - width = (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3; 256 - height = (builtins.length (lib.splitString "\n" bannerText)) - 1; 257 }) 258 (grp [ 259 (btn { ··· 296 enable = true; 297 settings = { 298 highlight.enable = true; 299 - folding.enable = true; 300 }; 301 }; 302 303 illuminate.enable = true; 304 cursorline.enable = true; 305 306 navbuddy = { 307 enable = true; ··· 338 enable = true; 339 }; 340 341 gitsigns.enable = true; 342 343 dap = { ··· 352 "trouble" 353 "toggleterm" 354 ]; 355 }; 356 }; 357 ··· 360 enableTelescope = true; 361 }; 362 363 web-devicons.enable = true; 364 365 guess-indent.enable = true; ··· 370 settings = { 371 show_help = true; 372 preset = "modern"; 373 }; 374 }; 375 ··· 382 disableTsServerFormatter = true; 383 }; 384 yamlfmt.enable = true; 385 }; 386 }; 387 ··· 413 preview.enable = true; 414 415 lsp-format.enable = true; 416 - lsp-status.enable = true; 417 lspkind.enable = true; 418 # jupytext.enable = true; 419 hex.enable = true; ··· 438 codeAction.keys.quit = "<ESC>"; 439 }; 440 441 - rustaceanvim.enable = true; 442 vim-css-color.enable = true; 443 444 lsp = { ··· 450 denols.enable = true; 451 ts_ls.enable = true; 452 html.enable = true; 453 cssls.enable = true; 454 tailwindcss.enable = true; 455 jsonls.enable = true; 456 yamlls.enable = true; 457 pylsp.enable = true; 458 - nixd.enable = true; 459 csharp_ls.enable = true; 460 bashls.enable = true; 461 nushell.enable = true; 462 taplo.enable = true; 463 - #rust_analyzer.enable = true; 464 - #rust_analyzer.installCargo = false; 465 - #rust_analyzer.installRustc = false; 466 lemminx.enable = true; 467 }; 468 };
··· 15 16 programs.nixvim = { 17 enable = true; 18 + enableMan = false; 19 defaultEditor = true; 20 viAlias = true; 21 vimAlias = true; ··· 37 cursorline = true; 38 showtabline = 2; 39 breakindent = true; 40 + # fillchars.__raw = "[[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]"; 41 + # foldcolumn = "1"; 42 }; 43 44 autoCmd = [ ··· 77 78 keymaps = [ 79 { 80 + action = ''"+y''; 81 + key = "<C-S-C>"; 82 + options.desc = "Copy to System Clipboard"; 83 + } 84 + { 85 + action = ''"+p''; 86 + key = "<C-S-V>"; 87 + options.desc = "Paste from System Clipboard"; 88 + } 89 + { 90 + action = ''"+x''; 91 + key = "<C-S-X>"; 92 + options.desc = "Cut to System Clipboard"; 93 + } 94 + { 95 action = "<cmd>Lspsaga code_action code_action<cr>"; 96 key = "<C-.>a"; 97 options.desc = "Code Actions"; ··· 158 } 159 ]; 160 161 + extraPlugins = with pkgs.vimPlugins; [{plugin = tiny-devicons-auto-colors-nvim;}]; 162 163 plugins = { 164 telescope = { ··· 265 ++ (lib.intersperse pad [ 266 (let 267 banner = pkgs.runCommand "nvim-banner" {} ''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out''; 268 + # bannerText = builtins.readFile banner; 269 in 270 cmd { 271 command = ''mut i = 1; loop { let s = (open ${banner}) | ${pkgs.lolcat}/bin/lolcat -f -S $i; clear; print -n -r $s; sleep 50ms; $i += 3; }''; 272 + # Hardcoding to prevent IFD 273 + width = 83; #(builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3; 274 + height = 12; #(builtins.length (lib.splitString "\n" bannerText)) - 1; 275 }) 276 (grp [ 277 (btn { ··· 314 enable = true; 315 settings = { 316 highlight.enable = true; 317 }; 318 }; 319 320 illuminate.enable = true; 321 cursorline.enable = true; 322 + 323 + scrollview.enable = true; 324 325 navbuddy = { 326 enable = true; ··· 357 enable = true; 358 }; 359 360 + # nvim-ufo.enable = true; 361 gitsigns.enable = true; 362 363 dap = { ··· 372 "trouble" 373 "toggleterm" 374 ]; 375 + # sections.lualine_c = ["lsp_progress"]; 376 }; 377 }; 378 ··· 381 enableTelescope = true; 382 }; 383 384 + # image.enable = true; 385 web-devicons.enable = true; 386 387 guess-indent.enable = true; ··· 392 settings = { 393 show_help = true; 394 preset = "modern"; 395 + win.wo.winblend = 8; 396 + }; 397 + }; 398 + 399 + fidget = { 400 + enable = true; 401 + notification = { 402 + overrideVimNotify = true; 403 + window.align = "top"; 404 }; 405 }; 406 ··· 413 disableTsServerFormatter = true; 414 }; 415 yamlfmt.enable = true; 416 + markdownlint.enable = true; 417 + }; 418 + sources.diagnostics = { 419 + markdownlint.enable = true; 420 }; 421 }; 422 ··· 448 preview.enable = true; 449 450 lsp-format.enable = true; 451 lspkind.enable = true; 452 # jupytext.enable = true; 453 hex.enable = true; ··· 472 codeAction.keys.quit = "<ESC>"; 473 }; 474 475 + # rustaceanvim.enable = true; 476 vim-css-color.enable = true; 477 478 lsp = { ··· 484 denols.enable = true; 485 ts_ls.enable = true; 486 html.enable = true; 487 + marksman.enable = true; 488 cssls.enable = true; 489 tailwindcss.enable = true; 490 jsonls.enable = true; 491 yamlls.enable = true; 492 pylsp.enable = true; 493 + nixd = lib.fix (self: { 494 + enable = true; 495 + settings.options.nixos.expr = ''(builtins.getFlake "${inputs.self}").nixosConfigurations.${config.networking.hostName}.options''; 496 + settings.options.home-manager.expr = ''${self.settings.options.nixos.expr}.home-manager.users.type.getSubOptions []''; 497 + }); 498 csharp_ls.enable = true; 499 bashls.enable = true; 500 nushell.enable = true; 501 taplo.enable = true; 502 + rust_analyzer.enable = true; 503 + rust_analyzer.installCargo = false; 504 + rust_analyzer.installRustc = false; 505 lemminx.enable = true; 506 }; 507 };
+2 -1
roles/graphics/apps.nix
··· 4 [Desktop Entry] 5 Type=Application 6 Name=Htop 7 - Exec=foot --title="Htop" --app-id="htop" htop 8 Icon=htop 9 ''; 10 ··· 24 25 environment.systemPackages = with pkgs; [ 26 chromium 27 28 # Office 29 libreoffice-qt6
··· 4 [Desktop Entry] 5 Type=Application 6 Name=Htop 7 + Exec=kitty --title="Htop" --app-id="htop" htop 8 Icon=htop 9 ''; 10 ··· 24 25 environment.systemPackages = with pkgs; [ 26 chromium 27 + kitty 28 29 # Office 30 libreoffice-qt6
-52
roles/graphics/foot.nix
··· 1 - {pkgs, ...}: { 2 - environment.systemPackages = with pkgs; [ 3 - libsixel 4 - ]; 5 - 6 - programs.foot = { 7 - enable = true; 8 - settings = { 9 - main = { 10 - title = "Terminal (Foot)"; 11 - term = "xterm-256color"; 12 - font = "monospace:size=18"; 13 - }; 14 - bell = { 15 - visual = true; 16 - }; 17 - cursor = { 18 - style = "beam"; 19 - blink = true; 20 - color = "11111b f5e0dc"; 21 - }; 22 - colors = { 23 - foreground = "cdd6f4"; 24 - background = "1e1e2e"; 25 - regular0 = "45475a"; 26 - regular1 = "f38ba8"; 27 - regular2 = "a6e3a1"; 28 - regular3 = "f9e2af"; 29 - regular4 = "89b4fa"; 30 - regular5 = "f5c2e7"; 31 - regular6 = "94e2d5"; 32 - regular7 = "bac2de"; 33 - bright0 = "585b70"; 34 - bright1 = "f38ba8"; 35 - bright2 = "a6e3a1"; 36 - bright3 = "f9e2af"; 37 - bright4 = "89b4fa"; 38 - bright5 = "f5c2e7"; 39 - bright6 = "94e2d5"; 40 - bright7 = "a6adc8"; 41 - "16" = "fab387"; 42 - "17" = "f5e0dc"; 43 - selection-foreground = "cdd6f4"; 44 - selection-background = "414356"; 45 - search-box-no-match = "11111b f38ba8"; 46 - search-box-match = "cdd6f4 313244"; 47 - jump-labels = "11111b fab387"; 48 - urls = "89b4fa"; 49 - }; 50 - }; 51 - }; 52 - }
···
+2 -3
roles/graphics/hypr.nix
··· 71 # }; 72 misc = { 73 enable_swallow = true; 74 - # swallow_regex = "^(foot)$"; 75 disable_hyprland_logo = true; 76 disable_splash_rendering = true; 77 focus_on_activate = true; ··· 79 key_press_enables_dpms = true; 80 }; 81 env = [ 82 - "TERMINAL,foot" 83 ]; 84 windowrulev2 = [ 85 "workspace 1 silent,class:(.*)vesktop(.*),title:(.*)[Vv]esktop(.*)" ··· 87 ]; 88 submap = "reset"; 89 bind = let 90 - openTerminal = "foot"; 91 forEachWorkspace = { 92 mod, 93 dispatch,
··· 71 # }; 72 misc = { 73 enable_swallow = true; 74 disable_hyprland_logo = true; 75 disable_splash_rendering = true; 76 focus_on_activate = true; ··· 78 key_press_enables_dpms = true; 79 }; 80 env = [ 81 + "TERMINAL,kitty" 82 ]; 83 windowrulev2 = [ 84 "workspace 1 silent,class:(.*)vesktop(.*),title:(.*)[Vv]esktop(.*)" ··· 86 ]; 87 submap = "reset"; 88 bind = let 89 + openTerminal = "kitty"; 90 forEachWorkspace = { 91 mod, 92 dispatch,
+16
roles/graphics/kitty.nix
···
··· 1 + {...}: { 2 + home-manager.users.bean.programs.kitty = { 3 + enable = true; 4 + font = { 5 + name = "monospace"; 6 + size = 18; 7 + }; 8 + keybindings = { 9 + "ctrl+shift+o" = "open_url_with_hints"; 10 + }; 11 + settings = { 12 + cursor_shape = "beam"; 13 + background_opacity = 0.92; 14 + }; 15 + }; 16 + }
-1
roles/graphics/theming.nix
··· 45 "XCURSOR_THEME,Sweet-cursors" 46 "XCURSOR_SIZE,${cursorSize}" 47 "GRIMBLAST_EDITOR,swappy -f " 48 - "TERMINAL,foot" 49 ]; 50 exec-once = [ 51 ''dconf write /org/gnome/desktop/interface/cursor-theme "Sweet-cursors"''
··· 45 "XCURSOR_THEME,Sweet-cursors" 46 "XCURSOR_SIZE,${cursorSize}" 47 "GRIMBLAST_EDITOR,swappy -f " 48 ]; 49 exec-once = [ 50 ''dconf write /org/gnome/desktop/interface/cursor-theme "Sweet-cursors"''
+3 -3
roles/graphics/waybar.nix
··· 291 exec = "${pkgs.nushell}/bin/nu ${inputs.self}/res/custom_waybar_modules/newsboat.nu"; 292 exec-on-event = true; 293 format = "{}"; 294 - on-click = "pidof -q newsboat && hyprctl dispatch focuswindow newsboat || foot --title=\"Newsboat\" --app-id=\"newsboat\" newsboat; pkill -SIGRTMIN+6 waybar"; 295 on-click-right = "pkill waybar -SIGRTMIN+6"; 296 restart-interval = 1800; 297 return-type = "json"; ··· 419 { 420 cpu = { 421 format = "󰍛 {usage}󰏰"; 422 - on-click = "foot --title=\"Htop\" --app-id=\"htop\" htop --sort-key=PERCENT_CPU"; 423 states = { 424 critical = 95; 425 warning = 80; ··· 432 layer = "top"; 433 memory = { 434 format = " {}󰏰 ({used:0.1f}/{total:0.1f} GiB)"; 435 - on-click = "foot --title=\"Htop\" --app-id=\"htop\" htop --sort-key=PERCENT_MEM"; 436 states = { 437 critical = 90; 438 warning = 70;
··· 291 exec = "${pkgs.nushell}/bin/nu ${inputs.self}/res/custom_waybar_modules/newsboat.nu"; 292 exec-on-event = true; 293 format = "{}"; 294 + on-click = "pidof -q newsboat && hyprctl dispatch focuswindow newsboat || kitty --title=\"Newsboat\" --app-id=\"newsboat\" newsboat; pkill -SIGRTMIN+6 waybar"; 295 on-click-right = "pkill waybar -SIGRTMIN+6"; 296 restart-interval = 1800; 297 return-type = "json"; ··· 419 { 420 cpu = { 421 format = "󰍛 {usage}󰏰"; 422 + on-click = "kitty --title=\"Htop\" --app-id=\"htop\" htop --sort-key=PERCENT_CPU"; 423 states = { 424 critical = 95; 425 warning = 80; ··· 432 layer = "top"; 433 memory = { 434 format = " {}󰏰 ({used:0.1f}/{total:0.1f} GiB)"; 435 + on-click = "kitty --title=\"Htop\" --app-id=\"htop\" htop --sort-key=PERCENT_MEM"; 436 states = { 437 critical = 90; 438 warning = 70;
+3 -7
roles/graphics/xdg.nix
··· 1 - { 2 - pkgs, 3 - config, 4 - ... 5 - }: { 6 home-manager.users.bean.xdg = { 7 enable = true; 8 userDirs = with config.home-manager.users.bean.home; { ··· 20 mimeApps = { 21 enable = true; 22 defaultApplications = let 23 - textEditors = ["code.desktop"]; 24 browsers = ["firefox-devedition.desktop" "firefox.desktop" "chromium.desktop"]; 25 imageViewers = ["gimp.desktop"]; 26 in { ··· 43 "image/x-portable-graymap" = imageViewers; 44 "image/x-portable-anymap" = imageViewers; 45 "image/svg+xml" = imageViewers; 46 - "x-terminal-emulator" = ["foot"]; 47 "x-scheme-handler/http" = browsers; 48 "x-scheme-handler/https" = browsers; 49 "x-scheme-handler/chrome" = browsers;
··· 1 + {config, ...}: { 2 home-manager.users.bean.xdg = { 3 enable = true; 4 userDirs = with config.home-manager.users.bean.home; { ··· 16 mimeApps = { 17 enable = true; 18 defaultApplications = let 19 + textEditors = ["neovide.desktop"]; 20 browsers = ["firefox-devedition.desktop" "firefox.desktop" "chromium.desktop"]; 21 imageViewers = ["gimp.desktop"]; 22 in { ··· 39 "image/x-portable-graymap" = imageViewers; 40 "image/x-portable-anymap" = imageViewers; 41 "image/svg+xml" = imageViewers; 42 + "x-terminal-emulator" = ["kitty"]; 43 "x-scheme-handler/http" = browsers; 44 "x-scheme-handler/https" = browsers; 45 "x-scheme-handler/chrome" = browsers;