hylonix/lib/default.nix

29 lines
752 B
Nix

lib: {
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;
}