Evie Litherland-Smith
9f19f3a626
Add more tagging rules to afew Change syncing setup to run mbsync less frequently (every 30 mins) but sync inboxes in notmuch pre hook. Imapnotify can now just call notmuch Update conditions to refresh notmuch-indicator (emacs)
253 lines
7.6 KiB
Nix
253 lines
7.6 KiB
Nix
{ config, lib, pkgs, hostName, ... }:
|
|
|
|
{
|
|
home.packages = with pkgs; [ davmail ];
|
|
programs = {
|
|
msmtp.enable = true;
|
|
mbsync = {
|
|
enable = true;
|
|
groups.inboxes = {
|
|
proton = [ "INBOX" ];
|
|
icloud = [ "INBOX" ];
|
|
outlook = [ "INBOX" ];
|
|
};
|
|
};
|
|
notmuch = {
|
|
enable = true;
|
|
maildir.synchronizeFlags = true;
|
|
new.tags = [ "new" ];
|
|
hooks = {
|
|
preNew = "${pkgs.isync}/bin/mbsync inboxes";
|
|
postNew = ''
|
|
if [ $(${pkgs.notmuch}/bin/notmuch count is:new) -gt 0 ]; then
|
|
${pkgs.libnotify}/bin/notify-send "Notmuch Email" "Unread emails in inbox"
|
|
fi
|
|
${pkgs.afew}/bin/afew --new --tag
|
|
${pkgs.afew}/bin/afew --move-mail
|
|
'';
|
|
};
|
|
};
|
|
afew = {
|
|
enable = true;
|
|
extraConfig = builtins.readFile ./afew/config;
|
|
};
|
|
};
|
|
services = {
|
|
mbsync = {
|
|
enable = true;
|
|
frequency = "*:0/30";
|
|
postExec = "${pkgs.notmuch}/bin/notmuch new";
|
|
};
|
|
imapnotify.enable = true;
|
|
};
|
|
accounts.email = {
|
|
maildirBasePath = "Mail";
|
|
accounts = let realName = "Evie Litherland-Smith";
|
|
in {
|
|
proton = let
|
|
host = "127.0.0.1";
|
|
tls.enable = false;
|
|
accountEnabled = true;
|
|
in rec {
|
|
inherit realName;
|
|
primary = lib.mkDefault true;
|
|
maildir.path = "Proton";
|
|
imap = {
|
|
inherit host tls;
|
|
port = 1143;
|
|
};
|
|
smtp = {
|
|
inherit host tls;
|
|
port = 1025;
|
|
};
|
|
address = "e.litherlandsmith@proton.me";
|
|
aliases = [ "evie@xenia.me.uk" "evie@litherlandsmith.slmail.me" ];
|
|
userName = address;
|
|
passwordCommand =
|
|
"${pkgs.libsecret}/bin/secret-tool lookup email ${userName}";
|
|
imapnotify = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
boxes = [ "INBOX" ];
|
|
onNotify = "${pkgs.notmuch}/bin/notmuch new";
|
|
extraConfig = {
|
|
wait = 300;
|
|
tls = false;
|
|
tlsOptions.rejectUnauthorized = false;
|
|
};
|
|
};
|
|
mbsync = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
create = "both";
|
|
expunge = "both";
|
|
remove = "both";
|
|
patterns = [ "*" "!All Mail" "!Spam" "!Labels*" "!Starred" ];
|
|
subFolders = "Verbatim";
|
|
extraConfig.account.AuthMechs = "LOGIN";
|
|
};
|
|
msmtp = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
extraConfig = {
|
|
tls = "off";
|
|
auth = "login";
|
|
};
|
|
};
|
|
notmuch.enable = lib.mkDefault accountEnabled;
|
|
};
|
|
icloud = let accountEnabled = true;
|
|
in rec {
|
|
inherit realName;
|
|
primary = lib.mkDefault false;
|
|
maildir.path = "iCloud";
|
|
imap.host = "imap.mail.me.com";
|
|
smtp.host = "smtp.mail.me.com";
|
|
address = "e.litherlandsmith@icloud.com";
|
|
userName = address;
|
|
passwordCommand =
|
|
"${pkgs.libsecret}/bin/secret-tool lookup email ${userName}";
|
|
imapnotify = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
boxes = [ "INBOX" ];
|
|
onNotify = "${pkgs.notmuch}/bin/notmuch new";
|
|
extraConfig.wait = 300;
|
|
};
|
|
mbsync = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
create = "both";
|
|
expunge = "both";
|
|
remove = "both";
|
|
patterns = [ "*" "!Junk" ];
|
|
subFolders = "Verbatim";
|
|
};
|
|
msmtp.enable = lib.mkDefault accountEnabled;
|
|
notmuch.enable = lib.mkDefault accountEnabled;
|
|
};
|
|
outlook = let
|
|
host = "127.0.0.1";
|
|
tls.enable = false;
|
|
accountEnabled = true;
|
|
in rec {
|
|
inherit realName;
|
|
primary = lib.mkDefault false;
|
|
maildir.path = "Outlook";
|
|
imap = {
|
|
inherit host tls;
|
|
port = 1144;
|
|
};
|
|
smtp = {
|
|
inherit host tls;
|
|
port = 1026;
|
|
};
|
|
address = "evie.litherland-smith@ukaea.uk";
|
|
aliases = [ "elitherl@jet.uk" ];
|
|
userName = address;
|
|
passwordCommand =
|
|
"${pkgs.libsecret}/bin/secret-tool lookup email ${userName}";
|
|
imapnotify = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
boxes = [ "INBOX" ];
|
|
onNotify = "${pkgs.notmuch}/bin/notmuch new";
|
|
extraConfig = {
|
|
wait = 300;
|
|
tls = false;
|
|
tlsOptions.rejectUnauthorized = false;
|
|
};
|
|
};
|
|
mbsync = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
create = "both";
|
|
expunge = "both";
|
|
remove = "both";
|
|
patterns = [
|
|
"*"
|
|
"!Conversation History"
|
|
"!Junk"
|
|
"!Snoozed"
|
|
"!Social Activity Notifications"
|
|
"!Sync Issues"
|
|
"!Unsent Messages"
|
|
];
|
|
subFolders = "Verbatim";
|
|
extraConfig.account.AuthMechs = "LOGIN";
|
|
};
|
|
msmtp = {
|
|
enable = lib.mkDefault accountEnabled;
|
|
extraConfig = {
|
|
tls = "off";
|
|
auth = "login";
|
|
};
|
|
};
|
|
notmuch.enable = lib.mkDefault accountEnabled;
|
|
};
|
|
};
|
|
};
|
|
systemd.user.services = let emailAccounts = config.accounts.email.accounts;
|
|
in {
|
|
imapnotify-proton.Unit = lib.mkIf emailAccounts.proton.imapnotify.enable {
|
|
Wants = [ "protonmail-bridge.service" ];
|
|
After = [ "protonmail-bridge.service" ];
|
|
};
|
|
imapnotify-outlook.Unit = lib.mkIf emailAccounts.outlook.imapnotify.enable {
|
|
Wants = [ "davmail.service" ];
|
|
After = [ "davmail.service" ];
|
|
};
|
|
protonmail-bridge = lib.mkIf emailAccounts.proton.mbsync.enable {
|
|
Unit = {
|
|
Description = "Podman container-protonmail-bridge.service";
|
|
Documentation = [ "man:podman-generate-systemd(1)" ];
|
|
Wants = [ "network-online.target" ];
|
|
After = [ "network-online.target" ];
|
|
RequiresMountsFor = "%t/containers";
|
|
};
|
|
Service = {
|
|
Environment =
|
|
[ "PODMAN_SYSTEMD_UNIT=%n" "PATH=/run/wrappers/bin/:$PATH" ];
|
|
Restart = "always";
|
|
TimeoutStopSec = 70;
|
|
ExecStart = ''
|
|
${pkgs.podman}/bin/podman run \
|
|
--cidfile=%t/%n.ctr-id \
|
|
--cgroups=no-conmon \
|
|
--rm \
|
|
--sdnotify=conmon \
|
|
--replace \
|
|
-d \
|
|
--name=protonmail-bridge \
|
|
-v protonmail:/root \
|
|
-p 127.0.0.1:1025:25/tcp \
|
|
-p 127.0.0.1:1143:143/tcp shenxn/protonmail-bridge'';
|
|
ExecStop = ''
|
|
${pkgs.podman}/bin/podman stop \
|
|
--ignore -t 10 \
|
|
--cidfile=%t/%n.ctr-id'';
|
|
ExecStopPost = ''
|
|
${pkgs.podman}/bin/podman rm \
|
|
-f \
|
|
--ignore -t 10 \
|
|
--cidfile=%t/%n.ctr-id'';
|
|
Type = "notify";
|
|
NotifyAccess = "all";
|
|
};
|
|
Install.WantedBy = [ "default.target" ];
|
|
};
|
|
davmail = lib.mkIf emailAccounts.outlook.mbsync.enable {
|
|
Unit = {
|
|
Description = "Davmail server";
|
|
Wants = [ "network-online.target" ];
|
|
After = [ "network-online.target" ];
|
|
};
|
|
Service = {
|
|
Environment = [ "PATH=/run/current-system/sw/bin/:$PATH" ];
|
|
Restart = "always";
|
|
ExecStartPre = with config.home; ''
|
|
/bin/sh -c "if [ ! -f ${homeDirectory}/.davmail.properties ]; then cp ${
|
|
./.davmail.properties
|
|
} ${homeDirectory}/.davmail.properties; fi; chmod 644 ${homeDirectory}/.davmail.properties"
|
|
'';
|
|
ExecStart =
|
|
"${pkgs.davmail}/bin/davmail -notray ${config.home.homeDirectory}/.davmail.properties";
|
|
};
|
|
Install.WantedBy = [ "default.target" ];
|
|
};
|
|
};
|
|
}
|