summary refs log tree commit diff
path: root/pkgs/lib/modules.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/lib/modules.nix')
-rw-r--r--pkgs/lib/modules.nix23
1 files changed, 14 insertions, 9 deletions
diff --git a/pkgs/lib/modules.nix b/pkgs/lib/modules.nix
index 0df5c63da552..aeabf640cc2e 100644
--- a/pkgs/lib/modules.nix
+++ b/pkgs/lib/modules.nix
@@ -68,6 +68,16 @@ rec {
             {}
         );
 
+
+  unifyOptionModule = {key ? "<unknown location>"}: m: (args:
+    let module = lib.applyIfFunction m args; in
+    if lib.isModule module then
+      { inherit key; } // module
+    else
+      { inherit key; options = module; }
+  );
+
+
   moduleClosure = initModules: args:
     let
       moduleImport = m:
@@ -189,16 +199,11 @@ rec {
           options = lib.zip (name: values:
             if any isOption values then
               let
-                # locations to sub-options declarations
-                decls =
+                decls = # add location to sub-module options.
                   map (m:
-                    mapSubOptions (subModule: (args:
-                      let module = lib.applyIfFunction subModule args; in
-                      if lib.isModule module then
-                        { inherit (m) key; } // module
-                      else
-                        { inherit (m) key; options = module; }
-                    )) m.options
+                    mapSubOptions
+                      (unifyOptionModule {inherit (m) key;})
+                      m.options
                   ) (declarationsOf name);
               in
                 addOptionMakeUp