modules: add mkPackageOptionMD

another transitional option factory, like mkAliasOptionModuleMD.
This commit is contained in:
pennae 2022-12-30 21:04:52 +01:00 committed by pennae
parent 4c1cfbdb84
commit 9da5f12ecf
23 changed files with 42 additions and 24 deletions

View file

@ -139,7 +139,7 @@ let
optionAttrSetToDocList optionAttrSetToDocList' optionAttrSetToDocList optionAttrSetToDocList'
scrubOptionValue literalExpression literalExample literalDocBook scrubOptionValue literalExpression literalExample literalDocBook
showOption showOptionWithDefLocs showFiles showOption showOptionWithDefLocs showFiles
unknownModule mkOption mkPackageOption unknownModule mkOption mkPackageOption mkPackageOptionMD
mdDoc literalMD; mdDoc literalMD;
inherit (self.types) isType setType defaultTypeMerge defaultFunctor inherit (self.types) isType setType defaultTypeMerge defaultFunctor
isOptionType mkOptionType; isOptionType mkOptionType;

View file

@ -136,7 +136,7 @@ rec {
let default' = if !isList default then [ default ] else default; let default' = if !isList default then [ default ] else default;
in mkOption { in mkOption {
type = lib.types.package; type = lib.types.package;
description = lib.mdDoc "The ${name} package to use."; description = "The ${name} package to use.";
default = attrByPath default' default = attrByPath default'
(throw "${concatStringsSep "." default'} cannot be found in pkgs") pkgs; (throw "${concatStringsSep "." default'} cannot be found in pkgs") pkgs;
defaultText = literalExpression ("pkgs." + concatStringsSep "." default'); defaultText = literalExpression ("pkgs." + concatStringsSep "." default');
@ -144,6 +144,11 @@ rec {
(if isList example then "pkgs." + concatStringsSep "." example else example); (if isList example then "pkgs." + concatStringsSep "." example else example);
}; };
/* Like mkPackageOption, but emit an mdDoc description instead of DocBook. */
mkPackageOptionMD = args: name: extra:
let option = mkPackageOption args name extra;
in option // { description = lib.mdDoc option.description; };
/* This option accepts anything, but it does not produce any result. /* This option accepts anything, but it does not produce any result.
This is useful for sharing a module across different module sets This is useful for sharing a module across different module sets

View file

@ -88,7 +88,7 @@ lib.mkOption {
} }
``` ```
### `mkPackageOption` {#sec-option-declarations-util-mkPackageOption} ### `mkPackageOption`, `mkPackageOptionMD` {#sec-option-declarations-util-mkPackageOption}
Usage: Usage:
@ -106,6 +106,8 @@ The second argument is the name of the option, used in the description "The \<na
You can omit the default path if the name of the option is also attribute path in nixpkgs. You can omit the default path if the name of the option is also attribute path in nixpkgs.
During the transition to CommonMark documentation `mkPackageOption` creates an option with a DocBook description attribute, once the transition is completed it will create a CommonMark description instead. `mkPackageOptionMD` always creates an option with a CommonMark description attribute and will be removed some time after the transition is completed.
::: {#ex-options-declarations-util-mkPackageOption .title} ::: {#ex-options-declarations-util-mkPackageOption .title}
Examples: Examples:

View file

@ -138,7 +138,8 @@ lib.mkOption {
} }
</programlisting> </programlisting>
<section xml:id="sec-option-declarations-util-mkPackageOption"> <section xml:id="sec-option-declarations-util-mkPackageOption">
<title><literal>mkPackageOption</literal></title> <title><literal>mkPackageOption</literal>,
<literal>mkPackageOptionMD</literal></title>
<para> <para>
Usage: Usage:
</para> </para>
@ -172,6 +173,15 @@ mkPackageOption pkgs &quot;name&quot; { default = [ &quot;path&quot; &quot;in&qu
You can omit the default path if the name of the option is You can omit the default path if the name of the option is
also attribute path in nixpkgs. also attribute path in nixpkgs.
</para> </para>
<para>
During the transition to CommonMark documentation
<literal>mkPackageOption</literal> creates an option with a
DocBook description attribute, once the transition is
completed it will create a CommonMark description instead.
<literal>mkPackageOptionMD</literal> always creates an option
with a CommonMark description attribute and will be removed
some time after the transition is completed.
</para>
<anchor xml:id="ex-options-declarations-util-mkPackageOption" /> <anchor xml:id="ex-options-declarations-util-mkPackageOption" />
<para> <para>
Examples: Examples:

View file

@ -315,6 +315,7 @@ if hasDocBookErrors:
" };\n" + " };\n" +
"\n" + "\n" +
" example.enable = mkEnableOption (lib.mdDoc ''your thing'');\n" + " example.enable = mkEnableOption (lib.mdDoc ''your thing'');\n" +
" example.package = mkPackageOptionMD pkgs \"your-package\" {};\n" +
" imports = [ (mkAliasOptionModuleMD [ \"example\" \"args\" ] [ \"example\" \"settings\" ]) ];", " imports = [ (mkAliasOptionModuleMD [ \"example\" \"args\" ] [ \"example\" \"settings\" ]) ];",
file = sys.stderr) file = sys.stderr)

View file

@ -50,7 +50,7 @@ let
(name: value: (name: value:
let let
wholeName = "${namePrefix}.${name}"; wholeName = "${namePrefix}.${name}";
guard = lib.warn "Attempt to evaluate package ${wholeName} in option documentation; this is not supported and will eventually be an error. Use `mkPackageOption` or `literalExpression` instead."; guard = lib.warn "Attempt to evaluate package ${wholeName} in option documentation; this is not supported and will eventually be an error. Use `mkPackageOption{,MD}` or `literalExpression` instead.";
in if isAttrs value then in if isAttrs value then
scrubDerivations wholeName value scrubDerivations wholeName value
// optionalAttrs (isDerivation value) { // optionalAttrs (isDerivation value) {

View file

@ -27,7 +27,7 @@ in
''; '';
}; };
package = mkPackageOption pkgs "1Password GUI" { package = mkPackageOptionMD pkgs "1Password GUI" {
default = [ "_1password-gui" ]; default = [ "_1password-gui" ];
}; };
}; };

View file

@ -18,7 +18,7 @@ in
programs._1password = { programs._1password = {
enable = mkEnableOption (lib.mdDoc "the 1Password CLI tool"); enable = mkEnableOption (lib.mdDoc "the 1Password CLI tool");
package = mkPackageOption pkgs "1Password CLI" { package = mkPackageOptionMD pkgs "1Password CLI" {
default = [ "_1password" ]; default = [ "_1password" ];
}; };
}; };

View file

@ -16,7 +16,7 @@ in
group. group.
''; '';
}; };
package = mkPackageOption pkgs "flashrom" { }; package = mkPackageOptionMD pkgs "flashrom" { };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -1,6 +1,6 @@
{ pkgs, config, lib, ... }: { pkgs, config, lib, ... }:
let let
inherit (lib) mdDoc mkEnableOption mkPackageOption optional optionalString; inherit (lib) mdDoc mkEnableOption mkPackageOptionMD optional optionalString;
cfg = config.programs.skim; cfg = config.programs.skim;
in in
{ {
@ -8,7 +8,7 @@ in
programs.skim = { programs.skim = {
fuzzyCompletion = mkEnableOption (mdDoc "fuzzy completion with skim"); fuzzyCompletion = mkEnableOption (mdDoc "fuzzy completion with skim");
keybindings = mkEnableOption (mdDoc "skim keybindings"); keybindings = mkEnableOption (mdDoc "skim keybindings");
package = mkPackageOption pkgs "skim" {}; package = mkPackageOptionMD pkgs "skim" {};
}; };
}; };

View file

@ -15,7 +15,7 @@ in
description = lib.mdDoc "Whether streamdeck-ui should be started automatically."; description = lib.mdDoc "Whether streamdeck-ui should be started automatically.";
}; };
package = mkPackageOption pkgs "streamdeck-ui" { package = mkPackageOptionMD pkgs "streamdeck-ui" {
default = [ "streamdeck-ui" ]; default = [ "streamdeck-ui" ];
}; };

View file

@ -55,7 +55,7 @@ in
services.dgraph = { services.dgraph = {
enable = mkEnableOption (lib.mdDoc "Dgraph native GraphQL database with a graph backend"); enable = mkEnableOption (lib.mdDoc "Dgraph native GraphQL database with a graph backend");
package = lib.mkPackageOption pkgs "dgraph" { }; package = lib.mkPackageOptionMD pkgs "dgraph" { };
settings = mkOption { settings = mkOption {
type = settingsFormat.type; type = settingsFormat.type;

View file

@ -128,7 +128,7 @@ in {
''; '';
}; };
}; };
package = mkPackageOption pkgs "listmonk" {}; package = mkPackageOptionMD pkgs "listmonk" {};
settings = mkOption { settings = mkOption {
type = types.submodule { freeformType = tomlFormat.type; }; type = types.submodule { freeformType = tomlFormat.type; };
description = lib.mdDoc '' description = lib.mdDoc ''

View file

@ -7,7 +7,7 @@ let cfg = config.services.input-remapper; in
options = { options = {
services.input-remapper = { services.input-remapper = {
enable = mkEnableOption (lib.mdDoc "input-remapper, an easy to use tool to change the mapping of your input device buttons."); enable = mkEnableOption (lib.mdDoc "input-remapper, an easy to use tool to change the mapping of your input device buttons.");
package = options.mkPackageOption pkgs "input-remapper" { }; package = mkPackageOptionMD pkgs "input-remapper" { };
enableUdevRules = mkEnableOption (lib.mdDoc "udev rules added by input-remapper to handle hotplugged devices. Currently disabled by default due to https://github.com/sezanzeb/input-remapper/issues/140"); enableUdevRules = mkEnableOption (lib.mdDoc "udev rules added by input-remapper to handle hotplugged devices. Currently disabled by default due to https://github.com/sezanzeb/input-remapper/issues/140");
serviceWantedBy = mkOption { serviceWantedBy = mkOption {
default = [ "graphical.target" ]; default = [ "graphical.target" ];

View file

@ -13,7 +13,7 @@ in
services.polaris = { services.polaris = {
enable = mkEnableOption (lib.mdDoc "Polaris Music Server"); enable = mkEnableOption (lib.mdDoc "Polaris Music Server");
package = mkPackageOption pkgs "polaris" { }; package = mkPackageOptionMD pkgs "polaris" { };
user = mkOption { user = mkOption {
type = types.str; type = types.str;

View file

@ -116,7 +116,7 @@ let
}; };
in { in {
options.networking.openconnect = { options.networking.openconnect = {
package = mkPackageOption pkgs "openconnect" { }; package = mkPackageOptionMD pkgs "openconnect" { };
interfaces = mkOption { interfaces = mkOption {
description = lib.mdDoc "OpenConnect interfaces."; description = lib.mdDoc "OpenConnect interfaces.";

View file

@ -14,7 +14,7 @@ in
enable = mkEnableOption (lib.mdDoc "ShellHub Agent daemon"); enable = mkEnableOption (lib.mdDoc "ShellHub Agent daemon");
package = mkPackageOption pkgs "shellhub-agent" { }; package = mkPackageOptionMD pkgs "shellhub-agent" { };
preferredHostname = mkOption { preferredHostname = mkOption {
type = types.str; type = types.str;

View file

@ -71,7 +71,7 @@ in
services.vdirsyncer = { services.vdirsyncer = {
enable = mkEnableOption (mdDoc "vdirsyncer"); enable = mkEnableOption (mdDoc "vdirsyncer");
package = mkPackageOption pkgs "vdirsyncer" {}; package = mkPackageOptionMD pkgs "vdirsyncer" {};
jobs = mkOption { jobs = mkOption {
description = mdDoc "vdirsyncer job configurations"; description = mdDoc "vdirsyncer job configurations";

View file

@ -36,7 +36,7 @@ in {
which execute configured commands for any person or service that knows the URL which execute configured commands for any person or service that knows the URL
''); '');
package = mkPackageOption pkgs "webhook" {}; package = mkPackageOptionMD pkgs "webhook" {};
user = mkOption { user = mkOption {
type = types.str; type = types.str;
default = defaultUser; default = defaultUser;

View file

@ -174,7 +174,7 @@ in
}; };
}; };
package = mkPackageOption pkgs "transmission" {}; package = mkPackageOptionMD pkgs "transmission" {};
downloadDirPermissions = mkOption { downloadDirPermissions = mkOption {
type = with types; nullOr str; type = with types; nullOr str;

View file

@ -1,7 +1,7 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
inherit (lib) mdDoc mkEnableOption mkIf mkPackageOption singleton; inherit (lib) mdDoc mkEnableOption mkIf mkPackageOptionMD singleton;
cfg = config.services.xserver.windowManager.katriawm; cfg = config.services.xserver.windowManager.katriawm;
in in
{ {
@ -9,7 +9,7 @@ in
options = { options = {
services.xserver.windowManager.katriawm = { services.xserver.windowManager.katriawm = {
enable = mkEnableOption (mdDoc "katriawm"); enable = mkEnableOption (mdDoc "katriawm");
package = mkPackageOption pkgs "katriawm" {}; package = mkPackageOptionMD pkgs "katriawm" {};
}; };
}; };

View file

@ -10,7 +10,7 @@ in
options.services.xserver.windowManager.qtile = { options.services.xserver.windowManager.qtile = {
enable = mkEnableOption (lib.mdDoc "qtile"); enable = mkEnableOption (lib.mdDoc "qtile");
package = mkPackageOption pkgs "qtile" { }; package = mkPackageOptionMD pkgs "qtile" { };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -142,7 +142,7 @@ in {
''; '';
}; };
package = (mkPackageOption pkgs "systemd" { package = (mkPackageOptionMD pkgs "systemd" {
default = "systemdStage1"; default = "systemdStage1";
}) // { }) // {
visible = false; visible = false;