lib/modules: Use fixed lib instead of args.lib
The practical use for this should be very limited because I don't think anyone should change `lib`, let alone change `lib.functionArgs`, but, but it would be even stranger to rely on `args.lib` (or really `specialArgs.lib` for what's clearly a behavior of the current `evalModules`, which uses its own ambient lib for basically everything. The shadowing of `lib` by `args.lib` here seems to be a small mistake, which is easy to make.
This commit is contained in:
+2
-2
@@ -485,10 +485,10 @@ let
|
||||
config = addFreeformType (removeAttrs m ["_class" "_file" "key" "disabledModules" "require" "imports" "freeformType"]);
|
||||
};
|
||||
|
||||
applyModuleArgsIfFunction = key: f: args@{ config, options, lib, ... }:
|
||||
applyModuleArgsIfFunction = key: f: args@{ config, ... }:
|
||||
if isFunction f then applyModuleArgs key f args else f;
|
||||
|
||||
applyModuleArgs = key: f: args@{ config, options, lib, ... }:
|
||||
applyModuleArgs = key: f: args@{ config, ... }:
|
||||
let
|
||||
# Module arguments are resolved in a strict manner when attribute set
|
||||
# deconstruction is used. As the arguments are now defined with the
|
||||
|
||||
@@ -94,6 +94,8 @@ checkConfigOutput '^true$' config.result ./module-argument-default.nix
|
||||
# gvariant
|
||||
checkConfigOutput '^true$' config.assertion ./gvariant.nix
|
||||
|
||||
checkConfigOutput '"ok"' config.result ./specialArgs-lib.nix
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/pull/131205
|
||||
# We currently throw this error already in `config`, but throwing in `config.wrong1` would be acceptable.
|
||||
checkConfigError 'It seems as if you.re trying to declare an option by placing it into .config. rather than .options.' config.wrong1 ./error-mkOption-in-config.nix
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
options = {
|
||||
result = lib.mkOption { };
|
||||
weird = lib.mkOption {
|
||||
type = lib.types.submoduleWith {
|
||||
# I generally recommend against overriding lib, because that leads to
|
||||
# slightly incompatible dialects of the module system.
|
||||
# Nonetheless, it's worth guarding the property that the module system
|
||||
# evaluates with a completely custom lib, as a matter of separation of
|
||||
# concerns.
|
||||
specialArgs.lib = { };
|
||||
modules = [ ];
|
||||
};
|
||||
};
|
||||
};
|
||||
config.weird = args@{ ... /* note the lack of a `lib` argument */ }:
|
||||
assert args.lib == { };
|
||||
assert args.specialArgs == { lib = { }; };
|
||||
{
|
||||
options.foo = lib.mkOption { };
|
||||
config.foo = lib.mkIf true "alright";
|
||||
};
|
||||
config.result =
|
||||
assert config.weird.foo == "alright";
|
||||
"ok";
|
||||
}
|
||||
Reference in New Issue
Block a user