{ config, lib, pkgs, ... }: with lib; { options.local.mail = with types; { address = mkOption { type = str; }; realName = mkOption { type = str; }; sieve.enable = mkEnableOption "sieve filter"; }; config = mkIf (!config.home.isolation.active) { accounts.email = { maildirBasePath = "mail"; accounts = { google = { address = "alejandrosotochacon@gmail.com"; userName = "alejandrosotochacon"; # Ver salida de: msmtp --configure alejandrosotochacon@gmail.com inherit (config.local.mail) realName; maildir = null; msmtp.enable = true; passwordCommand = "pass show `hostname -s`/psk/gmail"; smtp = { host = "smtp.gmail.com"; tls = { enable = true; useStartTls = true; }; }; }; local = { address = "${config.local.mail.address}@34project.org"; userName = "${config.local.mail.address}@34project.org"; inherit (config.local.mail) realName; primary = true; # ${maildirBasePath}/${maildir.path} maildir.path = ""; folders.inbox = ""; msmtp = { enable = true; extraConfig = { # con nixpkgs#gnutls: p11tool --login --list-privkeys auth = "off"; tls_key_file = "pkcs11:serial=26902048;id=%01"; tls_cert_file = "${config.local.pki.byPath."root.mail.larsa".cert}"; }; }; neomutt.enable = true; imap = { host = "badhost"; # Evaluación de home falla sin esto, revisar si ya lo arreglaron tls = { enable = false; useStartTls = false; }; }; smtp = { host = "smtp.34project.org"; tls = { enable = true; useStartTls = false; }; }; }; }; }; programs = { msmtp.enable = true; neomutt = { enable = true; vimKeys = true; settings = { record = "+.sent"; postponed = "+.drafts"; use_threads = "flat"; index_format = "'%4C %Z %<[y?%<[m?%<[d?%[%H:%M ]&%[%a %d]>&%[%b %d]>&%[%m/%y ]> %-15.15L (%?l?%4l&%4c?) %s'"; }; extraConfig = '' auto_view text/html alternative_order text/plain text/enriched text/html reply-hook '~t ^alejandrosotochacon@gmail\.com$' 'my_hdr From: Alejandro Soto ' macro compose '\3' "Alejandro Soto \" macro compose '\g' "Alejandro Soto \" ''; }; }; home = mkMerge [ ({ file.".mailcap".text = '' text/html; ${pkgs.luakit}/bin/luakit '%s' &; test=test -n "$DISPLAY"; needsterminal; text/html; ${pkgs.lynx}/bin/lynx -dump %s; nametemplate=%s.html; copiousoutput; ''; }) # .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 ( 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 mkIf config.local.mail.sieve.enable { 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 ''; } ) ]; }; }