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 <shea@shealevy.com>
This commit is contained in:
parent
d465d6764a
commit
6d64b1d92c
@ -75,12 +75,19 @@ rec {
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
unifyOptionModule = {key ? "<unknown location>"}: m: (args:
|
unifyOptionModule = {key ? "<unknown location>"}: name: index: m: (args:
|
||||||
let module = lib.applyIfFunction m args; in
|
let
|
||||||
if lib.isModule module then
|
module = lib.applyIfFunction m args;
|
||||||
{ inherit key; } // module
|
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
|
else
|
||||||
{ inherit key; options = module; }
|
{ key = key_; options = module; }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -240,7 +247,7 @@ rec {
|
|||||||
decls = # add location to sub-module options.
|
decls = # add location to sub-module options.
|
||||||
map (m:
|
map (m:
|
||||||
mapSubOptions
|
mapSubOptions
|
||||||
(unifyOptionModule {inherit (m) key;})
|
(unifyOptionModule {inherit (m) key;} name)
|
||||||
m.options
|
m.options
|
||||||
) declarations;
|
) declarations;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ rec {
|
|||||||
mapSubOptions = f: opt:
|
mapSubOptions = f: opt:
|
||||||
if opt ? options then
|
if opt ? options then
|
||||||
opt // {
|
opt // {
|
||||||
options = map f (toList opt.options);
|
options = imap f (toList opt.options);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
opt;
|
opt;
|
||||||
@ -86,7 +86,14 @@ rec {
|
|||||||
subModuleMerge = path: vals:
|
subModuleMerge = path: vals:
|
||||||
lib.fix (args:
|
lib.fix (args:
|
||||||
let
|
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;
|
name = lib.removePrefix (opt.name + ".") path;
|
||||||
extraArgs = opt.extraArgs or {};
|
extraArgs = opt.extraArgs or {};
|
||||||
individualExtraArgs = opt.individualExtraArgs or {};
|
individualExtraArgs = opt.individualExtraArgs or {};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user