system.nix
1 inputs: self: super: 2 let 3 inherit (self) 4 attrValues 5 filter 6 getAttrFromPath 7 hasAttrByPath 8 collectNix 9 ; 10 11 modulesCommon = [ ../modules/common ]; 12 modulesLinux = collectNix ../modules/linux; 13 modulesDarwin = collectNix ../modules/darwin; 14 15 collectInputs = 16 let 17 inputs' = attrValues inputs; 18 in 19 path: inputs' |> filter (hasAttrByPath path) |> map (getAttrFromPath path); 20 21 inputModulesLinux = collectInputs [ 22 "nixosModules" 23 "default" 24 ]; 25 inputModulesDarwin = collectInputs [ 26 "darwinModules" 27 "default" 28 ]; 29 30 inputOverlays = collectInputs [ 31 "overlays" 32 "default" 33 ]; 34 overlayModule = { 35 nixpkgs.overlays = inputOverlays; 36 }; 37 38 specialArgs = inputs // { 39 inherit inputs; 40 keys = import ../keys.nix; 41 lib = self; 42 }; 43 in 44 { 45 nixosSystem' = 46 args: 47 let 48 system = args.system or "x86_64-linux"; 49 module = removeAttrs args [ "system" ]; 50 in 51 super.nixosSystem { 52 inherit system specialArgs; 53 54 modules = 55 [ 56 module 57 overlayModule 58 ] 59 ++ modulesCommon 60 ++ modulesLinux 61 ++ inputModulesLinux; 62 }; 63 64 darwinSystem' = 65 args: 66 let 67 system = args.system or "aarch64-darwin"; 68 module = removeAttrs args [ "system" ]; 69 in 70 super.darwinSystem { 71 inherit system specialArgs; 72 73 modules = 74 [ 75 module 76 overlayModule 77 { nixpkgs.hostPlatform = system; } 78 ] 79 ++ modulesCommon 80 ++ modulesDarwin 81 ++ inputModulesDarwin; 82 }; 83 }