/ lib / system.nix
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  }