git.iko.soy/typeable/nixpkgs
on master help sign in
Merge pull request #145450 from Radvendii/master

etc module: make `.text` and `.source` the same priority

commitbfd9fd291a2aa571259d46207a7d677ce3489393 authorJanne Heß <janne@hess.ooo> dateMon 15 Nov 2021, 14:16 (5 years ago) parent0d67f330bef0c3
3 files changed+24−3
lib/default.nix+1−1 lib/modules.nix+20 nixos/modules/system/etc/etc.nix+3−2
lib/default.nix+1−1
@@ -119,7 +119,7 @@ let
119119 mkFixStrictness mkOrder mkBefore mkAfter mkAliasDefinitions
120120 mkAliasAndWrapDefinitions fixMergeModules mkRemovedOptionModule
121121 mkRenamedOptionModule mkMergedOptionModule mkChangedOptionModule
122− mkAliasOptionModule doRename;
122+ mkAliasOptionModule mkDerivedConfig doRename;
123123 inherit (self.options) isOption mkEnableOption mkSinkUndeclaredOptions
124124 mergeDefaultOption mergeOneOption mergeEqualOption getValues
125125 getFiles optionAttrSetToDocList optionAttrSetToDocList'
lib/modules.nix+20
@@ -956,6 +956,26 @@ rec {
956956 use = id;
957957 };
958958
959+ /* mkDerivedConfig : Option a -> (a -> Definition b) -> Definition b
960+
961+ Create config definitions with the same priority as the definition of another option.
962+ This should be used for option definitions where one option sets the value of another as a convenience.
963+ For instance a config file could be set with a `text` or `source` option, where text translates to a `source`
964+ value using `mkDerivedConfig options.text (pkgs.writeText "filename.conf")`.
965+
966+ It takes care of setting the right priority using `mkOverride`.
967+ */
968+ # TODO: make the module system error message include information about `opt` in
969+ # error messages about conflicts. E.g. introduce a variation of `mkOverride` which
970+ # adds extra location context to the definition object. This will allow context to be added
971+ # to all messages that report option locations "this value was derived from <full option name>
972+ # which was defined in <locations>". It can provide a trace of options that contributed
973+ # to definitions.
974+ mkDerivedConfig = opt: f:
975+ mkOverride
976+ (opt.highestPrio or defaultPriority)
977+ (f opt.value);
978+
959979 doRename = { from, to, visible, warn, use, withPriority ? true }:
960980 { config, options, ... }:
961981 let
nixos/modules/system/etc/etc.nix+3−2
@@ -85,7 +85,7 @@ in
8585 '';
8686
8787 type = with types; attrsOf (submodule (
88− { name, config, ... }:
88+ { name, config, options, ... }:
8989 { options = {
9090
9191 enable = mkOption {
@@ -172,7 +172,8 @@ in
172172 target = mkDefault name;
173173 source = mkIf (config.text != null) (
174174 let name' = "etc-" + baseNameOf name;
175− in mkDefault (pkgs.writeText name' config.text));
175+ in mkDerivedConfig options.text (pkgs.writeText name')
176+ );
176177 };
177178
178179 }));