Nix configurations for my personal machines (Linux & macOS)

refactor: move to using Denix as a module system

ovyerus.com 355cf57a 9950bd4c

verified
+1516 -1401
+137 -29
flake.lock
··· 1 1 { 2 2 "nodes": { 3 + "denix": { 4 + "inputs": { 5 + "home-manager": [ 6 + "home-manager" 7 + ], 8 + "nix-darwin": "nix-darwin", 9 + "nixpkgs": [ 10 + "nixpkgs" 11 + ], 12 + "pre-commit-hooks": "pre-commit-hooks" 13 + }, 14 + "locked": { 15 + "lastModified": 1749374482, 16 + "narHash": "sha256-IAyAgmxZ+8YUPkyxn6gvCUZiV93dX6oLmcOOCSU9We4=", 17 + "owner": "yunfachi", 18 + "repo": "denix", 19 + "rev": "5a27d210ee6ff79375731a515810a02c6bb8b0d4", 20 + "type": "github" 21 + }, 22 + "original": { 23 + "owner": "yunfachi", 24 + "repo": "denix", 25 + "type": "github" 26 + } 27 + }, 28 + "flake-compat": { 29 + "flake": false, 30 + "locked": { 31 + "lastModified": 1696426674, 32 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 33 + "owner": "edolstra", 34 + "repo": "flake-compat", 35 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 36 + "type": "github" 37 + }, 38 + "original": { 39 + "owner": "edolstra", 40 + "repo": "flake-compat", 41 + "type": "github" 42 + } 43 + }, 3 44 "flake-utils": { 4 45 "inputs": { 5 46 "systems": "systems" ··· 69 110 "type": "github" 70 111 } 71 112 }, 113 + "gitignore": { 114 + "inputs": { 115 + "nixpkgs": [ 116 + "denix", 117 + "pre-commit-hooks", 118 + "nixpkgs" 119 + ] 120 + }, 121 + "locked": { 122 + "lastModified": 1709087332, 123 + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", 124 + "owner": "hercules-ci", 125 + "repo": "gitignore.nix", 126 + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", 127 + "type": "github" 128 + }, 129 + "original": { 130 + "owner": "hercules-ci", 131 + "repo": "gitignore.nix", 132 + "type": "github" 133 + } 134 + }, 72 135 "home-manager": { 73 136 "inputs": { 74 137 "nixpkgs": [ ··· 76 139 ] 77 140 }, 78 141 "locked": { 79 - "lastModified": 1747439237, 80 - "narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=", 142 + "lastModified": 1749526396, 143 + "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", 81 144 "owner": "nix-community", 82 145 "repo": "home-manager", 83 - "rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708", 146 + "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", 84 147 "type": "github" 85 148 }, 86 149 "original": { ··· 157 220 "xwayland-satellite-unstable": "xwayland-satellite-unstable" 158 221 }, 159 222 "locked": { 160 - "lastModified": 1747435695, 161 - "narHash": "sha256-CTr69qXW9/gph8Brvs0TY1fXIJeqmJCt99yC7Mrh1u0=", 223 + "lastModified": 1749533158, 224 + "narHash": "sha256-wIw3Q/Ls1nsLjBN4VsAiTMHZiyf5RGRVy2MWfyYPgMI=", 162 225 "owner": "sodiboo", 163 226 "repo": "niri-flake", 164 - "rev": "e572b437025128d71ab262d7b0508136e385d352", 227 + "rev": "e5c4564ec3704f5e358f50d883b5200c4e8dfd7e", 165 228 "type": "github" 166 229 }, 167 230 "original": { ··· 190 253 "niri-unstable": { 191 254 "flake": false, 192 255 "locked": { 193 - "lastModified": 1747425277, 194 - "narHash": "sha256-3Guwq7v52mJ+koHUrMbzr8CA9ZD9Yf6/zudyk3NpUec=", 256 + "lastModified": 1749474820, 257 + "narHash": "sha256-hf5eCZ0bbqwOKPvPKn8Rutwj+xs3GhAfB0AjGa8tIEM=", 195 258 "owner": "YaLTeR", 196 259 "repo": "niri", 197 - "rev": "bb8eb377c71337890889483e43c361b2bda4a414", 260 + "rev": "a18d24fc24d8b17242e336ccf39fcbe91e8161fd", 198 261 "type": "github" 199 262 }, 200 263 "original": { ··· 206 269 "nix-darwin": { 207 270 "inputs": { 208 271 "nixpkgs": [ 272 + "denix", 209 273 "nixpkgs" 210 274 ] 211 275 }, 212 276 "locked": { 213 - "lastModified": 1747365160, 214 - "narHash": "sha256-4ZVr0x+ry6ybym/VhVYACj0HlJo44YxAaPGOxiS88Hg=", 277 + "lastModified": 1746254942, 278 + "narHash": "sha256-Y062AuRx6l+TJNX8wxZcT59SSLsqD9EedAY0mqgTtQE=", 279 + "owner": "nix-darwin", 280 + "repo": "nix-darwin", 281 + "rev": "760a11c87009155afa0140d55c40e7c336d62d7a", 282 + "type": "github" 283 + }, 284 + "original": { 285 + "owner": "nix-darwin", 286 + "repo": "nix-darwin", 287 + "type": "github" 288 + } 289 + }, 290 + "nix-darwin_2": { 291 + "inputs": { 292 + "nixpkgs": [ 293 + "nixpkgs" 294 + ] 295 + }, 296 + "locked": { 297 + "lastModified": 1749194393, 298 + "narHash": "sha256-vt6hM9DNywnXXuW1qPDLzECmbDcmxhh58wpb0EEQjAo=", 215 299 "owner": "LnL7", 216 300 "repo": "nix-darwin", 217 - "rev": "8817b00b0011750381d0d44bb94d61087349b6ba", 301 + "rev": "19346808c445f23b08652971be198b9df6c33edc", 218 302 "type": "github" 219 303 }, 220 304 "original": { ··· 230 314 ] 231 315 }, 232 316 "locked": { 233 - "lastModified": 1746934494, 234 - "narHash": "sha256-3n6i+F0sDASjkhbvgFDpPDZGp7z19IrRtjfF9TwJpCA=", 317 + "lastModified": 1749355504, 318 + "narHash": "sha256-L17CdJMD+/FCBOHjREQLXbe2VUnc3rjffenBbu2Kwpc=", 235 319 "owner": "nix-community", 236 320 "repo": "nix-index-database", 237 - "rev": "e9b21b01e4307176b9718a29ac514838e7f6f4ff", 321 + "rev": "40a6e15e44b11fbf8f2b1df9d64dbfc117625e94", 238 322 "type": "github" 239 323 }, 240 324 "original": { ··· 249 333 "nixpkgs": "nixpkgs" 250 334 }, 251 335 "locked": { 252 - "lastModified": 1747383427, 253 - "narHash": "sha256-l7NPb4CiGfBS5VEwIsqThLlGrTRysxb+BMOgBJkizTk=", 336 + "lastModified": 1749521131, 337 + "narHash": "sha256-ezZ15tLA2L+rmtn39dKLFW/UM2xlksC61V12blulpjE=", 254 338 "owner": "nix-community", 255 339 "repo": "nix-vscode-extensions", 256 - "rev": "84fa86a820a365b12d7bbae3556ad737f7091af3", 340 + "rev": "299b2aa650d32310153746135b6a84a6c4de9c21", 257 341 "type": "github" 258 342 }, 259 343 "original": { ··· 280 364 }, 281 365 "nixpkgs-stable": { 282 366 "locked": { 283 - "lastModified": 1747209494, 284 - "narHash": "sha256-fLise+ys+bpyjuUUkbwqo5W/UyIELvRz9lPBPoB0fbM=", 367 + "lastModified": 1749237914, 368 + "narHash": "sha256-N5waoqWt8aMr/MykZjSErOokYH6rOsMMXu3UOVH5kiw=", 285 369 "owner": "NixOS", 286 370 "repo": "nixpkgs", 287 - "rev": "5d736263df906c5da72ab0f372427814de2f52f8", 371 + "rev": "70c74b02eac46f4e4aa071e45a6189ce0f6d9265", 288 372 "type": "github" 289 373 }, 290 374 "original": { 291 375 "owner": "NixOS", 292 - "ref": "nixos-24.11", 376 + "ref": "nixos-25.05", 293 377 "repo": "nixpkgs", 294 378 "type": "github" 295 379 } 296 380 }, 297 381 "nixpkgs_2": { 298 382 "locked": { 299 - "lastModified": 1747179050, 300 - "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", 383 + "lastModified": 1749285348, 384 + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", 301 385 "owner": "nixos", 302 386 "repo": "nixpkgs", 303 - "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", 387 + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", 304 388 "type": "github" 305 389 }, 306 390 "original": { ··· 310 394 "type": "github" 311 395 } 312 396 }, 397 + "pre-commit-hooks": { 398 + "inputs": { 399 + "flake-compat": "flake-compat", 400 + "gitignore": "gitignore", 401 + "nixpkgs": [ 402 + "denix", 403 + "nixpkgs" 404 + ] 405 + }, 406 + "locked": { 407 + "lastModified": 1746537231, 408 + "narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=", 409 + "owner": "cachix", 410 + "repo": "git-hooks.nix", 411 + "rev": "fa466640195d38ec97cf0493d6d6882bc4d14969", 412 + "type": "github" 413 + }, 414 + "original": { 415 + "owner": "cachix", 416 + "repo": "git-hooks.nix", 417 + "type": "github" 418 + } 419 + }, 313 420 "root": { 314 421 "inputs": { 422 + "denix": "denix", 315 423 "home-manager": "home-manager", 316 424 "iosevka-solai": "iosevka-solai", 317 425 "lix-module": "lix-module", 318 426 "niri-flake": "niri-flake", 319 - "nix-darwin": "nix-darwin", 427 + "nix-darwin": "nix-darwin_2", 320 428 "nix-index-database": "nix-index-database", 321 429 "nix-vscode-extensions": "nix-vscode-extensions", 322 430 "nixpkgs": "nixpkgs_2" ··· 387 495 "xwayland-satellite-unstable": { 388 496 "flake": false, 389 497 "locked": { 390 - "lastModified": 1747111562, 391 - "narHash": "sha256-GAqhWoxaBIk0tgoecZPa8gTHDHxNc0JtlwWHZN2iOOo=", 498 + "lastModified": 1749315541, 499 + "narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=", 392 500 "owner": "Supreeeme", 393 501 "repo": "xwayland-satellite", 394 - "rev": "ec9ff64c1e0cbec42710b580b7c0f759b1694e72", 502 + "rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba", 395 503 "type": "github" 396 504 }, 397 505 "original": {
+27 -48
flake.nix
··· 34 34 inputs.nixpkgs.follows = "nixpkgs"; 35 35 }; 36 36 37 + denix = { 38 + url = "github:yunfachi/denix"; 39 + inputs.nixpkgs.follows = "nixpkgs"; 40 + inputs.home-manager.follows = "home-manager"; 41 + }; 42 + 37 43 # ags = { 38 44 # url = "github:Aylur/ags"; 39 45 # inputs.nixpkgs.follows = "nixpkgs"; ··· 42 48 43 49 outputs = { 44 50 # ags, 51 + denix, 45 52 home-manager, 46 53 lix-module, 47 54 niri-flake, ··· 54 61 system = "x86_64-linux"; 55 62 pkgs = nixpkgs.legacyPackages.${system}; 56 63 # agsPkgs = ags.packages.${system}; 64 + mkConfigurations = moduleSystem: 65 + denix.lib.configurations (let 66 + homeManagerUser = "ovy"; 67 + in { 68 + inherit moduleSystem homeManagerUser; 69 + 70 + paths = [./denix/hosts ./denix/modules]; #./denix/rices]; 71 + specialArgs = {inherit inputs moduleSystem homeManagerUser;}; 72 + }); 57 73 in { 58 74 packages.${system} = { 59 75 iconifydl = pkgs.callPackage ./pkgs/iconifydl.nix {}; ··· 70 86 # buildInputs = [agsPkgs.agsFull agsPkgs.io agsPkgs.apps agsPkgs.tray self.packages.${system}.iconifydl]; 71 87 # }; 72 88 73 - nixosConfigurations.wallsocket = nixpkgs.lib.nixosSystem { 74 - system = "x86_64-linux"; 75 - specialArgs = {inherit inputs;}; 76 - modules = [ 77 - ./nixos/wallsocket/configuration.nix 78 - niri-flake.nixosModules.niri 79 - nix-index-database.nixosModules.nix-index 80 - lix-module.nixosModules.default 81 - home-manager.nixosModules.home-manager 82 - { 83 - programs.command-not-found.enable = false; 84 - home-manager = { 85 - useGlobalPkgs = true; 86 - useUserPackages = true; 87 - backupFileExtension = "backup"; 88 - users.ovy = import ./home/wallsocket.nix; 89 - extraSpecialArgs = {inherit inputs;}; 90 - }; 91 - } 92 - ]; 93 - }; 89 + nixosConfigurations = mkConfigurations "nixos"; 94 90 95 - darwinConfigurations.shimmer = nix-darwin.lib.darwinSystem { 96 - specialArgs = {inherit inputs;}; 97 - modules = [ 98 - ./darwin/shimmer/configuration.nix 99 - home-manager.darwinModules.home-manager 100 - { 101 - home-manager = { 102 - useGlobalPkgs = true; 103 - useUserPackages = true; 104 - backupFileExtension = "backup"; 105 - users.ovy = import ./home/shimmer.nix; 106 - extraSpecialArgs = {inherit inputs;}; 107 - }; 108 - } 109 - ]; 110 - }; 91 + # nixosModules.serverHomeManager = {...}: { 92 + # imports = [home-manager.nixosModules.home-manager]; 111 93 112 - nixosModules.serverHomeManager = {...}: { 113 - imports = [home-manager.nixosModules.home-manager]; 114 - 115 - home-manager = { 116 - useGlobalPkgs = true; 117 - useUserPackages = true; 118 - backupFileExtension = "backup"; 119 - users.ovy = import ./home/server.nix; 120 - extraSpecialArgs = {inherit inputs;}; 121 - }; 122 - }; 94 + # home-manager = { 95 + # useGlobalPkgs = true; 96 + # useUserPackages = true; 97 + # backupFileExtension = "backup"; 98 + # users.ovy = import ./home/server.nix; 99 + # extraSpecialArgs = {inherit inputs;}; 100 + # }; 101 + # }; 123 102 124 103 formatter = { 125 104 aarch64-linux = nixpkgs.legacyPackages.aarch64-linux.alejandra;
-6
home/darwin/configs.nix
··· 1 - {...}: { 2 - xdg.configFile = { 3 - # TODO: replace with the full karabiner config instead of needing to manually set complex mods 4 - "karabiner/assets/complex_modifications/keybind-helpers.json".source = ../../files/karabiner/keybind-helpers.json; 5 - }; 6 - }
-78
home/desktop/apps.nix
··· 1 - { 2 - config, 3 - pkgs, 4 - ... 5 - }: { 6 - home.packages = with pkgs; [ 7 - alejandra 8 - audacity 9 - blender 10 - btop 11 - # bottles 12 - bruno 13 - # davinci-resolve 14 - distrobox 15 - # feishin 16 - gajim 17 - glaxnimate 18 - # godot_4 19 - handbrake 20 - heynote 21 - klog-time-tracker 22 - libreoffice 23 - losslesscut-bin 24 - lunacy 25 - lutris 26 - # mixxx 27 - obs-studio 28 - obsidian 29 - oversteer 30 - p7zip 31 - picard 32 - pinta 33 - piper 34 - podman-tui 35 - # plasticity 36 - prismlauncher 37 - qbittorrent 38 - qimgv 39 - slack 40 - syncthingtray 41 - vesktop 42 - vlc 43 - vorta 44 - winetricks 45 - # wineWowPackages.full 46 - # (wineWowPackages.full.overrideAttrs (finalAttrs: previousAttrs: { 47 - # src = pkgs.fetchFromGitLab { 48 - # owner = "ElementalWarrior"; 49 - # repo = "wine"; 50 - # rev = "d0fe9b9ab64d7e310b2b7afd135369e49758b24b"; 51 - # domain = "gitlab.winehq.org"; 52 - # hash = "sha256-xa5xZQxlY5MH2jcdKIOs7zd3y/1UoxQhe/L4NoMyCqw="; 53 - # }; 54 - # })) 55 - yt-dlp 56 - yubioath-flutter 57 - ]; 58 - 59 - services.owncloud-client.enable = true; 60 - 61 - programs.mangohud = { 62 - enable = true; 63 - settings = { 64 - cpu_temp = true; 65 - cpu_mhz = true; 66 - cpu_power = true; 67 - core_load = true; 68 - gpu_core_clock = true; 69 - gpu_temp = true; 70 - gpu_power = true; 71 - gpu_fan = true; 72 - gpu_voltage = true; 73 - vram = true; 74 - ram = true; 75 - }; 76 - }; 77 - home.sessionVariables.MANGOHUD_CONFIGFILE = "${config.xdg.configHome}/MangoHud/MangoHud.conf"; 78 - }
+9 -2
home/modules/espanso.nix modules/programs/espanso.nix
··· 1 - {pkgs, ...}: { 2 - services.espanso = { 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.espanso"; 8 + 9 + home.always.services.espanso = { 3 10 enable = true; 4 11 package = pkgs.espanso-wayland; 5 12 matches.base.matches = [
-238
home/modules/niri.nix
··· 1 - { 2 - config, 3 - pkgs, 4 - ... 5 - }: { 6 - # programs.niri.enable = true; 7 - programs.niri.package = pkgs.niri; 8 - 9 - programs.niri.settings = { 10 - # input.keyboard.xkb = { 11 - # layout = "us"; 12 - # variant = "colemak"; 13 - # }; 14 - 15 - # TODO: maybe explicitly define outputs 16 - 17 - input.mouse = { 18 - natural-scroll = false; 19 - accel-profile = "flat"; 20 - }; 21 - 22 - input.touchpad = { 23 - enable = true; 24 - tap = true; 25 - natural-scroll = true; 26 - scroll-factor = 0.3; 27 - accel-profile = "adaptive"; 28 - tap-button-map = "left-right-middle"; 29 - scroll-method = "two-finger"; 30 - }; 31 - 32 - input.focus-follows-mouse = { 33 - enable = true; 34 - max-scroll-amount = "0%"; 35 - }; 36 - 37 - cursor.size = 32; 38 - 39 - prefer-no-csd = true; 40 - 41 - spawn-at-startup = [ 42 - {command = ["xwayland-satellite"];} 43 - # {command = ["hyprpaper"];} 44 - {command = ["kitty"];} 45 - ]; 46 - 47 - environment = { 48 - DISPLAY = ":0"; 49 - GDK_BACKEND = "wayland"; 50 - }; 51 - 52 - layout = { 53 - struts = let 54 - x = 16; 55 - y = 16; 56 - in { 57 - top = y; 58 - bottom = y; 59 - left = x; 60 - right = x; 61 - }; 62 - 63 - focus-ring = { 64 - enable = true; 65 - width = 2; 66 - active.gradient = { 67 - angle = 45; 68 - from = "rgb(255 0 255)"; 69 - to = "rgb(0 255 255)"; 70 - relative-to = "workspace-view"; 71 - }; 72 - }; 73 - 74 - shadow.enable = true; 75 - }; 76 - 77 - window-rules = [ 78 - { 79 - geometry-corner-radius = let 80 - r = 8.0; 81 - in { 82 - top-left = r; 83 - top-right = r; 84 - bottom-left = r; 85 - bottom-right = r; 86 - }; 87 - clip-to-geometry = true; 88 - draw-border-with-background = false; 89 - } 90 - { 91 - matches = [{app-id = "^1Password$";}]; 92 - open-floating = true; 93 - } 94 - ]; 95 - 96 - # TODO: create custom keybinds on layer 1 so I don't need to use a fuckton of fingers 97 - binds = with config.lib.niri.actions; { 98 - # Misc/meta 99 - "Mod+Shift+Slash".action = show-hotkey-overlay; 100 - "Mod+Shift+E".action = quit; 101 - "Mod+Q".action = close-window; 102 - 103 - # Quick access 104 - "Mod+Grave".action = spawn "kitty"; 105 - "Mod+B".action = spawn "vivaldi"; # TODO: spawn on startup instead 106 - "Mod+R".action = spawn "fuzzel"; 107 - 108 - "Print".action = screenshot; 109 - # "Ctrl+Print".action = screenshot-screen; 110 - "Alt+Print".action = screenshot-window; 111 - 112 - # Resizing 113 - "Mod+F".action = maximize-column; 114 - "Mod+Shift+F".action = fullscreen-window; 115 - "Mod+Minus".action = set-column-width "-10%"; 116 - "Mod+Equal".action = set-column-width "+10%"; 117 - "Mod+Shift+Minus".action = set-window-height "-10%"; 118 - "Mod+Shift+Equal".action = set-window-height "+10%"; 119 - # "Mod+R".action = switch-preset-column-width; 120 - "Mod+Shift+R".action = reset-window-height; 121 - "Mod+C".action = center-column; 122 - 123 - # Focus windows 124 - "Mod+Left".action = focus-column-left; 125 - "Mod+Right".action = focus-column-right; 126 - "Mod+Up".action = focus-window-or-workspace-up; 127 - "Mod+Down".action = focus-window-or-workspace-down; 128 - "Mod+Home".action = focus-column-first; 129 - "Mod+End".action = focus-column-last; 130 - 131 - # Move windows 132 - "Mod+Shift+Left".action = move-column-left; 133 - "Mod+Shift+Right".action = move-column-right; 134 - "Mod+Shift+Up".action = move-window-up-or-to-workspace-up; 135 - "Mod+Shift+Down".action = move-window-down-or-to-workspace-down; 136 - "Mod+Shift+Home".action = move-column-to-first; 137 - "Mod+Shift+End".action = move-column-to-last; 138 - 139 - "Mod+Comma".action = consume-window-into-column; 140 - "Mod+Period".action = expel-window-from-column; 141 - 142 - # Workspaces 143 - "Mod+Page_Down".action = focus-workspace-down; 144 - "Mod+Page_Up".action = focus-workspace-up; 145 - "Mod+Ctrl+Page_Down".action = move-column-to-workspace-down; 146 - "Mod+Ctrl+Page_Up".action = move-column-to-workspace-up; 147 - "Mod+Shift+Page_Down".action = move-workspace-down; 148 - "Mod+Shift+Page_Up".action = move-workspace-up; 149 - "Mod+Tab".action = focus-workspace-previous; 150 - 151 - # TODO: Screens 152 - # "Mod+Shift+Left".action = focus-monitor-left; 153 - # "Mod+Shift+Down".action = focus-monitor-down; 154 - # "Mod+Shift+Up".action = focus-monitor-up; 155 - # "Mod+Shift+Right".action = focus-monitor-right; 156 - # "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left; 157 - # "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down; 158 - # "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up; 159 - # "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right; 160 - 161 - # Scrolling through workspaces 162 - # `cooldown-ms` used to not go through workspaces really fast 163 - "Mod+WheelScrollDown" = { 164 - cooldown-ms = 150; 165 - action = focus-workspace-down; 166 - }; 167 - "Mod+WheelScrollUp" = { 168 - cooldown-ms = 150; 169 - action = focus-workspace-up; 170 - }; 171 - "Mod+Ctrl+WheelScrollDown" = { 172 - cooldown-ms = 150; 173 - action = move-column-to-workspace-down; 174 - }; 175 - "Mod+Ctrl+WheelScrollUp" = { 176 - cooldown-ms = 150; 177 - action = move-column-to-workspace-up; 178 - }; 179 - 180 - # Scrolling through windows 181 - "Mod+WheelScrollRight".action = focus-column-right; 182 - "Mod+WheelScrollLeft".action = focus-column-left; 183 - "Mod+Ctrl+WheelScrollRight".action = move-column-right; 184 - "Mod+Ctrl+WheelScrollLeft".action = move-column-left; 185 - # Holding shift while scrolling usually does horizontal, so do the same here. 186 - "Mod+Shift+WheelScrollDown".action = focus-column-right; 187 - "Mod+Shift+WheelScrollUp".action = focus-column-left; 188 - "Mod+Ctrl+Shift+WheelScrollDown".action = move-column-right; 189 - "Mod+Ctrl+Shift+WheelScrollUp".action = move-column-left; 190 - }; 191 - }; 192 - 193 - programs.wlogout = { 194 - enable = true; 195 - layout = [ 196 - { 197 - "label" = "lock"; 198 - "action" = "loginctl lock-session"; 199 - "text" = "Lock"; 200 - "keybind" = "l"; 201 - } 202 - { 203 - "label" = "hibernate"; 204 - "action" = "systemctl hibernate"; 205 - "text" = "Hibernate"; 206 - "keybind" = "h"; 207 - } 208 - { 209 - "label" = "logout"; 210 - "action" = "loginctl terminate-user $USER"; 211 - "text" = "Logout"; 212 - "keybind" = "e"; 213 - } 214 - { 215 - "label" = "shutdown"; 216 - "action" = "systemctl poweroff"; 217 - "text" = "Shutdown"; 218 - "keybind" = "s"; 219 - } 220 - { 221 - "label" = "suspend"; 222 - "action" = "systemctl suspend"; 223 - "text" = "Suspend"; 224 - "keybind" = "u"; 225 - } 226 - { 227 - "label" = "reboot"; 228 - "action" = "systemctl reboot"; 229 - "text" = "Reboot"; 230 - "keybind" = "r"; 231 - } 232 - ]; 233 - # https://github.com/ArtsyMacaw/wlogout/blob/master/style.css 234 - # style = '''' 235 - }; 236 - 237 - programs.fuzzel = {}; 238 - }
-22
home/modules/ssh.nix
··· 1 - {lib, ...}: let 2 - _1passwordAgent = options: 3 - lib.hm.dag.entryBefore ["*"] ({ 4 - extraOptions.IdentityAgent = "~/.1password/agent.sock"; 5 - extraOptions.IdentitiesOnly = "no"; 6 - } 7 - // options); 8 - in { 9 - programs.ssh = { 10 - enable = true; 11 - matchBlocks = { 12 - "*" = { 13 - identitiesOnly = true; 14 - identityFile = "~/.ssh/id_ed25519_sk_rk"; 15 - user = "ovy"; 16 - }; 17 - # OpenWrt 18 - "192.168.1.1" = _1passwordAgent {user = "root";}; 19 - "*.repo.borgbase.com" = _1passwordAgent {}; 20 - }; 21 - }; 22 - }
-24
home/modules/xdg.nix
··· 1 - { 2 - config, 3 - pkgs, 4 - ... 5 - }: let 6 - vivalarc = pkgs.fetchFromGitHub { 7 - owner = "tovifun"; 8 - repo = "VivalArc"; 9 - rev = "7ee09e9efb46c1524a43f0cb6763b9750db6e81c"; 10 - hash = "sha256-xYSxB8KjcbeUDEdbA2AJ9FeQC1TkqyXdB9rTMMSm+FA="; 11 - }; 12 - in { 13 - xdg.desktopEntries.davinci-resolve = { 14 - name = "Davinci Resolve"; 15 - exec = "davinci-resolve"; 16 - categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"]; 17 - comment = "Professional video editing, color, effects and audio post-processing"; 18 - genericName = "Video Editor"; 19 - type = "Application"; 20 - settings.Version = "1.4"; 21 - }; 22 - 23 - xdg.dataFile."vivalarc".source = vivalarc; 24 - }
+11 -2
home/programs/browser.nix modules/programs/chromium.nix
··· 1 - {pkgs, ...}: { 2 - programs.chromium = { 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.chromium"; 8 + 9 + options = delib.singleEnableOption true; 10 + 11 + home.ifEnabled.programs.chromium = { 3 12 enable = true; 4 13 package = pkgs.vivaldi.overrideAttrs (finalAttrs: previousAttrs: { 5 14 dontWrapQtApps = false;
-113
home/programs/common-cli.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: { 7 - # Core CLI tools 8 - home.packages = with pkgs; [ 9 - curlie 10 - du-dust 11 - duf 12 - fd 13 - jq 14 - moar 15 - nix-your-shell 16 - ripgrep 17 - ]; 18 - 19 - programs.aria2.enable = true; 20 - 21 - programs.bat = { 22 - enable = true; 23 - config = { 24 - theme = "DarkNeon"; 25 - italic-text = "always"; 26 - }; 27 - }; 28 - 29 - # Pager & manpages options 30 - home.sessionVariables = { 31 - PAGER = "moar"; 32 - MOAR = "--no-linenumbers"; 33 - MANPAGER = "sh -c 'col -bx | bat -l man -p'"; 34 - MANROFFOPT = "-c"; 35 - }; 36 - 37 - programs.direnv = { 38 - enable = true; 39 - nix-direnv.enable = true; 40 - config.whitelist.prefix = [ 41 - "${config.home.homeDirectory}/Projects/bots-gg" 42 - "${config.home.homeDirectory}/Projects/dijit" 43 - "${config.home.homeDirectory}/Projects/personal" 44 - "${config.home.homeDirectory}/Projects/work" 45 - ]; 46 - }; 47 - 48 - # TODO: decide on this vs lsd? 49 - programs.eza.enable = true; 50 - 51 - # TODO 52 - # Investigate preview stuff as default command 53 - # https://github.com/kidonng/preview.fish 54 - # Explore fzf search modes 55 - programs.fzf = { 56 - enable = true; 57 - enableFishIntegration = false; 58 - defaultOptions = [ 59 - "--ansi" 60 - "--cycle" 61 - "--layout=reverse" 62 - "--border" 63 - "--height=90%" 64 - "--marker=\"*\"" 65 - "--preview 'bat --color=always --style=header,numbers --line-range :300 {}'" 66 - # I usually use a vertical term so this is more practical. 67 - # TODO: possible to dynamically change based on terminal dimensinns? 68 - "--preview-window='bottom:50%:wrap'" 69 - ]; 70 - defaultCommand = "fd --color=always --type file --follow --hidden --exclude .git --exclude node_modules"; 71 - }; 72 - home.sessionVariables.FZF_CTRL_T_COMMAND = "fd --color=always --follow"; 73 - 74 - programs.micro = { 75 - enable = true; 76 - settings = { 77 - clipboard = "external"; 78 - hlsearch = true; 79 - parsecursor = true; 80 - scrollbar = true; 81 - tabmovement = true; 82 - tabsize = 2; 83 - tabstospaces = true; 84 - }; 85 - }; 86 - 87 - programs.nix-index.enable = true; 88 - 89 - programs.tealdeer = { 90 - enable = true; 91 - settings = { 92 - updates = { 93 - auto_update = true; 94 - }; 95 - }; 96 - }; 97 - 98 - programs.zellij = { 99 - enable = true; 100 - enableFishIntegration = false; 101 - settings = { 102 - mouse_mode = true; 103 - theme = "catppuccin-mocha"; 104 - ui.pane_frames.rounded_corners = true; 105 - ui.pane_frames.hide_session_name = true; 106 - }; 107 - }; 108 - 109 - programs.zoxide = { 110 - enable = true; 111 - enableFishIntegration = true; 112 - }; 113 - }
+9 -3
home/programs/desktop-cli.nix modules/programs/desktop-cli.nix
··· 1 - {pkgs, ...}: { 2 - # Misc packages 3 - home.packages = with pkgs; [ 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.desktop-cli"; 8 + 9 + home.always.home.packages = with pkgs; [ 4 10 age-plugin-yubikey 5 11 alejandra 6 12 cachix
+9 -2
home/programs/fish.nix modules/programs/fish.nix
··· 1 - {pkgs, ...}: { 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.fish"; 8 + 2 9 # TODO: custom fifc rules (nix shell, nix run, ...) 3 10 # TODO: how to customise fifc pane 4 - programs.fish = { 11 + home.always.programs.fish = { 5 12 enable = true; 6 13 interactiveShellInit = '' 7 14 set fish_greeting
-70
home/programs/git.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - ... 5 - }: { 6 - xdg.configFile."git/allowed_signers".source = ../../files/git/allowed_signers; 7 - 8 - programs.git = { 9 - enable = true; 10 - userName = "Ashlynne Mitchell"; 11 - userEmail = "ovy@ovyerus.com"; 12 - delta.enable = true; 13 - 14 - signing = { 15 - signByDefault = true; 16 - format = "ssh"; 17 - key = "~/.ssh/id_ed25519_sk_rk"; 18 - }; 19 - 20 - extraConfig = { 21 - # TODO: custom pretty stuff? 22 - blame.showEmail = true; 23 - init.defaultBranch = "main"; 24 - pull.rebase = true; 25 - 26 - log = { 27 - abbrevCommit = true; 28 - # TODO: `git log --oneline` looks silly with this. Need custom format. 29 - showSignature = true; 30 - # TODO: trial for a while and see if I like this. 31 - date = "human"; 32 - }; 33 - 34 - merge = { 35 - # Try to avoid merge commits 36 - ff = "only"; 37 - # Really only useful on a well-managed team. Maybe eventually. 38 - # verifySignatures = true; 39 - }; 40 - 41 - push = { 42 - autoSetupRemote = true; 43 - followTags = true; 44 - }; 45 - 46 - # Require explicit `drop` in interactive rebase 47 - rebase.missingCommitsCheck = "error"; 48 - rerere.enabled = true; 49 - 50 - status = { 51 - relativePaths = false; 52 - showStash = true; 53 - }; 54 - 55 - gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers"; 56 - # "gpg.ssh.program = "gfh-keygen"; 57 - # "gpg.ssh.defaultKeyCommand = "gfh"; 58 - }; 59 - }; 60 - 61 - programs.gh = { 62 - enable = true; 63 - settings = { 64 - git_protocol = "ssh"; 65 - aliases = { 66 - clone = "repo clone"; 67 - }; 68 - }; 69 - }; 70 - }
+7 -2
home/programs/kitty.nix modules/programs/kitty.nix
··· 1 - { 2 - programs.kitty = { 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.kitty"; 4 + 5 + options = delib.singleEnableOption true; 6 + 7 + home.ifEnabled.programs.kitty = { 3 8 enable = true; 4 9 font.name = "Iosevka Solai"; 5 10 font.size = 12;
-15
home/programs/syncthing.nix
··· 1 - { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: { 7 - services.syncthing = { 8 - enable = true; 9 - tray.enable = true; 10 - tray.package = pkgs.syncthingtray; 11 - }; 12 - 13 - # Fix syncthingtray complaining about the tray not existing, because of the custom tray service above. 14 - systemd.user.services.syncthingtray.Service.ExecStart = lib.mkForce "${config.services.syncthing.tray.package}/bin/${config.services.syncthing.tray.command} --wait"; 15 - }
-234
home/programs/vscode.nix
··· 1 - { 2 - inputs, 3 - pkgs, 4 - ... 5 - }: { 6 - home.sessionVariables.EDITOR = "codium --wait"; 7 - 8 - programs.vscode = { 9 - enable = true; 10 - mutableExtensionsDir = false; 11 - package = pkgs.vscodium; 12 - 13 - profiles.default = { 14 - enableUpdateCheck = false; 15 - enableExtensionUpdateCheck = false; 16 - 17 - extensions = let 18 - vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system}; 19 - inherit (vscode-extensions) open-vsx vscode-marketplace; 20 - in 21 - with open-vsx; [ 22 - kamadorueda.alejandra 23 - astro-build.astro-vscode 24 - matthewpi.caddyfile-support 25 - raidou.calc 26 - artlaman.chalice-icon-theme # TODO: i should fork this to add support for some newer files (tbd) 27 - adpyke.codesnap 28 - clinyong.vscode-css-modules 29 - mkhl.direnv 30 - leonardssh.vscord 31 - ms-azuretools.vscode-docker 32 - editorconfig.editorconfig 33 - irongeek.vscode-env 34 - pgourlain.erlang 35 - usernamehw.errorlens 36 - dbaeumer.vscode-eslint 37 - tamasfe.even-better-toml 38 - sleistner.vscode-fileutils 39 - bmalehorn.vscode-fish 40 - github.vscode-github-actions 41 - eamodio.gitlens 42 - # TODO: terraform (use opentofu instead) 43 - ms-vscode.hexeditor 44 - lokalise.i18n-ally 45 - kisstkondoros.vscode-gutter-preview 46 - ms-python.isort 47 - bierner.markdown-preview-github-styles 48 - unifiedjs.vscode-mdx 49 - jnoortheen.nix-ide 50 - nuxtr.nuxtr-vscode 51 - vunguyentuan.vscode-postcss 52 - esbenp.prettier-vscode 53 - prisma.prisma 54 - # TODO: use jedi instead of pylance 55 - ms-python.python 56 - ms-python.debugpy 57 - mechatroner.rainbow-csv 58 - medo64.render-crlf 59 - stkb.rewrap 60 - rust-lang.rust-analyzer 61 - mrmlnc.vscode-scss 62 - svelte.svelte-vscode 63 - jock.svg 64 - coolbear.systemd-unit-file 65 - bradlc.vscode-tailwindcss 66 - myriad-dreamin.tinymist 67 - gruntfuggly.todo-tree 68 - tomoki1207.pdf 69 - zxh404.vscode-proto3 70 - styled-components.vscode-styled-components # TODO: don't really need this 71 - vue.volar 72 - wakatime.vscode-wakatime 73 - redhat.vscode-yaml 74 - arcanis.vscode-zipfs 75 - vscode-marketplace.wraith13.background-phi-colors 76 - vscode-marketplace.be5invis.theme-dolch 77 - vscode-marketplace.fabiospampinato.vscode-diff 78 - vscode-marketplace.jakebecker.elixir-ls 79 - vscode-marketplace.zh9528.file-size 80 - vscode-marketplace.vladdesv.vscode-klog 81 - vscode-marketplace.dt.ghlink 82 - vscode-marketplace.tyriar.lorem-ipsum 83 - vscode-marketplace.phoenixframework.phoenix 84 - vscode-marketplace.frigus02.vscode-sql-tagged-template-literals-syntax-only # TODO: alternative? 85 - ]; 86 - 87 - userSettings = { 88 - # Formatters 89 - "editor.defaultFormatter" = "esbenp.prettier-vscode"; 90 - "[elixir]"."editor.defaultFormatter" = "JakeBecker.elixir-ls"; 91 - "[nix]"."editor.defaultFormatter" = "kamadorueda.alejandra"; 92 - "[prisma]"."editor.defaultFormatter" = "Prisma.prisma"; 93 - "[python]"."editor.defaultFormatter" = "ms-python.python"; 94 - "[rust]"."editor.defaultFormatter" = "rust-lang.rust-analyzer"; 95 - 96 - # Sane defaults 97 - "editor.tabSize" = 2; 98 - "editor.insertSpaces" = true; 99 - "breadcrumbs.enabled" = true; 100 - "editor.wordWrap" = "off"; 101 - "security.workspace.trust.enabled" = false; 102 - "security.workspace.trust.untrustedFiles" = "open"; 103 - "files.eol" = "\n"; 104 - "workbench.editor.empty.hint" = "hidden"; 105 - "comments.openView" = "never"; 106 - "editor.minimap.enabled" = false; 107 - "editor.stickyScroll.enabled" = true; 108 - "workbench.layoutControl.enabled" = false; 109 - "diffEditor.ignoreTrimWhitespace" = true; 110 - "editor.acceptSuggestionOnEnter" = "off"; 111 - "editor.formatOnSave" = true; 112 - "editor.inlineSuggest.enabled" = true; 113 - "editor.renderWhitespace" = "none"; 114 - "editor.suggestSelection" = "first"; 115 - "editor.tabCompletion" = "on"; 116 - "emmet.triggerExpansionOnTab" = true; 117 - "explorer.confirmDelete" = false; 118 - "explorer.confirmDragAndDrop" = false; 119 - "redhat.telemetry.enabled" = false; 120 - "workbench.tips.enabled" = false; 121 - "workbench.tree.indent" = 16; 122 - "workbench.tree.renderIndentGuides" = "always"; 123 - "editor.unicodeHighlight.ambiguousCharacters" = true; 124 - "errorLens.enabledDiagnosticLevels" = ["error" "warning"]; 125 - "editor.acceptSuggestionOnCommitCharacter" = false; 126 - "files.watcherExclude" = { 127 - "**/.git/**" = true; 128 - "**/node_modules/*/**" = true; 129 - }; 130 - "search.exclude" = { 131 - "**/node_modules" = true; 132 - "**/bower_components" = true; 133 - "**/*.code-search" = true; 134 - "**/.yarn" = true; 135 - }; 136 - "terminal.integrated.commandsToSkipShell" = [ 137 - "-workbench.action.quickOpenView" 138 - "-workbench.action.quickOpen" 139 - "-editor.action.clipboardCutAction" 140 - ]; 141 - # "prettier.prettierPath" = "prettierd"; 142 - "prettier.proseWrap" = "always"; 143 - 144 - # Pretties 145 - "workbench.colorTheme" = "Dolch"; 146 - "workbench.iconTheme" = "chalice-icon-theme"; 147 - "editor.fontFamily" = "'Iosevka Solai', Menlo, Monaco, 'Courier New', monospace"; 148 - "editor.fontSize" = 16; 149 - "terminal.integrated.fontFamily" = "'Iosevka Solai Term', Consolas, 'Courier New', monospace"; 150 - "terminal.integrated.fontSize" = 14; 151 - "terminal.integrated.scrollback" = 9999999999; 152 - "editor.fontLigatures" = true; 153 - "editor.cursorSmoothCaretAnimation" = "on"; 154 - "editor.smoothScrolling" = true; 155 - "zenMode.fullScreen" = false; 156 - "zenMode.centerLayout" = false; 157 - "zenMode.hideLineNumbers" = true; 158 - 159 - # No barfing rainbows over my UI pls 160 - "backgroundPhiColors.baseColor" = "#FFFFFF"; 161 - "backgroundPhiColors.bodySpacesEnabled" = false; 162 - "backgroundPhiColors.indentErrorEnabled" = false; 163 - "backgroundPhiColors.lineEnabled" = false; 164 - "backgroundPhiColors.spacesAlpha" = 10; 165 - "backgroundPhiColors.tokenActiveAlpha" = 30; 166 - "editor.bracketPairColorization.enabled" = false; 167 - 168 - # Codesnap 169 - "codesnap.containerPadding" = "2em"; 170 - "codesnap.target" = "window"; 171 - "codesnap.transparentBackground" = true; 172 - "codesnap.boxShadow" = "none"; 173 - "codesnap.showLineNumbers" = false; 174 - "codesnap.showWindowControls" = false; 175 - "codesnap.shutterAction" = "copy"; 176 - "codesnap.roundedCorners" = true; 177 - 178 - # Git 179 - "git.autorefresh" = true; 180 - "git.autofetch" = false; 181 - "git.autoStash" = true; 182 - "git.mergeEditor" = false; 183 - "git.confirmSync" = false; 184 - "git.enableSmartCommit" = true; 185 - "gitlens.advanced.messages" = { 186 - "suppressLineUncommittedWarning" = true; 187 - }; 188 - "gitlens.hovers.currentLine.over" = "annotation"; 189 - 190 - # Nix 191 - "nix.enableLanguageServer" = true; 192 - "nix.serverPath" = "nil"; 193 - "alejandra.program" = "alejandra"; 194 - 195 - # Elixir/erlang 196 - "elixirLS.suggestSpecs" = false; 197 - "elixirLS.fetchDeps" = false; 198 - "elixirLS.mixEnv" = "dev"; 199 - "elixir.credo.ignoreWarningMessages" = true; 200 - 201 - # Python 202 - "python.analysis.typeCheckingMode" = "basic"; 203 - 204 - # JS 205 - "debug.javascript.autoAttachFilter" = "onlyWithFlag"; 206 - 207 - # CSS 208 - "files.associations"."*.css" = "tailwindcss"; 209 - 210 - # Misc 211 - "yaml.format.proseWrap" = "always"; 212 - "workbench.startupEditor" = "none"; 213 - "remote.SSH.connectTimeout" = 30; 214 - "remote.SSH.useLocalServer" = true; 215 - "remote.SSH.path" = "/run/current-system/sw/bin/ssh"; 216 - "extensions.ignoreRecommendations" = true; 217 - "svg.preview.mode" = "svg"; 218 - "vscord.status.problems.enabled" = false; 219 - "vscord.status.state.text.editing" = "Working on {file_name}{file_extension}"; 220 - "vscord.ignore.workspaces" = ["~/Work"]; 221 - "typescript.updateImportsOnFileMove.enabled" = "never"; 222 - "git.openRepositoryInParentFolders" = "never"; 223 - "diffEditor.useInlineViewWhenSpaceIsLimited" = false; 224 - "svelte.enable-ts-plugin" = true; 225 - "gitlens.launchpad.indicator.enabled" = false; 226 - "window.titleBarStyle" = "custom"; 227 - "files.simpleDialog.enable" = true; 228 - "window.dialogStyle" = "custom"; 229 - 230 - # Fuck off 231 - }; 232 - }; 233 - }; 234 - }
-10
home/server.nix
··· 1 - {...}: { 2 - imports = [./programs/common-cli.nix ./programs/fish.nix]; 3 - home.sessionVariables.EDITOR = "micro"; 4 - 5 - news.display = "silent"; 6 - programs.home-manager.enable = true; 7 - home.homeDirectory = "/home/ovy"; 8 - home.username = "ovy"; 9 - home.stateVersion = "23.05"; 10 - }
-18
home/shimmer.nix
··· 1 - {lib, ...}: { 2 - imports = [ 3 - ./darwin/configs.nix 4 - ./modules/ssh.nix 5 - ./programs/common-cli.nix 6 - ./programs/desktop-cli.nix 7 - ./programs/fish.nix 8 - ./programs/git.nix 9 - ]; 10 - 11 - programs.ssh.includes = ["~/.orbstack/ssh/config"]; 12 - 13 - news.display = "silent"; 14 - programs.home-manager.enable = true; 15 - home.homeDirectory = lib.mkForce "/Users/ovy"; 16 - home.username = "ovy"; 17 - home.stateVersion = "23.05"; 18 - }
-39
home/wallsocket.nix
··· 1 - { 2 - pkgs, 3 - inputs, 4 - ... 5 - }: { 6 - imports = [ 7 - ./desktop/apps.nix 8 - ./modules/espanso.nix 9 - ./modules/niri.nix 10 - ./modules/ssh.nix 11 - ./modules/xdg.nix 12 - ./programs/browser.nix 13 - ./programs/common-cli.nix 14 - ./programs/desktop-cli.nix 15 - ./programs/fish.nix 16 - ./programs/git.nix 17 - ./programs/kitty.nix 18 - ./programs/syncthing.nix 19 - ./programs/vscode.nix 20 - ]; 21 - 22 - systemd.user.targets.tray = { 23 - Unit = { 24 - Description = "Home Manager System Tray"; 25 - Requires = ["graphical-session-pre.target"]; 26 - }; 27 - }; 28 - 29 - # Temporary location for these 30 - # home.packages = [pkgs.inotify-tools inputs.ags.packages.${pkgs.system}.default]; 31 - 32 - home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock"; 33 - 34 - news.display = "silent"; 35 - programs.home-manager.enable = false; 36 - home.homeDirectory = "/home/ovy"; 37 - home.username = "ovy"; 38 - home.stateVersion = "24.05"; 39 - }
+4
hosts/wallsocket/default.nix
··· 1 + {delib, ...}: 2 + delib.host { 3 + name = "wallsocket"; 4 + }
+68
hosts/wallsocket/hardware.nix
··· 1 + { 2 + delib, 3 + lib, 4 + ... 5 + }: let 6 + platform = "x86_64-linux"; 7 + stateVersion = "24.05"; 8 + in 9 + delib.host { 10 + name = "wallsocket"; 11 + 12 + homeManagerSystem = platform; 13 + home.home.stateVersion = stateVersion; 14 + 15 + nixos = { 16 + nixpkgs.hostPlatform = platform; 17 + system.stateVersion = stateVersion; 18 + 19 + hardware.enableRedistributableFirmware = true; 20 + hardware.cpu.amd.updateMicrocode = true; 21 + 22 + # Kernel 23 + boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; 24 + boot.initrd.kernelModules = []; 25 + boot.kernelModules = ["kvm-amd"]; 26 + boot.extraModulePackages = []; 27 + 28 + # Bootloader 29 + boot.loader.systemd-boot.enable = true; 30 + boot.loader.systemd-boot.configurationLimit = 10; 31 + boot.loader.efi.canTouchEfiVariables = true; 32 + 33 + # Disks 34 + fileSystems."/" = { 35 + device = "/dev/disk/by-uuid/1b08f109-17e9-40f4-a7fd-6e5943ce7d5e"; 36 + fsType = "ext4"; 37 + }; 38 + 39 + fileSystems."/boot" = { 40 + device = "/dev/disk/by-uuid/CF5D-B9DB"; 41 + fsType = "vfat"; 42 + options = ["fmask=0022" "dmask=0022"]; 43 + }; 44 + 45 + fileSystems."/home" = { 46 + device = "/dev/disk/by-uuid/31974b72-eca5-4758-bd66-63ae57c1b4b0"; 47 + fsType = "ext4"; 48 + }; 49 + 50 + fileSystems."/mnt/misc" = { 51 + device = "/dev/disk/by-uuid/bbc7adf8-475a-4bec-843f-77d4b904c42e"; 52 + fsType = "ext4"; 53 + }; 54 + 55 + fileSystems."/mnt/games" = { 56 + device = "/dev/disk/by-uuid/e61763de-753c-42f0-ba9b-5ac6b6ffdf08"; 57 + fsType = "ext4"; 58 + }; 59 + 60 + swapDevices = []; 61 + 62 + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 63 + # (the default) this is the recommended approach. When using systemd-networkd it's 64 + # still possible to use this option, but it's recommended to use it in conjunction 65 + # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 66 + networking.useDHCP = lib.mkDefault true; 67 + }; 68 + }
+37
modules/1password.nix
··· 1 + { 2 + delib, 3 + homeConfig, 4 + ... 5 + }: 6 + delib.module { 7 + name = "_1password"; 8 + 9 + options = delib.singleEnableOption true; 10 + 11 + nixos.ifEnabled = { 12 + services.systembus-notify.enable = true; 13 + programs._1password.enable = true; 14 + programs._1password-gui = { 15 + enable = true; 16 + polkitPolicyOwners = ["ovy"]; # TODO: replace 17 + }; 18 + 19 + environment.etc."1password/custom_allowed_browsers" = { 20 + text = "vivaldi-bin"; 21 + mode = "0755"; 22 + }; 23 + }; 24 + 25 + home.ifEnabled.programs.ssh.matchBlocks = let 26 + _1passwordAgent = options: 27 + homeConfig.lib.dag.entryBefore ["*"] ({ 28 + extraOptions.IdentityAgent = "~/.1password/agent.sock"; 29 + extraOptions.IdentitiesOnly = "no"; 30 + } 31 + // options); 32 + in { 33 + # OpenWrt 34 + "192.168.1.1" = _1passwordAgent {user = "root";}; 35 + "*.repo.borgbase.com" = _1passwordAgent {}; 36 + }; 37 + }
+20
modules/audio.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "audio"; 4 + 5 + options = delib.singleEnableOption true; 6 + 7 + nixos.ifEnabled = { 8 + services.pulseaudio.enable = false; 9 + security.rtkit.enable = true; 10 + 11 + services.pipewire = { 12 + enable = true; 13 + alsa.enable = true; 14 + alsa.support32Bit = true; 15 + pulse.enable = true; 16 + # If you want to use JACK applications, uncomment this 17 + #jack.enable = true; 18 + }; 19 + }; 20 + }
+26
modules/bluetooth.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "bluetooth"; 8 + 9 + options = delib.singleEnableOption true; 10 + 11 + nixos.ifEnabled = { 12 + hardware.bluetooth.enable = true; 13 + # TODO: determine if this actually affected me. Maybe should yeet. 14 + hardware.bluetooth.settings = { 15 + # Try and reduce latency from Xbox Series controllers 16 + # https://atar-axis.github.io/xpadneo#high-latency-or-lost-button-events-with-bluetooth-le 17 + LE = { 18 + MinConnectionInterval = 7; 19 + MaxConnectionInterval = 9; 20 + ConnectionLatency = 0; 21 + }; 22 + }; 23 + hardware.xpadneo.enable = true; 24 + environment.systemPackages = [pkgs.kdePackages.bluedevil]; 25 + }; 26 + }
+30
modules/config/args.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "args"; 4 + 5 + options.args = with delib; { 6 + shared = attrsLegacyOption {}; 7 + nixos = attrsLegacyOption {}; 8 + home = attrsLegacyOption {}; 9 + darwin = attrsLegacyOption {}; 10 + }; 11 + 12 + nixos.always = {cfg, ...}: { 13 + imports = [ 14 + {_module.args = cfg.shared;} 15 + {_module.args = cfg.nixos;} 16 + ]; 17 + }; 18 + home.always = {cfg, ...}: { 19 + imports = [ 20 + {_module.args = cfg.shared;} 21 + {_module.args = cfg.home;} 22 + ]; 23 + }; 24 + darwin.always = {cfg, ...}: { 25 + imports = [ 26 + {_module.args = cfg.shared;} 27 + {_module.args = cfg.darwin;} 28 + ]; 29 + }; 30 + }
+10
modules/config/constants.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "constants"; 4 + 5 + options.constants = with delib; { 6 + username = readOnly (strOption "ovy"); 7 + userfullname = readOnly (strOption "Ashlynne Mitchell"); 8 + useremail = readOnly (strOption "ovy@ovyerus.com"); 9 + }; 10 + }
+26
modules/config/home.nix
··· 1 + { 2 + delib, 3 + moduleSystem, 4 + homeManagerUser, 5 + config, 6 + ... 7 + }: 8 + delib.module { 9 + name = "home"; 10 + 11 + myconfig.always.args.shared.homeConfig = 12 + if moduleSystem == "home" 13 + then config 14 + else config.home-manager.users.${homeManagerUser}; 15 + 16 + home.always = {myconfig, ...}: let 17 + inherit (myconfig.constants) username; 18 + in { 19 + home = { 20 + inherit username; 21 + homeDirectory = "/home/${username}"; 22 + }; 23 + news.display = "silent"; 24 + programs.home-manager.enable = false; 25 + }; 26 + }
+21
modules/config/hosts.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "hosts"; 4 + 5 + options = with delib; let 6 + host = { 7 + options = hostSubmoduleOptions; 8 + }; 9 + in { 10 + host = hostOption host; 11 + hosts = hostsOption host; 12 + }; 13 + 14 + myconfig.always = {myconfig, ...}: { 15 + args.shared = {inherit (myconfig) host hosts;}; 16 + }; 17 + 18 + home.always = {myconfig, ...}: { 19 + assertions = delib.hostNamesAssertions myconfig.hosts; 20 + }; 21 + }
+21
modules/config/user.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "user"; 8 + 9 + nixos.always = {myconfig, ...}: let 10 + inherit (myconfig.constants) username userfullname; 11 + in { 12 + users = { 13 + users.${username} = { 14 + isNormalUser = true; 15 + description = userfullname; 16 + extraGroups = ["wheel" "cdrom" "adbusers"]; 17 + shell = pkgs.fish; 18 + }; 19 + }; 20 + }; 21 + }
+20
modules/devices.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "devices"; 4 + 5 + nixos.always = { 6 + programs.adb.enable = true; 7 + 8 + services = { 9 + avahi = { 10 + enable = true; 11 + nssmdns4 = true; 12 + openFirewall = true; 13 + }; 14 + fwupd.enable = true; 15 + usbmuxd.enable = true; 16 + pcscd.enable = true; 17 + printing.enable = true; 18 + }; 19 + }; 20 + }
+50
modules/fonts.nix
··· 1 + { 2 + delib, 3 + inputs, 4 + pkgs, 5 + ... 6 + }: 7 + delib.module { 8 + name = "fonts"; 9 + 10 + nixos.always = { 11 + fonts = { 12 + packages = [ 13 + pkgs.ubuntu_font_family 14 + pkgs.inter 15 + inputs.iosevka-solai.packages.x86_64-linux.bin 16 + ]; 17 + 18 + # TODO: i get a lot of weird error logs. See why 19 + fontDir.enable = true; 20 + enableDefaultPackages = true; 21 + 22 + fontconfig = { 23 + defaultFonts = { 24 + serif = ["Noto Serif"]; 25 + sansSerif = ["Inter"]; 26 + monospace = ["Iosevka Solai"]; 27 + emoji = ["Noto Color Emoji"]; 28 + }; 29 + }; 30 + }; 31 + 32 + environment.sessionVariables = { 33 + FONTCONFIG_PATH = "${pkgs.fontconfig}/etc/fonts"; 34 + FONTCONFIG_FILE = "${pkgs.fontconfig}/etc/fonts/fonts.conf"; 35 + }; 36 + 37 + # Wait for Aetf/kmscon#75 to merge, and then look into manually updating the package to test. 38 + # Potentially open a nixpkgs PR to do so? 39 + 40 + # services.kmscon = { 41 + # enable = true; 42 + # fonts = [ 43 + # { 44 + # name = "Iosevka Solai Term"; 45 + # package = inputs.iosevka-solai.packages.x86_64-linux.bin-term; 46 + # } 47 + # ]; 48 + # }; 49 + }; 50 + }
+41
modules/gaming.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + homeConfig, 5 + ... 6 + }: 7 + delib.module { 8 + name = "gaming"; 9 + 10 + nixos.always = { 11 + programs.steam = { 12 + enable = true; 13 + remotePlay.openFirewall = true; 14 + localNetworkGameTransfers.openFirewall = true; 15 + extraCompatPackages = [pkgs.proton-ge-bin]; 16 + }; 17 + 18 + programs.gamescope.enable = true; 19 + programs.gamemode.enable = true; 20 + }; 21 + 22 + home.always = { 23 + programs.mangohud = { 24 + enable = true; 25 + settings = { 26 + cpu_temp = true; 27 + cpu_mhz = true; 28 + cpu_power = true; 29 + core_load = true; 30 + gpu_core_clock = true; 31 + gpu_temp = true; 32 + gpu_power = true; 33 + gpu_fan = true; 34 + gpu_voltage = true; 35 + vram = true; 36 + ram = true; 37 + }; 38 + }; 39 + home.sessionVariables.MANGOHUD_CONFIGFILE = "${homeConfig.xdg.configHome}/MangoHud/MangoHud.conf"; 40 + }; 41 + }
+28
modules/graphics.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "graphics"; 8 + 9 + options.graphics = with delib; { 10 + enable = boolOption true; 11 + }; 12 + 13 + nixos.ifEnabled = {cfg, ...}: { 14 + hardware.graphics = { 15 + enable = true; 16 + enable32Bit = true; 17 + }; 18 + 19 + environment.systemPackages = with pkgs; [amdgpu_top lact nvtopPackages.full]; 20 + 21 + systemd.services.lactd = { 22 + description = "AMDGPU Control Daemon"; 23 + enable = true; 24 + serviceConfig.ExecStart = "${pkgs.lact}/bin/lact daemon"; 25 + wantedBy = ["multi-user.target"]; 26 + }; 27 + }; 28 + }
+21
modules/i18n.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "i18n"; 4 + 5 + nixos.always = { 6 + time.timeZone = "Australia/Melbourne"; 7 + i18n.defaultLocale = "en_GB.UTF-8"; 8 + 9 + i18n.extraLocaleSettings = { 10 + LC_ADDRESS = "en_AU.UTF-8"; 11 + LC_IDENTIFICATION = "en_AU.UTF-8"; 12 + LC_MEASUREMENT = "en_AU.UTF-8"; 13 + LC_MONETARY = "en_AU.UTF-8"; 14 + LC_NAME = "en_AU.UTF-8"; 15 + LC_NUMERIC = "en_AU.UTF-8"; 16 + LC_PAPER = "en_AU.UTF-8"; 17 + LC_TELEPHONE = "en_AU.UTF-8"; 18 + LC_TIME = "en_AU.UTF-8"; 19 + }; 20 + }; 21 + }
+11
modules/logitech.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "logitech"; 4 + 5 + options = delib.singleEnableOption true; 6 + 7 + nixos.ifEnabled = { 8 + hardware.logitech.wireless.enable = true; 9 + hardware.new-lg4ff.enable = true; 10 + }; 11 + }
+11
modules/memory.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "memory"; 4 + 5 + nixos.always = { 6 + services.earlyoom.enable = true; 7 + services.earlyoom.enableNotifications = true; 8 + zramSwap.enable = true; 9 + zramSwap.algorithm = "zstd"; 10 + }; 11 + }
+53
modules/networking.nix
··· 1 + { 2 + delib, 3 + host, 4 + ... 5 + }: 6 + delib.module { 7 + name = "networking"; 8 + 9 + options.networking = with delib; { 10 + nameservers = listOfOption str ["1.1.1.1" "1.0.0.1"]; 11 + hosts = attrsOfOption (listOf str) {}; 12 + }; 13 + 14 + nixos.always = { 15 + myconfig, 16 + cfg, 17 + ... 18 + }: let 19 + inherit (myconfig.constants) username; 20 + in { 21 + networking = { 22 + hostName = host.name; 23 + 24 + firewall.enable = true; 25 + networkmanager.enable = true; 26 + 27 + # dhcpcd.extraConfig = "nohook resolv.conf"; 28 + # networkmanager.dns = "none"; 29 + 30 + inherit (cfg) hosts nameservers; 31 + }; 32 + 33 + # TODO: necessary? 34 + services.resolved = { 35 + enable = true; 36 + # dnssec = "true"; 37 + domains = ["~."]; 38 + fallbackDns = cfg.nameservers; 39 + # dnsovertls = "trues"; 40 + }; 41 + 42 + services.tailscale = { 43 + enable = true; 44 + openFirewall = true; 45 + useRoutingFeatures = "client"; 46 + }; 47 + 48 + # services.mullvad-vpn.enable = true; 49 + # services.mullvad-vpn.package = pkgs.mullvad-vpn; 50 + 51 + users.users.${username}.extraGroups = ["networkmanager"]; 52 + }; 53 + }
+39
modules/nix.nix
··· 1 + { 2 + delib, 3 + inputs, 4 + ... 5 + }: let 6 + shared.nix.settings = { 7 + auto-optimise-store = true; 8 + experimental-features = ["nix-command" "flakes"]; 9 + trusted-users = ["root" "@wheel"]; 10 + }; 11 + in 12 + delib.module { 13 + name = "nix"; 14 + 15 + # TODO: double check home-manager options 16 + home.always = shared; 17 + nixos.always = 18 + shared 19 + // { 20 + nix = { 21 + gc = { 22 + automatic = true; 23 + options = "--delete-older-than 10d"; 24 + dates = "weekly"; 25 + }; 26 + 27 + nixPath = ["nixpkgs=${inputs.nixpkgs}"]; 28 + 29 + registry.nixpkgs.to = { 30 + type = "path"; 31 + path = inputs.nixpkgs; 32 + narHash = inputs.nixpkgs.narHash; 33 + }; 34 + }; 35 + 36 + nixpkgs.config.allowUnfree = true; 37 + system.tools.nixos-option.enable = false; 38 + }; 39 + }
-13
modules/nixpkgs.nix
··· 1 - {inputs, ...}: { 2 - # Make sure that the `nixpkgs` reference on the CLI refers to the system 3 - # nixpkgs so that it does not keep re-downloading the latest version every 4 - # time I want to run a single package 5 - nix.registry.nixpkgs.to = { 6 - type = "path"; 7 - path = inputs.nixpkgs; 8 - narHash = inputs.nixpkgs.narHash; 9 - }; 10 - 11 - nixpkgs.config.allowUnfree = true; 12 - nix.nixPath = ["nixpkgs=${inputs.nixpkgs}"]; 13 - }
+10
modules/ollama.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "ollama"; 4 + 5 + nixos.always.services.ollama = { 6 + enable = true; 7 + acceleration = "rocm"; 8 + rocmOverrideGfx = "11.0.0"; 9 + }; 10 + }
+13
modules/packaging.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "packaging"; 4 + 5 + nixos.always = { 6 + services.flatpak.enable = true; 7 + 8 + programs.appimage = { 9 + enable = true; 10 + binfmt = true; 11 + }; 12 + }; 13 + }
+43
modules/plasma.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "plasma"; 8 + 9 + options = delib.singleEnableOption true; 10 + 11 + nixos.ifEnabled = { 12 + services.displayManager = { 13 + enable = true; 14 + defaultSession = "plasma"; 15 + 16 + sddm.enable = true; 17 + sddm.wayland.enable = true; 18 + 19 + autoLogin = { 20 + enable = true; 21 + user = "ovy"; 22 + }; 23 + }; 24 + 25 + services.desktopManager.plasma6.enable = true; 26 + 27 + environment.plasma6.excludePackages = with pkgs.kdePackages; [ 28 + elisa 29 + gwenview 30 + konsole 31 + ]; 32 + 33 + qt = { 34 + enable = true; 35 + style = "kvantum"; 36 + platformTheme = "kde"; 37 + }; 38 + 39 + # environment.sessionVariables."NIXOS_OZONE_WL" = 1; 40 + environment.sessionVariables."MOZ_ENABLE_WAYLAND" = 0; 41 + environment.systemPackages = with pkgs; [adwaita-icon-theme kdePackages.kcalc kdePackages.partitionmanager kdePackages.kcolorchooser]; 42 + }; 43 + }
+12
modules/programs/bat.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.bat"; 4 + 5 + home.always.programs.bat = { 6 + enable = true; 7 + config = { 8 + theme = "DarkNeon"; 9 + italic-text = "always"; 10 + }; 11 + }; 12 + }
+45
modules/programs/core-cli.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.core-cli"; 8 + 9 + nixos.always = { 10 + environment.systemPackages = with pkgs; [ 11 + ffmpeg-full 12 + fuzzel 13 + git 14 + nil 15 + niri 16 + openssh 17 + p7zip 18 + pciutils 19 + solaar 20 + sysstat 21 + unar 22 + wcurl 23 + wget 24 + wineWowPackages.full 25 + ]; 26 + 27 + programs.fish.enable = true; 28 + }; 29 + 30 + home.always = { 31 + home.packages = with pkgs; [ 32 + curlie 33 + du-dust 34 + duf 35 + fd 36 + jq 37 + nix-your-shell 38 + ripgrep 39 + ]; 40 + 41 + programs.aria2.enable = true; 42 + programs.eza.enable = true; 43 + programs.nix-index.enable = true; 44 + }; 45 + }
+52
modules/programs/desktop-apps.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.desktop-apps"; 8 + 9 + home.always = { 10 + home.packages = with pkgs; [ 11 + alejandra 12 + audacity 13 + blender 14 + btop # TODO: module & options 15 + bruno 16 + # davinci-resolve 17 + # distrobox 18 + gajim 19 + glaxnimate 20 + # godot_4 21 + handbrake 22 + heynote 23 + klog-time-tracker 24 + libreoffice 25 + losslesscut-bin 26 + lunacy 27 + lutris 28 + # mixxx 29 + obs-studio 30 + obsidian 31 + oversteer 32 + p7zip 33 + picard 34 + pinta 35 + piper 36 + podman-tui 37 + # plasticity 38 + prismlauncher 39 + qbittorrent 40 + qimgv 41 + slack 42 + vesktop 43 + vlc 44 + vorta 45 + winetricks 46 + yt-dlp 47 + yubioath-flutter 48 + ]; 49 + 50 + services.owncloud-client.enable = true; 51 + }; 52 + }
+19
modules/programs/direnv.nix
··· 1 + { 2 + delib, 3 + homeConfig, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.bat"; 8 + 9 + home.always.programs.direnv = { 10 + enable = true; 11 + nix-direnv.enable = true; 12 + config.whitelist.prefix = [ 13 + "${homeConfig.home.homeDirectory}/Projects/bots-gg" 14 + "${homeConfig.home.homeDirectory}/Projects/dijit" 15 + "${homeConfig.home.homeDirectory}/Projects/personal" 16 + "${homeConfig.home.homeDirectory}/Projects/work" 17 + ]; 18 + }; 19 + }
+31
modules/programs/fzf.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.fzf"; 4 + 5 + home.always = { 6 + # TODO 7 + # Investigate preview stuff as default command 8 + # https://github.com/kidonng/preview.fish 9 + # Explore fzf search modes 10 + programs.fzf = { 11 + enable = true; 12 + enableFishIntegration = false; 13 + defaultOptions = [ 14 + "--ansi" 15 + "--cycle" 16 + "--layout=reverse" 17 + "--border" 18 + "--height=90%" 19 + "--marker=\"*\"" 20 + "--preview 'bat --color=always --style=header,numbers --line-range :300 {}'" 21 + # I usually use a vertical term so this is more practical. 22 + # TODO: possible to dynamically change based on terminal dimensinns? 23 + "--preview-window='bottom:50%:wrap'" 24 + ]; 25 + # TODO: only if fd config is enabled 26 + defaultCommand = "fd --color=always --type file --follow --hidden --exclude .git --exclude node_modules"; 27 + }; 28 + 29 + home.sessionVariables.FZF_CTRL_T_COMMAND = "fd --color=always --follow"; 30 + }; 31 + }
+73
modules/programs/git.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.git"; 4 + 5 + home.always = {myconfig, ...}: let 6 + inherit (myconfig.constants) userfullname useremail; 7 + in { 8 + xdg.configFile."git/allowed_signers".source = ../../../files/git/allowed_signers; 9 + 10 + programs.git = { 11 + enable = true; 12 + userName = userfullname; 13 + userEmail = useremail; 14 + delta.enable = true; 15 + 16 + signing = { 17 + signByDefault = true; 18 + format = "ssh"; 19 + key = "~/.ssh/id_ed25519_sk_rk"; 20 + }; 21 + 22 + extraConfig = { 23 + # TODO: custom pretty stuff? 24 + blame.showEmail = true; 25 + init.defaultBranch = "main"; 26 + pull.rebase = true; 27 + 28 + log = { 29 + abbrevCommit = true; 30 + # TODO: `git log --oneline` looks silly with this. Need custom format. 31 + showSignature = true; 32 + # TODO: trial for a while and see if I like this. 33 + date = "human"; 34 + }; 35 + 36 + merge = { 37 + # Try to avoid merge commits 38 + ff = "only"; 39 + # Really only useful on a well-managed team. Maybe eventually. 40 + # verifySignatures = true; 41 + }; 42 + 43 + push = { 44 + autoSetupRemote = true; 45 + followTags = true; 46 + }; 47 + 48 + # Require explicit `drop` in interactive rebase 49 + rebase.missingCommitsCheck = "error"; 50 + rerere.enabled = true; 51 + 52 + status = { 53 + relativePaths = false; 54 + showStash = true; 55 + }; 56 + 57 + gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers"; 58 + # "gpg.ssh.program = "gfh-keygen"; 59 + # "gpg.ssh.defaultKeyCommand = "gfh"; 60 + }; 61 + }; 62 + 63 + programs.gh = { 64 + enable = true; 65 + settings = { 66 + git_protocol = "ssh"; 67 + aliases = { 68 + clone = "repo clone"; 69 + }; 70 + }; 71 + }; 72 + }; 73 + }
+17
modules/programs/micro.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.micro"; 4 + 5 + home.always.programs.micro = { 6 + enable = true; 7 + settings = { 8 + clipboard = "external"; 9 + hlsearch = true; 10 + parsecursor = true; 11 + scrollbar = true; 12 + tabmovement = true; 13 + tabsize = 2; 14 + tabstospaces = true; 15 + }; 16 + }; 17 + }
+19
modules/programs/pager.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.pager"; 8 + 9 + # TODO: read docs and experiment 10 + home.always = { 11 + home.packages = [pkgs.moar]; 12 + home.sessionVariables = { 13 + PAGER = "moar"; 14 + MOAR = "--no-linenumbers"; 15 + MANPAGER = "sh -c 'col -bx | bat -l man -p'"; 16 + MANROFFOPT = "-c"; 17 + }; 18 + }; 19 + }
+18
modules/programs/ssh.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.ssh"; 4 + 5 + home.always.programs.ssh = { 6 + enable = true; 7 + matchBlocks = { 8 + "*" = { 9 + identitiesOnly = true; 10 + identityFile = "~/.ssh/id_ed25519_sk_rk"; 11 + user = "ovy"; 12 + }; 13 + }; 14 + 15 + # TODO: if darwin 16 + # programs.ssh.includes = ["~/.orbstack/ssh/config"]; 17 + }; 18 + }
+24
modules/programs/syncthing.nix
··· 1 + { 2 + delib, 3 + lib, 4 + homeConfig, 5 + pkgs, 6 + ... 7 + }: 8 + delib.module { 9 + name = "programs.syncthing"; 10 + 11 + options = delib.singleEnableOption true; 12 + 13 + home.ifEnabled = { 14 + services.syncthing = { 15 + enable = true; 16 + tray.enable = true; 17 + tray.package = pkgs.syncthingtray; 18 + }; 19 + 20 + # Fix syncthingtray complaining about the tray not existing, because of the custom tray service above. 21 + systemd.user.services.syncthingtray.Service.ExecStart = 22 + lib.mkForce "${homeConfig.services.syncthing.tray.package}/bin/${homeConfig.services.syncthing.tray.command} --wait"; 23 + }; 24 + }
+13
modules/programs/tldr.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.tldr"; 4 + 5 + home.always.programs.tealdeer = { 6 + enable = true; 7 + settings = { 8 + updates = { 9 + auto_update = true; 10 + }; 11 + }; 12 + }; 13 + }
+240
modules/programs/vscode.nix
··· 1 + { 2 + delib, 3 + inputs, 4 + pkgs, 5 + ... 6 + }: 7 + delib.module { 8 + name = "programs.vscode"; 9 + 10 + options = delib.singleEnableOption true; 11 + 12 + home.ifEnabled = { 13 + home.sessionVariables.EDITOR = "codium --wait"; 14 + 15 + programs.vscode = { 16 + enable = true; 17 + mutableExtensionsDir = false; 18 + package = pkgs.vscodium; 19 + 20 + profiles.default = { 21 + enableUpdateCheck = false; 22 + enableExtensionUpdateCheck = false; 23 + 24 + extensions = let 25 + vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system}; 26 + inherit (vscode-extensions) open-vsx vscode-marketplace; 27 + in 28 + with open-vsx; [ 29 + kamadorueda.alejandra 30 + astro-build.astro-vscode 31 + matthewpi.caddyfile-support 32 + raidou.calc 33 + artlaman.chalice-icon-theme # TODO: i should fork this to add support for some newer files (tbd) 34 + adpyke.codesnap 35 + clinyong.vscode-css-modules 36 + mkhl.direnv 37 + leonardssh.vscord 38 + ms-azuretools.vscode-docker 39 + editorconfig.editorconfig 40 + irongeek.vscode-env 41 + pgourlain.erlang 42 + usernamehw.errorlens 43 + dbaeumer.vscode-eslint 44 + tamasfe.even-better-toml 45 + sleistner.vscode-fileutils 46 + bmalehorn.vscode-fish 47 + github.vscode-github-actions 48 + eamodio.gitlens 49 + # TODO: terraform (use opentofu instead) 50 + ms-vscode.hexeditor 51 + lokalise.i18n-ally 52 + kisstkondoros.vscode-gutter-preview 53 + ms-python.isort 54 + bierner.markdown-preview-github-styles 55 + unifiedjs.vscode-mdx 56 + jnoortheen.nix-ide 57 + nuxtr.nuxtr-vscode 58 + vunguyentuan.vscode-postcss 59 + esbenp.prettier-vscode 60 + prisma.prisma 61 + # TODO: use jedi instead of pylance 62 + ms-python.python 63 + ms-python.debugpy 64 + mechatroner.rainbow-csv 65 + medo64.render-crlf 66 + stkb.rewrap 67 + rust-lang.rust-analyzer 68 + mrmlnc.vscode-scss 69 + svelte.svelte-vscode 70 + jock.svg 71 + coolbear.systemd-unit-file 72 + bradlc.vscode-tailwindcss 73 + myriad-dreamin.tinymist 74 + gruntfuggly.todo-tree 75 + tomoki1207.pdf 76 + zxh404.vscode-proto3 77 + styled-components.vscode-styled-components # TODO: don't really need this 78 + vue.volar 79 + wakatime.vscode-wakatime 80 + redhat.vscode-yaml 81 + arcanis.vscode-zipfs 82 + vscode-marketplace.wraith13.background-phi-colors 83 + vscode-marketplace.be5invis.theme-dolch 84 + vscode-marketplace.fabiospampinato.vscode-diff 85 + vscode-marketplace.jakebecker.elixir-ls 86 + vscode-marketplace.zh9528.file-size 87 + vscode-marketplace.vladdesv.vscode-klog 88 + vscode-marketplace.dt.ghlink 89 + vscode-marketplace.tyriar.lorem-ipsum 90 + vscode-marketplace.phoenixframework.phoenix 91 + vscode-marketplace.frigus02.vscode-sql-tagged-template-literals-syntax-only # TODO: alternative? 92 + ]; 93 + 94 + userSettings = { 95 + # Formatters 96 + "editor.defaultFormatter" = "esbenp.prettier-vscode"; 97 + "[elixir]"."editor.defaultFormatter" = "JakeBecker.elixir-ls"; 98 + "[nix]"."editor.defaultFormatter" = "kamadorueda.alejandra"; 99 + "[prisma]"."editor.defaultFormatter" = "Prisma.prisma"; 100 + "[python]"."editor.defaultFormatter" = "ms-python.python"; 101 + "[rust]"."editor.defaultFormatter" = "rust-lang.rust-analyzer"; 102 + 103 + # Sane defaults 104 + "editor.tabSize" = 2; 105 + "editor.insertSpaces" = true; 106 + "breadcrumbs.enabled" = true; 107 + "editor.wordWrap" = "off"; 108 + "security.workspace.trust.enabled" = false; 109 + "security.workspace.trust.untrustedFiles" = "open"; 110 + "files.eol" = "\n"; 111 + "workbench.editor.empty.hint" = "hidden"; 112 + "comments.openView" = "never"; 113 + "editor.minimap.enabled" = false; 114 + "editor.stickyScroll.enabled" = true; 115 + "workbench.layoutControl.enabled" = false; 116 + "diffEditor.ignoreTrimWhitespace" = true; 117 + "editor.acceptSuggestionOnEnter" = "off"; 118 + "editor.formatOnSave" = true; 119 + "editor.inlineSuggest.enabled" = true; 120 + "editor.renderWhitespace" = "none"; 121 + "editor.suggestSelection" = "first"; 122 + "editor.tabCompletion" = "on"; 123 + "emmet.triggerExpansionOnTab" = true; 124 + "explorer.confirmDelete" = false; 125 + "explorer.confirmDragAndDrop" = false; 126 + "redhat.telemetry.enabled" = false; 127 + "workbench.tips.enabled" = false; 128 + "workbench.tree.indent" = 16; 129 + "workbench.tree.renderIndentGuides" = "always"; 130 + "editor.unicodeHighlight.ambiguousCharacters" = true; 131 + "errorLens.enabledDiagnosticLevels" = ["error" "warning"]; 132 + "editor.acceptSuggestionOnCommitCharacter" = false; 133 + "files.watcherExclude" = { 134 + "**/.git/**" = true; 135 + "**/node_modules/*/**" = true; 136 + }; 137 + "search.exclude" = { 138 + "**/node_modules" = true; 139 + "**/bower_components" = true; 140 + "**/*.code-search" = true; 141 + "**/.yarn" = true; 142 + }; 143 + "terminal.integrated.commandsToSkipShell" = [ 144 + "-workbench.action.quickOpenView" 145 + "-workbench.action.quickOpen" 146 + "-editor.action.clipboardCutAction" 147 + ]; 148 + # "prettier.prettierPath" = "prettierd"; 149 + "prettier.proseWrap" = "always"; 150 + 151 + # Pretties 152 + "workbench.colorTheme" = "Dolch"; 153 + "workbench.iconTheme" = "chalice-icon-theme"; 154 + "editor.fontFamily" = "'Iosevka Solai', Menlo, Monaco, 'Courier New', monospace"; 155 + "editor.fontSize" = 16; 156 + "terminal.integrated.fontFamily" = "'Iosevka Solai Term', Consolas, 'Courier New', monospace"; 157 + "terminal.integrated.fontSize" = 14; 158 + "terminal.integrated.scrollback" = 9999999999; 159 + "editor.fontLigatures" = true; 160 + "editor.cursorSmoothCaretAnimation" = "on"; 161 + "editor.smoothScrolling" = true; 162 + "zenMode.fullScreen" = false; 163 + "zenMode.centerLayout" = false; 164 + "zenMode.hideLineNumbers" = true; 165 + 166 + # No barfing rainbows over my UI pls 167 + "backgroundPhiColors.baseColor" = "#FFFFFF"; 168 + "backgroundPhiColors.bodySpacesEnabled" = false; 169 + "backgroundPhiColors.indentErrorEnabled" = false; 170 + "backgroundPhiColors.lineEnabled" = false; 171 + "backgroundPhiColors.spacesAlpha" = 10; 172 + "backgroundPhiColors.tokenActiveAlpha" = 30; 173 + "editor.bracketPairColorization.enabled" = false; 174 + 175 + # Codesnap 176 + "codesnap.containerPadding" = "2em"; 177 + "codesnap.target" = "window"; 178 + "codesnap.transparentBackground" = true; 179 + "codesnap.boxShadow" = "none"; 180 + "codesnap.showLineNumbers" = false; 181 + "codesnap.showWindowControls" = false; 182 + "codesnap.shutterAction" = "copy"; 183 + "codesnap.roundedCorners" = true; 184 + 185 + # Git 186 + "git.autorefresh" = true; 187 + "git.autofetch" = false; 188 + "git.autoStash" = true; 189 + "git.mergeEditor" = false; 190 + "git.confirmSync" = false; 191 + "git.enableSmartCommit" = true; 192 + "gitlens.advanced.messages" = { 193 + "suppressLineUncommittedWarning" = true; 194 + }; 195 + "gitlens.hovers.currentLine.over" = "annotation"; 196 + 197 + # Nix 198 + "nix.enableLanguageServer" = true; 199 + "nix.serverPath" = "nil"; 200 + "alejandra.program" = "alejandra"; 201 + 202 + # Elixir/erlang 203 + "elixirLS.suggestSpecs" = false; 204 + "elixirLS.fetchDeps" = false; 205 + "elixirLS.mixEnv" = "dev"; 206 + "elixir.credo.ignoreWarningMessages" = true; 207 + 208 + # Python 209 + "python.analysis.typeCheckingMode" = "basic"; 210 + 211 + # JS 212 + "debug.javascript.autoAttachFilter" = "onlyWithFlag"; 213 + 214 + # CSS 215 + "files.associations"."*.css" = "tailwindcss"; 216 + 217 + # Misc 218 + "yaml.format.proseWrap" = "always"; 219 + "workbench.startupEditor" = "none"; 220 + "remote.SSH.connectTimeout" = 30; 221 + "remote.SSH.useLocalServer" = true; 222 + "remote.SSH.path" = "/run/current-system/sw/bin/ssh"; 223 + "extensions.ignoreRecommendations" = true; 224 + "svg.preview.mode" = "svg"; 225 + "vscord.status.problems.enabled" = false; 226 + "vscord.status.state.text.editing" = "Working on {file_name}{file_extension}"; 227 + "vscord.ignore.workspaces" = ["~/Work"]; 228 + "typescript.updateImportsOnFileMove.enabled" = "never"; 229 + "git.openRepositoryInParentFolders" = "never"; 230 + "diffEditor.useInlineViewWhenSpaceIsLimited" = false; 231 + "svelte.enable-ts-plugin" = true; 232 + "gitlens.launchpad.indicator.enabled" = false; 233 + "window.titleBarStyle" = "custom"; 234 + "files.simpleDialog.enable" = true; 235 + "window.dialogStyle" = "custom"; 236 + }; 237 + }; 238 + }; 239 + }; 240 + }
+15
modules/programs/zellij.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.zellij"; 4 + 5 + home.always.programs.zellij = { 6 + enable = true; 7 + enableFishIntegration = false; 8 + settings = { 9 + mouse_mode = true; 10 + theme = "catppuccin-mocha"; 11 + ui.pane_frames.rounded_corners = true; 12 + ui.pane_frames.hide_session_name = true; 13 + }; 14 + }; 15 + }
+9
modules/programs/zoxide.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "programs.zoxide"; 4 + 5 + home.always.programs.zoxide = { 6 + enable = true; 7 + enableFishIntegration = true; 8 + }; 9 + }
+11
modules/sysctl.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "sysctl"; 4 + 5 + nixos.always = { 6 + boot.kernel.sysctl = { 7 + "vm.max_map_count" = 2147483642; 8 + "fs.file-max" = 2147483642; 9 + }; 10 + }; 11 + }
+15
modules/systemd.nix
··· 1 + {delib, ...}: 2 + delib.module { 3 + name = "systemd"; 4 + 5 + nixos.always = { 6 + systemd = { 7 + extraConfig = '' 8 + DefaultTimeoutStopSec=30s 9 + ''; 10 + user.extraConfig = '' 11 + DefaultTimeoutStopSec=30s 12 + ''; 13 + }; 14 + }; 15 + }
+16
modules/tray.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "tray"; 8 + 9 + # TODO: i don't think this is needed anymore??? 10 + home.always.systemd.user.targets.tray = { 11 + Unit = { 12 + Description = "Home Manager System Tray"; 13 + Requires = ["graphical-session-pre.target"]; 14 + }; 15 + }; 16 + }
+26
modules/virtualisation.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "virtualisation"; 8 + 9 + nixos.always = {myconfig, ...}: let 10 + inherit (myconfig.constants) username; 11 + in { 12 + environment.systemPackages = [pkgs.docker-compose]; 13 + # programs.virt-manager.enable = true; 14 + # virtualisation.libvirtd.enable = true; 15 + # virtualisation.oci-containers.backend = "podman"; 16 + 17 + virtualisation.podman = { 18 + enable = true; 19 + defaultNetwork.settings.dns_enabled = true; 20 + }; 21 + 22 + users.users.${username}.extraGroups = ["libvirtd"]; 23 + }; 24 + 25 + home.always.home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock"; 26 + }
+34
modules/xdg.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "programs.espanso"; 8 + 9 + home.always = let 10 + vivalarc = pkgs.fetchFromGitHub { 11 + owner = "tovifun"; 12 + repo = "VivalArc"; 13 + rev = "7ee09e9efb46c1524a43f0cb6763b9750db6e81c"; 14 + hash = "sha256-xYSxB8KjcbeUDEdbA2AJ9FeQC1TkqyXdB9rTMMSm+FA="; 15 + }; 16 + in { 17 + xdg.desktopEntries.davinci-resolve = { 18 + name = "Davinci Resolve"; 19 + exec = "davinci-resolve"; 20 + categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"]; 21 + comment = "Professional video editing, color, effects and audio post-processing"; 22 + genericName = "Video Editor"; 23 + type = "Application"; 24 + settings.Version = "1.4"; 25 + }; 26 + 27 + xdg.dataFile."vivalarc".source = vivalarc; 28 + }; 29 + 30 + # if darwin: xdg.configFile = { 31 + # TODO: replace with the full karabiner config instead of needing to manually set complex mods 32 + # "karabiner/assets/complex_modifications/keybind-helpers.json".source = ../../../files/karabiner/keybind-helpers.json; 33 + # }; 34 + }
+15
modules/zsa.nix
··· 1 + { 2 + delib, 3 + pkgs, 4 + ... 5 + }: 6 + delib.module { 7 + name = "zsa"; 8 + 9 + options = delib.singleEnableOption true; 10 + 11 + nixos.ifEnabled = { 12 + environment.systemPackages = [pkgs.keymapp]; 13 + hardware.keyboard.zsa.enable = true; 14 + }; 15 + }
-14
nixos/wallsocket/bluetooth.nix
··· 1 - {pkgs, ...}: { 2 - hardware.bluetooth.enable = true; 3 - hardware.bluetooth.settings = { 4 - # Try and reduce latency from Xbox Series controllers 5 - # https://atar-axis.github.io/xpadneo#high-latency-or-lost-button-events-with-bluetooth-le 6 - LE = { 7 - MinConnectionInterval = 7; 8 - MaxConnectionInterval = 9; 9 - ConnectionLatency = 0; 10 - }; 11 - }; 12 - hardware.xpadneo.enable = true; 13 - environment.systemPackages = [pkgs.kdePackages.bluedevil]; 14 - }
-316
nixos/wallsocket/configuration.nix
··· 1 - { 2 - lib, 3 - inputs, 4 - pkgs, 5 - ... 6 - }: { 7 - imports = [ 8 - ./bluetooth.nix 9 - ./graphics.nix 10 - ./hardware-configuration.nix 11 - ../../modules/nixpkgs.nix 12 - ]; 13 - 14 - specialisation.niri.configuration = { 15 - system.nixos.tags = ["niri"]; 16 - imports = [./niri.nix]; 17 - 18 - services.displayManager.enable = false; 19 - services.displayManager.sddm.enable = false; 20 - services.displayManager.sddm.wayland.enable = false; 21 - # services.displayManager.defaultSession = lib.mkDefault "plasma"; 22 - services.desktopManager.plasma6.enable = false; 23 - }; 24 - 25 - # Bootloader. 26 - boot.loader.systemd-boot.enable = true; 27 - boot.loader.systemd-boot.configurationLimit = 10; 28 - boot.loader.efi.canTouchEfiVariables = true; 29 - boot.kernel.sysctl."vm.max_map_count" = 2147483642; 30 - boot.kernel.sysctl."fs.file-max" = 2147483642; 31 - 32 - networking.hostName = "wallsocket"; 33 - networking.networkmanager.enable = true; 34 - 35 - # i18n & time 36 - time.timeZone = "Australia/Melbourne"; 37 - i18n.defaultLocale = "en_GB.UTF-8"; 38 - 39 - i18n.extraLocaleSettings = { 40 - LC_ADDRESS = "en_AU.UTF-8"; 41 - LC_IDENTIFICATION = "en_AU.UTF-8"; 42 - LC_MEASUREMENT = "en_AU.UTF-8"; 43 - LC_MONETARY = "en_AU.UTF-8"; 44 - LC_NAME = "en_AU.UTF-8"; 45 - LC_NUMERIC = "en_AU.UTF-8"; 46 - LC_PAPER = "en_AU.UTF-8"; 47 - LC_TELEPHONE = "en_AU.UTF-8"; 48 - LC_TIME = "en_AU.UTF-8"; 49 - }; 50 - 51 - # Enable the KDE Plasma Desktop Environment. 52 - services.displayManager.enable = lib.mkDefault true; 53 - services.displayManager.sddm.enable = lib.mkDefault true; 54 - services.displayManager.sddm.wayland.enable = lib.mkDefault true; 55 - services.displayManager.autoLogin = { 56 - enable = true; 57 - user = "ovy"; 58 - }; 59 - services.displayManager.defaultSession = lib.mkDefault "plasma"; # Set to `plasma` for Wayland. 60 - services.desktopManager.plasma6.enable = lib.mkDefault true; 61 - 62 - environment.plasma6.excludePackages = with pkgs.kdePackages; [ 63 - elisa 64 - gwenview 65 - konsole 66 - ]; 67 - 68 - security.pam.services.ovy.kwallet = { 69 - enable = true; 70 - package = pkgs.kdePackages.kwallet-pam; 71 - }; 72 - 73 - # Enable CUPS to print documents. 74 - services.printing.enable = true; 75 - 76 - services.usbmuxd.enable = true; 77 - 78 - # Enable sound with pipewire. 79 - services.pulseaudio.enable = false; 80 - security.rtkit.enable = true; 81 - services.pipewire = { 82 - enable = true; 83 - alsa.enable = true; 84 - alsa.support32Bit = true; 85 - pulse.enable = true; 86 - # If you want to use JACK applications, uncomment this 87 - #jack.enable = true; 88 - }; 89 - 90 - users.users.ovy = { 91 - isNormalUser = true; 92 - description = "Ashlynne Mitchell"; 93 - extraGroups = ["networkmanager" "wheel" "libvirtd" "cdrom" "adbusers"]; 94 - shell = pkgs.fish; 95 - }; 96 - 97 - programs.adb.enable = true; 98 - 99 - system.tools.nixos-option.enable = false; 100 - 101 - nix.settings = { 102 - auto-optimise-store = true; 103 - experimental-features = ["nix-command" "flakes"]; 104 - trusted-users = ["root" "@wheel"]; 105 - }; 106 - 107 - nix.gc = { 108 - automatic = true; 109 - options = "--delete-older-than 10d"; 110 - dates = "weekly"; 111 - }; 112 - 113 - # environment.sessionVariables."NIXOS_OZONE_WL" = 1; 114 - environment.sessionVariables."MOZ_ENABLE_WAYLAND" = 0; 115 - environment.systemPackages = with pkgs; [ 116 - adwaita-icon-theme 117 - amdgpu_top 118 - docker-compose 119 - ffmpeg-full 120 - git 121 - keymapp 122 - nil 123 - niri 124 - openssh 125 - solaar 126 - unar 127 - wget 128 - wcurl 129 - sysstat 130 - p7zip 131 - kdePackages.kcalc 132 - kdePackages.partitionmanager 133 - kdePackages.kcolorchooser 134 - pciutils 135 - nvtopPackages.full 136 - wineWowPackages.full 137 - 138 - fuzzel 139 - # tailscale-systray 140 - # wl-clipboard 141 - # kitty 142 - # swaylock 143 - # libsecret 144 - # wayland-utils 145 - ]; 146 - 147 - # Allow `keymapp` to control my ZSA Moonlander 148 - # https://github.com/zsa/wally/wiki/Linux-install#2-create-a-udev-rule-file 149 - services.udev.extraRules = let 150 - # nubia 5g 151 - nubia = { 152 - vendor = "1782"; 153 - product = "4021"; 154 - }; 155 - in '' 156 - # Rules for Oryx web flashing and live training 157 - KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", MODE="0664", GROUP="plugdev" 158 - KERNEL=="hidraw*", ATTRS{idVendor}=="3297", MODE="0664", GROUP="plugdev" 159 - 160 - # Legacy rules for live training over webusb (Not needed for firmware v21+) 161 - # Rule for all ZSA keyboards 162 - SUBSYSTEM=="usb", ATTR{idVendor}=="3297", GROUP="plugdev" 163 - # Rule for the Moonlander 164 - SUBSYSTEM=="usb", ATTR{idVendor}=="3297", ATTR{idProduct}=="1969", GROUP="plugdev" 165 - # Rule for the Ergodox EZ 166 - SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="1307", GROUP="plugdev" 167 - # Rule for the Planck EZ 168 - SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="6060", GROUP="plugdev" 169 - 170 - # Wally Flashing rules for the Ergodox EZ 171 - ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1" 172 - ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1" 173 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666" 174 - KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666" 175 - 176 - # Keymapp / Wally Flashing rules for the Moonlander and Planck EZ 177 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666", SYMLINK+="stm32_dfu" 178 - # Keymapp Flashing rules for the Voyager 179 - SUBSYSTEMS=="usb", ATTRS{idVendor}=="3297", MODE:="0666", SYMLINK+="ignition_dfu" 180 - 181 - # ADB support for Nubia 5G 182 - SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", MODE="[]", GROUP="adbusers", TAG+="uaccess" 183 - SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", ATTR{idProduct}=="${nubia.product}", SYMLINK+="android_adb" 184 - SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", ATTR{idProduct}=="${nubia.product}", SYMLINK+="android_fastboot" 185 - ''; 186 - 187 - programs.fish.enable = true; 188 - services.mullvad-vpn.enable = true; 189 - services.mullvad-vpn.package = pkgs.mullvad-vpn; 190 - 191 - networking.nameservers = ["1.1.1.1" "1.0.0.1"]; 192 - services.resolved = { 193 - enable = true; 194 - # dnssec = "true"; 195 - domains = ["~."]; 196 - fallbackDns = ["1.1.1.1" "1.0.0.1"]; 197 - # dnsovertls = "trues"; 198 - }; 199 - 200 - fonts = { 201 - packages = [ 202 - pkgs.ubuntu_font_family 203 - pkgs.inter 204 - inputs.iosevka-solai.packages.x86_64-linux.bin 205 - ]; 206 - 207 - fontDir.enable = true; 208 - enableDefaultPackages = true; 209 - 210 - fontconfig = { 211 - defaultFonts = { 212 - serif = ["Noto Serif"]; 213 - sansSerif = ["Inter"]; 214 - monospace = ["Iosevka Solai"]; 215 - emoji = ["Noto Color Emoji"]; 216 - }; 217 - }; 218 - }; 219 - 220 - environment.sessionVariables = { 221 - FONTCONFIG_PATH = "${pkgs.fontconfig}/etc/fonts"; 222 - FONTCONFIG_FILE = "${pkgs.fontconfig}/etc/fonts/fonts.conf"; 223 - }; 224 - 225 - # Wait for Aetf/kmscon#75 to merge, and then look into manually updating the package to test. 226 - # Potentially open a nixpkgs PR to do so? 227 - 228 - # services.kmscon = { 229 - # enable = true; 230 - # fonts = [ 231 - # { 232 - # name = "Iosevka Solai Term"; 233 - # package = inputs.iosevka-solai.packages.x86_64-linux.bin-term; 234 - # } 235 - # ]; 236 - # }; 237 - 238 - services.pcscd.enable = true; 239 - services.fwupd.enable = true; 240 - 241 - services.flatpak.enable = true; 242 - 243 - programs.appimage = { 244 - enable = true; 245 - binfmt = true; 246 - }; 247 - 248 - services.tailscale = { 249 - enable = true; 250 - openFirewall = true; 251 - useRoutingFeatures = "client"; 252 - }; 253 - 254 - programs.steam = { 255 - enable = true; 256 - remotePlay.openFirewall = true; 257 - localNetworkGameTransfers.openFirewall = true; 258 - extraCompatPackages = [pkgs.proton-ge-bin]; 259 - }; 260 - 261 - programs.gamescope.enable = true; 262 - programs.gamemode.enable = true; 263 - 264 - # virtualisation.oci-containers.backend = "podman"; 265 - virtualisation.podman = { 266 - enable = true; 267 - defaultNetwork.settings.dns_enabled = true; 268 - }; 269 - 270 - virtualisation.libvirtd.enable = true; 271 - programs.virt-manager.enable = true; 272 - 273 - qt = { 274 - enable = true; 275 - style = "kvantum"; 276 - platformTheme = "kde"; 277 - }; 278 - 279 - systemd.extraConfig = '' 280 - DefaultTimeoutStopSec=30s 281 - ''; 282 - systemd.user.extraConfig = '' 283 - DefaultTimeoutStopSec=30s 284 - ''; 285 - 286 - services.systembus-notify.enable = true; 287 - programs._1password.enable = true; 288 - programs._1password-gui = { 289 - enable = true; 290 - polkitPolicyOwners = ["ovy"]; 291 - }; 292 - 293 - environment.etc."1password/custom_allowed_browsers" = { 294 - text = "vivaldi-bin"; 295 - mode = "0755"; 296 - }; 297 - 298 - services.avahi = { 299 - enable = true; 300 - nssmdns4 = true; 301 - openFirewall = true; 302 - }; 303 - 304 - services.ollama = { 305 - enable = true; 306 - acceleration = "rocm"; 307 - rocmOverrideGfx = "11.0.0"; 308 - }; 309 - 310 - services.earlyoom.enable = true; 311 - services.earlyoom.enableNotifications = true; 312 - zramSwap.enable = true; 313 - zramSwap.algorithm = "zstd"; 314 - 315 - system.stateVersion = "24.05"; # Did you read the comment? 316 - }
-16
nixos/wallsocket/graphics.nix
··· 1 - {pkgs, ...}: { 2 - hardware.graphics = { 3 - enable = true; 4 - enable32Bit = true; 5 - # extraPackages = [pkgs.amdvlk]; 6 - }; 7 - 8 - environment.systemPackages = [pkgs.lact]; 9 - 10 - systemd.services.lactd = { 11 - description = "AMDGPU Control Daemon"; 12 - enable = true; 13 - serviceConfig.ExecStart = "${pkgs.lact}/bin/lact daemon"; 14 - wantedBy = ["multi-user.target"]; 15 - }; 16 - }
-60
nixos/wallsocket/hardware-configuration.nix
··· 1 - { 2 - config, 3 - lib, 4 - pkgs, 5 - modulesPath, 6 - ... 7 - }: { 8 - imports = [ 9 - (modulesPath + "/installer/scan/not-detected.nix") 10 - ]; 11 - 12 - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; 13 - boot.initrd.kernelModules = []; 14 - boot.kernelModules = ["kvm-amd"]; 15 - boot.extraModulePackages = []; 16 - # boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_11; 17 - 18 - hardware.logitech.wireless.enable = true; 19 - hardware.new-lg4ff.enable = true; 20 - 21 - # Storage 22 - fileSystems."/" = { 23 - device = "/dev/disk/by-uuid/1b08f109-17e9-40f4-a7fd-6e5943ce7d5e"; 24 - fsType = "ext4"; 25 - }; 26 - 27 - fileSystems."/boot" = { 28 - device = "/dev/disk/by-uuid/CF5D-B9DB"; 29 - fsType = "vfat"; 30 - options = ["fmask=0022" "dmask=0022"]; 31 - }; 32 - 33 - fileSystems."/home" = { 34 - device = "/dev/disk/by-uuid/31974b72-eca5-4758-bd66-63ae57c1b4b0"; 35 - fsType = "ext4"; 36 - }; 37 - 38 - fileSystems."/mnt/misc" = { 39 - device = "/dev/disk/by-uuid/bbc7adf8-475a-4bec-843f-77d4b904c42e"; 40 - fsType = "ext4"; 41 - }; 42 - 43 - fileSystems."/mnt/games" = { 44 - device = "/dev/disk/by-uuid/e61763de-753c-42f0-ba9b-5ac6b6ffdf08"; 45 - fsType = "ext4"; 46 - }; 47 - 48 - swapDevices = []; 49 - 50 - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 51 - # (the default) this is the recommended approach. When using systemd-networkd it's 52 - # still possible to use this option, but it's recommended to use it in conjunction 53 - # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 54 - networking.useDHCP = lib.mkDefault true; 55 - # networking.interfaces.enp6s0.useDHCP = lib.mkDefault true; 56 - # networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true; 57 - 58 - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 59 - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 60 - }
-27
nixos/wallsocket/niri.nix
··· 1 - {pkgs, ...}: { 2 - programs.niri = { 3 - enable = true; 4 - package = pkgs.niri; 5 - }; 6 - 7 - # TODO: qtgreet? https://gitlab.com/marcusbritanicus/QtGreet 8 - services.greetd = { 9 - enable = true; 10 - settings = { 11 - default_session = { 12 - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd niri-session -r --window-padding 4"; 13 - user = "greeter"; 14 - }; 15 - }; 16 - }; 17 - 18 - environment.systemPackages = with pkgs; [ 19 - wl-clipboard 20 - wofi 21 - swaylock 22 - # swaynotificationcenter 23 - xwayland-satellite 24 - kdePackages.kwallet 25 - kdePackages.kwalletmanager 26 - ]; 27 - }