summary refs log tree commit diff
path: root/lib/modules.nix
diff options
context:
space:
mode:
authorNicolas B. Pierron <nicolas.b.pierron@gmail.com>2014-12-22 22:38:38 +0100
committerNicolas B. Pierron <nicolas.b.pierron@gmail.com>2014-12-22 22:38:38 +0100
commitd7f29acd48f27f3ad0aa13b47c489f3d4bfda362 (patch)
treede869876c1a1112067e34009dd420b3dfad27fe3 /lib/modules.nix
parent4e558732e7714ad69a6d0ad2b052f2efdde76376 (diff)
downloadnixpkgs-d7f29acd48f27f3ad0aa13b47c489f3d4bfda362.tar
nixpkgs-d7f29acd48f27f3ad0aa13b47c489f3d4bfda362.tar.gz
nixpkgs-d7f29acd48f27f3ad0aa13b47c489f3d4bfda362.tar.bz2
nixpkgs-d7f29acd48f27f3ad0aa13b47c489f3d4bfda362.tar.lz
nixpkgs-d7f29acd48f27f3ad0aa13b47c489f3d4bfda362.tar.xz
nixpkgs-d7f29acd48f27f3ad0aa13b47c489f3d4bfda362.tar.zst
nixpkgs-d7f29acd48f27f3ad0aa13b47c489f3d4bfda362.zip
modules: Extract mkAliasDefinition from the rename.nix NixOS module.
Diffstat (limited to 'lib/modules.nix')
-rw-r--r--lib/modules.nix25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/modules.nix b/lib/modules.nix
index fdee8824493..d0b8f90e5ce 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -356,6 +356,31 @@ rec {
   mkBefore = mkOrder 500;
   mkAfter = mkOrder 1500;
 
+  # Convenient property used to transfer all definitions and their
+  # properties from one option to another. This property is useful for
+  # renaming options, and also for including properties from another module
+  # system, including sub-modules.
+  #
+  #   { config, options, ... }:
+  #
+  #   {
+  #     # 'bar' might not always be defined in the current module-set.
+  #     config.foo.enable = mkAliasDefinitions (options.bar.enable or {});
+  #
+  #     # 'barbaz' has to be defined in the current module-set.
+  #     config.foobar.paths = mkAliasDefinitions options.barbaz.paths;
+  #   }
+  #
+  # Note, this is different than taking the value of the option and using it
+  # as a definition, as the new definition will not keep the mkOverride /
+  # mkDefault properties of the previous option.
+  #
+  mkAliasDefinitions = mkAliasAndWrapDefinitions id;
+  mkAliasAndWrapDefinitions = wrap: option:
+    mkMerge
+      (optional (isOption option && option.isDefined)
+        (wrap (mkMerge option.definitions)));
+
 
   /* Compatibility. */
   fixMergeModules = modules: args: evalModules { inherit modules args; check = false; };