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
at main 53 lines 1.2 kB view raw
1{ 2 lib, 3 mkFlake, 4 evalMod, 5 fooOpt, 6 ... 7}: 8{ 9 10 flake.tests."test resolve aspect-chain" = 11 let 12 flake = mkFlake { 13 flake.aspects = 14 { aspects, ... }: 15 { 16 aspectOne = { 17 name = "one"; 18 includes = [ aspects.aspectOne.provides.dos ]; 19 classOne.bar = [ "zzz" ]; 20 provides.dos = 21 { aspect-chain, ... }: 22 { 23 name = "dos"; 24 includes = [ aspects.aspectOne.provides.tres ]; 25 classOne.bar = map (x: x.name) aspect-chain; 26 }; 27 28 provides.tres = 29 { aspect-chain, ... }: 30 { 31 name = "tres"; 32 classOne.bar = [ (lib.last aspect-chain).name ]; 33 }; 34 }; 35 }; 36 }; 37 mod = { 38 imports = [ 39 fooOpt 40 (flake.aspects.aspectOne.resolve { class = "classOne"; }) 41 ]; 42 }; 43 expr = lib.sort (a: b: a < b) (evalMod "classOne" mod).bar; 44 expected = [ 45 "dos" 46 "one" 47 "zzz" 48 ]; 49 in 50 { 51 inherit expr expected; 52 }; 53}