2022-10-29 14:09:43 +02:00
|
|
|
with builtins; let
|
2022-10-31 01:13:22 +01:00
|
|
|
collectAttrFragments = successPredicate: stopPredicate: attrs: let
|
2022-10-14 01:29:48 +02:00
|
|
|
_collectAttrFragments = attrs:
|
|
|
|
|
concatMap (key: _collectAttrFragmentsBelowKey key attrs.${key}) (attrNames attrs)
|
2022-10-31 01:13:22 +01:00
|
|
|
|
2022-10-14 01:29:48 +02:00
|
|
|
;
|
|
|
|
|
_collectAttrFragmentsBelowKey = key: value:
|
2022-10-31 01:13:22 +01:00
|
|
|
if successPredicate value then [ [key] ]
|
|
|
|
|
else if stopPredicate value then [ ]
|
2022-10-14 01:29:48 +02:00
|
|
|
else if isAttrs value then
|
2022-10-31 01:13:22 +01:00
|
|
|
map (fragment: if length fragment > 0 then [key] ++ fragment else [ ]) (_collectAttrFragments value)
|
2022-10-14 01:29:48 +02:00
|
|
|
else [ ]
|
|
|
|
|
;
|
|
|
|
|
in _collectAttrFragments attrs
|
|
|
|
|
;
|
|
|
|
|
|
2022-10-29 14:09:43 +02:00
|
|
|
accessValueOfFragment = attrs: fragment: let
|
2022-10-14 01:29:48 +02:00
|
|
|
_accessValueOfFragment = value: fragment:
|
|
|
|
|
if fragment == [] then value
|
|
|
|
|
else _accessValueOfFragment (value.${head fragment}) (tail fragment)
|
|
|
|
|
;
|
|
|
|
|
in _accessValueOfFragment attrs fragment
|
|
|
|
|
;
|
2022-10-15 21:06:57 +02:00
|
|
|
|
2022-10-29 14:09:43 +02:00
|
|
|
toEnvValue = value:
|
|
|
|
|
if isBool value then (if value then "true" else "false")
|
|
|
|
|
else if isList value then "[${concatStringSep ";" value}]"
|
|
|
|
|
else value
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
in {
|
|
|
|
|
extractContainerEnvVars = piholeOptionDeclarations: piholeOptionDefinitions: let
|
|
|
|
|
_opt = piholeOptionDeclarations;
|
|
|
|
|
_cfg = piholeOptionDefinitions;
|
|
|
|
|
|
2022-10-31 01:13:22 +01:00
|
|
|
_envVarFragments = collectAttrFragments
|
|
|
|
|
(value: isAttrs value && value ? "envVar")
|
|
|
|
|
(value: isAttrs value && value._type or "" == "option")
|
|
|
|
|
_opt.piholeConfig;
|
2022-10-29 14:09:43 +02:00
|
|
|
in filter
|
|
|
|
|
(envVar: envVar.value != null)
|
|
|
|
|
(map
|
|
|
|
|
(fragment: {
|
|
|
|
|
name = getAttr "envVar" (accessValueOfFragment _opt.piholeConfig fragment);
|
|
|
|
|
value = toEnvValue (accessValueOfFragment _cfg.piholeConfig fragment);
|
|
|
|
|
})
|
|
|
|
|
_envVarFragments
|
|
|
|
|
)
|
|
|
|
|
;
|
2022-10-31 01:13:22 +01:00
|
|
|
|
|
|
|
|
extractContainerFTLEnvVars = piholeOptionDefinitions: let
|
|
|
|
|
_ftl = piholeOptionDefinitions.piholeConfig.ftl;
|
|
|
|
|
in map
|
|
|
|
|
(name: {
|
|
|
|
|
name = "FTL_${name}";
|
|
|
|
|
value = _ftl.${name};
|
|
|
|
|
})
|
|
|
|
|
(attrNames _ftl)
|
|
|
|
|
;
|
2022-10-14 01:29:48 +02:00
|
|
|
}
|