fake.modules transposition for aspect-oriented Dendritic Nix. with cross-aspect dependencies. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/ dendrix.oeiuwq.com/Dendritic.html
dendritic nix aspect oriented

expose resolved modules on each aspect (#16)

authored by oeiuwq.com and committed by

GitHub 9efdc393 746c635f

+52
+44
checkmate.nix
··· 228 228 inherit expr expected; 229 229 }; 230 230 231 + aspects."test modules resolved" = 232 + let 233 + flake = mkFlake { 234 + flake.aspects = 235 + { aspects, ... }: 236 + { 237 + aspectOne = { 238 + name = "one"; 239 + includes = [ aspects.aspectOne.provides.dos ]; 240 + classOne.bar = [ "zzz" ]; 241 + provides.dos = 242 + { aspect-chain, ... }: 243 + { 244 + name = "dos"; 245 + includes = [ aspects.aspectOne.provides.tres ]; 246 + classOne.bar = map (x: x.name) aspect-chain; 247 + }; 248 + 249 + provides.tres = 250 + { aspect-chain, ... }: 251 + { 252 + name = "tres"; 253 + classOne.bar = [ (lib.last aspect-chain).name ]; 254 + }; 255 + }; 256 + }; 257 + }; 258 + mod = { 259 + imports = [ 260 + fooOpt 261 + (flake.aspects.aspectOne.modules.classOne) 262 + ]; 263 + }; 264 + expr = lib.sort (a: b: a < b) (evalMod "classOne" mod).bar; 265 + expected = [ 266 + "dos" 267 + "one" 268 + "zzz" 269 + ]; 270 + in 271 + { 272 + inherit expr expected; 273 + }; 274 + 231 275 aspects."test provides" = 232 276 let 233 277 flake = mkFlake {
+8
nix/types.nix
··· 97 97 { class, aspect-chain }: 98 98 aspect; 99 99 }; 100 + options.modules = lib.mkOption { 101 + internal = true; 102 + visible = false; 103 + readOnly = true; 104 + description = "resolved modules from this aspect"; 105 + type = lib.types.attrsOf lib.types.deferredModule; 106 + default = lib.mapAttrs (class: _: aspect.resolve { inherit class; }) aspect; 107 + }; 100 108 options.resolve = lib.mkOption { 101 109 internal = true; 102 110 visible = false;