{ pkgs, config, lib, ... }: { accounts.email = { maildirBasePath = "${config.home.homeDirectory}/.mail"; accounts = { fastmail = rec { primary = true; address = "franck@fcuny.net"; userName = address; passwordCommand = "pass email/imap.fastmail.com"; imap.host = "imap.fastmail.com"; mbsync = { enable = true; create = "maildir"; expunge = "both"; }; notmuch.enable = true; }; }; }; programs.mbsync.enable = true; programs.notmuch = { enable = true; maildir.synchronizeFlags = true; new.tags = [ "new" ]; search.excludeTags = [ "spam" ]; }; xdg.configFile."mbsync/imap-sync.sh" = { executable = true; text = '' #!${pkgs.stdenv.shell} MAILDIR=$HOME/.mail/ # Strip UIDs from filenames when moving mails so that mbsync doesn't get confused. mv_renamed() { while IFS= read -r name; do flags=$(echo "$name" | cut -d':' -f2) new_name="$(basename $name | awk -F ',' '{print $1}')" [ -f "$name" ] && mv -nv "${name}" "${1}/${new_name}" done } ${pkgs.notmuch}/bin/notmuch search --output=files -- not tag:inbox and folder:Fastmail/Inbox | mv_renamed ${MAILDIR}/Fastmail/Archive/cur ''; }; systemd.user.services.mbsync = { Unit = { Description = "mbsync synchronization"; }; Service = { Type = "oneshot"; ExecStartPre = "${config.xdg.configFile}/mbsync/imap-sync.sh"; 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" ]; }; }; }