infrastructure/lib/trivial.nix

40 lines
941 B
Nix
Raw Normal View History

2023-05-22 15:05:20 +02:00
rec {
/* Fuses a list of attribute sets into a single attribute set.
Example:
x = [ { a = 1; } { b = 2; } ]
fuseAttrs x
=> { a = 1; b = 2; }
*/
fuseAttrs = builtins.foldl' (attrs: x: attrs // x) { };
/* Maps then fuses a list of attribute sets into a single attribute set.
Example:
x = [ "a" "b" ]
mapFuse (c: { ${c} = 42; }) x
=> { a = 42; b = 42; }
*/
mapFuse = f: attrsList: fuseAttrs (builtins.map f attrsList);
/* Equivalent of lib.singleton but for an attribute set.
Example:
singleAttr "a" 1
=> { a = 1; }
*/
singleAttr = name: value: { ${name} = value; };
mapSingleFuse = f: mapFuse (x: singleAttr x (f x));
/* Creates a relative path as a string
Example:
mkRel /home/test/ "file.txt"
=> "/home/test/file.txt"
*/
mkRel = path: file: builtins.toString (path + "/${file}");
compose = f: g: (x: g (f x));
}