2026-02-22 17:59:18 +00:00
|
|
|
lib: {
|
2026-02-22 18:46:28 +00:00
|
|
|
hylonix = {
|
|
|
|
|
recursiveMerge =
|
|
|
|
|
let
|
|
|
|
|
f =
|
|
|
|
|
x: y:
|
|
|
|
|
if y == null then
|
|
|
|
|
x
|
|
|
|
|
else if builtins.typeOf x != builtins.typeOf y then
|
|
|
|
|
y
|
|
|
|
|
else if builtins.typeOf x == "set" then
|
|
|
|
|
builtins.listToAttrs (
|
|
|
|
|
builtins.map (name: {
|
|
|
|
|
inherit name;
|
|
|
|
|
value = f (x.${name} or null) (y.${name} or null);
|
|
|
|
|
}) (builtins.attrNames y ++ builtins.attrNames x)
|
|
|
|
|
)
|
|
|
|
|
else if builtins.typeOf x == "list" then
|
|
|
|
|
x ++ y
|
|
|
|
|
else
|
|
|
|
|
y;
|
|
|
|
|
in
|
|
|
|
|
f;
|
|
|
|
|
|
|
|
|
|
recursiveMergeAll = builtins.foldl' lib.hylonix.recursiveMerge null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
inherit (lib.hylonix) recursiveMerge recursiveMergeAll;
|
2026-02-22 17:59:18 +00:00
|
|
|
}
|