diff options
Diffstat (limited to 'lib/types.nix')
-rw-r--r-- | lib/types.nix | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/types.nix b/lib/types.nix index 5c4b963106178..91b040d24553b 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -568,6 +568,11 @@ rec { { modules , specialArgs ? {} , shorthandOnlyDefinesConfig ? false + + # Internal variable to avoid `_key` collisions regardless + # of `extendModules`. Wired through by `evalModules`. + # Test case: lib/tests/modules, "168767" + , extensionOffset ? 0 }@attrs: let inherit (lib.modules) evalModules; @@ -579,11 +584,11 @@ rec { allModules = defs: imap1 (n: { value, file }: if isFunction value then setFunctionArgs - (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString n}" (value args)) + (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (value args)) (functionArgs value) else if isAttrs value then - lib.modules.unifyModuleSyntax file "${toString file}-${toString n}" (shorthandToModule value) + lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (shorthandToModule value) else value ) defs; @@ -620,6 +625,7 @@ rec { (base.extendModules { modules = [ { _module.args.name = last loc; } ] ++ allModules defs; prefix = loc; + extensionOffset = extensionOffset + length defs; }).config; emptyValue = { value = {}; }; getSubOptions = prefix: (base.extendModules |