diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/maintainers.nix | 8 | ||||
-rw-r--r-- | lib/modules.nix | 79 | ||||
-rw-r--r-- | lib/types.nix | 2 |
3 files changed, 87 insertions, 2 deletions
diff --git a/lib/maintainers.nix b/lib/maintainers.nix index bc2e6cb3a7f8..d7aeac159ce3 100644 --- a/lib/maintainers.nix +++ b/lib/maintainers.nix @@ -50,6 +50,7 @@ auntie = "Jonathan Glines <auntieNeo@gmail.com>"; avnik = "Alexander V. Nikolaev <avn@avnik.info>"; aycanirican = "Aycan iRiCAN <iricanaycan@gmail.com>"; + bachp = "Pascal Bach <pascal.bach@nextrem.ch>"; badi = "Badi' Abdul-Wahid <abdulwahidc@gmail.com>"; balajisivaraman = "Balaji Sivaraman<sivaraman.balaji@gmail.com>"; Baughn = "Svein Ove Aas <sveina@gmail.com>"; @@ -97,6 +98,7 @@ coroa = "Jonas Hörsch <jonas@chaoflow.net>"; couchemar = "Andrey Pavlov <couchemar@yandex.ru>"; cransom = "Casey Ransom <cransom@hubns.net>"; + cryptix = "Henry Bubert <cryptix@riseup.net>"; CrystalGamma = "Jona Stubbe <nixos@crystalgamma.de>"; cstrahan = "Charles Strahan <charles@cstrahan.com>"; cwoac = "Oliver Matthews <oliver@codersoffortune.net>"; @@ -228,6 +230,7 @@ linquize = "Linquize <linquize@yahoo.com.hk>"; linus = "Linus Arver <linusarver@gmail.com>"; lnl7 = "Daiderd Jordan <daiderd@gmail.com>"; + loskutov = "Ignat Loskutov <ignat.loskutov@gmail.com>"; lovek323 = "Jason O'Conal <jason@oconal.id.au>"; lowfatcomputing = "Andreas Wagner <andreas.wagner@lowfatcomputing.org>"; lsix = "Lancelot SIX <lsix@lancelotsix.com>"; @@ -275,6 +278,7 @@ mounium = "Katona László <muoniurn@gmail.com>"; MP2E = "Cray Elliott <MP2E@archlinux.us>"; mpscholten = "Marc Scholten <marc@mpscholten.de>"; + mpsyco = "Francis St-Amour <fr.st-amour@gmail.com>"; msackman = "Matthew Sackman <matthew@wellquite.org>"; mschristiansen = "Mikkel Christiansen <mikkel@rheosystems.com>"; msteen = "Matthijs Steen <emailmatthijs@gmail.com>"; @@ -288,6 +292,7 @@ nckx = "Tobias Geerinckx-Rice <tobias.geerinckx.rice@gmail.com>"; nequissimus = "Tim Steinbach <tim@nequissimus.com>"; nfjinjing = "Jinjing Wang <nfjinjing@gmail.com>"; + nhooyr = "Anmol Sethi <anmol@aubble.com>"; nico202 = "Nicolò Balzarotti <anothersms@gmail.com>"; notthemessiah = "Brian Cohen <brian.cohen.88@gmail.com>"; NikolaMandic = "Ratko Mladic <nikola@mandic.email>"; @@ -387,8 +392,8 @@ skeidel = "Sven Keidel <svenkeidel@gmail.com>"; skrzyp = "Jakub Skrzypnik <jot.skrzyp@gmail.com>"; sleexyz = "Sean Lee <freshdried@gmail.com>"; - smironov = "Sergey Mironov <ierton@gmail.com>"; solson = "Scott Olson <scott@solson.me>"; + smironov = "Sergey Mironov <grrwlf@gmail.com>"; spacefrogg = "Michael Raitza <spacefrogg-nixos@meterriblecrew.net>"; spencerjanssen = "Spencer Janssen <spencerjanssen@gmail.com>"; spinus = "Tomasz Czyż <tomasz.czyz@gmail.com>"; @@ -457,4 +462,5 @@ zohl = "Al Zohali <zohl@fmap.me>"; zoomulator = "Kim Simmons <zoomulator@gmail.com>"; amiloradovsky = "Andrew Miloradovsky <miloradovsky@gmail.com>"; + yochai = "Yochai <yochai@titat.info>"; } diff --git a/lib/modules.nix b/lib/modules.nix index 6f08a49399ab..8db17c605799 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -1,4 +1,5 @@ with import ./lists.nix; +with import ./strings.nix; with import ./trivial.nix; with import ./attrsets.nix; with import ./options.nix; @@ -545,6 +546,84 @@ rec { use = builtins.trace "Obsolete option `${showOption from}' is used. It was renamed to `${showOption to}'."; }; + /* Return a module that causes a warning to be shown if any of the "from" + option is defined; the defined values can be used in the "mergeFn" to set + the "to" value. + This function can be used to merge multiple options into one that has a + different type. + + "mergeFn" takes the module "config" as a parameter and must return a value + of "to" option type. + + mkMergedOptionModule + [ [ "a" "b" "c" ] + [ "d" "e" "f" ] ] + [ "x" "y" "z" ] + (config: + let value = p: getAttrFromPath p config; + in + if (value [ "a" "b" "c" ]) == true then "foo" + else if (value [ "d" "e" "f" ]) == true then "bar" + else "baz") + + - options.a.b.c is a removed boolean option + - options.d.e.f is a removed boolean option + - options.x.y.z is a new str option that combines a.b.c and d.e.f + functionality + + This show a warning if any a.b.c or d.e.f is set, and set the value of + x.y.z to the result of the merge function + */ + mkMergedOptionModule = from: to: mergeFn: + { config, options, ... }: + { + options = foldl recursiveUpdate {} (map (path: setAttrByPath path (mkOption { + visible = false; + # To use the value in mergeFn without triggering errors + default = "_mkMergedOptionModule"; + })) from); + + config = { + warnings = filter (x: x != "") (map (f: + let val = getAttrFromPath f config; + opt = getAttrFromPath f options; + in + optionalString + (val != "_mkMergedOptionModule") + "The option `${showOption f}' defined in ${showFiles opt.files} has been changed to `${showOption to}' that has a different type. Please read `${showOption to}' documentation and update your configuration accordingly." + ) from); + } // setAttrByPath to (mkMerge + (optional + (any (f: (getAttrFromPath f config) != "_mkMergedOptionModule") from) + (mergeFn config))); + }; + + /* Single "from" version of mkMergedOptionModule. + Return a module that causes a warning to be shown if the "from" option is + defined; the defined value can be used in the "mergeFn" to set the "to" + value. + This function can be used to change an option into another that has a + different type. + + "mergeFn" takes the module "config" as a parameter and must return a value of + "to" option type. + + mkChangedOptionModule [ "a" "b" "c" ] [ "x" "y" "z" ] + (config: + let value = getAttrFromPath [ "a" "b" "c" ] config; + in + if value > 100 then "high" + else "normal") + + - options.a.b.c is a removed int option + - options.x.y.z is a new str option that supersedes a.b.c + + This show a warning if a.b.c is set, and set the value of x.y.z to the + result of the change function + */ + mkChangedOptionModule = from: to: changeFn: + mkMergedOptionModule [ from ] to changeFn; + /* Like ‘mkRenamedOptionModule’, but doesn't show a warning. */ mkAliasOptionModule = from: to: doRename { inherit from to; diff --git a/lib/types.nix b/lib/types.nix index 83f624e6b448..991fa0e5c291 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -261,7 +261,7 @@ rec { # declarations from the ‘options’ attribute of containing option # declaration. optionSet = mkOptionType { - name = /* builtins.trace "types.optionSet is deprecated; use types.submodule instead" */ "option set"; + name = builtins.trace "types.optionSet is deprecated; use types.submodule instead" "option set"; }; # Augment the given type with an additional type check function. |