From 1819243123ec31f4ad56f32868185132024d7eeb Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Wed, 25 Jun 2025 13:39:41 +0200 Subject: [PATCH] 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 = ''