diff --git a/inventory.json b/inventory.json index 7e50ba188..af7896845 100644 --- a/inventory.json +++ b/inventory.json @@ -5,6 +5,9 @@ "description": "A nice thing", "icon": "./path/to/icon.png", "tags": ["1", "2", "3"] + }, + "test-darwin-machine": { + "machineClass": "darwin" } }, "services": { diff --git a/lib/build-clan/module.nix b/lib/build-clan/module.nix index 9f69bf99b..16ca78aff 100644 --- a/lib/build-clan/module.nix +++ b/lib/build-clan/module.nix @@ -164,16 +164,18 @@ let }; }; - allMachines = inventory.machines or { } // machines; + allMachines = inventoryClass.machines; - machineClass = lib.mapAttrs (name: _: inventory.machineClass.${name} or "nixos") allMachines; - - configurations = lib.mapAttrs ( - name: _: moduleSystemConstructor.${machineClass.${name}} { inherit name; } + machineClasses = lib.mapAttrs ( + name: _: inventory.machines.${name}.machineClass or "nixos" ) allMachines; - nixosConfigurations = lib.filterAttrs (name: _: machineClass.${name} == "nixos") configurations; - darwinConfigurations = lib.filterAttrs (name: _: machineClass.${name} == "darwin") configurations; + configurations = lib.mapAttrs ( + name: _: moduleSystemConstructor.${machineClasses.${name}} { inherit name; } + ) allMachines; + + nixosConfigurations = lib.filterAttrs (name: _: machineClasses.${name} == "nixos") configurations; + darwinConfigurations = lib.filterAttrs (name: _: machineClasses.${name} == "darwin") configurations; # This instantiates NixOS for each system that we support: # configPerSystem = ..nixosConfiguration @@ -184,7 +186,7 @@ let lib.nameValuePair system ( lib.mapAttrs ( name: _: - moduleSystemConstructor.${machineClass.${name}} { + moduleSystemConstructor.${machineClasses.${name}} { inherit name system; pkgs = pkgsFor.${system}; } @@ -199,7 +201,7 @@ let lib.nameValuePair system ( lib.mapAttrs ( name: _: args: - moduleSystemConstructor.${machineClass.${name}} ( + moduleSystemConstructor.${machineClasses.${name}} ( args // { inherit name system; diff --git a/lib/build-clan/tests.nix b/lib/build-clan/tests.nix index f87918e7a..875f6e538 100644 --- a/lib/build-clan/tests.nix +++ b/lib/build-clan/tests.nix @@ -210,14 +210,16 @@ in meta.name = "test"; machines.machine1 = { }; - machines.machine2 = { }; - machines.machine3 = { }; - - inventory.machineClass.machine2 = "darwin"; - inventory.machineClass.machine3 = "nixos"; + inventory.machines.machine2 = { + machineClass = "darwin"; + }; + inventory.machines.machine3 = { + machineClass = "nixos"; + }; }; in { + inherit result; expr = { nixos = builtins.attrNames result.nixosConfigurations; darwin = builtins.attrNames result.darwinConfigurations; @@ -241,7 +243,6 @@ in meta.name = "test"; machines.machine1.non_existent_option = throw "eval error"; - inventory.machines.machine1.other_non_existent_option = throw "different eval error"; }; in { diff --git a/lib/inventory/build-inventory/interface.nix b/lib/inventory/build-inventory/interface.nix index 110b3199b..45564f6d9 100644 --- a/lib/inventory/build-inventory/interface.nix +++ b/lib/inventory/build-inventory/interface.nix @@ -243,6 +243,19 @@ in options = { inherit (metaOptionsWith name) name description icon; + machineClass = lib.mkOption { + default = "nixos"; + type = types.enum [ + "nixos" + "darwin" + ]; + description = '' + The module system that should be used to construct the machine + + Set this to `darwin` for macOS machines + ''; + }; + tags = lib.mkOption { description = '' List of tags for the machine. @@ -278,21 +291,6 @@ in ); }; - machineClass = lib.mkOption { - default = { }; - type = types.attrsOf ( - types.enum [ - "nixos" - "darwin" - ] - ); - description = '' - The module system that should be used to construct the machine - - Set this to `darwin` for macOS machines - ''; - }; - instances = lib.mkOption { # Keep as internal until all de-/serialization issues are resolved visible = false; @@ -366,6 +364,7 @@ in else lib.warn "Inventory.instances and related features are still under development. Please use with care." v; }; + services = lib.mkOption { description = '' Services of the inventory.