Flake for my NixOS devices

Start out with most hm modules

bwc9876.dev 51743186 b3901834

verified
+1830 -429
+34 -34
flake.lock
··· 31 31 ] 32 32 }, 33 33 "locked": { 34 - "lastModified": 1760953099, 35 - "narHash": "sha256-sOKx2YcHa+lWEvaEOIGqLN2WWk1Wf5z6KM02tdfhMtw=", 34 + "lastModified": 1761553912, 35 + "narHash": "sha256-3UOEQPBlZo9OixT9L1zoD67QheopTG8/EfRPGKyP9bg=", 36 36 "owner": "catppuccin", 37 37 "repo": "nix", 38 - "rev": "f5b21876888265d2fee7fb0640d1b66a1c1c6503", 38 + "rev": "7b42c91911c143ae3ea32a79cc8582b5920f24e3", 39 39 "type": "github" 40 40 }, 41 41 "original": { ··· 128 128 "rust-analyzer-src": "rust-analyzer-src_2" 129 129 }, 130 130 "locked": { 131 - "lastModified": 1760769695, 132 - "narHash": "sha256-eU4HnBCVuBg+c5UninnTh65VrbkkQ8HOjCaC3NDZLYM=", 131 + "lastModified": 1761460927, 132 + "narHash": "sha256-9BUyZfPBh3mh58fmpseqfMAB73PNm+iwl8UpjCbThk0=", 133 133 "owner": "nix-community", 134 134 "repo": "fenix", 135 - "rev": "f4cb0863b5d772b7b378ea456ac86c359303dfa7", 135 + "rev": "0f19d25425626ea42bded065029f45ca5f526ca1", 136 136 "type": "github" 137 137 }, 138 138 "original": { ··· 283 283 ] 284 284 }, 285 285 "locked": { 286 - "lastModified": 1761155197, 287 - "narHash": "sha256-3NcqyhZkWrqY0qlnXqtV82vGwaQ7Be3Ll1w7+NPzq8w=", 286 + "lastModified": 1761636064, 287 + "narHash": "sha256-xAbEYL5gqPnBfXOIGToPjF6E0n9RSe8YJ6E2/ePrPaM=", 288 288 "owner": "nix-community", 289 289 "repo": "flakelight", 290 - "rev": "5afd70555737c62786b69a64980e7bb1c1947956", 290 + "rev": "2c621bc66465c457b64b016bb00d575ff2e51094", 291 291 "type": "github" 292 292 }, 293 293 "original": { ··· 325 325 ] 326 326 }, 327 327 "locked": { 328 - "lastModified": 1760359755, 329 - "narHash": "sha256-k7sJPDPio2vQuqSJ/3nOkBy6I2YqZvJYNhJJARLSxrg=", 328 + "lastModified": 1761155197, 329 + "narHash": "sha256-3NcqyhZkWrqY0qlnXqtV82vGwaQ7Be3Ll1w7+NPzq8w=", 330 330 "owner": "nix-community", 331 331 "repo": "flakelight", 332 - "rev": "d8d6ce0774c3df8f7b58b4cd4b5cf4b63b4a9fe6", 332 + "rev": "5afd70555737c62786b69a64980e7bb1c1947956", 333 333 "type": "github" 334 334 }, 335 335 "original": { ··· 410 410 ] 411 411 }, 412 412 "locked": { 413 - "lastModified": 1761081701, 414 - "narHash": "sha256-IwpfaKg5c/WWQiy8b5QGaVPMvoEQ2J6kpwRFdpVpBNQ=", 413 + "lastModified": 1761660375, 414 + "narHash": "sha256-04hmZlwuV8OjzvsBvFMnmcyC5IWcVnIU1V8i0P60jXU=", 415 415 "owner": "nix-community", 416 416 "repo": "home-manager", 417 - "rev": "9b4a2a7c4fbd75b422f00794af02d6edb4d9d315", 417 + "rev": "d47259b685b1145b610fd8c28e7498304a97fa78", 418 418 "type": "github" 419 419 }, 420 420 "original": { ··· 498 498 ] 499 499 }, 500 500 "locked": { 501 - "lastModified": 1760846226, 502 - "narHash": "sha256-xmU8kAsRprJiTGBTaGrwmjBP3AMA9ltlrxHKFuy5JWc=", 501 + "lastModified": 1761451000, 502 + "narHash": "sha256-qBJL6xEIjqYq9zOcG2vf2nPTeVBppNJzvO0LuQWMwMo=", 503 503 "owner": "nix-community", 504 504 "repo": "nix-index-database", 505 - "rev": "5024e1901239a76b7bf94a4cd27f3507e639d49e", 505 + "rev": "ed6b293161b378a7368cda38659eb8d3d9a0dac4", 506 506 "type": "github" 507 507 }, 508 508 "original": { ··· 528 528 }, 529 529 "nixpkgs": { 530 530 "locked": { 531 - "lastModified": 1760878510, 532 - "narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=", 531 + "lastModified": 1761373498, 532 + "narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=", 533 533 "owner": "NixOS", 534 534 "repo": "nixpkgs", 535 - "rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67", 535 + "rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce", 536 536 "type": "github" 537 537 }, 538 538 "original": { ··· 552 552 "systems": "systems_2" 553 553 }, 554 554 "locked": { 555 - "lastModified": 1761169815, 556 - "narHash": "sha256-a8JUU1NIey01VNHndAqAkP76JdESscXJpWITZTlKHWE=", 555 + "lastModified": 1761657569, 556 + "narHash": "sha256-2D4Tw5Vp52RU5amnBvq0/z+zgZqafwl4bhg8dJBBjXI=", 557 557 "owner": "nix-community", 558 558 "repo": "nixvim", 559 - "rev": "9a057ef01a832df20f1e5b19db2f0b86b2c7e89a", 559 + "rev": "03c0dabb9a63f52bc2ebf571f3755720df1ca81e", 560 560 "type": "github" 561 561 }, 562 562 "original": { ··· 573 573 ] 574 574 }, 575 575 "locked": { 576 - "lastModified": 1760636396, 577 - "narHash": "sha256-QHYUWrSpEd040JVBAoCK873nCNemT3gHNePka37FbpU=", 576 + "lastModified": 1761235019, 577 + "narHash": "sha256-jkseFs9Ty4x8FyVDzyFLh6enwIDBdcfZrUjE++5W9uA=", 578 578 "owner": "Bwc9876", 579 579 "repo": "nu_plugin_dbus", 580 - "rev": "090be12d30371b46b9e7cbdb8ec8906a6fe16e60", 580 + "rev": "47e1e232e44b38fc975839656124c74897ed3425", 581 581 "type": "github" 582 582 }, 583 583 "original": { ··· 724 724 "rust-analyzer-src_2": { 725 725 "flake": false, 726 726 "locked": { 727 - "lastModified": 1760714286, 728 - "narHash": "sha256-WOt9KquZ1BXjMcVyHpMeliqNRL6BfRvBHFGfRDriDx4=", 727 + "lastModified": 1761412493, 728 + "narHash": "sha256-Ig2yUk5ek3vSFR+m+rtmg0kJyRLPYol55QgsYsoSGI4=", 729 729 "owner": "rust-lang", 730 730 "repo": "rust-analyzer", 731 - "rev": "1e20331e42449dfc0b44bce84147a06772d045d7", 731 + "rev": "daf1cd953fe878226e3a5b0356468f5a61995bf0", 732 732 "type": "github" 733 733 }, 734 734 "original": { ··· 777 777 ] 778 778 }, 779 779 "locked": { 780 - "lastModified": 1761008491, 781 - "narHash": "sha256-gkZ9PYgx5mt+2F1++shCndW1U3GLpdnyHiRPfm0+pG8=", 780 + "lastModified": 1761502163, 781 + "narHash": "sha256-QOM9FyWS++87ejU9DiQpGb2SOLT2EJ0LBpNuxREZBvs=", 782 782 "ref": "refs/heads/main", 783 - "rev": "0c5b9b010b5f70a43095a24bab4c1203706858bd", 784 - "revCount": 270, 783 + "rev": "68c3a8496acd185a1ab3863c6c7fd973077123ae", 784 + "revCount": 274, 785 785 "type": "git", 786 786 "url": "https://codeberg.org/spoonbaker/mono" 787 787 },
+4 -4
flake.nix
··· 56 56 gh-grader-preview, 57 57 }: 58 58 flakelight ./. { 59 - imports = [ 60 - spoon.flakelightModules.repl 61 - spoon.flakelightModules.ubercheck 62 - ]; 59 + # imports = [ 60 + # spoon.flakelightModules.repl 61 + # spoon.flakelightModules.ubercheck 62 + # ]; 63 63 inherit inputs; 64 64 formatters = pkgs: { 65 65 "*.nix" = "alejandra .";
+18
homeModules/cat.nix
··· 1 + { 2 + config, 3 + lib, 4 + inputs, 5 + ... 6 + }: 7 + { 8 + imports = [ inputs.catppuccin.homeModules.catppuccin ]; 9 + 10 + options.cow.cat.enable = lib.mkEnableOption "Catppuccin Home Customizations"; 11 + 12 + config = lib.mkIf config.cow.cat.enable { 13 + catppuccin = { 14 + enable = true; 15 + mako.enable = false; 16 + }; 17 + }; 18 + }
+19
homeModules/comma.nix
··· 1 + { 2 + config, 3 + lib, 4 + inputs, 5 + pkgs, 6 + ... 7 + }: 8 + { 9 + imports = [ inputs.nix-index-db.homeModules.nix-index ]; 10 + 11 + options.cow.comma.enable = lib.mkEnableOption "Command With DB"; 12 + 13 + config = lib.mkIf config.cow.comma.enable { 14 + nix-index.enable = true; 15 + home.packages = with pkgs; [ 16 + comma-with-db 17 + ]; 18 + }; 19 + }
+25
homeModules/imperm.nix
··· 1 + { config, lib, ... }: 2 + let 3 + listOfDirs = 4 + desc: 5 + lib.mkOption { 6 + type = lib.types.listOF lib.types.str; 7 + }; 8 + in 9 + { 10 + options.cow.imperm = { 11 + keepLibraries = lib.mkEnableOption "persisting library (Documents, Pictures, etc.) directories"; 12 + keepCache = listOfDirs "List of directories to persist if impermanence is enabled. These directories are *not* meant to be backed up"; 13 + keep = listOfDirs "List of directories to persist if impermanence is enabled. These directories should be backed up"; 14 + }; 15 + 16 + config = config.cow.imperm.keepLibraries { 17 + cow.imperm.keep = [ 18 + "Downloads" 19 + "Music" 20 + "Videos" 21 + "Pictures" 22 + "Documents" 23 + ]; 24 + }; 25 + }
+372
homeModules/music.nix
··· 1 + { 2 + lib, 3 + config, 4 + inputs', 5 + ... 6 + }: 7 + { 8 + options.cow.music = { 9 + enable = lib.mkEnableOption "music playback with MPD and rmpc + customizations"; 10 + }; 11 + 12 + config = lib.mkIf config.cow.music.enable ( 13 + let 14 + cat = 15 + (builtins.fromJSON (builtins.readFile "${inputs'.catppuccin.packages.palette}/palette.json")) 16 + .${config.catppuccin.flavor}.colors; 17 + accent = cat.${config.catppuccin.accent}; 18 + themeFile = '' 19 + #![enable(implicit_some)] 20 + #![enable(unwrap_newtypes)] 21 + #![enable(unwrap_variant_newtypes)] 22 + ( 23 + default_album_art_path: None, 24 + draw_borders: true, 25 + show_song_table_header: true, 26 + symbols: (song: "", dir: "", playlist: "󰲸", marker: "\u{e0b0}"), 27 + layout: Split( 28 + direction: Vertical, 29 + panes: [ 30 + ( 31 + size: "3", 32 + pane: Pane(Tabs), 33 + ), 34 + ( 35 + size: "4", 36 + pane: Split( 37 + direction: Horizontal, 38 + panes: [ 39 + ( 40 + size: "100%", 41 + pane: Split( 42 + direction: Vertical, 43 + panes: [ 44 + ( 45 + size: "4", 46 + borders: "ALL", 47 + pane: Pane(Header), 48 + ), 49 + ] 50 + ) 51 + ), 52 + ] 53 + ), 54 + ), 55 + ( 56 + size: "100%", 57 + pane: Split( 58 + direction: Horizontal, 59 + panes: [ 60 + ( 61 + size: "100%", 62 + borders: "ALL", 63 + pane: Pane(TabContent), 64 + ), 65 + ] 66 + ), 67 + ), 68 + ( 69 + size: "3", 70 + borders: "ALL", 71 + pane: Pane(ProgressBar), 72 + ), 73 + ], 74 + ), 75 + progress_bar: ( 76 + symbols: ["[", "=", ">", "-", "]"], 77 + track_style: (bg: "${cat.mantle.hex}"), 78 + elapsed_style: (fg: "${accent.hex}", bg: "${cat.mantle.hex}"), 79 + thumb_style: (fg: "${accent.hex}", bg: "${cat.mantle.hex}"), 80 + ), 81 + scrollbar: ( 82 + symbols: ["│", "█", "▲", "▼"], 83 + track_style: (), 84 + ends_style: (), 85 + thumb_style: (fg: "${cat.teal.hex}"), 86 + ), 87 + browser_column_widths: [20, 38, 42], 88 + text_color: "${cat.text.hex}", 89 + background_color: "${cat.base.hex}", 90 + header_background_color: "${cat.mantle.hex}", 91 + modal_background_color: None, 92 + modal_backdrop: true, 93 + tab_bar: (active_style: (fg: "black", bg: "${accent.hex}", modifiers: "Bold"), inactive_style: ()), 94 + borders_style: (fg: "${cat.overlay0.hex}"), 95 + highlighted_item_style: (fg: "${accent.hex}", modifiers: "Bold"), 96 + current_item_style: (fg: "black", bg: "${cat.teal.hex}", modifiers: "Bold"), 97 + highlight_border_style: (fg: "${cat.teal.hex}"), 98 + cava: ( 99 + bar_symbols: ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'], 100 + inverted_bar_symbols: ['▔', '🮂', '🮃', '▀', '🮄', '🮅', '🮆', '█'], 101 + bar_width: 1, 102 + bar_spacing: 1, 103 + orientation: Bottom, 104 + bar_color: Gradient({ 105 + 0: "${cat.lavender.hex}", 106 + 10: "${cat.blue.hex}", 107 + 20: "${cat.sapphire.hex}", 108 + 30: "${cat.teal.hex}", 109 + 40: "${cat.green.hex}", 110 + 50: "${cat.yellow.hex}", 111 + 60: "${cat.maroon.hex}", 112 + 70: "${cat.red.hex}", 113 + 80: "${cat.mauve.hex}", 114 + 90: "${cat.pink.hex}", 115 + 100: "${cat.flamingo.hex}", 116 + }), 117 + ), 118 + song_table_format: [ 119 + ( 120 + prop: (kind: Property(Artist), style: (fg: "${cat.teal.hex}"), default: (kind: Text("Unknown"))), 121 + width: "50%", 122 + alignment: Right, 123 + ), 124 + ( 125 + prop: (kind: Text("-"), style: (fg: "${cat.teal.hex}"), default: (kind: Text("Unknown"))), 126 + width: "1", 127 + alignment: Center, 128 + ), 129 + ( 130 + prop: (kind: Property(Title), style: (fg: "${accent.hex}"), default: (kind: Text("Unknown"))), 131 + width: "50%", 132 + ), 133 + ], 134 + header: ( 135 + rows: [ 136 + ( 137 + left: [ 138 + (kind: Text("["), style: (fg: "${cat.teal.hex}", modifiers: "Bold")), 139 + (kind: Property(Status(State)), style: (fg: "${cat.teal.hex}", modifiers: "Bold")), 140 + (kind: Text("]"), style: (fg: "${cat.teal.hex}", modifiers: "Bold")) 141 + ], 142 + center: [ 143 + (kind: Property(Song(Artist)), style: (fg: "${cat.yellow.hex}", modifiers: "Bold"), 144 + default: (kind: Text("Unknown"), style: (fg: "${cat.yellow.hex}", modifiers: "Bold")) 145 + ), 146 + (kind: Text(" - ")), 147 + (kind: Property(Song(Title)), style: (fg: "${accent.hex}", modifiers: "Bold"), 148 + default: (kind: Text("No Song"), style: (fg: "${accent.hex}", modifiers: "Bold")) 149 + ) 150 + ], 151 + right: [ 152 + (kind: Text("Vol: "), style: (fg: "${cat.teal.hex}", modifiers: "Bold")), 153 + (kind: Property(Status(Volume)), style: (fg: "${cat.teal.hex}", modifiers: "Bold")), 154 + (kind: Text("% "), style: (fg: "${cat.teal.hex}", modifiers: "Bold")) 155 + ] 156 + ) 157 + ], 158 + ), 159 + ) 160 + ''; 161 + configFile = '' 162 + #![enable(implicit_some)] 163 + #![enable(unwrap_newtypes)] 164 + #![enable(unwrap_variant_newtypes)] 165 + ( 166 + address: "127.0.0.1:6600", 167 + password: None, 168 + theme: ${if config.cow.cat.enable then ''Some("catppuccin")'' else "None"}, 169 + cache_dir: None, 170 + lyrics_dir: "${config.services.mpd.musicDirectory}", 171 + on_song_change: None, 172 + volume_step: 5, 173 + max_fps: 30, 174 + scrolloff: 0, 175 + wrap_navigation: true, 176 + enable_mouse: true, 177 + enable_config_hot_reload: true, 178 + status_update_interval_ms: 1000, 179 + rewind_to_start_sec: None, 180 + reflect_changes_to_playlist: false, 181 + select_current_song_on_change: false, 182 + browser_song_sort: [Disc, Track, Artist, Title], 183 + directories_sort: SortFormat(group_by_type: true, reverse: false), 184 + album_art: ( 185 + method: Auto, 186 + max_size_px: (width: 1200, height: 1200), 187 + disabled_protocols: ["http://", "https://"], 188 + vertical_align: Center, 189 + horizontal_align: Center, 190 + ), 191 + cava: ( 192 + framerate: 60, // default 60 193 + autosens: true, // default true 194 + sensitivity: 100, // default 100 195 + lower_cutoff_freq: 50, // not passed to cava if not provided 196 + higher_cutoff_freq: 10000, // not passed to cava if not provided 197 + input: ( 198 + method: Fifo, 199 + source: "/tmp/mpd.fifo", 200 + sample_rate: 44100, 201 + channels: 2, 202 + sample_bits: 16, 203 + ), 204 + smoothing: ( 205 + noise_reduction: 77, // default 77 206 + monstercat: false, // default false 207 + waves: false, // default false 208 + ), 209 + eq: [] 210 + ), 211 + keybinds: ( 212 + global: { 213 + ":": CommandMode, 214 + ",": VolumeDown, 215 + "s": Stop, 216 + ".": VolumeUp, 217 + "<Tab>": NextTab, 218 + "<S-Tab>": PreviousTab, 219 + "1": SwitchToTab("Queue"), 220 + "2": SwitchToTab("Directories"), 221 + "3": SwitchToTab("Search"), 222 + "q": Quit, 223 + ">": NextTrack, 224 + "p": TogglePause, 225 + "<": PreviousTrack, 226 + "f": SeekForward, 227 + "z": ToggleRepeat, 228 + "x": ToggleRandom, 229 + "c": ToggleConsume, 230 + "v": ToggleSingle, 231 + "b": SeekBack, 232 + "~": ShowHelp, 233 + "u": Update, 234 + "U": Rescan, 235 + "I": ShowCurrentSongInfo, 236 + "O": ShowOutputs, 237 + "P": ShowDecoders, 238 + "R": AddRandom, 239 + }, 240 + navigation: { 241 + "k": Up, 242 + "j": Down, 243 + "h": Left, 244 + "l": Right, 245 + "<Up>": Up, 246 + "<Down>": Down, 247 + "<Left>": Left, 248 + "<Right>": Right, 249 + "<C-k>": PaneUp, 250 + "<C-j>": PaneDown, 251 + "<C-h>": PaneLeft, 252 + "<C-l>": PaneRight, 253 + "<C-u>": UpHalf, 254 + "N": PreviousResult, 255 + "a": Add, 256 + "A": AddAll, 257 + "r": Rename, 258 + "n": NextResult, 259 + "g": Top, 260 + "<Space>": Select, 261 + "<C-Space>": InvertSelection, 262 + "G": Bottom, 263 + "<CR>": Confirm, 264 + "i": FocusInput, 265 + "J": MoveDown, 266 + "<C-d>": DownHalf, 267 + "/": EnterSearch, 268 + "<C-c>": Close, 269 + "<Esc>": Close, 270 + "K": MoveUp, 271 + "D": Delete, 272 + "B": ShowInfo, 273 + }, 274 + queue: { 275 + "D": DeleteAll, 276 + "<CR>": Play, 277 + "<C-s>": Save, 278 + "a": AddToPlaylist, 279 + "d": Delete, 280 + "C": JumpToCurrent, 281 + "X": Shuffle, 282 + }, 283 + ), 284 + search: ( 285 + case_sensitive: false, 286 + mode: Contains, 287 + tags: [ 288 + (value: "any", label: "Any Tag"), 289 + (value: "artist", label: "Artist"), 290 + (value: "album", label: "Album"), 291 + (value: "albumartist", label: "Album Artist"), 292 + (value: "title", label: "Title"), 293 + (value: "filename", label: "Filename"), 294 + (value: "genre", label: "Genre"), 295 + ], 296 + ), 297 + artists: ( 298 + album_display_mode: SplitByDate, 299 + album_sort_by: Date, 300 + ), 301 + tabs: [ 302 + ( 303 + name: "Queue", 304 + pane: Split( 305 + direction: Horizontal, 306 + panes: [ 307 + (size: "60%", pane: Split( 308 + direction: Vertical, 309 + panes: [ 310 + (size: "50%", pane: Pane(Queue)), 311 + (size: "50%", borders: "TOP", pane: Pane(Cava)), 312 + ], 313 + )), 314 + (size: "40%", borders: "LEFT", pane: Split( 315 + direction: Vertical, 316 + panes: [ 317 + (size: "70%", pane: Pane(AlbumArt)), 318 + (size: "30%", borders: "TOP", pane: Pane(Lyrics)), 319 + ], 320 + )), 321 + ], 322 + ), 323 + ), 324 + ( 325 + name: "Directories", 326 + pane: Pane(Directories), 327 + ), 328 + ( 329 + name: "Search", 330 + pane: Pane(Search), 331 + ), 332 + ], 333 + ) 334 + ''; 335 + in 336 + { 337 + home-manager.users.bean = { 338 + programs.cava = { 339 + enable = true; 340 + }; 341 + 342 + xdg.configFile = lib.mkIf config.cow.cat.enable { 343 + "rmpc/themes/catppuccin.ron".text = themeFile; 344 + }; 345 + 346 + programs.rmpc = { 347 + enable = true; 348 + config = configFile; 349 + }; 350 + 351 + services = { 352 + mpd = { 353 + enable = true; 354 + extraConfig = '' 355 + audio_output { 356 + type "fifo" 357 + name "mpd_fifo" 358 + path "/tmp/mpd.fifo" 359 + format "44100:16:2" 360 + } 361 + audio_output { 362 + type "pipewire" 363 + name "Pipewire" 364 + } 365 + ''; 366 + }; 367 + mpdris2.enable = true; 368 + }; 369 + }; 370 + } 371 + ); 372 + }
+105
homeModules/nushell.nix
··· 1 + { 2 + config, 3 + pkgs, 4 + lib, 5 + ... 6 + }: 7 + { 8 + options.cow.nushell = { 9 + enable = lib.mkEnableOption "Nushell + Customizations"; 10 + commandNotFound = lib.mkEnableOption "Custom Nix Command Not Found for Nushell"; 11 + completers = { 12 + carapace = (lib.mkEnableOption "Carapace Completer In Nushell") // { 13 + default = true; 14 + }; 15 + fish = (lib.mkEnableOption "Fish Completions In Nushell") // { 16 + default = true; 17 + }; 18 + }; 19 + }; 20 + 21 + config = 22 + let 23 + conf = config.cow.nushell; 24 + in 25 + lib.mkIf conf.enable { 26 + programs = { 27 + command-not-found.enable = !conf.commandNotFound; 28 + nushell = 29 + let 30 + fishComplete = builtins.replaceStrings [ "__fish__" ] [ "${pkgs.fish}/bin/fish" ] ( 31 + lib.fileContents ../res/nushellCompletions/fish.nu 32 + ); 33 + carapaceComplete = builtins.replaceStrings [ "__carapace__" ] [ "${pkgs.carapace}/bin/carapace" ] ( 34 + lib.fileContents ../res/nushellCompletions/carapace.nu 35 + ); 36 + completions = '' 37 + {|spans| 38 + # if the current command is an alias, get it's expansion 39 + let expanded_alias = (scope aliases | where name == $spans.0 | get -o 0 | get -o expansion) 40 + 41 + # overwrite 42 + 43 + let spans = (if $expanded_alias != null { 44 + # put the first word of the expanded alias first in the span 45 + $spans | skip 1 | prepend ($expanded_alias | split row " ") 46 + } else { $spans }) 47 + 48 + match $spans.0 { 49 + ${lib.optional conf.completers.fish '' 50 + nu => ${fishComplete} 51 + git => ${fishComplete} 52 + ''} 53 + _ => ${ 54 + if conf.completers.carapace then 55 + carapaceComplete 56 + else if conf.completers.fish then 57 + fishComplete 58 + else 59 + "{|spans| []}" 60 + } 61 + } | do $in $spans 62 + } 63 + ''; 64 + cnf = lib.fileContents ../res/command_not_found.nu; 65 + nu_config = 66 + let 67 + doCompletions = builtins.any (x: x) (builtins.attrValues conf.completers); 68 + in 69 + '' 70 + { 71 + show_banner: false, 72 + completions: { 73 + external: { 74 + enable: ${doCompletions} 75 + completer: ${if doCompletions then completions else "{|spans| []}"} 76 + }, 77 + }, 78 + hooks: { 79 + ${lib.optional conf.commandNotFound '' 80 + command_not_found: ${cnf} 81 + ''} 82 + } 83 + } 84 + ''; 85 + init-starship = pkgs.runCommand "starship-init" { } '' 86 + ${pkgs.starship}/bin/starship init nu > $out 87 + ''; 88 + in 89 + { 90 + enable = true; 91 + configFile = '' 92 + $env.config = ${nu_config} 93 + 94 + ${lib.optional config.cow.starship.enable '' 95 + source ${init-starship} 96 + ''} 97 + ''; 98 + shellAliases = { 99 + "py" = "python"; 100 + "🥺" = "sudo"; 101 + }; 102 + }; 103 + }; 104 + }; 105 + }
+926
homeModules/nvim.nix
··· 1 + { 2 + pkgs, 3 + inputs, 4 + config, 5 + lib, 6 + ... 7 + }: 8 + { 9 + imports = [ inputs.nixvim.homeModules.nixvim ]; 10 + 11 + options.cow.neovim.enable = lib.mkEnableOption "Neovim + Nixvim + Customizations"; 12 + 13 + config = lib.mkIf config.cow.neovim.enable { 14 + home.packages = with pkgs; [ 15 + ripgrep 16 + fd 17 + ]; 18 + 19 + programs.neovide = lib.mkIf config.cow.gdi.enable { 20 + enable = true; 21 + settings = { 22 + fork = true; 23 + font = { 24 + normal = [ { family = "monospace"; } ]; 25 + size = 18.0; 26 + }; 27 + title-hidden = false; 28 + }; 29 + }; 30 + 31 + programs.nixvim = { 32 + enable = true; 33 + enableMan = false; 34 + defaultEditor = true; 35 + viAlias = true; 36 + vimAlias = true; 37 + 38 + nixpkgs.pkgs = pkgs; 39 + clipboard.providers.wl-copy.enable = config.cow.gdi.enable; 40 + 41 + globals.mapleader = " "; 42 + 43 + colorschemes.catppuccin = lib.mkIf config.cow.cat.enable { 44 + enable = true; 45 + settings = { 46 + inherit (config.catppuccin) flavor; 47 + no_underline = false; 48 + no_bold = false; 49 + no_italics = false; 50 + term_colors = true; 51 + # transparent_background = true; 52 + integrations = { 53 + alpha = true; 54 + dropbar.enabled = true; 55 + fidget = true; 56 + markdown = true; 57 + dap = true; 58 + ufo = true; 59 + rainbow_delimiters = true; 60 + lsp_trouble = true; 61 + which_key = true; 62 + telescope.enabled = true; 63 + treesitter = true; 64 + lsp_saga = true; 65 + illuminate = { 66 + enabled = true; 67 + lsp = true; 68 + }; 69 + gitsigns = true; 70 + neotree = true; 71 + native_lsp = { 72 + enabled = true; 73 + inlay_hints = { 74 + background = true; 75 + }; 76 + virtual_text = { 77 + errors = [ "italic" ]; 78 + hints = [ "italic" ]; 79 + information = [ "italic" ]; 80 + warnings = [ "italic" ]; 81 + ok = [ "italic" ]; 82 + }; 83 + underlines = { 84 + errors = [ "underline" ]; 85 + hints = [ "underline" ]; 86 + information = [ "underline" ]; 87 + warnings = [ "underline" ]; 88 + }; 89 + }; 90 + }; 91 + }; 92 + }; 93 + 94 + extraConfigLua = '' 95 + vim.diagnostic.config({ 96 + signs = { 97 + text = { 98 + [vim.diagnostic.severity.ERROR] = "", 99 + [vim.diagnostic.severity.WARN] = "", 100 + }, 101 + }, 102 + }) 103 + vim.g.neovide_cursor_vfx_mode = "pixiedust" 104 + 105 + -- require("satellite").setup({}) 106 + ''; 107 + 108 + autoGroups = { 109 + restore_cursor = { }; 110 + open_neotree = { }; 111 + }; 112 + 113 + filetype.extension.mdx = "mdx"; 114 + 115 + opts = { 116 + number = true; 117 + relativenumber = true; 118 + smartindent = true; 119 + cursorline = true; 120 + showtabline = 2; 121 + breakindent = true; 122 + fillchars.__raw = ''[[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]''; 123 + foldcolumn = "1"; 124 + foldlevel = 10; 125 + foldlevelstart = 10; 126 + foldenable = true; 127 + mouse = ""; 128 + }; 129 + 130 + autoCmd = [ 131 + { 132 + group = "restore_cursor"; 133 + event = [ "BufReadPost" ]; 134 + pattern = "*"; 135 + callback.__raw = '' 136 + function() 137 + if 138 + vim.fn.line "'\"" > 1 139 + and vim.fn.line "'\"" <= vim.fn.line "$" 140 + and vim.bo.filetype ~= "commit" 141 + and vim.fn.index({ "xxd", "gitrebase" }, vim.bo.filetype) == -1 142 + then 143 + vim.cmd "normal! g`\"" 144 + end 145 + end 146 + ''; 147 + } 148 + { 149 + group = "open_neotree"; 150 + event = [ "BufRead" ]; 151 + pattern = "*"; 152 + once = true; 153 + callback.__raw = '' 154 + function() 155 + if 156 + vim.bo.filetype ~= "alpha" 157 + and (not vim.g.neotree_opened) 158 + then 159 + vim.cmd "Neotree show" 160 + vim.g.neotree_opened = true 161 + end 162 + end 163 + ''; 164 + } 165 + ]; 166 + 167 + performance = { 168 + byteCompileLua = { 169 + enable = true; 170 + nvimRuntime = true; 171 + plugins = true; 172 + }; 173 + combinePlugins = { 174 + enable = true; 175 + }; 176 + }; 177 + 178 + keymaps = 179 + let 180 + prefixMap = 181 + pre: maps: 182 + builtins.map (k: { 183 + action = "<cmd>${k.action}<cr>"; 184 + key = "${pre}${k.key}"; 185 + options = k.options; 186 + }) maps; 187 + in 188 + lib.lists.flatten ( 189 + builtins.map (g: if builtins.hasAttr "group" g then prefixMap g.prefix g.keys else g) [ 190 + { 191 + action = ''"+p''; 192 + key = "<C-S-V>"; 193 + options.desc = "Paste from system clipboard"; 194 + } 195 + { 196 + action = ''"+y''; 197 + key = "<C-S-C>"; 198 + options.desc = "Copy to system clipboard"; 199 + } 200 + { 201 + action = ''"+x''; 202 + key = "<C-S-X>"; 203 + options.desc = "Cut to system clipboard"; 204 + } 205 + { 206 + action = ''<cmd>Format<cr>''; 207 + key = "<C-S-I>"; 208 + options.desc = "Format Buffer"; 209 + } 210 + { 211 + group = "Tab Navigation"; 212 + prefix = "<Tab>"; 213 + keys = [ 214 + { 215 + action = "BufferLineCycleNext"; 216 + key = "e"; 217 + options.desc = "Next Tab"; 218 + } 219 + { 220 + action = "BufferLineCyclePrev"; 221 + key = "q"; 222 + options.desc = "Previous Tab"; 223 + } 224 + { 225 + action = "BufferLinePick"; 226 + key = "<Tab>"; 227 + options.desc = "Pick Tab and Switch"; 228 + } 229 + { 230 + action = "Neotree toggle"; 231 + key = "t"; 232 + options.desc = "Toggle Neotree"; 233 + } 234 + ]; 235 + } 236 + { 237 + group = "Tab Closing"; 238 + prefix = "<S-Tab>"; 239 + keys = [ 240 + { 241 + action = "BufferLineCloseLeft"; 242 + key = "q"; 243 + options.desc = "Close Tab Left"; 244 + } 245 + { 246 + action = "BufferLineCloseRight"; 247 + key = "e"; 248 + options.desc = "Close Tab Right"; 249 + } 250 + { 251 + action = "BufferLinePickClose"; 252 + key = "<Tab>"; 253 + options.desc = "Pick Tab and Close"; 254 + } 255 + { 256 + action = "BufferLineCloseOthers"; 257 + key = "w"; 258 + options.desc = "Close Other Tabs"; 259 + } 260 + ]; 261 + } 262 + { 263 + action = "<cmd>Bdelete<cr>"; 264 + key = "<C-q>"; 265 + options.desc = "Close Current Buffer"; 266 + } 267 + { 268 + group = "LSP Actions"; 269 + prefix = "<C-.>"; 270 + keys = [ 271 + { 272 + action = "Lspsaga code_action code_action"; 273 + key = "a"; 274 + options.desc = "Code Actions"; 275 + } 276 + { 277 + action = "Lspsaga rename"; 278 + key = "r"; 279 + options.desc = "LSP Rename"; 280 + } 281 + { 282 + action = "Lspsaga diagnostic_jump_next"; 283 + key = "e"; 284 + options.desc = "Next Diagnostic"; 285 + } 286 + { 287 + action = "Lspsaga diagnostic_jump_previous"; 288 + key = "E"; 289 + options.desc = "Previous Diagnostic"; 290 + } 291 + { 292 + action = "Lspsaga goto_definition"; 293 + key = "d"; 294 + options.desc = "Jump to Definition"; 295 + } 296 + { 297 + action = "Lspsaga peek_definition"; 298 + key = "D"; 299 + options.desc = "Peek Definition"; 300 + } 301 + { 302 + action = "Lspsaga finder ref"; 303 + key = "fr"; 304 + options.desc = "Find References"; 305 + } 306 + { 307 + action = "Lspsaga finder imp"; 308 + key = "fi"; 309 + options.desc = "Find Implementations"; 310 + } 311 + { 312 + action = "Lspsaga finder def"; 313 + key = "fd"; 314 + options.desc = "Find Definitions"; 315 + } 316 + { 317 + action = "Lspsaga finder"; 318 + key = "ff"; 319 + options.desc = "Finder"; 320 + } 321 + { 322 + action = "Lspsaga hover_doc"; 323 + key = "h"; 324 + options.desc = "Hover Doc"; 325 + } 326 + ]; 327 + } 328 + { 329 + action = "<cmd>Telescope<cr>"; 330 + key = "<leader><leader>"; 331 + options.desc = "Telescope Launch"; 332 + } 333 + { 334 + action.__raw = "[[<C-\\><C-n><C-w>]]"; 335 + mode = [ "t" ]; 336 + key = "<C-w>"; 337 + } 338 + { 339 + action.__raw = "[[<C-\\><C-n>]]"; 340 + mode = [ "t" ]; 341 + key = "<esc>"; 342 + } 343 + { 344 + action = "<cmd>WhichKey<cr>"; 345 + key = "<C-/>"; 346 + } 347 + ] 348 + ); 349 + 350 + extraPlugins = with pkgs.vimPlugins; [ 351 + { plugin = pkgs.nvim-mdx; } 352 + { plugin = satellite-nvim; } 353 + { plugin = flatten-nvim; } 354 + { plugin = tiny-devicons-auto-colors-nvim; } 355 + ]; 356 + 357 + plugins = { 358 + telescope = { 359 + enable = true; 360 + settings.defaults = { 361 + layout_config.prompt_position = "top"; 362 + }; 363 + extensions = { 364 + file-browser.enable = true; 365 + ui-select.enable = true; 366 + undo.enable = true; 367 + }; 368 + keymaps = lib.fix (self: { 369 + "<leader>u" = { 370 + action = "undo"; 371 + options.desc = "Undo Tree"; 372 + }; 373 + "<leader>c" = { 374 + action = "commands"; 375 + options.desc = "Browse Commands"; 376 + }; 377 + "<leader>w" = { 378 + action = "spell_suggest"; 379 + options.desc = "Spell Suggest"; 380 + }; 381 + "<leader>s" = { 382 + action = "lsp_document_symbols"; 383 + options.desc = "LSP Symbols"; 384 + }; 385 + "<leader>t" = { 386 + action = "treesitter"; 387 + options.desc = "Treesitter Symbols"; 388 + }; 389 + "<leader>f" = { 390 + action = "find_files"; 391 + options.desc = "Files"; 392 + }; 393 + "<leader>gs" = { 394 + action = "git_status"; 395 + options.desc = "Git Status"; 396 + }; 397 + "<leader>gb" = { 398 + action = "git_branches"; 399 + options.desc = "Git Branches"; 400 + }; 401 + "<leader>gc" = { 402 + action = "git_commits"; 403 + options.desc = "Git Commits"; 404 + }; 405 + "<leader>r" = { 406 + action = "oldfiles"; 407 + options.desc = "Recent Files"; 408 + }; 409 + "<leader>l" = self."<C-S-F>"; 410 + "<C-S-F>" = { 411 + action = "live_grep"; 412 + options.desc = "Live Grep"; 413 + }; 414 + }); 415 + }; 416 + 417 + alpha = { 418 + enable = true; 419 + opts = { 420 + position = "center"; 421 + }; 422 + layout = 423 + let 424 + o = { 425 + position = "center"; 426 + }; 427 + txt = s: { 428 + type = "text"; 429 + val = s; 430 + opts = { 431 + hl = "Keyword"; 432 + } 433 + // o; 434 + }; 435 + grp = g: { 436 + type = "group"; 437 + val = g; 438 + opts.spacing = 1; 439 + }; 440 + btn = 441 + { 442 + val, 443 + onClick, 444 + ... 445 + }: 446 + { 447 + type = "button"; 448 + inherit val; 449 + opts = o; 450 + on_press.__raw = "function() vim.cmd[[${onClick}]] end"; 451 + }; 452 + cmd = 453 + { 454 + command, 455 + width, 456 + height, 457 + }: 458 + { 459 + type = "terminal"; 460 + inherit command width height; 461 + opts = o; 462 + }; 463 + pad = { 464 + type = "padding"; 465 + val = 2; 466 + }; 467 + in 468 + [ 469 + pad 470 + pad 471 + ] 472 + ++ (lib.intersperse pad [ 473 + (cmd { 474 + command = '' 475 + ${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border | ${pkgs.lolcat}/bin/lolcat -f 476 + ''; 477 + # Hardcoding to prevent IFD 478 + width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3; 479 + height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1; 480 + }) 481 + (grp [ 482 + (btn { 483 + val = " Terminal"; 484 + onClick = "ToggleTerm"; 485 + }) 486 + (btn { 487 + val = "󰅙 Quit"; 488 + onClick = "q"; 489 + }) 490 + ]) 491 + (grp [ 492 + (txt " Neovim Version ${pkgs.neovim.version}") 493 + (txt " NixVim Rev ${builtins.substring 0 5 inputs.nixvim.rev}") 494 + ]) 495 + ]) 496 + ++ [ pad ]; 497 + }; 498 + 499 + trouble = { 500 + enable = true; 501 + }; 502 + 503 + toggleterm = { 504 + enable = true; 505 + luaConfig.post = '' 506 + local flatten = require('flatten') 507 + 508 + ---@type Terminal? 509 + local saved_terminal 510 + 511 + flatten.setup({ 512 + hooks = { 513 + should_block = function(argv) 514 + return vim.tbl_contains(argv, "-b") 515 + end, 516 + pre_open = function() 517 + local term = require("toggleterm.terminal") 518 + local termid = term.get_focused_id() 519 + saved_terminal = term.get(termid) 520 + end, 521 + post_open = function(opts) 522 + if saved_terminal then 523 + saved_terminal:close() 524 + else 525 + vim.api.nvim_set_current_win(opts.winnr) 526 + end 527 + 528 + if opts.filetype == "gitcommit" or opts.filetype == "gitrebase" then 529 + vim.api.nvim_create_autocmd("BufWritePost", { 530 + buffer = opts.bufnr, 531 + once = true, 532 + callback = vim.schedule_wrap(function() 533 + require('bufdelete').bufdelete(opts.bufnr, true) 534 + end), 535 + }) 536 + end 537 + end, 538 + block_end = function() 539 + vim.schedule(function() 540 + if saved_terminal then 541 + saved_terminal:open() 542 + saved_terminal = nil 543 + end 544 + end) 545 + end, 546 + }, 547 + window = { 548 + open = "alternate", 549 + }, 550 + }) 551 + ''; 552 + settings = { 553 + size = 20; 554 + open_mapping = "[[<C-x>]]"; 555 + direction = "horizontal"; 556 + start_in_insert = true; 557 + insert_mappings = true; 558 + terminal_mappings = true; 559 + }; 560 + }; 561 + 562 + treesitter = { 563 + enable = true; 564 + luaConfig.post = '' 565 + require('mdx').setup() 566 + ''; 567 + settings = { 568 + highlight.enable = true; 569 + }; 570 + }; 571 + 572 + illuminate.enable = true; 573 + cursorline.enable = true; 574 + 575 + neocord = { 576 + enable = true; 577 + settings.logo = "https://raw.githubusercontent.com/IogaMaster/neovim/main/.github/assets/nixvim-dark.webp"; 578 + }; 579 + 580 + bufdelete.enable = true; 581 + 582 + bufferline = { 583 + enable = true; 584 + settings.highlights.__raw = '' 585 + require("catppuccin.special.bufferline").get_theme() 586 + ''; 587 + settings.options = { 588 + indicator.style = "none"; 589 + show_buffer_close_icons = false; 590 + show_close_icon = false; 591 + offsets = [ 592 + { 593 + filetype = "neo-tree"; 594 + highlight = "String"; 595 + text = " Neovim"; 596 + text_align = "center"; 597 + # separator = true; 598 + } 599 + ]; 600 + separator_style = "slant"; 601 + close_command.__raw = ''require('bufdelete').bufdelete''; 602 + hover = { 603 + enabled = true; 604 + delay = 150; 605 + reveal = [ "close" ]; 606 + }; 607 + sort_by = "insert_at_end"; 608 + diagnostics = "nvim_lsp"; 609 + diagnostics_indicator.__raw = '' 610 + function(count, level, diagnostics_dict, context) 611 + local icon = level:match("error") and " " or " " 612 + return " " .. icon .. count 613 + end 614 + ''; 615 + }; 616 + }; 617 + 618 + statuscol = { 619 + enable = true; 620 + settings.segments = 621 + let 622 + dispCond = { 623 + __raw = '' 624 + function(ln) 625 + return vim.bo.filetype ~= "neo-tree" 626 + end 627 + ''; 628 + }; 629 + in 630 + [ 631 + { 632 + click = "v:lua.ScSa"; 633 + condition = [ 634 + dispCond 635 + ]; 636 + text = [ 637 + "%s" 638 + ]; 639 + } 640 + { 641 + click = "v:lua.ScLa"; 642 + condition = [ dispCond ]; 643 + text = [ 644 + { 645 + __raw = "require('statuscol.builtin').lnumfunc"; 646 + } 647 + ]; 648 + } 649 + { 650 + click = "v:lua.ScFa"; 651 + condition = [ 652 + dispCond 653 + { 654 + __raw = "require('statuscol.builtin').not_empty"; 655 + } 656 + ]; 657 + text = [ 658 + { 659 + __raw = "require('statuscol.builtin').foldfunc"; 660 + } 661 + " " 662 + ]; 663 + } 664 + ]; 665 + }; 666 + 667 + dropbar = { 668 + enable = true; 669 + settings = { 670 + bar.padding.right = 5; 671 + bar.padding.left = 1; 672 + }; 673 + }; 674 + 675 + nvim-ufo = { 676 + enable = true; 677 + }; 678 + gitsigns.enable = true; 679 + 680 + lualine = { 681 + enable = true; 682 + settings = { 683 + extensions = [ 684 + "trouble" 685 + "toggleterm" 686 + ]; 687 + 688 + options = { 689 + theme = "catppuccin"; 690 + disabled_filetypes = [ "neo-tree" ]; 691 + ignore_focus = [ "neo-tree" ]; 692 + }; 693 + }; 694 + }; 695 + 696 + nix-develop = { 697 + enable = true; 698 + package = pkgs.vimPlugins.nix-develop-nvim.overrideAttrs ( 699 + prev: next: { 700 + src = pkgs.fetchFromGitHub { 701 + owner = "Bwc9876"; 702 + repo = "nix-develop.nvim"; 703 + rev = "089cd52191ccbb3726594e21cd96567af6088dd5"; 704 + sha256 = "sha256-EIEJk8/IAuG+UICUJ2F8QakgRpFrQ1ezDSJ79NAVuD8="; 705 + }; 706 + } 707 + ); 708 + }; 709 + 710 + neo-tree = { 711 + enable = true; 712 + settings = { 713 + hide_root_node = false; 714 + add_blank_line_at_top = true; 715 + default_component_configs = { 716 + container.right_padding = 2; 717 + name.trailing_slash = true; 718 + indent = { 719 + indent_size = 2; 720 + with_expanders = true; 721 + }; 722 + }; 723 + window.width = 40; 724 + auto_clean_after_session_restore = true; 725 + close_if_last_window = true; 726 + filesystem.components.name.__raw = '' 727 + function(config, node, state) 728 + local components = require('neo-tree.sources.common.components') 729 + local name = components.name(config, node, state) 730 + if node:get_depth() == 1 then 731 + name.text = vim.fs.basename(vim.loop.cwd() or "") .. "/" 732 + end 733 + return name 734 + end 735 + ''; 736 + }; 737 + }; 738 + 739 + image = { 740 + luaConfig = { 741 + pre = "if not vim.g.neovide then"; 742 + post = "end"; 743 + }; 744 + enable = true; 745 + }; 746 + web-devicons.enable = true; 747 + 748 + guess-indent.enable = true; 749 + intellitab.enable = true; 750 + 751 + which-key = { 752 + enable = true; 753 + settings = { 754 + show_help = true; 755 + preset = "modern"; 756 + win.wo.winblend = 8; 757 + }; 758 + }; 759 + 760 + fidget = { 761 + enable = true; 762 + settings.notification = { 763 + override_vim_notify = true; 764 + window = { 765 + y_padding = 2; 766 + x_padding = 2; 767 + zindex = 50; 768 + align = "top"; 769 + winblend = 0; 770 + }; 771 + }; 772 + }; 773 + 774 + # none-ls = { 775 + # enable = true; 776 + # sources.formatting = { 777 + # prettier = { 778 + # enable = true; 779 + # disableTsServerFormatter = true; 780 + # }; 781 + # yamlfmt.enable = true; 782 + # typstyle.enable = true; 783 + # markdownlint.enable = true; 784 + # }; 785 + # sources.diagnostics = { 786 + # markdownlint.enable = true; 787 + # }; 788 + # }; 789 + 790 + cmp = { 791 + enable = true; 792 + settings = { 793 + sources = map (name: { inherit name; }) [ 794 + "nvim_lsp" 795 + "nvim_lsp_signature_help" 796 + "path" 797 + "buffer" 798 + ]; 799 + mapping = { 800 + "<Esc>" = "cmp.mapping.abort()"; 801 + "<Tab>" = "cmp.mapping.confirm({ select = true })"; 802 + "<Up>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; 803 + "<Down>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; 804 + }; 805 + }; 806 + }; 807 + 808 + cmp-nvim-lsp.enable = true; 809 + cmp-nvim-lsp-document-symbol.enable = true; 810 + cmp-spell.enable = true; 811 + 812 + rainbow-delimiters.enable = true; 813 + preview.enable = true; 814 + 815 + # jupytext.enable = true; 816 + 817 + # Broken 818 + # hex = { 819 + # enable = true; 820 + # settings = { 821 + # assemble_cmd = "xxd -r"; 822 + # dump_cmd = "xxd -g 1 -u"; 823 + # }; 824 + # }; 825 + 826 + conform-nvim = { 827 + enable = true; 828 + settings.default_format_opts = { 829 + lsp_format = "prefer"; 830 + }; 831 + # Taken from https://github.com/stevearc/conform.nvim/blob/master/doc/recipes.md#format-command 832 + luaConfig.post = '' 833 + vim.api.nvim_create_user_command("Format", function(args) 834 + local range = nil 835 + if args.count ~= -1 then 836 + local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] 837 + range = { 838 + start = { args.line1, 0 }, 839 + ["end"] = { args.line2, end_line:len() }, 840 + } 841 + end 842 + require("conform").format({ async = true, lsp_format = "fallback", range = range }) 843 + end, { range = true }) 844 + ''; 845 + }; 846 + 847 + lspconfig.enable = true; 848 + 849 + lspsaga = { 850 + enable = true; 851 + settings = { 852 + symbol_in_winbar.enable = false; 853 + implement.enable = false; 854 + lightbulb.enable = false; 855 + ui = { 856 + code_action = "󰛨"; 857 + actionfix = "󰖷"; 858 + }; 859 + hover = { 860 + openCmd = "!xdg-open"; 861 + openLink = "<leader>o"; 862 + maxWidth = 0.5; 863 + maxHeight = 0.4; 864 + }; 865 + rename.autoSave = true; 866 + finder = { 867 + keys.close = "<ESC>"; 868 + }; 869 + codeAction.keys.quit = "<ESC>"; 870 + }; 871 + }; 872 + 873 + crates.enable = true; 874 + 875 + numbertoggle.enable = true; 876 + 877 + # rustaceanvim.enable = true; 878 + vim-css-color.enable = true; 879 + }; 880 + 881 + lsp = { 882 + inlayHints.enable = true; 883 + 884 + servers = { 885 + clangd.enable = true; 886 + astro.enable = true; 887 + hls = { 888 + enable = true; 889 + # ghcPackage = pkgs.haskell.compiler.ghc912; 890 + package = pkgs.haskell.packages.ghc912.haskell-language-server; 891 + }; 892 + sqls.enable = true; 893 + mdx_analyzer = { 894 + enable = true; 895 + package = pkgs.mdx-language-server; 896 + }; 897 + # denols.enable = true; 898 + ts_ls.enable = true; 899 + html.enable = true; 900 + marksman.enable = true; 901 + cssls.enable = true; 902 + tailwindcss.enable = true; # Disabled until it doesn't build nodejs from source, bad tailwind 903 + jsonls.enable = true; 904 + yamlls.enable = true; 905 + ruff.enable = true; 906 + csharp_ls.enable = true; 907 + svelte.enable = true; 908 + nil_ls.enable = true; 909 + bashls.enable = true; 910 + nushell.enable = true; 911 + taplo.enable = true; 912 + typos_lsp.enable = true; 913 + rust_analyzer = { 914 + enable = true; 915 + package = pkgs.rust-analyzer-nightly; 916 + packageFallback = true; 917 + }; 918 + lemminx.enable = true; 919 + eslint.enable = true; 920 + tinymist.enable = true; 921 + just.enable = true; 922 + }; 923 + }; 924 + }; 925 + }; 926 + }
+14
homeModules/pfp.nix
··· 1 + { config, lib, ... }: 2 + { 3 + options.cow.pfp = { 4 + enable = lib.mkEnableOption "Enable setting profile picture"; 5 + file = lib.mkOption { 6 + type = lib.types.string; 7 + description = "Path to Profile Picture File (PNG, 1:1 Aspect)"; 8 + }; 9 + }; 10 + 11 + config = lib.mkIf config.cow.pfp.enable { 12 + home.file.".face".source = config.cow.pfp.file; 13 + }; 14 + }
+133
homeModules/starship.nix
··· 1 + { 2 + config, 3 + lib, 4 + ... 5 + }: 6 + { 7 + options.cow.starship.enable = lib.mkEnableOption "Starship + Customizations"; 8 + 9 + config = lib.mkIf config.cow.starship.enable { 10 + programs.starship = { 11 + enable = true; 12 + settings = { 13 + add_newline = false; 14 + character = { 15 + disabled = false; 16 + error_symbol = "[󰀨](bold red bg:crust)"; 17 + format = "[ $symbol ](bg:crust)"; 18 + success_symbol = "[󰗠](bold green bg:crust)"; 19 + }; 20 + cmd_duration = { 21 + disabled = false; 22 + format = "[ 󱎫 $duration ]($style)"; 23 + min_time = 2000; 24 + style = "bg:crust blue"; 25 + }; 26 + directory = { 27 + format = "[ ($read_only )$path ]($style)"; 28 + home_symbol = "󰋜"; 29 + read_only = "󰌾"; 30 + style = "bold green bg:crust"; 31 + truncate_to_repo = true; 32 + truncation_length = 10; 33 + }; 34 + format = "[░▒▓](crust)[ $os$hostname[](bg:crust #999999)$shell$username[](bg:crust #999999)$directory([](bg:crust #999999)$git_branch$git_commit$git_state)([](bg:crust #999999)$nodejs$python$rust$nix_shell)](bg:crust)[ ](crust)"; 35 + git_branch = { 36 + format = "[ $symbol ($branch )]($style)"; 37 + style = "bg:crust green"; 38 + symbol = "󰘬"; 39 + }; 40 + git_state = { 41 + format = "\\([$state( $progress_current/$progress_total)]($style)\\)"; 42 + merge = "󰘭"; 43 + rebase = "󱗬"; 44 + revert = "󰕍"; 45 + style = "bg:crust green yellow"; 46 + }; 47 + git_status = { 48 + conflicted = "󰀦"; 49 + format = "[$all_status $ahead_behind ]($style)"; 50 + modified = "󰏫"; 51 + style = "bg:crust green"; 52 + }; 53 + hostname = { 54 + format = "[$hostname( $ssh_symbol) ]($style)"; 55 + ssh_only = false; 56 + ssh_symbol = ""; 57 + style = "bold blue bg:crust"; 58 + }; 59 + line_break = { 60 + disabled = true; 61 + }; 62 + nix_shell = { 63 + format = "[ $state ](bold blue bg:crust) "; 64 + impure_msg = "[󱄅 impure](bold red bg:crust)"; 65 + pure_msg = "[󱄅](bold green bg:crust)"; 66 + style = "bg:crust green"; 67 + unknown_msg = "[󱄅 unknown](bold yellow bg:crust)"; 68 + }; 69 + nodejs = { 70 + format = "[ $symbol ($version) ]($style)"; 71 + not_capable_style = "bg:crust green bold red"; 72 + style = "bg:crust green"; 73 + symbol = "󰎙"; 74 + }; 75 + os = { 76 + disabled = false; 77 + format = "[$symbol ]($style)"; 78 + style = "bg:crust bold lightcrust"; 79 + symbols = { 80 + Android = ""; 81 + Debian = ""; 82 + Linux = ""; 83 + Macos = ""; 84 + Manjaro = ""; 85 + NixOS = "󱄅"; 86 + Raspbian = ""; 87 + Ubuntu = ""; 88 + Windows = ""; 89 + }; 90 + }; 91 + python = { 92 + format = "[ $symbol ($version) ]($style)"; 93 + style = "bg:crust green"; 94 + symbol = "󰌠"; 95 + }; 96 + right_format = "[ ](crust)\n($character$status[](bg:crust #999999))\n($cmd_duration[](bg:crust #999999))$time[▓▒░](crust)\n"; 97 + rust = { 98 + format = "[ $symbol ($version) ]($style)"; 99 + style = "bg:crust green"; 100 + symbol = "󱘗"; 101 + }; 102 + shell = { 103 + bash_indicator = "󱆃"; 104 + disabled = false; 105 + fish_indicator = "󰈺"; 106 + format = "[ $indicator ]($style)"; 107 + nu_indicator = "󰨊"; 108 + powershell_indicator = "󰨊"; 109 + style = "bg:crust blue"; 110 + unknown_indicator = "󰋗"; 111 + }; 112 + status = { 113 + disabled = false; 114 + format = "[$status ]($style)"; 115 + style = "bg:crust red"; 116 + }; 117 + time = { 118 + disabled = false; 119 + format = "[ $time ]($style)"; 120 + style = "bg:crust bold blue"; 121 + time_format = "%a %b %d %I:%M %p 󰥔"; 122 + use_12hr = true; 123 + }; 124 + username = { 125 + format = "[$user ]($style)"; 126 + show_always = true; 127 + style_root = "bold red bg:crust"; 128 + style_user = "blue bg:crust"; 129 + }; 130 + }; 131 + }; 132 + }; 133 + }
+144
homeModules/yazi.nix
··· 1 + { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: 7 + { 8 + options.cow.yazi.enable = lib.mkEnableOption "Yazi + Customizations"; 9 + 10 + config = lib.mkIf config.cow.yazi.enable { 11 + home.packages = with pkgs; [ 12 + mediainfo 13 + exiftool 14 + ]; 15 + 16 + programs.yazi = { 17 + enable = true; 18 + enableBashIntegration = true; 19 + enableNushellIntegration = true; 20 + 21 + settings = { 22 + open.prepend_rules = [ 23 + { 24 + mime = "video/*"; 25 + use = "open"; 26 + } 27 + { 28 + mime = "audio/*"; 29 + use = "open"; 30 + } 31 + ]; 32 + }; 33 + 34 + keymap.mgr.prepend_keymap = [ 35 + { 36 + run = "plugin mount"; 37 + on = [ "M" ]; 38 + desc = "Disk Mounting"; 39 + } 40 + { 41 + run = "plugin chmod"; 42 + on = [ 43 + "c" 44 + "m" 45 + ]; 46 + desc = "Run Chmod On Selected"; 47 + } 48 + ]; 49 + 50 + plugins = { 51 + inherit (pkgs.yaziPlugins) 52 + ouch 53 + mount 54 + chmod 55 + bypass 56 + mediainfo 57 + wl-clipboard 58 + yatline 59 + yatline-catppuccin 60 + ; 61 + }; 62 + 63 + initLua = '' 64 + local catppuccin_theme = require("yatline-catppuccin"):setup("mocha") 65 + 66 + require("yatline"):setup({ 67 + theme = catppuccin_theme, 68 + section_separator = { open = "", close = "" }, 69 + part_separator = { open = "", close = "" }, 70 + inverse_separator = { open = "", close = "" }, 71 + 72 + tab_width = 20, 73 + tab_use_inverse = false, 74 + 75 + selected = { icon = "󰻭", fg = "yellow" }, 76 + copied = { icon = "", fg = "green" }, 77 + cut = { icon = "", fg = "red" }, 78 + 79 + total = { icon = "󰮍", fg = "yellow" }, 80 + succ = { icon = "", fg = "green" }, 81 + fail = { icon = "", fg = "red" }, 82 + found = { icon = "󰮕", fg = "blue" }, 83 + processed = { icon = "󰐍", fg = "green" }, 84 + 85 + show_background = true, 86 + 87 + display_header_line = true, 88 + display_status_line = true, 89 + 90 + component_positions = { "header", "tab", "status" }, 91 + 92 + header_line = { 93 + left = { 94 + section_a = { 95 + {type = "line", custom = false, name = "tabs", params = {"left"}}, 96 + }, 97 + section_b = { 98 + }, 99 + section_c = { 100 + } 101 + }, 102 + right = { 103 + section_a = { 104 + {type = "string", custom = false, name = "date", params = {"%A, %d %B %Y"}}, 105 + }, 106 + section_b = { 107 + {type = "string", custom = false, name = "date", params = {"%X"}}, 108 + }, 109 + section_c = { 110 + } 111 + } 112 + }, 113 + 114 + status_line = { 115 + left = { 116 + section_a = { 117 + {type = "string", custom = false, name = "tab_mode"}, 118 + }, 119 + section_b = { 120 + {type = "string", custom = false, name = "hovered_size"}, 121 + }, 122 + section_c = { 123 + {type = "string", custom = false, name = "hovered_path"}, 124 + {type = "coloreds", custom = false, name = "count"}, 125 + } 126 + }, 127 + right = { 128 + section_a = { 129 + {type = "string", custom = false, name = "cursor_position"}, 130 + }, 131 + section_b = { 132 + {type = "string", custom = false, name = "cursor_percentage"}, 133 + }, 134 + section_c = { 135 + {type = "string", custom = false, name = "hovered_file_extension", params = {true}}, 136 + {type = "coloreds", custom = false, name = "permissions"}, 137 + } 138 + } 139 + }, 140 + }) 141 + ''; 142 + }; 143 + }; 144 + }
-13
lib.nix
··· 1 - { 2 - outputs, 3 - lib, 4 - ... 5 - }: let 6 - roleEnabled = selected: role: builtins.all (r: builtins.elem r selected) (lib.splitString "+" role); 7 - in { 8 - applyRoles = roleList: let 9 - filteredRoles = lib.filterAttrs (n: _v: roleEnabled roleList n) outputs.nixosModules; 10 - in { 11 - imports = builtins.attrValues filteredRoles; 12 - }; 13 - }
nixosModules/base/base.nix oldNixosModules/base/base.nix
nixosModules/base/boot.nix oldNixosModules/base/boot.nix
-1
nixosModules/base/nix.nix oldNixosModules/base/nix.nix
··· 7 7 environment.systemPackages = with pkgs; [ 8 8 nh 9 9 nix-output-monitor 10 - comma-with-db 11 10 ]; 12 11 13 12 nix = {
-84
nixosModules/base/nushell.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: let 7 - init-starship = pkgs.runCommand "starship-init" {} '' 8 - ${pkgs.starship}/bin/starship init nu > $out 9 - ''; 10 - shellAliases = { 11 - cd = "z"; 12 - sw = "zi"; 13 - py = "python"; 14 - cat = "bat"; 15 - pcat = "prettybat"; 16 - pbat = "prettybat"; 17 - dog = "doggo"; 18 - man = "__batman"; 19 - bgrep = "batgrep"; 20 - "🥺" = "sudo"; 21 - }; 22 - configFile.text = '' 23 - let fish_completer = {|spans| 24 - ${pkgs.fish}/bin/fish --command $'complete "--do-complete=($spans | str join " ")"' 25 - | $"value(char tab)description(char newline)" + $in 26 - | from tsv --flexible --no-infer 27 - } 28 - let zoxide_completer = {|spans| 29 - let query = $spans | skip 1 30 - let z_results = $query | zoxide query -l ...$in | lines | where {|x| $x != $env.PWD} 31 - let l_results = fish_completer $spans 32 - $l_results | append $z_results 33 - } 34 - let multiple_completers = {|spans| 35 - # if the current command is an alias, get it's expansion 36 - let expanded_alias = (scope aliases | where name == $spans.0 | get -o 0 | get -o expansion) 37 - 38 - # overwrite 39 - 40 - let spans = (if $expanded_alias != null { 41 - # put the first word of the expanded alias first in the span 42 - $spans | skip 1 | prepend ($expanded_alias | split row " ") 43 - } else { $spans }) 44 - 45 - match $spans.0 { 46 - z => $zoxide_completer 47 - zi => $zoxide_completer 48 - __zoxide_z => $zoxide_completer 49 - __zoxide_zi => $zoxide_completer 50 - _ => $fish_completer 51 - } | do $in $spans 52 - } 53 - 54 - let command_not_found = ${lib.fileContents ../../res/command_not_found.nu} 55 - 56 - def --env __batman [...rest:string] { 57 - BAT_THEME="Monokai Extended" batman ...$rest 58 - } 59 - 60 - $env.config = { 61 - show_banner: false 62 - completions: { 63 - external: { 64 - enable: true 65 - completer: $multiple_completers 66 - } 67 - } 68 - hooks: { 69 - command_not_found: $command_not_found 70 - } 71 - } 72 - 73 - source ${init-starship} 74 - ''; 75 - in { 76 - home-manager.users.bean.programs.nushell = { 77 - enable = true; 78 - inherit configFile shellAliases; 79 - }; 80 - home-manager.users.root.programs.nushell = { 81 - enable = true; 82 - inherit configFile shellAliases; 83 - }; 84 - }
-1
nixosModules/base/personal.nix oldNixosModules/base/personal.nix
··· 24 24 }; 25 25 26 26 home-manager.users.bean = { 27 - imports = [inputs.nix-index-db.homeModules.nix-index]; 28 27 home = { 29 28 username = "bean"; 30 29 homeDirectory = "/home/bean";
+1 -2
nixosModules/base/shell.nix oldNixosModules/base/shell.nix
··· 53 53 ripgrep.enable = true; 54 54 bat = { 55 55 enable = true; 56 - extraPackages = with pkgs.bat-extras; [batman batgrep batwatch]; 56 + extraPackages = with pkgs.bat-extras; [batman]; 57 57 }; 58 58 }; 59 59 ··· 62 62 ripgrep.enable = true; 63 63 command-not-found.enable = false; 64 64 bat.enable = true; 65 - nix-index.enable = true; 66 65 }; 67 66 }
-134
nixosModules/base/starship.nix
··· 1 - {...}: let 2 - settings = { 3 - add_newline = false; 4 - character = { 5 - disabled = false; 6 - error_symbol = "[󰀨](bold red bg:crust)"; 7 - format = "[ $symbol ](bg:crust)"; 8 - success_symbol = "[󰗠](bold green bg:crust)"; 9 - }; 10 - cmd_duration = { 11 - disabled = false; 12 - format = "[ 󱎫 $duration ]($style)"; 13 - min_time = 2000; 14 - style = "bg:crust blue"; 15 - }; 16 - directory = { 17 - format = "[ ($read_only )$path ]($style)"; 18 - home_symbol = "󰋜"; 19 - read_only = "󰌾"; 20 - style = "bold green bg:crust"; 21 - truncate_to_repo = true; 22 - truncation_length = 10; 23 - }; 24 - format = "[░▒▓](crust)[ $os$hostname[](bg:crust #999999)$shell$username[](bg:crust #999999)$directory([](bg:crust #999999)$git_branch$git_commit$git_state)([](bg:crust #999999)$nodejs$python$rust$nix_shell)](bg:crust)[ ](crust)"; 25 - git_branch = { 26 - format = "[ $symbol ($branch )]($style)"; 27 - style = "bg:crust green"; 28 - symbol = "󰘬"; 29 - }; 30 - git_state = { 31 - format = "\\([$state( $progress_current/$progress_total)]($style)\\)"; 32 - merge = "󰘭"; 33 - rebase = "󱗬"; 34 - revert = "󰕍"; 35 - style = "bg:crust green yellow"; 36 - }; 37 - git_status = { 38 - conflicted = "󰀦"; 39 - format = "[$all_status $ahead_behind ]($style)"; 40 - modified = "󰏫"; 41 - style = "bg:crust green"; 42 - }; 43 - hostname = { 44 - format = "[$hostname( $ssh_symbol) ]($style)"; 45 - ssh_only = false; 46 - ssh_symbol = ""; 47 - style = "bold blue bg:crust"; 48 - }; 49 - line_break = {disabled = true;}; 50 - nix_shell = { 51 - format = "[ $state ](bold blue bg:crust) "; 52 - impure_msg = "[󱄅 impure](bold red bg:crust)"; 53 - pure_msg = "[󱄅](bold green bg:crust)"; 54 - style = "bg:crust green"; 55 - unknown_msg = "[󱄅 unknown](bold yellow bg:crust)"; 56 - }; 57 - nodejs = { 58 - format = "[ $symbol ($version) ]($style)"; 59 - not_capable_style = "bg:crust green bold red"; 60 - style = "bg:crust green"; 61 - symbol = "󰎙"; 62 - }; 63 - os = { 64 - disabled = false; 65 - format = "[$symbol ]($style)"; 66 - style = "bg:crust bold lightcrust"; 67 - symbols = { 68 - Android = ""; 69 - Debian = ""; 70 - Linux = ""; 71 - Macos = ""; 72 - Manjaro = ""; 73 - NixOS = "󱄅"; 74 - Raspbian = ""; 75 - Ubuntu = ""; 76 - Windows = ""; 77 - }; 78 - }; 79 - python = { 80 - format = "[ $symbol ($version) ]($style)"; 81 - style = "bg:crust green"; 82 - symbol = "󰌠"; 83 - }; 84 - right_format = "[ ](crust)\n($character$status[](bg:crust #999999))\n($cmd_duration[](bg:crust #999999))$time[▓▒░](crust)\n"; 85 - rust = { 86 - format = "[ $symbol ($version) ]($style)"; 87 - style = "bg:crust green"; 88 - symbol = "󱘗"; 89 - }; 90 - shell = { 91 - bash_indicator = "󱆃"; 92 - disabled = false; 93 - fish_indicator = "󰈺"; 94 - format = "[ $indicator ]($style)"; 95 - nu_indicator = "󰨊"; 96 - powershell_indicator = "󰨊"; 97 - style = "bg:crust blue"; 98 - unknown_indicator = "󰋗"; 99 - }; 100 - status = { 101 - disabled = false; 102 - format = "[$status ]($style)"; 103 - style = "bg:crust red"; 104 - }; 105 - time = { 106 - disabled = false; 107 - format = "[ $time ]($style)"; 108 - style = "bg:crust bold blue"; 109 - time_format = "%a %b %d %I:%M %p 󰥔"; 110 - use_12hr = true; 111 - }; 112 - username = { 113 - format = "[$user ]($style)"; 114 - show_always = true; 115 - style_root = "bold red bg:crust"; 116 - style_user = "blue bg:crust"; 117 - }; 118 - }; 119 - in { 120 - programs.starship = { 121 - enable = true; 122 - inherit settings; 123 - }; 124 - 125 - home-manager.users.bean.programs.starship = { 126 - enable = true; 127 - inherit settings; 128 - }; 129 - 130 - home-manager.users.root.programs.starship = { 131 - enable = true; 132 - inherit settings; 133 - }; 134 - }
nixosModules/base/theming.nix oldNixosModules/base/theming.nix
-136
nixosModules/base/yazi.nix
··· 1 - {pkgs, ...}: { 2 - environment.systemPackages = with pkgs; [ 3 - yazi 4 - mediainfo 5 - exiftool 6 - ]; 7 - 8 - home-manager.users.bean.programs.yazi = { 9 - enable = true; 10 - enableBashIntegration = true; 11 - enableNushellIntegration = true; 12 - 13 - settings = { 14 - open.prepend_rules = [ 15 - { 16 - mime = "video/*"; 17 - use = "open"; 18 - } 19 - { 20 - mime = "audio/*"; 21 - use = "open"; 22 - } 23 - ]; 24 - }; 25 - 26 - keymap.mgr.prepend_keymap = [ 27 - { 28 - run = "plugin mount"; 29 - on = ["M"]; 30 - desc = "Disk Mounting"; 31 - } 32 - { 33 - run = "plugin chmod"; 34 - on = [ 35 - "c" 36 - "m" 37 - ]; 38 - desc = "Run Chmod On Selected"; 39 - } 40 - ]; 41 - 42 - plugins = { 43 - inherit 44 - (pkgs.yaziPlugins) 45 - ouch 46 - mount 47 - chmod 48 - bypass 49 - mediainfo 50 - wl-clipboard 51 - yatline 52 - yatline-catppuccin 53 - ; 54 - }; 55 - 56 - initLua = '' 57 - local catppuccin_theme = require("yatline-catppuccin"):setup("mocha") 58 - 59 - require("yatline"):setup({ 60 - theme = catppuccin_theme, 61 - section_separator = { open = "", close = "" }, 62 - part_separator = { open = "", close = "" }, 63 - inverse_separator = { open = "", close = "" }, 64 - 65 - tab_width = 20, 66 - tab_use_inverse = false, 67 - 68 - selected = { icon = "󰻭", fg = "yellow" }, 69 - copied = { icon = "", fg = "green" }, 70 - cut = { icon = "", fg = "red" }, 71 - 72 - total = { icon = "󰮍", fg = "yellow" }, 73 - succ = { icon = "", fg = "green" }, 74 - fail = { icon = "", fg = "red" }, 75 - found = { icon = "󰮕", fg = "blue" }, 76 - processed = { icon = "󰐍", fg = "green" }, 77 - 78 - show_background = true, 79 - 80 - display_header_line = true, 81 - display_status_line = true, 82 - 83 - component_positions = { "header", "tab", "status" }, 84 - 85 - header_line = { 86 - left = { 87 - section_a = { 88 - {type = "line", custom = false, name = "tabs", params = {"left"}}, 89 - }, 90 - section_b = { 91 - }, 92 - section_c = { 93 - } 94 - }, 95 - right = { 96 - section_a = { 97 - {type = "string", custom = false, name = "date", params = {"%A, %d %B %Y"}}, 98 - }, 99 - section_b = { 100 - {type = "string", custom = false, name = "date", params = {"%X"}}, 101 - }, 102 - section_c = { 103 - } 104 - } 105 - }, 106 - 107 - status_line = { 108 - left = { 109 - section_a = { 110 - {type = "string", custom = false, name = "tab_mode"}, 111 - }, 112 - section_b = { 113 - {type = "string", custom = false, name = "hovered_size"}, 114 - }, 115 - section_c = { 116 - {type = "string", custom = false, name = "hovered_path"}, 117 - {type = "coloreds", custom = false, name = "count"}, 118 - } 119 - }, 120 - right = { 121 - section_a = { 122 - {type = "string", custom = false, name = "cursor_position"}, 123 - }, 124 - section_b = { 125 - {type = "string", custom = false, name = "cursor_percentage"}, 126 - }, 127 - section_c = { 128 - {type = "string", custom = false, name = "hovered_file_extension", params = {true}}, 129 - {type = "coloreds", custom = false, name = "permissions"}, 130 - } 131 - } 132 - }, 133 - }) 134 - ''; 135 - }; 136 - }
-11
nixosModules/black-mesa-cache.nix
··· 1 - {...}: { 2 - nix.settings = { 3 - substituters = [ 4 - "http://black-mesa:5000" 5 - "https://cache.nixos.org" 6 - ]; 7 - trusted-public-keys = [ 8 - "black-mesa:tAX++uOKyqP70gnwx5zHBMiZ0kee8WberjlPZmDuyxw=" 9 - ]; 10 - }; 11 - }
nixosModules/default.nix oldNixosModules/default.nix
nixosModules/dev+graphics/code.nix oldNixosModules/dev+graphics/code.nix
nixosModules/dev+graphics/misc.nix oldNixosModules/dev+graphics/misc.nix
nixosModules/dev+graphics/nvim.nix oldNixosModules/dev+graphics/nvim.nix
-7
nixosModules/dev/android.nix
··· 1 - {pkgs, ...}: { 2 - users.users.bean.extraGroups = ["kvm" "adbusers"]; 3 - programs.adb.enable = true; 4 - services.udev.packages = [ 5 - pkgs.android-udev-rules 6 - ]; 7 - }
nixosModules/dev/dotnet.nix oldNixosModules/dev/dotnet.nix
nixosModules/dev/git.nix oldNixosModules/dev/git.nix
nixosModules/dev/haskell.nix oldNixosModules/dev/haskell.nix
nixosModules/dev/js.nix oldNixosModules/dev/js.nix
nixosModules/dev/misc.nix oldNixosModules/dev/misc.nix
nixosModules/dev/nix.nix oldNixosModules/dev/nix.nix
nixosModules/dev/nvim.nix oldNixosModules/dev/nvim.nix
nixosModules/dev/python.nix oldNixosModules/dev/python.nix
nixosModules/dev/rust.nix oldNixosModules/dev/rust.nix
nixosModules/flatpak.nix oldNixosModules/flatpak.nix
nixosModules/fun+graphics.nix oldNixosModules/fun+graphics.nix
nixosModules/fun.nix oldNixosModules/fun.nix
nixosModules/games+graphics.nix oldNixosModules/games+graphics.nix
nixosModules/graphics/apps.nix oldNixosModules/graphics/apps.nix
nixosModules/graphics/audio.nix oldNixosModules/graphics/audio.nix
nixosModules/graphics/firefox.nix oldNixosModules/graphics/firefox.nix
nixosModules/graphics/fonts.nix oldNixosModules/graphics/fonts.nix
nixosModules/graphics/greeter.nix oldNixosModules/graphics/greeter.nix
nixosModules/graphics/hypr.nix oldNixosModules/graphics/hypr.nix
nixosModules/graphics/lock.nix oldNixosModules/graphics/lock.nix
+5
nixosModules/graphics/news.nix oldNixosModules/graphics/news.nix
··· 306 306 tags = ["personal-blog"]; 307 307 } 308 308 { 309 + title = "Ben Romer"; 310 + url = "https://www.cyborgcentral.net/feed"; 311 + tags = ["personal-blog"]; 312 + } 313 + { 309 314 title = "HiDeoo"; 310 315 url = "https://hideoo.dev/notes/rss.xml"; 311 316 tags = ["personal-blog"];
nixosModules/graphics/printing.nix oldNixosModules/graphics/printing.nix
nixosModules/graphics/qmplay2.nix oldNixosModules/graphics/qmplay2.nix
nixosModules/graphics/shell.nix oldNixosModules/graphics/shell.nix
nixosModules/graphics/swaync.nix oldNixosModules/graphics/swaync.nix
nixosModules/graphics/theming.nix oldNixosModules/graphics/theming.nix
nixosModules/graphics/waybar.nix oldNixosModules/graphics/waybar.nix
nixosModules/graphics/wezterm.nix oldNixosModules/graphics/wezterm.nix
nixosModules/graphics/xdg.nix oldNixosModules/graphics/xdg.nix
nixosModules/hypervisor+graphics.nix oldNixosModules/hypervisor+graphics.nix
nixosModules/hypervisor.nix oldNixosModules/hypervisor.nix
nixosModules/imperm+secureboot.nix oldNixosModules/imperm+secureboot.nix
-1
nixosModules/imperm.nix oldNixosModules/imperm.nix
··· 64 64 "Trash" 65 65 ]) 66 66 ++ (preConf [ 67 - "gh" 68 67 "kdeconnect" 69 68 "keepassxc" 70 69 "syncthing"
nixosModules/latest-linux.nix oldNixosModules/latest-linux.nix
nixosModules/mc-server.nix oldNixosModules/mc-server.nix
+8 -1
nixosModules/music.nix oldNixosModules/music.nix
··· 159 159 password: None, 160 160 theme: Some("catppuccin"), 161 161 cache_dir: None, 162 + lyrics_dir: "${config.home-manager.users.bean.services.mpd.musicDirectory}", 162 163 on_song_change: None, 163 164 volume_step: 5, 164 165 max_fps: 30, ··· 302 303 (size: "50%", borders: "TOP", pane: Pane(Cava)), 303 304 ], 304 305 )), 305 - (size: "40%", borders: "LEFT", pane: Pane(AlbumArt)), 306 + (size: "40%", borders: "LEFT", pane: Split( 307 + direction: Vertical, 308 + panes: [ 309 + (size: "70%", pane: Pane(AlbumArt)), 310 + (size: "30%", borders: "TOP", pane: Pane(Lyrics)), 311 + ], 312 + )), 306 313 ], 307 314 ), 308 315 ),
nixosModules/networking.nix oldNixosModules/networking.nix
nixosModules/normalboot.nix oldNixosModules/normalboot.nix
nixosModules/podman.nix oldNixosModules/podman.nix
nixosModules/secureboot.nix oldNixosModules/secureboot.nix
nixosModules/ssh.nix oldNixosModules/ssh.nix
nixosModules/sync.nix oldNixosModules/sync.nix
nixosModules/vm.nix oldNixosModules/vm.nix
+4
oldNixosModules/dev/android.nix
··· 1 + {...}: { 2 + users.users.bean.extraGroups = ["kvm" "adbusers"]; 3 + programs.adb.enable = true; 4 + }
+5
res/nushellCompletions/carapace.nu
··· 1 + {|spans: list<string>| 2 + __carapace__ $spans.0 nushell ...$spans 3 + | from json 4 + | if ($in | default [] | where value =~ '^-.*ERR$' | is-empty) { $in } else { null } 5 + }
+13
res/nushellCompletions/fish.nu
··· 1 + {|spans| 2 + __fish__ --command $"complete '--do-complete=($spans | str replace --all "'" "\\'" | str join ' ')'" 3 + | from tsv --flexible --noheaders --no-infer 4 + | rename value description 5 + | update value {|row| 6 + let value = $row.value 7 + let need_quote = ['\' ',' '[' ']' '(' ')' ' ' '\t' "'" '"' "`"] | any {$in in $value} 8 + if ($need_quote and ($value | path exists)) { 9 + let expanded_path = if ($value starts-with ~) {$value | path expand --no-symlink} else {$value} 10 + $'"($expanded_path | str replace --all "\"" "\\\"")"' 11 + } else {$value} 12 + } 13 + }
systemConfigs/aperture.nix oldSystemConfigs/aperture.nix
systemConfigs/black-mesa.nix oldSystemConfigs/black-mesa.nix
systemConfigs/installer.nix oldSystemConfigs/installer.nix
systemConfigs/mann-co.nix oldSystemConfigs/mann-co.nix
systemConfigs/test.nix oldSystemConfigs/test.nix