From 26ea947d330fef9624116ae100ff70101923de31 Mon Sep 17 00:00:00 2001 From: Eric Sagnes Date: Sat, 24 Sep 2016 21:10:29 +0900 Subject: [PATCH] lib/module: add mkChangedOptionModule function --- lib/modules.nix | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/modules.nix b/lib/modules.nix index d25a064ac8b5..8db17c605799 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -598,6 +598,32 @@ rec { (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;