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
at main 44 lines 839 B view raw
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}