flake.nix (12120B) - Raw
1 { 2 description = "motiejus/config"; 3 4 inputs = { 5 nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; 6 nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; 7 flake-utils.url = "github:numtide/flake-utils"; 8 flake-compat.url = "github:nix-community/flake-compat"; 9 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 10 nur.url = "github:nix-community/NUR"; 11 12 home-manager.url = "github:nix-community/home-manager/release-25.11"; 13 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 14 15 agenix = { 16 url = "github:ryantm/agenix"; 17 inputs = { 18 nixpkgs.follows = "nixpkgs"; 19 home-manager.follows = "home-manager"; 20 darwin.follows = "nix-darwin"; 21 }; 22 }; 23 24 deploy-rs = { 25 url = "github:serokell/deploy-rs/5829cec63845eb50984dc8787b0edfe81bf5b980"; # https://github.com/serokell/deploy-rs/issues/325 26 inputs = { 27 nixpkgs.follows = "nixpkgs"; 28 flake-compat.follows = "flake-compat"; 29 utils.follows = "flake-utils"; 30 }; 31 }; 32 33 zig = { 34 url = "github:mitchellh/zig-overlay"; 35 inputs = { 36 nixpkgs.follows = "nixpkgs"; 37 flake-compat.follows = "flake-compat"; 38 }; 39 }; 40 41 nix-darwin = { 42 url = "github:nix-darwin/nix-darwin/nix-darwin-25.11"; 43 inputs.nixpkgs.follows = "nixpkgs"; 44 }; 45 46 nix-index-database.url = "github:Mic92/nix-index-database"; 47 nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; 48 49 gitignore.url = "github:hercules-ci/gitignore.nix"; 50 gitignore.inputs.nixpkgs.follows = "nixpkgs"; 51 52 pre-commit-hooks = { 53 url = "github:cachix/pre-commit-hooks.nix"; 54 inputs = { 55 nixpkgs.follows = "nixpkgs"; 56 flake-compat.follows = "flake-compat"; 57 gitignore.follows = "gitignore"; 58 }; 59 }; 60 }; 61 62 nixConfig = { 63 trusted-substituters = "https://cache.nixos.org/"; 64 trusted-public-keys = "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="; 65 extra-experimental-features = "nix-command flakes"; 66 }; 67 68 outputs = 69 { 70 self, 71 nixpkgs, 72 nixpkgs-unstable, 73 agenix, 74 deploy-rs, 75 flake-utils, 76 home-manager, 77 nixos-hardware, 78 nix-index-database, 79 nur, 80 zig, 81 nix-darwin, 82 ... 83 }@inputs: 84 let 85 myData = import ./data.nix; 86 87 baseOverlays = [ 88 nur.overlays.default 89 zig.overlays.default 90 91 #(_self: super: { deploy-rs-pkg = super.deploy-rs; }) 92 deploy-rs.overlays.default 93 #(_self: super: { 94 # deploy-rs = { 95 # deploy-rs = super.deploy-rs-pkg; 96 # inherit (super.deploy-rs) lib; 97 # }; 98 # deploy-rs-pkg = null; 99 #}) 100 ( 101 _: super: 102 rec { 103 gamja = super.callPackage ./pkgs/gamja.nix { }; 104 weather = super.callPackage ./pkgs/weather { }; 105 tmuxbash = super.callPackage ./pkgs/tmuxbash.nix { }; 106 gcloud-wrapped = super.callPackage ./pkgs/gcloud-wrapped { }; 107 } 108 // super.lib.optionalAttrs super.stdenv.isDarwin { 109 # fish gets SIGKILL in nix sandbox on darwin, breaking direnv tests 110 direnv = super.direnv.overrideAttrs { doCheck = false; }; 111 xscreensaver-mac = super.callPackage ./pkgs/xscreensaver-mac.nix { }; 112 } 113 // super.lib.optionalAttrs super.stdenv.isLinux rec { 114 nicer = super.callPackage ./pkgs/nicer.nix { }; 115 claudes = super.callPackage ./pkgs/claudes.nix { }; 116 chronoctl = super.callPackage ./pkgs/chronoctl.nix { }; 117 mrescue-alpine = super.callPackage ./pkgs/mrescue-alpine.nix { }; 118 119 # needs 0.9.28+ for __attribute__((cleanup)) 120 tinycc = super.tinycc.overrideAttrs { 121 version = "0.9.27-unstable-2026-02-07"; 122 src = super.fetchFromRepoOrCz { 123 repo = "tinycc"; 124 rev = "4597a9621e70a337b241d424f4ab4729cb75b426"; 125 hash = "sha256-/jm00d4BZQateOHkUatc9Y2ZofwvgkRgps72vgAOWno="; 126 }; 127 }; 128 129 mkDebianLive = super.callPackage ./pkgs/mrescue-debian.nix { }; 130 mrescue-debian-xfce = mkDebianLive { 131 flavor = "xfce"; 132 version = "13.3.0"; 133 hash = "sha256-xvHLR2gOOdsTIu7FrOZdxgfG6keqniEhhf9ywJmtNXQ="; 134 }; 135 136 # NixOS netboot rescue image 137 # Note: Update URL and hash manually from https://nixos.org/download 138 mrescue-nixos = super.callPackage ./pkgs/mrescue-nixos.nix { }; 139 } 140 // { 141 pkgs-unstable = import nixpkgs-unstable { 142 inherit (super.stdenv.hostPlatform) system; 143 config.allowUnfree = true; 144 overlays = [ 145 (_self: super: { 146 go = super.go_1_26; 147 buildGoModule = super.buildGo126Module; 148 buildGoPackage = super.buildGo126Package; 149 }) 150 ]; 151 }; 152 } 153 ) 154 ]; 155 156 in 157 { 158 #inherit (nixpkgs) legacyPackages; 159 160 nixosConfigurations = { 161 vm = nixpkgs.lib.nixosSystem { 162 system = "x86_64-linux"; 163 modules = [ 164 { nixpkgs.overlays = baseOverlays; } 165 ./hosts/vm/configuration.nix 166 home-manager.nixosModules.home-manager 167 ]; 168 specialArgs = { 169 inherit myData; 170 } 171 // inputs; 172 }; 173 174 fwminex = nixpkgs.lib.nixosSystem { 175 system = "x86_64-linux"; 176 modules = [ 177 { nixpkgs.overlays = baseOverlays; } 178 ./hosts/fwminex/configuration.nix 179 home-manager.nixosModules.home-manager 180 nixos-hardware.nixosModules.framework-12th-gen-intel 181 182 agenix.nixosModules.default 183 ]; 184 185 specialArgs = { 186 inherit myData; 187 } 188 // inputs; 189 }; 190 191 vno3-nk = nixpkgs.lib.nixosSystem { 192 system = "x86_64-linux"; 193 modules = [ 194 { nixpkgs.overlays = baseOverlays; } 195 ./hosts/vno3-nk/configuration.nix 196 home-manager.nixosModules.home-manager 197 agenix.nixosModules.default 198 ]; 199 200 specialArgs = { 201 inherit myData; 202 } 203 // inputs; 204 }; 205 206 vno1-gdrx = nixpkgs.lib.nixosSystem { 207 system = "x86_64-linux"; 208 modules = [ 209 { nixpkgs.overlays = baseOverlays; } 210 ./hosts/vno1-gdrx/configuration.nix 211 home-manager.nixosModules.home-manager 212 nix-index-database.nixosModules.nix-index 213 214 agenix.nixosModules.default 215 ]; 216 217 specialArgs = { 218 inherit myData; 219 } 220 // inputs; 221 }; 222 223 fra1-c = nixpkgs.lib.nixosSystem { 224 system = "x86_64-linux"; 225 modules = [ 226 { nixpkgs.overlays = baseOverlays; } 227 agenix.nixosModules.default 228 home-manager.nixosModules.home-manager 229 ./hosts/fra1-c/configuration.nix 230 ]; 231 232 specialArgs = { 233 inherit myData; 234 } 235 // inputs; 236 }; 237 238 vno2-desk2 = nixpkgs.lib.nixosSystem { 239 system = "x86_64-linux"; 240 modules = [ 241 { nixpkgs.overlays = baseOverlays; } 242 ./hosts/vno2-desk2/configuration.nix 243 home-manager.nixosModules.home-manager 244 agenix.nixosModules.default 245 ]; 246 247 specialArgs = { 248 inherit myData; 249 } 250 // inputs; 251 }; 252 253 }; 254 255 darwinConfigurations = { 256 macworx = nix-darwin.lib.darwinSystem { 257 modules = [ 258 { nixpkgs.overlays = baseOverlays; } 259 ./hosts/macworx/configuration.nix 260 home-manager.darwinModules.home-manager 261 agenix.darwinModules.default 262 ]; 263 specialArgs = { 264 inherit myData; 265 } 266 // inputs; 267 }; 268 }; 269 270 deploy.nodes = { 271 fwminex = { 272 hostname = "fwminex.jakst.vpn"; 273 profiles = { 274 system = { 275 sshUser = "motiejus"; 276 path = self.nixosConfigurations.fwminex.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.fwminex; 277 user = "root"; 278 }; 279 }; 280 }; 281 282 vno1-gdrx = { 283 hostname = "vno1-gdrx.jakst.vpn"; 284 profiles = { 285 system = { 286 sshUser = "motiejus"; 287 path = self.nixosConfigurations.vno1-gdrx.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.vno1-gdrx; 288 user = "root"; 289 }; 290 }; 291 }; 292 293 vno3-nk = { 294 hostname = "vno3-nk.jakst.vpn"; 295 profiles = { 296 system = { 297 sshUser = "motiejus"; 298 path = self.nixosConfigurations.vno3-nk.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.vno3-nk; 299 user = "root"; 300 }; 301 }; 302 }; 303 304 fra1-c = { 305 hostname = "fra1-c.jakst.vpn"; 306 profiles = { 307 system = { 308 sshUser = "motiejus"; 309 path = self.nixosConfigurations.fra1-c.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.fra1-c; 310 user = "root"; 311 }; 312 }; 313 }; 314 315 vno2-desk2 = { 316 hostname = "vno2-desk2.jakst.vpn"; 317 profiles = { 318 system = { 319 sshUser = "motiejus"; 320 path = self.nixosConfigurations.vno2-desk2.pkgs.deploy-rs.lib.activate.nixos self.nixosConfigurations.vno2-desk2; 321 user = "root"; 322 }; 323 }; 324 }; 325 326 }; 327 checks = builtins.mapAttrs ( 328 system: deployLib: 329 let 330 pkgs = import nixpkgs { inherit system; }; 331 in 332 deployLib.deployChecks self.deploy 333 // { 334 pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run { 335 src = ./.; 336 # pre-commit's nativeCheckInputs pull in dotnet-sdk, go, cargo etc.; 337 # pytestCheckHook leaks in via `identify` propagatedBuildInputs 338 package = pkgs.pre-commit.overridePythonAttrs { 339 doCheck = false; 340 doInstallCheck = false; 341 dontUsePytestCheck = true; 342 nativeCheckInputs = [ ]; 343 preCheck = ""; 344 pytestFlags = [ ]; 345 disabledTests = [ ]; 346 }; 347 hooks = { 348 statix.enable = true; 349 deadnix.enable = true; 350 nixfmt-rfc-style.enable = true; 351 }; 352 }; 353 } 354 ) deploy-rs.lib; 355 } 356 // flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ] ( 357 system: 358 let 359 pkgs = import nixpkgs { 360 inherit system; 361 config.allowUnfree = true; 362 overlays = baseOverlays; 363 }; 364 in 365 { 366 devShells.default = pkgs.mkShellNoCC { 367 GIT_AUTHOR_EMAIL = "motiejus@jakstys.lt"; 368 packages = [ 369 pkgs.nix-output-monitor 370 pkgs.rage 371 pkgs.age-plugin-yubikey 372 agenix.packages.${system}.agenix 373 ] 374 ++ [ 375 ( 376 if pkgs.stdenv.isDarwin then 377 # deploy-rs overlay doesn't build on darwin; use nixpkgs version 378 (import nixpkgs { inherit system; }).deploy-rs 379 else 380 pkgs.deploy-rs.deploy-rs 381 ) 382 ]; 383 shellHook = (self.checks.${system}.pre-commit-check or { }).shellHook or ""; 384 }; 385 386 formatter = pkgs.nixfmt-rfc-style; 387 } 388 ) 389 390 // ( 391 let 392 pkgs = import nixpkgs { 393 overlays = baseOverlays; 394 system = "x86_64-linux"; 395 }; 396 in 397 { 398 packages.x86_64-linux = { 399 inherit (pkgs) 400 weather 401 gamja 402 chronoctl 403 mrescue-alpine 404 mrescue-debian-xfce 405 mrescue-nixos 406 ; 407 }; 408 } 409 ); 410 411 }