diff --git a/lib/modules.nix b/lib/modules.nix index 48ddb31508f25..d823773a2ff8e 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -113,10 +113,6 @@ rec { args ? {} , # This would be remove in the future, Prefer _module.check option instead. check ? true - # Internal variable to avoid `_key` collisions regardless - # of `extendModules`. Used in `submoduleWith`. - # Test case: lib/tests/modules, "168767" - , extensionOffset ? 0 }: let withWarnings = x: @@ -345,17 +341,15 @@ rec { modules ? [], specialArgs ? {}, prefix ? [], - extensionOffset ? length modules, }: evalModules (evalModulesArgs // { modules = regularModules ++ modules; specialArgs = evalModulesArgs.specialArgs or {} // specialArgs; prefix = extendArgs.prefix or evalModulesArgs.prefix or []; - inherit extensionOffset; }); type = lib.types.submoduleWith { - inherit modules specialArgs extensionOffset; + inherit modules specialArgs; }; result = withWarnings { @@ -461,19 +455,21 @@ rec { throw "Module `${key}' has an unsupported attribute `${head (attrNames badAttrs)}'. This is caused by introducing a top-level `config' or `options' attribute. Add configuration attributes immediately on the top level instead, or move all of them (namely: ${toString (attrNames badAttrs)}) into the explicit `config' attribute." else { _file = toString m._file or file; - key = toString m.key or key; disabledModules = m.disabledModules or []; imports = m.imports or []; options = m.options or {}; config = addFreeformType (addMeta (m.config or {})); + } // optionalAttrs (m?key || key != null) { + key = toString m.key or key; } else { _file = toString m._file or file; - key = toString m.key or key; disabledModules = m.disabledModules or []; imports = m.require or [] ++ m.imports or []; options = {}; config = addFreeformType (addMeta (removeAttrs m ["_file" "key" "disabledModules" "require" "imports" "freeformType"])); + } // optionalAttrs (m?key || key != null) { + key = toString m.key or key; }; applyModuleArgsIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then diff --git a/lib/types.nix b/lib/types.nix index 147b92f784c9d..4a224099c9250 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -571,11 +571,6 @@ rec { , specialArgs ? {} , shorthandOnlyDefinesConfig ? false , description ? null - - # 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; @@ -584,14 +579,14 @@ rec { then value: value else value: { config = value; }; - allModules = defs: imap1 (n: { value, file }: + allModules = defs: map ({ value, file }: if isFunction value then setFunctionArgs - (args: lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (value args)) + (args: lib.modules.unifyModuleSyntax file null (value args)) (functionArgs value) else if isAttrs value then - lib.modules.unifyModuleSyntax file "${toString file}-${toString (n + extensionOffset)}" (shorthandToModule value) + lib.modules.unifyModuleSyntax file null (shorthandToModule value) else value ) defs; @@ -632,7 +627,6 @@ rec { (base.extendModules { modules = [ { _module.args.name = last loc; } ] ++ allModules defs; prefix = loc; - extensionOffset = extensionOffset + length defs; }).config; emptyValue = { value = {}; }; getSubOptions = prefix: (base.extendModules