From 7568587e8871a193320e790e05e4af519a361170 Mon Sep 17 00:00:00 2001 From: Nicolas Pierron Date: Mon, 28 Sep 2009 18:26:13 +0000 Subject: [PATCH] Add a renaming module. This module introduce the rename function to fetch definitions of oldest options and to add them inside the new option. Properties are still valid and will not be affected by the renaming. e.g: with: rename alias "foo.bar" to "baz.quz" and with the following module: { foo.bar = (mkOverride 10 {}) 42; baz.quz = 21; } the result of baz.quz would be 42 because the priority is still working after the renaming. svn path=/nixos/trunk/; revision=17484 --- modules/module-list.nix | 1 + modules/rename.nix | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 modules/rename.nix diff --git a/modules/module-list.nix b/modules/module-list.nix index 39b1bb325b6..e644a9bb77d 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -27,6 +27,7 @@ ./programs/pwdutils/pwdutils.nix ./programs/ssh.nix ./programs/ssmtp.nix + ./rename.nix ./security/consolekit.nix ./security/pam.nix ./security/policykit.nix diff --git a/modules/rename.nix b/modules/rename.nix new file mode 100644 index 00000000000..777b95cc977 --- /dev/null +++ b/modules/rename.nix @@ -0,0 +1,41 @@ +{pkgs, options, config, ...}: + + +let + to = throw "This is just a dummy keyword"; + alias = { name = "Alias"; }; + obsolete = { name = "Obsolete name"; }; + + zipModules = list: with pkgs.lib; + zip (n: v: + if tail v != [] then zipModules v else head v + ) list; + + rename = fromStatus: from: keyword: to: with pkgs.lib; + let + setTo = setAttrByPath (splitString "." to); + setFrom = setAttrByPath (splitString "." from); + toOf = attrByPath (splitString "." to) (abort "bad renaming"); + fromOf = attrByPath (splitString "." from) (abort "IE: renaming error"); + in + [{ + options = setFrom (mkOption { + description = "${fromStatus.name} of ."; + apply = x: toOf config; + }); + }] ++ + [{ + options = setTo (mkOption { + extraConfigs = map (def: def.value) (fromOf options).definitions; + }); + }]; + +in zipModules ([] + +# usage example: +# ++ rename alias "services.xserver.slim.theme" to "services.xserver.displayManager.slim.theme" +# ++ rename obsolete "environment.extraPackages" to "environment.systemPackages" + + + +) # do not add renaming after this.