mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 15:03:28 +00:00
lib/types: allow custom submoduleWith
descriptions
Currently the only way to set the description for a submodule type is to use `freeformType`. This is not ideal as it requires setting a freeform type, and evaluates the submodule config unnecessarily. Instead, add a `description` argument to `submoduleWith`.
This commit is contained in:
parent
ddfb78791c
commit
ceebdcfc2c
@ -568,6 +568,7 @@ rec {
|
||||
{ modules
|
||||
, specialArgs ? {}
|
||||
, shorthandOnlyDefinesConfig ? false
|
||||
, description ? null
|
||||
|
||||
# Internal variable to avoid `_key` collisions regardless
|
||||
# of `extendModules`. Wired through by `evalModules`.
|
||||
@ -616,10 +617,14 @@ rec {
|
||||
|
||||
freeformType = base._module.freeformType;
|
||||
|
||||
in
|
||||
mkOptionType rec {
|
||||
name = "submodule";
|
||||
description = freeformType.description or name;
|
||||
|
||||
in
|
||||
mkOptionType {
|
||||
inherit name;
|
||||
description =
|
||||
if description != null then description
|
||||
else freeformType.description or name;
|
||||
check = x: isAttrs x || isFunction x || path.check x;
|
||||
merge = loc: defs:
|
||||
(base.extendModules {
|
||||
@ -645,9 +650,7 @@ rec {
|
||||
functor = defaultFunctor name // {
|
||||
type = types.submoduleWith;
|
||||
payload = {
|
||||
modules = modules;
|
||||
specialArgs = specialArgs;
|
||||
shorthandOnlyDefinesConfig = shorthandOnlyDefinesConfig;
|
||||
inherit modules specialArgs shorthandOnlyDefinesConfig description;
|
||||
};
|
||||
binOp = lhs: rhs: {
|
||||
modules = lhs.modules ++ rhs.modules;
|
||||
@ -664,6 +667,14 @@ rec {
|
||||
else if lhs.shorthandOnlyDefinesConfig == rhs.shorthandOnlyDefinesConfig
|
||||
then lhs.shorthandOnlyDefinesConfig
|
||||
else throw "A submoduleWith option is declared multiple times with conflicting shorthandOnlyDefinesConfig values";
|
||||
description =
|
||||
if lhs.description == null
|
||||
then rhs.description
|
||||
else if rhs.description == null
|
||||
then lhs.description
|
||||
else if lhs.description == rhs.description
|
||||
then lhs.description
|
||||
else throw "A submoduleWith option is declared multiple times with conflicting descriptions";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user