Merge pull request #145450 from Radvendii/master

etc module: make `.text` and `.source` the same priority
This commit is contained in:
Janne Heß
2021-11-15 14:16:45 +01:00
committed by GitHub
3 changed files with 24 additions and 3 deletions
+1 -1
View File
@@ -119,7 +119,7 @@ let
mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions
mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule
mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule
mkAliasOptionModule doRename;
mkAliasOptionModule mkDerivedConfig doRename;
inherit (self.options) isOption mkEnableOption mkSinkUndeclaredOptions
mergeDefaultOption mergeOneOption mergeEqualOption getValues
getFiles optionAttrSetToDocList optionAttrSetToDocList'
+20
View File
@@ -956,6 +956,26 @@ rec {
use = id;
};
/* mkDerivedConfig : Option a -> (a -> Definition b) -> Definition b
Create config definitions with the same priority as the definition of another option.
This should be used for option definitions where one option sets the value of another as a convenience.
For instance a config file could be set with a `text` or `source` option, where text translates to a `source`
value using `mkDerivedConfig options.text (pkgs.writeText "filename.conf")`.
It takes care of setting the right priority using `mkOverride`.
*/
# TODO: make the module system error message include information about `opt` in
# error messages about conflicts. E.g. introduce a variation of `mkOverride` which
# adds extra location context to the definition object. This will allow context to be added
# to all messages that report option locations "this value was derived from <full option name>
# which was defined in <locations>". It can provide a trace of options that contributed
# to definitions.
mkDerivedConfig = opt: f:
mkOverride
(opt.highestPrio or defaultPriority)
(f opt.value);
doRename = { from, to, visible, warn, use, withPriority ? true }:
{ config, options, ... }:
let
+3 -2
View File
@@ -85,7 +85,7 @@ in
'';
type = with types; attrsOf (submodule (
{ name, config, ... }:
{ name, config, options, ... }:
{ options = {
enable = mkOption {
@@ -172,7 +172,8 @@ in
target = mkDefault name;
source = mkIf (config.text != null) (
let name' = "etc-" + baseNameOf name;
in mkDefault (pkgs.writeText name' config.text));
in mkDerivedConfig options.text (pkgs.writeText name')
);
};
}));