helpers: Add mkLua,mkLuaFn (defaultNullOpts or not) (#866)

This makes it such that defaultNullOpts.mkStr never represents a lua
string, easing documenting where a string is a lua string vs lua code.
This commit is contained in:
traxys 2024-01-01 20:28:55 +01:00 committed by GitHub
parent f2e808a519
commit abd1c4007a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 70 additions and 45 deletions

View file

@ -119,6 +119,27 @@ with lib; rec {
mkCompositeOption = desc: options:
mkNullOrOption (types.submodule {inherit options;}) desc;
mkNullOrLua = desc:
lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = desc;
apply = mkRaw;
};
mkNullOrLuaFn = desc: let
fnDesc = "(lua function)";
in
mkNullOrLua (
if desc == ""
then fnDesc
else ''
${desc}
${fnDesc}
''
);
defaultNullOpts = let
maybeRaw = t: lib.types.either t rawType;
in rec {
@ -140,33 +161,38 @@ with lib; rec {
# documentation
mkNullableWithRaw = type: mkNullable (maybeRaw type);
mkLuaFn = default: desc:
lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = let
defaultDesc = ''
default:
```lua
${default}
```
'';
in
if desc == ""
then ''
(lua function)
mkLua = default: desc: let
defaultDesc = "default: `${default}`";
in
mkNullOrLua
(
(optionalString (desc != "") ''
${desc}
'')
+ ''
default: `${default}`
''
);
${defaultDesc}
''
else ''
${desc}
${defaultDesc}
''
);
(lua function)
mkLuaFn = default: desc: let
defaultDesc = "default: `${default}`";
in
mkNullOrLuaFn
(
if desc == ""
then defaultDesc
else ''
${desc}
${defaultDesc}
''
);
${defaultDesc}
'';
apply = mkRaw;
};
mkNum = default: mkNullable (maybeRaw lib.types.number) (toString default);
mkInt = default: mkNullable (maybeRaw lib.types.int) (toString default);
# Positive: >0
@ -179,7 +205,7 @@ with lib; rec {
then "true"
else "false"
);
mkStr = default: mkNullable lib.types.str ''${builtins.toString default}'';
mkStr = default: mkNullable (maybeRaw lib.types.str) ''${builtins.toString default}'';
mkAttributeSet = default: mkNullable lib.types.attrs ''${default}'';
# Note that this function is _not_ to be used with submodule elements, as it may obstruct the
# documentation