Modular, context-aware and aspect-oriented dendritic Nix configurations. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/
at main 33 lines 686 B view raw
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}