Modular, context-aware and aspect-oriented dendritic Nix configurations.
Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/
den.oeiuwq.com
configurations
den
dendritic
nix
aspect
oriented
1{
2 config,
3 lib,
4 ...
5}:
6let
7
8 build =
9 builder: cfg:
10 let
11 items = map builtins.attrValues (builtins.attrValues cfg);
12 buildItem =
13 item:
14 if
15 item.intoAttr == [ ] # no output requested
16 then
17 { }
18 else
19 lib.setAttrByPath item.intoAttr (builder item);
20 built = map buildItem (lib.flatten items);
21 in
22 built;
23
24 osConfiguration =
25 host:
26 host.instantiate {
27 modules = [
28 host.mainModule
29 { nixpkgs.hostPlatform = lib.mkDefault host.system; }
30 ];
31 };
32
33 homeConfiguration =
34 home:
35 home.instantiate {
36 pkgs = home.pkgs;
37 modules = [ home.mainModule ];
38 };
39
40 configs = (build osConfiguration config.den.hosts) ++ (build homeConfiguration config.den.homes);
41in
42{
43 config.flake = lib.mkMerge configs;
44}