forked from
oeiuwq.com/den
Modular, context-aware and aspect-oriented dendritic Nix configurations.
Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/
1# create aspect dependencies from hosts/users
2{
3 lib,
4 den,
5 ...
6}:
7let
8 inherit (den.lib) parametric;
9
10 makeAspect = from: {
11 ${from.aspect} = parametric.atLeast {
12 ${from.class} = { };
13 includes = [ den.default ];
14 };
15 };
16
17 hosts = map builtins.attrValues (builtins.attrValues den.hosts);
18 homes = map builtins.attrValues (builtins.attrValues den.homes);
19 aspectClass = from: { inherit (from) aspect class; };
20
21 deps = lib.pipe hosts [
22 (lib.flatten)
23 (map (h: builtins.attrValues h.users))
24 (users: users ++ hosts ++ homes)
25 (lib.flatten)
26 (map aspectClass)
27 (lib.unique)
28 (map makeAspect)
29 ];
30in
31{
32 den.aspects = lib.mkMerge deps;
33}