summaryrefslogtreecommitdiff
path: root/home/mail/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home/mail/default.nix')
-rw-r--r--home/mail/default.nix25
1 files changed, 23 insertions, 2 deletions
diff --git a/home/mail/default.nix b/home/mail/default.nix
index 38bc41e..a6fe8ff 100644
--- a/home/mail/default.nix
+++ b/home/mail/default.nix
@@ -1,4 +1,4 @@
-{ config, lib, ... }:
+{ config, lib, pkgs, ... }:
with lib; {
config = mkIf (!config.home.isolation.active) {
accounts.email = {
@@ -46,6 +46,27 @@ with lib; {
};
};
- home.file.".dovecot.sieve".source = ./dovecot.sieve;
+ # .dovecot.sieve tiene que ser un symlink tal que el readlink -f de su
+ # dirname (no del symlink en sí) sea la misma cadena que el readlink -f
+ # de ~/sieve. Dovecot verifica eso y tira "Invalid/unknown path to
+ # storage" si este check frágil falla. Ni siquiera
+ # mkOutOfStoreSymlink funciona. Ver código fuente de Dovecot:
+ # pigeonhole/src/lib-sieve/storage/file/sieve-file-storage-active.c
+ home =
+ let
+ sieve = pkgs.runCommandNoCCLocal "sieve" { src = ./sieve; } ''
+ cp -r $src $out
+ chmod -R u+w $out
+ find $out -name '*.sieve' -exec ${pkgs.dovecot_pigeonhole}/bin/sievec -c /dev/null {} \;
+ '';
+ in
+ {
+ file."sieve".source = sieve;
+
+ activation.sieve = hm.dag.entryBetween [ "linkGeneration" ] [ "writeBoundary" ] ''
+ $DRY_RUN_CMD ln -Tsf ${sieve}/mail.sieve .dovecot.sieve
+ $DRY_RUN_CMD ln -Tsf ${sieve}/mail.svbin .dovecot.svbin
+ '';
+ };
};
}