From bb8ecf14a8d4e7855bda558021fb292fb2223759 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sun, 29 Jan 2023 06:19:22 -0600 Subject: home/mail: fix sieve symlink fiasco --- home/mail/default.nix | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'home/mail/default.nix') 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 + ''; + }; }; } -- cgit v1.2.3