sieve: offload mailserver.loginAccounts.<name>.sieveScript into /nix/store

This simplifies the remaining structure of `cfg.sieveDirectory`
a lot and gets us one step closer to removing
`activate-virtual-mail-users.service`.
This commit is contained in:
emilylange
2026-04-12 04:07:03 +02:00
parent 28bfef89ba
commit 260f38128e
2 changed files with 13 additions and 28 deletions
+13 -1
View File
@@ -346,7 +346,19 @@ in
"sieve_script default" = { "sieve_script default" = {
# declarative # declarative
type = "default"; type = "default";
path = "${cfg.sieveDirectory}/%{user}/default.sieve"; name = "default";
# TODO: Pre-compile Sieve scripts with 'sievec' (requires a Dovecot config in build sandbox)
path = "${
pkgs.runCommand "declarative-sieve-scripts" { } (
''
mkdir "$out"
''
+ lib.concatMapAttrsStringSep "\n" (_: value: ''
mkdir "$out/${value.name}"
cp -v "${builtins.toFile "default.sieve" value.sieveScript}" "$out/${value.name}/default.sieve"
'') (lib.filterAttrs (_: value: value.sieveScript != null) cfg.accounts)
)
}/%{user}/default.sieve";
}; };
"sieve_script personal" = { "sieve_script personal" = {
-27
View File
@@ -41,33 +41,6 @@ let
chown "${cfg.storage.owner}:${cfg.storage.group}" "${cfg.sieveDirectory}" chown "${cfg.storage.owner}:${cfg.storage.group}" "${cfg.sieveDirectory}"
chmod 770 "${cfg.sieveDirectory}" chmod 770 "${cfg.sieveDirectory}"
fi fi
# Copy user's sieve script to the correct location (if it exists). If it
# is null, remove the file.
${lib.concatMapStringsSep "\n" (
{ name, sieveScript }:
if lib.isString sieveScript then
''
if (! test -d "${cfg.sieveDirectory}/${name}"); then
mkdir -p "${cfg.sieveDirectory}/${name}"
chown "${cfg.storage.owner}:${cfg.storage.group}" "${cfg.sieveDirectory}/${name}"
chmod 770 "${cfg.sieveDirectory}/${name}"
fi
cat << 'EOF' > "${cfg.sieveDirectory}/${name}/default.sieve"
${sieveScript}
EOF
chown "${cfg.storage.owner}:${cfg.storage.group}" "${cfg.sieveDirectory}/${name}/default.sieve"
''
else
''
if (test -f "${cfg.sieveDirectory}/${name}/default.sieve"); then
rm "${cfg.sieveDirectory}/${name}/default.sieve"
fi
if (test -f "${cfg.sieveDirectory}/${name}.svbin"); then
rm "${cfg.sieveDirectory}/${name}/default.svbin"
fi
''
) (map (user: { inherit (user) name sieveScript; }) (lib.attrValues cfg.accounts))}
''; '';
in in
{ {