{ config, lib, pkgs, ... }: let cfg = config.my.home.mail; in { config = lib.mkIf cfg.enable { accounts.email = { accounts = { Fastmail = rec { primary = true; address = "franck@fcuny.net"; userName = address; realName = "Franck Cuny"; aliases = [ "franck.cuny@gmail.com" ]; passwordCommand = "pass email/imap.fastmail.com"; imap.host = "imap.fastmail.com"; mbsync = { enable = true; create = "maildir"; expunge = "both"; extraConfig.channel.CopyArrivalDate = "yes"; }; notmuch.enable = true; }; }; }; programs.mbsync.enable = true; programs.afew = { enable = true; extraConfig = '' [SpamFilter] [KillThreadsFilter] [ArchiveSentMailsFilter] [InboxFilter] ''; }; programs.notmuch = { enable = true; maildir.synchronizeFlags = true; new.tags = [ "unread" "inbox" ]; new.ignore = [ "Trash" ]; search.excludeTags = [ "spam" "deleted" ]; hooks = { postNew = "${config.home.profileDirectory}/bin/afew -v --tag --new"; }; }; systemd.user.services.mbsync = { Unit = { Description = "mbsync synchronization"; }; Service = { Type = "oneshot"; Environment = [ "PASSWORD_STORE_DIR=${config.programs.password-store.settings.PASSWORD_STORE_DIR}" "NOTMUCH_CONFIG=${config.xdg.configHome}/notmuch/notmuchrc" ]; ExecStart = "${pkgs.isync}/bin/mbsync -a"; ExecStartPost = "${pkgs.notmuch}/bin/notmuch new --quiet"; }; }; systemd.user.timers.mbsync = { Unit = { Description = "mbsync synchronization"; }; Timer = { OnBootSec = "30"; OnUnitActiveSec = "5m"; }; Install = { WantedBy = [ "timers.target" ]; }; }; }; }