diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-01-29 06:19:22 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-01-29 18:35:09 -0600 |
| commit | bb8ecf14a8d4e7855bda558021fb292fb2223759 (patch) | |
| tree | c6afc8afc1a6b0985a744bbb1403189b6713b597 /home/mail/default.nix | |
| parent | 67b12424f1c73c11cf8c8ad951d1b91c88802abb (diff) | |
home/mail: fix sieve symlink fiasco
Diffstat (limited to 'home/mail/default.nix')
| -rw-r--r-- | home/mail/default.nix | 25 |
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 + ''; + }; }; } |
