From d465d6764ab6e11bdd01b2f8bf8bd5cb436e6870 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Thu, 6 Jun 2013 13:59:26 -0400 Subject: [PATCH 1/3] Allow imports in submodules Signed-off-by: Shea Levy --- pkgs/lib/modules.nix | 4 ++-- pkgs/lib/options.nix | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/pkgs/lib/modules.nix b/pkgs/lib/modules.nix index 286178a0fa7..74603e9c579 100644 --- a/pkgs/lib/modules.nix +++ b/pkgs/lib/modules.nix @@ -197,9 +197,9 @@ rec { recurseInto = name: moduleMerge (addName name) (modulesOf name); - recurseForOption = name: modules: + recurseForOption = name: modules: args: moduleMerge name ( - map unifyModuleSyntax modules + moduleClosure modules args ); errorSource = modules: diff --git a/pkgs/lib/options.nix b/pkgs/lib/options.nix index 3a8cc0006ef..d31a501cac9 100644 --- a/pkgs/lib/options.nix +++ b/pkgs/lib/options.nix @@ -82,16 +82,11 @@ rec { handleOptionSets = opt: if opt ? type && opt.type.hasOptions then let - - optionConfig = vals: args: - map (f: lib.applyIfFunction f args) - (opt.options ++ toList vals); - # Evaluate sub-modules. subModuleMerge = path: vals: lib.fix (args: let - result = recurseInto path (optionConfig vals args); + result = recurseInto path (opt.options ++ toList vals) args; name = lib.removePrefix (opt.name + ".") path; extraArgs = opt.extraArgs or {}; individualExtraArgs = opt.individualExtraArgs or {}; From 6d64b1d92c9ac0b0f7404f8bbb3a302b3030027a Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Fri, 7 Jun 2013 03:42:46 -0400 Subject: [PATCH 2/3] Give unique keys to submodule components I'm not wed to the outPath values I chose, other options are probably valid there too. It would be nice if we could track which file each merged value came from as well. Signed-off-by: Shea Levy --- pkgs/lib/modules.nix | 19 +++++++++++++------ pkgs/lib/options.nix | 11 +++++++++-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/pkgs/lib/modules.nix b/pkgs/lib/modules.nix index 74603e9c579..3d4ebc32512 100644 --- a/pkgs/lib/modules.nix +++ b/pkgs/lib/modules.nix @@ -75,12 +75,19 @@ rec { ); - unifyOptionModule = {key ? ""}: m: (args: - let module = lib.applyIfFunction m args; in - if lib.isModule module then - { inherit key; } // module + unifyOptionModule = {key ? ""}: name: index: m: (args: + let + module = lib.applyIfFunction m args; + key_ = rec { + file = key; + option = name; + number = index; + outPath = "file ${toString file} option ${option} options number ${toString number}"; + }; + in if lib.isModule module then + { key = key_; } // module else - { inherit key; options = module; } + { key = key_; options = module; } ); @@ -240,7 +247,7 @@ rec { decls = # add location to sub-module options. map (m: mapSubOptions - (unifyOptionModule {inherit (m) key;}) + (unifyOptionModule {inherit (m) key;} name) m.options ) declarations; diff --git a/pkgs/lib/options.nix b/pkgs/lib/options.nix index d31a501cac9..1fdf9ad8088 100644 --- a/pkgs/lib/options.nix +++ b/pkgs/lib/options.nix @@ -31,7 +31,7 @@ rec { mapSubOptions = f: opt: if opt ? options then opt // { - options = map f (toList opt.options); + options = imap f (toList opt.options); } else opt; @@ -86,7 +86,14 @@ rec { subModuleMerge = path: vals: lib.fix (args: let - result = recurseInto path (opt.options ++ toList vals) args; + result = recurseInto path (opt.options ++ imap (index: v: args: { + key = rec { + #!!! Would be nice if we had the file the val was from + option = path; + number = index; + outPath = "option ${option} config number ${toString number}"; + }; + } // (lib.applyIfFunction v args)) (toList vals)) args; name = lib.removePrefix (opt.name + ".") path; extraArgs = opt.extraArgs or {}; individualExtraArgs = opt.individualExtraArgs or {}; From abfca0ad1461c202f09468ad27bd7eed471911d1 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Mon, 17 Jun 2013 10:05:46 -0400 Subject: [PATCH 3/3] When printing submodule keys, print just the file name if known Signed-off-by: Shea Levy --- pkgs/lib/modules.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/lib/modules.nix b/pkgs/lib/modules.nix index 3d4ebc32512..ea38010cecc 100644 --- a/pkgs/lib/modules.nix +++ b/pkgs/lib/modules.nix @@ -82,7 +82,7 @@ rec { file = key; option = name; number = index; - outPath = "file ${toString file} option ${option} options number ${toString number}"; + outPath = key; }; in if lib.isModule module then { key = key_; } // module