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
8
fork

Configure Feed

Select the types of activity you want to include in your feed.

fmt

+145 -63
-1
.github/workflows/versioned-docs.yml
··· 29 29 name: docs-${{github.ref_name}} 30 30 path: ./docs/versioned 31 31 overwrite: true 32 -
+20 -16
templates/ci/modules/features/perf/ctx-pipeline.nix
··· 14 14 funny.names = [ "${name}-${x}" ]; 15 15 }; 16 16 }; 17 - withInto = 18 - if i + 1 < n then 19 - { into.${next} = { x }: [ { x = "${x}+${toString i}"; } ]; } 20 - else 21 - { }; 17 + withInto = if i + 1 < n then { into.${next} = { x }: [ { x = "${x}+${toString i}"; } ]; } else { }; 22 18 in 23 19 { den, ... }: 24 - { den.ctx.${name} = base // withInto; } 20 + { 21 + den.ctx.${name} = base // withInto; 22 + } 25 23 ) n; 26 24 27 25 mkFanOut = ··· 31 29 den.ctx.root = { 32 30 _.root = 33 31 { x }: 34 - { funny.names = [ "root-${x}" ]; }; 32 + { 33 + funny.names = [ "root-${x}" ]; 34 + }; 35 35 into.leaf = { x }: lib.genList (i: { x = "${x}-${toString i}"; }) n; 36 36 }; 37 37 den.ctx.leaf._.leaf = 38 38 { x }: 39 - { funny.names = [ "leaf-${x}" ]; }; 39 + { 40 + funny.names = [ "leaf-${x}" ]; 41 + }; 40 42 }; 41 43 42 44 mkCrossProviders = ··· 48 50 den.ctx.src = { 49 51 _.src = 50 52 { v }: 51 - { funny.names = [ "src-${v}" ]; }; 52 - into = lib.genAttrs (lib.genList (i: "t${toString i}") n) ( 53 - _: 54 - { v }: 55 - [ { v = "${v}!"; } ] 56 - ); 53 + { 54 + funny.names = [ "src-${v}" ]; 55 + }; 56 + into = lib.genAttrs (lib.genList (i: "t${toString i}") n) (_: { v }: [ { v = "${v}!"; } ]); 57 57 provides = lib.genAttrs (lib.genList (i: "t${toString i}") n) ( 58 58 name: 59 59 { v }: 60 - { funny.names = [ "cross-${name}-${v}" ]; } 60 + { 61 + funny.names = [ "cross-${name}-${v}" ]; 62 + } 61 63 ); 62 64 }; 63 65 }; ··· 70 72 { 71 73 den.ctx.${name}._.${name} = 72 74 { v }: 73 - { funny.names = [ "${name}-${v}" ]; }; 75 + { 76 + funny.names = [ "${name}-${v}" ]; 77 + }; 74 78 } 75 79 ) n; 76 80 in
+6 -2
templates/ci/modules/features/perf/forward.nix
··· 13 13 fromAspect = 14 14 _: 15 15 { class, aspect-chain }: 16 - { src.names = [ "forwarded" ]; }; 16 + { 17 + src.names = [ "forwarded" ]; 18 + }; 17 19 }; 18 20 in 19 21 { ··· 42 44 fromAspect = 43 45 item: 44 46 { class, aspect-chain }: 45 - { src.names = [ item ]; }; 47 + { 48 + src.names = [ item ]; 49 + }; 46 50 }; 47 51 in 48 52 {
+35 -17
templates/ci/modules/features/perf/namespace.nix
··· 1 - { denTest, inputs, lib, ... }: 1 + { 2 + denTest, 3 + inputs, 4 + lib, 5 + ... 6 + }: 2 7 { 3 8 flake.tests.performance.namespace = { 4 9 5 10 test-namespace-many-aspects = denTest ( 6 - { den, ns, funnyNames, ... }: 11 + { 12 + den, 13 + ns, 14 + funnyNames, 15 + ... 16 + }: 7 17 { 8 18 imports = [ (inputs.den.namespace "ns" false) ]; 9 - ns = lib.genAttrs (lib.genList (i: "a${toString i}") 30) ( 10 - name: { funny.names = [ name ]; } 11 - ); 19 + ns = lib.genAttrs (lib.genList (i: "a${toString i}") 30) (name: { 20 + funny.names = [ name ]; 21 + }); 12 22 den.aspects.root = { 13 23 funny.names = [ "root" ]; 14 24 includes = lib.genList (i: ns."a${toString i}") 30; ··· 20 30 ); 21 31 22 32 test-namespace-merged-sources = denTest ( 23 - { den, ns, funnyNames, ... }: 33 + { 34 + den, 35 + ns, 36 + funnyNames, 37 + ... 38 + }: 24 39 let 25 - mkSrc = 26 - i: 27 - { 28 - denful.ns = lib.genAttrs (lib.genList (j: "x${toString j}") 10) ( 29 - name: { funny.names = [ "${name}-src${toString i}" ]; } 30 - ); 31 - }; 40 + mkSrc = i: { 41 + denful.ns = lib.genAttrs (lib.genList (j: "x${toString j}") 10) (name: { 42 + funny.names = [ "${name}-src${toString i}" ]; 43 + }); 44 + }; 32 45 sources = lib.genList mkSrc 5; 33 46 in 34 47 { ··· 44 57 ); 45 58 46 59 test-namespace-with-providers = denTest ( 47 - { den, ns, funnyNames, ... }: 60 + { 61 + den, 62 + ns, 63 + funnyNames, 64 + ... 65 + }: 48 66 { 49 67 imports = [ (inputs.den.namespace "ns" false) ]; 50 68 ns.parent = { 51 69 funny.names = [ "parent" ]; 52 - provides = lib.genAttrs (lib.genList (i: "p${toString i}") 10) ( 53 - name: { funny.names = [ name ]; } 54 - ); 70 + provides = lib.genAttrs (lib.genList (i: "p${toString i}") 10) (name: { 71 + funny.names = [ name ]; 72 + }); 55 73 }; 56 74 den.aspects.root = { 57 75 funny.names = [ "root" ];
+37 -8
templates/ci/modules/features/perf/parametric.nix
··· 19 19 in 20 20 { 21 21 den.ctx.start = { 22 - _.start = { level }: { funny.names = [ level ]; }; 22 + _.start = 23 + { level }: 24 + { 25 + funny.names = [ level ]; 26 + }; 23 27 includes = [ top ]; 24 28 }; 25 29 ··· 38 42 includes = [ 39 43 ( 40 44 { host, ... }: 41 - { funny.names = [ "i${toString i}-${host}" ]; } 45 + { 46 + funny.names = [ "i${toString i}-${host}" ]; 47 + } 42 48 ) 43 49 ]; 44 50 }; ··· 46 52 in 47 53 { 48 54 den.ctx.start = { 49 - _.start = { host }: { funny.names = [ host ]; }; 55 + _.start = 56 + { host }: 57 + { 58 + funny.names = [ host ]; 59 + }; 50 60 includes = aspects; 51 61 }; 52 62 ··· 60 70 let 61 71 inner = 62 72 { host, planet, ... }: 63 - { funny.names = [ "${host}-${planet}" ]; }; 73 + { 74 + funny.names = [ "${host}-${planet}" ]; 75 + }; 64 76 expanded = den.lib.parametric.expands { planet = "mars"; } { 65 77 funny.names = [ "exp" ]; 66 78 includes = lib.genList (_: inner) 15; ··· 68 80 in 69 81 { 70 82 den.ctx.start = { 71 - _.start = { host }: { funny.names = [ host ]; }; 83 + _.start = 84 + { host }: 85 + { 86 + funny.names = [ host ]; 87 + }; 72 88 includes = [ expanded ]; 73 89 }; 74 90 ··· 83 99 shared = den.lib.parametric { 84 100 funny.names = [ "shared" ]; 85 101 includes = [ 86 - ({ host, ... }: { funny.names = [ "inner-${host}" ]; }) 102 + ( 103 + { host, ... }: 104 + { 105 + funny.names = [ "inner-${host}" ]; 106 + } 107 + ) 87 108 ]; 88 109 }; 89 110 in 90 111 { 91 112 den.ctx.a = { 92 - _.a = { host }: { funny.names = [ "a-${host}" ]; }; 113 + _.a = 114 + { host }: 115 + { 116 + funny.names = [ "a-${host}" ]; 117 + }; 93 118 into.b = { host }: [ { host = "${host}!"; } ]; 94 119 includes = [ shared ]; 95 120 }; 96 121 den.ctx.b = { 97 - _.b = { host }: { funny.names = [ "b-${host}" ]; }; 122 + _.b = 123 + { host }: 124 + { 125 + funny.names = [ "b-${host}" ]; 126 + }; 98 127 includes = [ shared ]; 99 128 }; 100 129
+35 -12
templates/ci/modules/features/perf/pure-eval.nix
··· 1 - { denTest, inputs, lib, ... }: 1 + { 2 + denTest, 3 + inputs, 4 + lib, 5 + ... 6 + }: 2 7 let 3 8 denModule = (import inputs.den.outPath).nixModule inputs; 4 9 ··· 30 35 expr = builtins.length (builtins.attrNames ev.config.den.aspects); 31 36 expected = 50; 32 37 in 33 - { inherit expr expected; }; 38 + { 39 + inherit expr expected; 40 + }; 34 41 35 42 test-pure-ctx-chain = 36 43 let ··· 38 45 { den, ... }: 39 46 { 40 47 den.ctx.a = { 41 - _.a = { v }: { my.val = [ v ]; }; 48 + _.a = 49 + { v }: 50 + { 51 + my.val = [ v ]; 52 + }; 42 53 into.b = { v }: [ { v = "${v}!"; } ]; 43 54 }; 44 - den.ctx.b._.b = { v }: { my.val = [ v ]; }; 55 + den.ctx.b._.b = 56 + { v }: 57 + { 58 + my.val = [ v ]; 59 + }; 45 60 } 46 61 ); 47 62 asp = ev.config.den.ctx.a { v = "x"; }; ··· 58 73 "x!" 59 74 ]; 60 75 in 61 - { inherit expr expected; }; 76 + { 77 + inherit expr expected; 78 + }; 62 79 63 80 test-pure-resolve-100 = 64 81 let ··· 67 84 { 68 85 den.aspects.root = { 69 86 my.val = [ "root" ]; 70 - includes = lib.genList ( 71 - i: 72 - { my.val = [ "i${toString i}" ]; } 73 - ) 100; 87 + includes = lib.genList (i: { my.val = [ "i${toString i}" ]; }) 100; 74 88 }; 75 89 } 76 90 ); ··· 84 98 expr = builtins.length ev2.config.val; 85 99 expected = 101; 86 100 in 87 - { inherit expr expected; }; 101 + { 102 + inherit expr expected; 103 + }; 88 104 89 105 test-pure-statics = 90 106 let ··· 94 110 den.aspects.base = den.lib.parametric { 95 111 my.val = [ "base" ]; 96 112 includes = [ 97 - ({ class, ... }: { my.val = [ "static-${class}" ]; }) 113 + ( 114 + { class, ... }: 115 + { 116 + my.val = [ "static-${class}" ]; 117 + } 118 + ) 98 119 ]; 99 120 }; 100 121 } ··· 112 133 "static-my" 113 134 ]; 114 135 in 115 - { inherit expr expected; }; 136 + { 137 + inherit expr expected; 138 + }; 116 139 117 140 }; 118 141 }
+3 -1
templates/ci/modules/features/perf/resolve.nix
··· 42 42 funny.names = [ "top" ]; 43 43 includes = 44 44 let 45 - shared = { funny.names = [ "shared" ]; }; 45 + shared = { 46 + funny.names = [ "shared" ]; 47 + }; 46 48 in 47 49 lib.genList (_: { 48 50 funny.names = [ "mid" ];
+9 -6
templates/ci/modules/features/schema-base-modules.nix
··· 137 137 options.main-group = lib.mkOption { default = user.name; }; 138 138 options.description = lib.mkOption { default = "${user.name}@${host.name}"; }; 139 139 options.meta = lib.mkOption { 140 - type = lib.types.submodule ({ ... }: { 141 - options = { 142 - email = lib.mkOption { type = lib.types.str; }; 143 - key = lib.mkOption { type = lib.types.str; }; 144 - }; 145 - }); 140 + type = lib.types.submodule ( 141 + { ... }: 142 + { 143 + options = { 144 + email = lib.mkOption { type = lib.types.str; }; 145 + key = lib.mkOption { type = lib.types.str; }; 146 + }; 147 + } 148 + ); 146 149 }; 147 150 }; 148 151