From 0bb621f0f7d15600f9f07bbf288514d9e6669c27 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Wed, 25 Jun 2025 13:39:41 +0200 Subject: [PATCH 1/2] inventory/interface: reduce apply arguments chain by adding it to _module.args --- docs/nix/options/flake-module.nix | 9 +++---- lib/inventory/build-inventory/interface.nix | 26 ++++++++++++++----- .../build-inventory/roles-interface.nix | 3 +-- lib/inventory/default.nix | 6 ++--- .../distributed-service/tests/default.nix | 3 +++ lib/inventory/schemas/default.nix | 7 ++--- lib/modules/clan/interface.nix | 3 ++- 7 files changed, 35 insertions(+), 22 deletions(-) diff --git a/docs/nix/options/flake-module.nix b/docs/nix/options/flake-module.nix index b21e71bd1..2e3e7e4a3 100644 --- a/docs/nix/options/flake-module.nix +++ b/docs/nix/options/flake-module.nix @@ -122,8 +122,8 @@ mkOption { type = types.submodule { imports = [ + { _module.args = { inherit clanLib; }; } (import ../../../lib/inventory/build-inventory/roles-interface.nix { - inherit clanLib; nestedSettingsOption = mkOption { type = types.raw; description = '' @@ -148,10 +148,9 @@ mkScope = name: modules: { inherit name; modules = [ - (import ../../../lib/inventory/build-inventory/interface.nix { - inherit clanLib; - noInstanceOptions = true; - }) + { _module.args = { inherit clanLib; }; } + { noInstanceOptions = true; } + ../../../lib/inventory/build-inventory/interface.nix ] ++ mapAttrsToList fakeInstanceOptions modules; urlPrefix = "https://github.com/nix-community/dream2nix/blob/main/"; }; diff --git a/lib/inventory/build-inventory/interface.nix b/lib/inventory/build-inventory/interface.nix index b02411b59..2680ada3d 100644 --- a/lib/inventory/build-inventory/interface.nix +++ b/lib/inventory/build-inventory/interface.nix @@ -1,10 +1,6 @@ -{ - clanLib, - # workaround for docs rendering to include fake instance options - noInstanceOptions ? false, -}: { lib, + clanLib, config, options, ... @@ -101,6 +97,7 @@ in ./assertions.nix ]; options = { + # Internal things _inventoryFile = lib.mkOption { type = types.path; readOnly = true; @@ -112,6 +109,12 @@ in visible = false; default = { }; }; + noInstanceOptions = lib.mkOption { + type = types.bool; + internal = true; + visible = false; + default = false; + }; options = lib.mkOption { internal = true; @@ -119,6 +122,8 @@ in type = types.raw; default = options; }; + # --------------------------- + modules = lib.mkOption { # Don't define the type yet # We manually transform the value with types.deferredModule.merge later to keep them serializable @@ -375,7 +380,7 @@ in }; instances = - if noInstanceOptions then + if config.noInstanceOptions then { } else lib.mkOption { @@ -414,7 +419,14 @@ in default = { }; type = types.attrsOf ( types.submodule { - imports = [ (import ./roles-interface.nix { inherit clanLib; }) ]; + imports = [ + { + _module.args = { + inherit clanLib; + }; + } + (import ./roles-interface.nix { }) + ]; } ); }; diff --git a/lib/inventory/build-inventory/roles-interface.nix b/lib/inventory/build-inventory/roles-interface.nix index 61481f15e..da66774d9 100644 --- a/lib/inventory/build-inventory/roles-interface.nix +++ b/lib/inventory/build-inventory/roles-interface.nix @@ -1,9 +1,8 @@ { - clanLib, settingsOption ? null, nestedSettingsOption ? null, }: -{ lib, ... }: +{ lib, clanLib, ... }: let inherit (lib) types diff --git a/lib/inventory/default.nix b/lib/inventory/default.nix index 129782dd9..e89f5147a 100644 --- a/lib/inventory/default.nix +++ b/lib/inventory/default.nix @@ -7,11 +7,9 @@ in inherit (import ./build-inventory { inherit lib clanLib; }) buildInventory; interface = { imports = [ - (import ./build-inventory/interface.nix { inherit clanLib; }) + ./build-inventory/interface.nix ]; - _module.args = { - inherit clanLib; - }; + _module.args = { inherit clanLib; }; }; # Returns the list of machine names # { ... } -> [ string ] diff --git a/lib/inventory/distributed-service/tests/default.nix b/lib/inventory/distributed-service/tests/default.nix index b4fb4221b..2a4daaa8c 100644 --- a/lib/inventory/distributed-service/tests/default.nix +++ b/lib/inventory/distributed-service/tests/default.nix @@ -15,6 +15,9 @@ let modules = [ clanLib.inventory.interface { + _module.args = { + inherit clanLib; + }; tags.all = [ ]; tags.nixos = [ ]; tags.darwin = [ ]; diff --git a/lib/inventory/schemas/default.nix b/lib/inventory/schemas/default.nix index 65d16fe88..9c725db3a 100644 --- a/lib/inventory/schemas/default.nix +++ b/lib/inventory/schemas/default.nix @@ -18,9 +18,10 @@ let frontMatterSchema = jsonLib.parseOptions self.clanLib.modules.frontmatterOptions { }; - inventorySchema = jsonLib.parseModule ( - import ../build-inventory/interface.nix { inherit (self) clanLib; } - ); + inventorySchema = jsonLib.parseModule ({ + imports = [ ../build-inventory/interface.nix ]; + _module.args = { inherit (self) clanLib; }; + }); clanSchema = jsonLib.parseOptions (flakeOptions.clan.type.getSubOptions [ "clan" ]) { }; diff --git a/lib/modules/clan/interface.nix b/lib/modules/clan/interface.nix index bf4599ef3..e4483fd9e 100644 --- a/lib/modules/clan/interface.nix +++ b/lib/modules/clan/interface.nix @@ -100,7 +100,8 @@ in inventory = lib.mkOption { type = types.submodule { imports = [ - (lib.modules.importApply ../../inventory/build-inventory/interface.nix { inherit clanLib; }) + { _module.args = { inherit clanLib; }; } + ../../inventory/build-inventory/interface.nix ]; }; description = '' From 0c8f23ed3ed544b6b837223145690dbaab567748 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Wed, 25 Jun 2025 15:47:15 +0200 Subject: [PATCH 2/2] Chore: add _file for internals error tracing --- docs/nix/options/flake-module.nix | 6 +++++- lib/inventory/build-inventory/builder/default.nix | 1 + lib/inventory/build-inventory/interface.nix | 1 + lib/inventory/default.nix | 1 + lib/inventory/distributed-service/tests/default.nix | 4 +--- lib/inventory/frontmatter/default.nix | 2 ++ lib/modules/clan/interface.nix | 5 ++++- 7 files changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/nix/options/flake-module.nix b/docs/nix/options/flake-module.nix index 2e3e7e4a3..ed70300d9 100644 --- a/docs/nix/options/flake-module.nix +++ b/docs/nix/options/flake-module.nix @@ -121,6 +121,7 @@ roleName: roleSettingsModule: mkOption { type = types.submodule { + _file = "docs flake-module"; imports = [ { _module.args = { inherit clanLib; }; } (import ../../../lib/inventory/build-inventory/roles-interface.nix { @@ -148,7 +149,10 @@ mkScope = name: modules: { inherit name; modules = [ - { _module.args = { inherit clanLib; }; } + { + _module.args = { inherit clanLib; }; + _file = "docs mkScope"; + } { noInstanceOptions = true; } ../../../lib/inventory/build-inventory/interface.nix ] ++ mapAttrsToList fakeInstanceOptions modules; diff --git a/lib/inventory/build-inventory/builder/default.nix b/lib/inventory/build-inventory/builder/default.nix index 01e7d6b6b..c25ea7057 100644 --- a/lib/inventory/build-inventory/builder/default.nix +++ b/lib/inventory/build-inventory/builder/default.nix @@ -170,6 +170,7 @@ in getRoleFile = role: builtins.seq role inventory.modules.${serviceName} + "/roles/${role}.nix"; in { + _file = "inventory/builder.nix"; _module.args = { inherit resolveTags diff --git a/lib/inventory/build-inventory/interface.nix b/lib/inventory/build-inventory/interface.nix index 2680ada3d..6807cdca6 100644 --- a/lib/inventory/build-inventory/interface.nix +++ b/lib/inventory/build-inventory/interface.nix @@ -421,6 +421,7 @@ in types.submodule { imports = [ { + _file = "inventory/interface"; _module.args = { inherit clanLib; }; diff --git a/lib/inventory/default.nix b/lib/inventory/default.nix index e89f5147a..894116451 100644 --- a/lib/inventory/default.nix +++ b/lib/inventory/default.nix @@ -6,6 +6,7 @@ in inherit (services) evalClanService mapInstances resolveModule; inherit (import ./build-inventory { inherit lib clanLib; }) buildInventory; interface = { + _file = "inventory/default.nix"; imports = [ ./build-inventory/interface.nix ]; diff --git a/lib/inventory/distributed-service/tests/default.nix b/lib/inventory/distributed-service/tests/default.nix index 2a4daaa8c..cf4fcb39b 100644 --- a/lib/inventory/distributed-service/tests/default.nix +++ b/lib/inventory/distributed-service/tests/default.nix @@ -15,9 +15,7 @@ let modules = [ clanLib.inventory.interface { - _module.args = { - inherit clanLib; - }; + _file = "test file"; tags.all = [ ]; tags.nixos = [ ]; tags.darwin = [ ]; diff --git a/lib/inventory/frontmatter/default.nix b/lib/inventory/frontmatter/default.nix index 83fda98e3..383779b99 100644 --- a/lib/inventory/frontmatter/default.nix +++ b/lib/inventory/frontmatter/default.nix @@ -56,7 +56,9 @@ let { constraints.imports = [ (lib.modules.importApply ../constraints { + resolvedRoles = { }; moduleName = "{moduleName}"; + instanceName = "{instanceName}"; allRoles = [ "{roleName}" ]; }) ]; diff --git a/lib/modules/clan/interface.nix b/lib/modules/clan/interface.nix index e4483fd9e..d96841ee2 100644 --- a/lib/modules/clan/interface.nix +++ b/lib/modules/clan/interface.nix @@ -100,7 +100,10 @@ in inventory = lib.mkOption { type = types.submodule { imports = [ - { _module.args = { inherit clanLib; }; } + { + _module.args = { inherit clanLib; }; + _file = "clan interface"; + } ../../inventory/build-inventory/interface.nix ]; };