nixos/olivetin: use yq-go to merge config files

This commit is contained in:
Defelo 2025-06-08 21:49:42 +02:00
parent 54bfa64faf
commit f71748184c
No known key found for this signature in database
GPG key ID: 2A05272471204DD3

View file

@ -102,30 +102,16 @@ in
inherit (cfg) path; inherit (cfg) path;
preStart = '' preStart = ''
tmp="$(mktemp -d)" shopt -s nullglob
trap 'rm -rf "$tmp"' EXIT
cd "$tmp"
cp ${settingsFormat.generate "olivetin-config.yaml" cfg.settings} config.yaml tmp="$(mktemp)"
chmod +w config.yaml ${lib.getExe pkgs.yq-go} eval-all '. as $item ireduce ({}; . *+ $item)' \
for ((i=0; i < ${toString (lib.length cfg.extraConfigFiles)}; i++)); do ${settingsFormat.generate "olivetin-config.yaml" cfg.settings} \
${lib.getExe pkgs.yq} -yi ' $CREDENTIALS_DIRECTORY/config-*.yaml > "$tmp"
def merge($y): chmod -w "$tmp"
. as $x |
if ($x | type == "object") and ($y | type == "object") then
$x + $y + with_entries(select(.key | in($y)) | .key as $key | .value |= merge($y[$key]))
elif ($x | type == "array") and ($y | type == "array") then
$x + $y
else
$y
end;
merge($f | fromjson)
' config.yaml --rawfile f <(${lib.getExe pkgs.yq} -c . "$CREDENTIALS_DIRECTORY/config-$i.yaml")
done
chmod -w config.yaml
mkdir -p /run/olivetin/config mkdir -p /run/olivetin/config
mv config.yaml /run/olivetin/config/config.yaml mv "$tmp" /run/olivetin/config/config.yaml
''; '';
serviceConfig = { serviceConfig = {