From b37f099ae7fa01e263530754b8e23bcc8730f221 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 2 Dec 2021 17:45:48 +0000 Subject: [PATCH 1/6] lib/modules: Pass legacy args argument along through extendModules --- lib/modules.nix | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/modules.nix b/lib/modules.nix index 2468b6fbdd22f..b9f1b63597532 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -101,9 +101,26 @@ rec { check ? true }: let + legacyModules = + optional (evalModulesArgs?args) { + config = { + _module.args = args; + }; + } + ++ optional (evalModulesArgs?check) { + config = { + _module.check = mkDefault check; + }; + }; + regularModules = modules ++ legacyModules; + # This internal module declare internal options under the `_module' # attribute. These options are fragile, as they are used by the # module system to change the interpretation of modules. + # + # When extended with extendModules or moduleType, a fresh instance of + # this module is used, to avoid conflicts and allow chaining of + # extendModules. internalModule = rec { _file = ./modules.nix; @@ -125,7 +142,7 @@ rec { _module.check = mkOption { type = types.bool; internal = true; - default = check; + default = true; description = "Whether to check whether all option definitions have matching declarations."; }; @@ -151,14 +168,14 @@ rec { _module.args = { inherit extendModules; moduleType = type; - } // args; + }; }; }; merged = let collected = collectModules (specialArgs.modulesPath or "") - (modules ++ [ internalModule ]) + (regularModules ++ [ internalModule ]) ({ inherit lib options config specialArgs; } // specialArgs); in mergeModules prefix (reverseList collected); @@ -222,7 +239,7 @@ rec { prefix ? [], }: evalModules (evalModulesArgs // { - modules = evalModulesArgs.modules ++ modules; + modules = regularModules ++ modules; specialArgs = evalModulesArgs.specialArgs or {} // specialArgs; prefix = extendArgs.prefix or evalModulesArgs.prefix; }); From 59c4a35aabbb69233a252638a63ae8f3dff3401c Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 2 Dec 2021 18:07:39 +0000 Subject: [PATCH 2/6] nixos/eval-config: Avoid evalModules args and check parameters --- nixos/lib/eval-config.nix | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/nixos/lib/eval-config.nix b/nixos/lib/eval-config.nix index 74b52daa3c8eb..0297ca4bd9d9c 100644 --- a/nixos/lib/eval-config.nix +++ b/nixos/lib/eval-config.nix @@ -8,6 +8,7 @@ # as subcomponents (e.g. the container feature, or nixops if network # expressions are ever made modular at the top level) can just use # types.submodule instead of using eval-config.nix +evalConfigArgs@ { # !!! system can be set modularly, would be nice to remove system ? builtins.currentSystem , # !!! is this argument needed any more? The pkgs argument can @@ -28,7 +29,7 @@ in if e == "" then [] else [(import e)] }: -let extraArgs_ = extraArgs; pkgs_ = pkgs; +let pkgs_ = pkgs; in let @@ -51,25 +52,40 @@ let }; }; - noUserModules = lib.evalModules { - inherit prefix check; - modules = baseModules ++ extraModules ++ [ pkgsModule ]; - args = extraArgs; + legacyModules = + lib.optional (evalConfigArgs?args) { + config = { + _module.args = extraArgs; + }; + } + ++ lib.optional (evalConfigArgs?check) { + config = { + _module.check = lib.mkDefault check; + }; + }; + allUserModules = modules ++ legacyModules; + + noUserModules = lib.evalModules ({ + inherit prefix; + modules = baseModules ++ extraModules ++ [ pkgsModule modulesModule ]; specialArgs = { modulesPath = builtins.toString ../modules; } // specialArgs; - }; + }); - # These are the extra arguments passed to every module. In - # particular, Nixpkgs is passed through the "pkgs" argument. - extraArgs = extraArgs_ // { - inherit noUserModules baseModules extraModules modules; + # Extra arguments that are useful for constructing a similar configuration. + modulesModule = { + config = { + _module.args = { + inherit noUserModules baseModules extraModules modules; + }; + }; }; in rec { # Merge the option definitions in all modules, forming the full # system configuration. - inherit (noUserModules.extendModules { inherit modules; }) + inherit (noUserModules.extendModules { modules = allUserModules; }) config options _module type; inherit extraArgs; From 0b5aea2b2779ca5aa26dbe454af327828fb1683e Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 2 Dec 2021 18:11:20 +0000 Subject: [PATCH 3/6] nixos/eval-config: Remove a rec --- nixos/lib/eval-config.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/nixos/lib/eval-config.nix b/nixos/lib/eval-config.nix index 0297ca4bd9d9c..07653c22fb5cf 100644 --- a/nixos/lib/eval-config.nix +++ b/nixos/lib/eval-config.nix @@ -81,14 +81,15 @@ let }; }; -in rec { + nixosWithUserModules = noUserModules.extendModules { modules = allUserModules; }; + +in { # Merge the option definitions in all modules, forming the full # system configuration. - inherit (noUserModules.extendModules { modules = allUserModules; }) - config options _module type; + inherit (nixosWithUserModules) config options _module type; inherit extraArgs; - inherit (_module.args) pkgs; + inherit (nixosWithUserModules._module.args) pkgs; } From 1a223857ab679d6f0baf116e6b1c0f80b06cb818 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 2 Dec 2021 18:19:56 +0000 Subject: [PATCH 4/6] nixos/documentation: Use new extendModules instead of legacy args --- nixos/modules/misc/documentation.nix | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/nixos/modules/misc/documentation.nix b/nixos/modules/misc/documentation.nix index 1f837f9efa22d..64b1c15086fc8 100644 --- a/nixos/modules/misc/documentation.nix +++ b/nixos/modules/misc/documentation.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, baseModules, extraModules, modules, modulesPath, ... }: +{ config, lib, pkgs, extendModules, noUserModules, ... }: with lib; @@ -6,11 +6,8 @@ let cfg = config.documentation; - manualModules = - baseModules - # Modules for which to show options even when not imported - ++ [ ../virtualisation/qemu-vm.nix ] - ++ optionals cfg.nixos.includeAllModules (extraModules ++ modules); + /* Modules for which to show options even when not imported. */ + extraDocModules = [ ../virtualisation/qemu-vm.nix ]; /* For the purpose of generating docs, evaluate options with each derivation in `pkgs` (recursively) replaced by a fake with path "\${pkgs.attribute.path}". @@ -24,13 +21,10 @@ let extraSources = cfg.nixos.extraModuleSources; options = let - scrubbedEval = evalModules { - modules = [ { nixpkgs.localSystem = config.nixpkgs.localSystem; } ] ++ manualModules; - args = (config._module.args) // { modules = [ ]; }; - specialArgs = { - pkgs = scrubDerivations "pkgs" pkgs; - inherit modulesPath; - }; + extendNixOS = if cfg.nixos.includeAllModules then extendModules else noUserModules.extendModules; + scrubbedEval = extendNixOS { + modules = extraDocModules; + specialArgs.pkgs = scrubDerivations "pkgs" pkgs; }; scrubDerivations = namePrefix: pkgSet: mapAttrs (name: value: From 78ada833615d241ed76463aa5a024b614150eb4d Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 2 Dec 2021 18:15:08 +0000 Subject: [PATCH 5/6] nixos/eval-config: Deprecate extraArgs and check parameters --- nixos/lib/eval-config.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nixos/lib/eval-config.nix b/nixos/lib/eval-config.nix index 07653c22fb5cf..d4567409f4015 100644 --- a/nixos/lib/eval-config.nix +++ b/nixos/lib/eval-config.nix @@ -52,6 +52,11 @@ let }; }; + withWarnings = x: + lib.warnIf (evalConfigArgs?args) "The extraArgs argument to eval-config.nix is deprecated. Please set config._module.args instead." + lib.warnIf (evalConfigArgs?check) "The check argument to eval-config.nix is deprecated. Please set config._module.check instead." + x; + legacyModules = lib.optional (evalConfigArgs?args) { config = { @@ -83,7 +88,7 @@ let nixosWithUserModules = noUserModules.extendModules { modules = allUserModules; }; -in { +in withWarnings { # Merge the option definitions in all modules, forming the full # system configuration. From 260b941dd0e7e72cf9b87f36f92b7e60f38d661f Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 2 Dec 2021 17:47:17 +0000 Subject: [PATCH 6/6] lib/modules: Deprecate args and check --- lib/modules.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/modules.nix b/lib/modules.nix index b9f1b63597532..ee1aa16dbb04e 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -101,6 +101,11 @@ rec { check ? true }: let + withWarnings = x: + lib.warnIf (evalModulesArgs?args) "The args argument to evalModules is deprecated. Please set config._module.args instead." + lib.warnIf (evalModulesArgs?check) "The check argument to evalModules is deprecated. Please set config._module.check instead." + x; + legacyModules = optional (evalModulesArgs?args) { config = { @@ -248,7 +253,7 @@ rec { inherit modules specialArgs; }; - result = { + result = withWarnings { options = checked options; config = checked (removeAttrs config [ "_module" ]); _module = checked (config._module);