Your one-stop-cake-shop for everything Freshly Baked has to offer

feat(ingredients): auto-enable combinations

We can have combination ingredients by putting plusses between
ingredient names. They should be automatically enabled when we enable
their component ingredients

These are useful to, for example, add certain configuration that is only
relevant to certain groups of people (e.g. freshlybakedcake) or reorder
service launch (like we're currently doing in homes for ssh/scriptfs in
niri)

+19 -9
+19 -1
packetmix/lib/ingredients.nix
··· 130 130 { 131 131 options.ingredient.${name}.enable = nixpkgs.lib.mkEnableOption "the ${name} ingredient"; 132 132 } 133 - ]; 133 + ] 134 + ++ ( 135 + if nilla.lib.strings.hasInfix "+" name then 136 + [ 137 + ( 138 + { config, ... }@module: 139 + { 140 + config.ingredient.${name}.enable = 141 + let 142 + components = nilla.lib.strings.split "+" name; 143 + shouldEnable = builtins.all (component: module.config.ingredient.${component}.enable) components; 144 + in 145 + nixpkgs.lib.mkIf shouldEnable true; 146 + } 147 + ) 148 + ] 149 + else 150 + [ ] 151 + ); 134 152 135 153 # Gets modules for all ingredients, based on just a directory 136 154 # Includes all required option declarations (under options.ingredient.${name}.enable for each ingredient) and conditional auto-imports
-8
packetmix/systems/default.nix
··· 18 18 common.enable = true; 19 19 espanso.enable = true; 20 20 freshlybakedcake.enable = true; 21 - "freshlybakedcake+personal".enable = true; 22 21 javelin.enable = true; 23 22 minion.enable = true; 24 23 niri.enable = true; ··· 43 42 common.enable = true; 44 43 espanso.enable = true; 45 44 freshlybakedcake.enable = true; 46 - "freshlybakedcake+personal".enable = true; 47 45 gaming.enable = true; 48 46 javelin.enable = true; 49 47 minion.enable = true; ··· 68 66 common.enable = true; 69 67 espanso.enable = true; 70 68 freshlybakedcake.enable = true; 71 - "freshlybakedcake+personal".enable = true; 72 69 javelin.enable = true; 73 70 minion.enable = true; 74 71 niri.enable = true; ··· 94 91 common.enable = true; 95 92 espanso.enable = true; 96 93 freshlybakedcake.enable = true; 97 - "freshlybakedcake+personal".enable = true; 98 94 gaming.enable = true; 99 95 niri.enable = true; 100 96 ocicat.enable = true; ··· 118 114 common.enable = true; 119 115 espanso.enable = true; 120 116 freshlybakedcake.enable = true; 121 - "freshlybakedcake+personal".enable = true; 122 117 gaming.enable = true; 123 118 kde.enable = true; 124 119 personal.enable = true; ··· 144 139 corsair.enable = true; 145 140 espanso.enable = true; 146 141 freshlybakedcake.enable = true; 147 - "freshlybakedcake+personal".enable = true; 148 142 gaming.enable = true; 149 143 niri.enable = true; 150 144 shorthair.enable = true; ··· 166 160 ingredient = { 167 161 common.enable = true; 168 162 freshlybakedcake.enable = true; 169 - "freshlybakedcake+server".enable = true; 170 163 midnight.enable = true; 171 164 server.enable = true; 172 165 }; ··· 185 178 ingredient = { 186 179 common.enable = true; 187 180 freshlybakedcake.enable = true; 188 - "freshlybakedcake+server".enable = true; 189 181 teal.enable = true; 190 182 server.enable = true; 191 183 };