Add a monoid to lib that merges objects together

This commit is contained in:
hylodon 2026-02-22 18:46:28 +00:00
parent e9e0b0dc2a
commit 977595f7e8

View file

@ -1,2 +1,29 @@
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;
}