34 lines
602 B
Nix
34 lines
602 B
Nix
{ lib, ... }:
|
|
|
|
with builtins;
|
|
with lib;
|
|
|
|
builtins // lib // rec {
|
|
|
|
addName = name: set:
|
|
set // { inherit name; };
|
|
|
|
addNames = mapAttrs addName;
|
|
|
|
types = import ./types.nix { inherit lib; };
|
|
|
|
|
|
# listset k v = set k [v]
|
|
|
|
# listset-insert : k -> v -> listset k v -> listset k v
|
|
listset-insert = name: value: set:
|
|
set // { ${name} = set.${name} or [] ++ [value]; };
|
|
|
|
# tree k v = set k (either v (tree k v))
|
|
|
|
# tree-get : [k] -> tree k v -> v
|
|
tree-get = path: x:
|
|
let
|
|
y = x.${last path};
|
|
in
|
|
if typeOf y != "set"
|
|
then y
|
|
else tree-get (init path) y;
|
|
|
|
}
|