diff --git a/lib/build-clan/interface.nix b/lib/build-clan/interface.nix index 27cdac6b5..a0a22bc23 100644 --- a/lib/build-clan/interface.nix +++ b/lib/build-clan/interface.nix @@ -61,6 +61,24 @@ in ''; }; + modules = lib.mkOption { + type = types.attrsOf (types.submodule { imports = [ ./modules/interface.nix ]; }); + default = { }; + description = '' + Experimental: In the future, + this will be the main way to define Clan modules. + ''; + }; + + templates = lib.mkOption { + type = types.submodule { imports = [ ./templates/interface.nix ]; }; + default = { }; + description = '' + Experimental: In the future, + this will be the main way to define Clan templates. + ''; + }; + # Meta meta = lib.mkOption { description = '' @@ -107,6 +125,10 @@ in # We don't specify the type here, for better performance. inventory = lib.mkOption { type = lib.types.raw; }; inventoryValuesPrios = lib.mkOption { type = lib.types.raw; }; + # all exported clan templates from this clan + templates = lib.mkOption { type = lib.types.raw; }; + # all exported clan modules from this clan + modules = lib.mkOption { type = lib.types.raw; }; # all inventory module schemas moduleSchemas = lib.mkOption { type = lib.types.raw; }; inventoryFile = lib.mkOption { type = lib.types.raw; }; diff --git a/lib/build-clan/module.nix b/lib/build-clan/module.nix index 0438d4ee3..cd774b10a 100644 --- a/lib/build-clan/module.nix +++ b/lib/build-clan/module.nix @@ -212,9 +212,11 @@ in builtins.removeAttrs (clan-core.lib.values.getPrios { options = inventory.options; }) # tags are freeformType which is not supported yet. [ "tags" ]; + + modules = config.modules; + templates = config.templates; inventory = config.inventory; meta = config.inventory.meta; - source = "${clan-core}"; # machine specifics diff --git a/lib/build-clan/modules/interface.nix b/lib/build-clan/modules/interface.nix new file mode 100644 index 000000000..73eea4bed --- /dev/null +++ b/lib/build-clan/modules/interface.nix @@ -0,0 +1,27 @@ +{ + lib, + name, + ... +}: +let + types = lib.types; +in +{ + # clan.modules. + options = { + path = lib.mkOption { + type = types.path; + description = '' + Holds the path to the clan module. + ''; + }; + + name = lib.mkOption { + type = types.str; + default = name; + description = '' + The name of the module. + ''; + }; + }; +} diff --git a/lib/build-clan/templates/clan/interface.nix b/lib/build-clan/templates/clan/interface.nix new file mode 100644 index 000000000..b5c402cf6 --- /dev/null +++ b/lib/build-clan/templates/clan/interface.nix @@ -0,0 +1,27 @@ +{ + lib, + name, + ... +}: +let + types = lib.types; +in +{ + # clan.templates.clan. + options = { + path = lib.mkOption { + type = types.path; + description = '' + Holds the path to the clan template. + ''; + }; + + name = lib.mkOption { + type = types.str; + default = name; + description = '' + The name of the template. + ''; + }; + }; +} diff --git a/lib/build-clan/templates/disko/interface.nix b/lib/build-clan/templates/disko/interface.nix new file mode 100644 index 000000000..0bbfa4f07 --- /dev/null +++ b/lib/build-clan/templates/disko/interface.nix @@ -0,0 +1,27 @@ +{ + lib, + name, + ... +}: +let + types = lib.types; +in +{ + # clan.templates.disko. + options = { + path = lib.mkOption { + type = types.path; + description = '' + Holds the path to the clan template. + ''; + }; + + name = lib.mkOption { + type = types.str; + default = name; + description = '' + The name of the template. + ''; + }; + }; +} diff --git a/lib/build-clan/templates/interface.nix b/lib/build-clan/templates/interface.nix new file mode 100644 index 000000000..a7c6d2e76 --- /dev/null +++ b/lib/build-clan/templates/interface.nix @@ -0,0 +1,28 @@ +{ + lib, + ... +}: +let + types = lib.types; +in +{ + options = { + # clan.templates.disko + disko = lib.mkOption { + type = types.attrsOf (types.submodule { imports = [ ./disko/interface.nix ]; }); + default = { }; + description = '' + Holds different disko templates. + ''; + }; + + # clan.templates.clan + clan = lib.mkOption { + type = types.attrsOf (types.submodule { imports = [ ./clan/interface.nix ]; }); + default = { }; + description = '' + Holds the different clan templates. + ''; + }; + }; +}