filterOverrides: init
This commit is contained in:
@@ -10,13 +10,14 @@
|
||||
in {
|
||||
inherit util;
|
||||
|
||||
collect = import ./src/collect.nix lib;
|
||||
filterAttrs = import ./src/filterAttrs.nix lib;
|
||||
filterOverrides = import ./src/filterOverrides.nix lib;
|
||||
findFirstIndex = import ./src/findFirstIndex.nix lib;
|
||||
genAttrs = import ./src/genAttrs.nix lib;
|
||||
getAttrs = import ./src/getAttrs.nix lib;
|
||||
overrideExisting = import ./src/overrideExisting.nix lib;
|
||||
subtractLists = import ./src/subtractLists.nix lib;
|
||||
unique = import ./src/unique.nix lib;
|
||||
overrideExisting = import ./src/overrideExisting.nix lib;
|
||||
findFirstIndex = import ./src/findFirstIndex.nix lib;
|
||||
filterAttrs = import ./src/filterAttrs.nix lib;
|
||||
collect = import ./src/collect.nix lib;
|
||||
};
|
||||
}
|
||||
|
||||
73
src/filterOverrides.nix
Normal file
73
src/filterOverrides.nix
Normal file
@@ -0,0 +1,73 @@
|
||||
lib:
|
||||
with lib;
|
||||
let
|
||||
defaultOverridePriority = 100;
|
||||
|
||||
/**
|
||||
Given a list of config values, process the mkOverride properties,
|
||||
that is, return the values that have the highest (that is,
|
||||
numerically lowest) priority, and strip the mkOverride
|
||||
properties. For example,
|
||||
|
||||
[ { file = "/1"; value = mkOverride 10 "a"; }
|
||||
{ file = "/2"; value = mkOverride 20 "b"; }
|
||||
{ file = "/3"; value = "z"; }
|
||||
{ file = "/4"; value = mkOverride 10 "d"; }
|
||||
]
|
||||
|
||||
yields
|
||||
|
||||
[ { file = "/1"; value = "a"; }
|
||||
{ file = "/4"; value = "d"; }
|
||||
]
|
||||
|
||||
Note that "z" has the default priority 100.
|
||||
|
||||
# Inputs
|
||||
|
||||
`defs`
|
||||
|
||||
: 1\. Function argument
|
||||
*/
|
||||
filterOverridesOld = let
|
||||
filterOverrides' =
|
||||
defs:
|
||||
let
|
||||
getPrio =
|
||||
def: if def.value._type or "" == "override" then def.value.priority else defaultOverridePriority;
|
||||
highestPrio = foldl' (prio: def: min (getPrio def) prio) 9999 defs;
|
||||
strip =
|
||||
def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def;
|
||||
in
|
||||
{
|
||||
values = concatMap (def: if getPrio def == highestPrio then [ (strip def) ] else [ ]) defs;
|
||||
inherit highestPrio;
|
||||
};
|
||||
in defs: (filterOverrides' defs).values;
|
||||
|
||||
filterOverridesNew = let
|
||||
filterOverrides' =
|
||||
defs:
|
||||
let
|
||||
normalizedList = map (def: if def.value._type or null == "override" then {
|
||||
prio = def.value.priority;
|
||||
${toString def.value.priority} = def.value.content;
|
||||
} else {
|
||||
prio = defaultOverridePriority;
|
||||
${toString defaultOverridePriority} = def.value;
|
||||
}) defs;
|
||||
|
||||
highestPriority = foldl' min 9999 (catAttrs "prio" normalizedList);
|
||||
in
|
||||
{
|
||||
values = catAttrs (toString highestPriority) normalizedList;
|
||||
inherit highestPriority;
|
||||
};
|
||||
in defs: (filterOverrides' defs).values;
|
||||
|
||||
bigdata = (builtins.genList (x: { file = "asdf"; value = mkOverride x (toString x); }) 999)
|
||||
++ (builtins.genList (x: { file = "qwerty"; value = toString x; }) 999);
|
||||
in {
|
||||
old = filterOverridesOld bigdata;
|
||||
new = filterOverridesNew bigdata;
|
||||
}
|
||||
Reference in New Issue
Block a user