{ pkgs, secrets, fleetFlake, lib, ... }: { programs.mbsync.enable = true; programs.msmtp.enable = true; services.mbsync = { enable = true; postExec = lib.getExe ( pkgs.writeShellScriptBin "mbsync-post-exec" '' ${lib.getExe pkgs.notmuch} new for _ in _ _ do afew -C ~/.config/notmuch/default/config --tag --new -vv afew -C ~/.config/notmuch/default/config --move --new -vv done '' ); }; # home.file.".config/aerc/stylesets" = # let # catppuccin-aerc = pkgs.fetchFromGitHub { # owner = "catppuccin"; # repo = "aerc"; # rev = "ca404a9f2d125ef12db40db663d43c9d94116a05"; # hash = "sha256-OWIkHsKFts/zkrDUtbBPXHVSrHL/F0v3LB1rnlFAKmE="; # }; # in # { # source = "${catppuccin-aerc}/dist"; # recursive = true; # }; # programs.aerc = { # enable = true; # extraBinds = { # global = { # "<C-p>" = ":prev-tab<Enter>"; # "<C-n>" = ":next-tab<Enter>"; # "?" = ":help keys<Enter>"; # }; # messages = { # "h" = ":prev-tab<Enter>"; # "l" = ":next-tab<Enter>"; # "j" = ":next<Enter>"; # "<Down>" = ":next<Enter>"; # "<C-d>" = ":next 50%<Enter>"; # "<C-f>" = ":next 100%<Enter>"; # "<PgDn>" = ":next 100%<Enter>"; # "k" = ":prev<Enter>"; # "<Up>" = ":prev<Enter>"; # "<C-u>" = ":prev 50%<Enter>"; # "<C-b>" = ":prev 100%<Enter>"; # "<PgUp>" = ":prev 100%<Enter>"; # "g" = ":select 0<Enter>"; # "G" = ":select -1<Enter>"; # "J" = ":next-folder<Enter>"; # "K" = ":prev-folder<Enter>"; # "H" = ":collapse-folder<Enter>"; # "L" = ":expand-folder<Enter>"; # "v" = ":mark -t<Enter>"; # "x" = ":mark -t<Enter>:next<Enter>"; # "V" = ":mark -v<Enter>"; # "T" = ":toggle-threads<Enter>"; # "<Enter>" = ":view<Enter>"; # "d" = ":prompt 'Really delete this message?' 'delete-message'<Enter>"; # "D" = ":delete<Enter>"; # "A" = ":archive flat<Enter>"; # "C" = ":compose<Enter>"; # "rr" = ":reply -a<Enter>"; # "rq" = ":reply -aq<Enter>"; # "Rr" = ":reply<Enter>"; # "Rq" = ":reply -q<Enter>"; # "c" = ":cf<space>"; # "$" = ":term<space>"; # "!" = ":term<space>"; # "|" = ":pipe<space>"; # "/" = ":search<space>"; # "\\" = ":filter<space>"; # "n" = ":next-result<Enter>"; # "N" = ":prev-result<Enter>"; # "<Esc>" = ":clear<Enter>"; # }; # "messages:folder=Drafts" = { # "<Enter>" = ":recall<Enter>"; # }; # view = { # "/" = ":toggle-key-passthrough<Enter>/"; # "q" = ":close<Enter>"; # "O" = ":open<Enter>"; # "S" = ":save<space>"; # "|" = ":pipe<space>"; # "D" = ":delete<Enter>"; # "A" = ":archive flat<Enter>"; # "<C-l>" = ":open-link <space>"; # "f" = ":forward<Enter>"; # "rr" = ":reply -a<Enter>"; # "rq" = ":reply -aq<Enter>"; # "Rr" = ":reply<Enter>"; # "Rq" = ":reply -q<Enter>"; # "H" = ":toggle-headers<Enter>"; # "<C-k>" = ":prev-part<Enter>"; # "<C-j>" = ":next-part<Enter>"; # "J" = ":next<Enter>"; # "K" = ":prev<Enter>"; # }; # "view::passthrough" = { # "$noinherit" = true; # "$ex" = "<C-x>"; # "<Esc>" = ":toggle-key-passthrough<Enter>"; # }; # compose = { # "$noinherit" = "true"; # "$ex" = "<C-x>"; # "<C-k>" = ":prev-field<Enter>"; # "<C-j>" = ":next-field<Enter>"; # "<A-p>" = ":switch-account -p<Enter>"; # "<A-n>" = ":switch-account -n<Enter>"; # "<tab>" = ":next-field<Enter>"; # "<C-p>" = ":prev-tab<Enter>"; # "<C-n>" = ":next-tab<Enter>"; # }; # "compose::editor" = { # "$noinherit" = "true"; # "$ex" = "<C-x>"; # "<C-k>" = ":prev-field<Enter>"; # "<C-j>" = ":next-field<Enter>"; # "<C-p>" = ":prev-tab<Enter>"; # "<C-n>" = ":next-tab<Enter>"; # }; # "compose::review" = { # "y" = ":send<Enter>"; # "n" = ":abort<Enter>"; # "p" = ":postpone<Enter>"; # "q" = ":choose -o d discard abort -o p postpone postpone<Enter>"; # "e" = ":edit<Enter>"; # "a" = ":attach<space>"; # "d" = ":detach<space>"; # }; # terminal = { # "$noinherit" = "true"; # "$ex" = "<C-x>"; # "<C-p>" = ":prev-tab<Enter>"; # "<C-n>" = ":next-tab<Enter>"; # }; # }; # extraConfig = { # general.unsafe-accounts-conf = true; # ui = { # styleset-name = "catppuccin-mocha"; # this-day-time-format = ''" 15:04"''; # this-year-time-format = "Mon Jan 02 15:04"; # timestamp-format = "2006-01-02 15:04"; # spinner = "[ ⡿ ],[ ⣟ ],[ ⣯ ],[ ⣷ ],[ ⣾ ],[ ⣽ ],[ ⣻ ],[ ⢿ ]"; # border-char-vertical = "┃"; # border-char-horizontal = "━"; # }; # viewer = { # always-show-mime = true; # }; # compose = { # no-attachment-warning = "^[^>]*attach(ed|ment)"; # }; # filters = { # "text/plain" = "colorize"; # "text/html" = "html"; # "text/calendar" = "calendar"; # "message/delivery-status" = "colorize"; # "message/rfc822" = "colorize"; # "image/*" = "${pkgs.catimg}/bin/catimg -"; # }; # }; # }; programs.notmuch = { enable = true; new.tags = [ "new" ]; search.excludeTags = [ "trash" "deleted" "spam" ]; maildir.synchronizeFlags = true; }; programs.afew = { enable = true; extraConfig = '' [Filter.1] message = "Tag GitHub notifications" tags = +github query = from:noreply@github.com OR from:notifications@github.com [Filter.2] query = "folder:autistici/Inbox" tags = +autistici message = "Tag personal autistici emails" [Filter.3] query = "not folder:autistici/Inbox" tag = -new message = "Sanity check: remove the new tag for emails moved out from Inbox" [Filter.4] query = "not folder:autistici/Inbox" tag = -new message = "Sanity check: remove the new tag for emails moved out from Inbox" [Filter.5] query = "not folder:autistici/Sent" tag = +sent message = "Sanity check: add the sent tag for emails in Sent" [Filter.6] query = "not folder:autistici/Drafts" tag = +draft message = "Sanity check: add the draft tag for emails in Draft" [MailMover] folders = autistici/Inbox rename = true autistici/Inbox = 'tag:archive':autistici/Archive 'tag:github':autistici/GitHub 'NOT tag:new':autistici/Trash ''; }; systemd.user.services.emails-watcher = { Unit.Description = "Send notifications when new emails arrive"; Install = { WantedBy = [ "default.target" ]; }; Service = { ExecStart = "${lib.getExe fleetFlake.packages.${pkgs.system}.emails-watcher}"; Environment = [ "INBOX_NEW=~/Maildir/autistici/Inbox/new" ]; }; }; accounts.email = { accounts.autistici = { aerc.enable = true; address = "andrea.ciceri@autistici.org"; gpg = { key = "7A66EEA1E6C598D07D361287A1FC89532D1C565"; signByDefault = true; }; imap = { host = "mail.autistici.org"; port = 993; }; mbsync = { enable = true; create = "maildir"; expunge = "both"; remove = "both"; }; msmtp.enable = true; notmuch.enable = true; primary = true; realName = "Andrea Ciceri"; signature = { text = '' Andrea Ciceri ''; showSignature = "append"; }; passwordCommand = "${pkgs.coreutils}/bin/cat ${secrets.autistici-password.path}"; smtp = { host = "smtp.autistici.org"; }; userName = "andrea.ciceri@autistici.org"; }; accounts.mlabs = { address = "andreaciceri@mlabs.city"; imap = { host = "imap.gmail.com"; port = 993; }; realName = "Andrea Ciceri"; smtp.host = "smtp.gmail.com"; userName = "andreaciceri@mlabs.city"; }; }; }