From 487917c7cc65864d0d3e7898662bfc63e0649770 Mon Sep 17 00:00:00 2001 From: Charlotte Van Petegem Date: Tue, 6 Oct 2020 17:11:39 +0200 Subject: [PATCH] More mail configuration --- configurations/mail.nix | 288 +++++++++++++++++++--------------------- 1 file changed, 140 insertions(+), 148 deletions(-) diff --git a/configurations/mail.nix b/configurations/mail.nix index 2aaea06f..53775e74 100644 --- a/configurations/mail.nix +++ b/configurations/mail.nix @@ -1,20 +1,57 @@ -{ pkgs, ... }: +{ pkgs, lib, ... }: let passwordScript = pkgs.writeScript "get_mail_password" '' #!${pkgs.bash}/bin/bash ${pkgs.pass}/bin/pass show "$@" | head -n1 | tr -d "\n" ''; - baseAccount = { - gpg = { - key = "charlotte@vanpetegem.me"; - signByDefault = true; - }; - msmtp.enable = true; - offlineimap.enable = true; - realName = "Charlotte Van Petegem"; - signature = { - showSignature = "none"; + makeAccount = { name, address, host ? "", imapHost ? host, smtpHost ? host, useStartTls ? false, passFile, extraConfig ? { } }: (lib.recursiveUpdate + { + inherit address; + gpg = { + key = "charlotte@vanpetegem.me"; + signByDefault = true; + }; + imap = { + host = imapHost; + port = 993; + tls.enable = true; + }; + imapnotify = { + enable = true; + boxes = [ "INBOX" ]; + onNotify = "${pkgs.offlineimap}/bin/offlineimap -a ${name} -f INBOX"; + onNotifyPost = { mail = "${pkgs.libnotify}/bin/notify-send 'New ${name} mail arrived'"; }; + }; + msmtp.enable = true; + neomutt = { + enable = true; + sendMailCommand = "msmtpq --read-envelope-from --read-recipients --account ${name}"; + }; + offlineimap.enable = true; + passwordCommand = "${passwordScript} ${passFile}"; + realName = "Charlotte Van Petegem"; + signature = { + showSignature = "none"; + }; + smtp = { + host = smtpHost; + port = if useStartTls then 587 else 465; + tls = { + enable = true; + inherit useStartTls; + }; + }; + userName = address; + } + extraConfig); + genNotifyImapPatch = account: { + name = "imapnotify-${account}"; + value = { + Unit = { + After = "network-online.target"; + Wants = "network-online.target"; + }; }; }; in @@ -24,147 +61,80 @@ in { path = ".local/share/offlineimap"; type = "data"; } ]; home-manager.users.charlotte = { ... }: { + accounts.email = { + maildirBasePath = "mail"; + accounts = { + personal = makeAccount { + name = "personal"; + address = "charlotte@vanpetegem.me"; + host = "mail.vanpetegem.me"; + passFile = "mail/Personal"; + extraConfig = { + folders = { drafts = "Drafts"; inbox = "INBOX"; sent = "Sent"; trash = "Trash"; }; + primary = true; + }; + }; + work = makeAccount { + name = "work"; + address = "charlotte.vanpetegem@ugent.be"; + imapHost = "outlook.office365.com"; + smtpHost = "smtp.office365.com"; + passFile = "work/UGentNet"; + useStartTls = true; + extraConfig = { + folders = { drafts = "Drafts"; inbox = "INBOX"; sent = "Sent Items"; trash = "Deleted Items"; }; + }; + }; + posteo = makeAccount { + name = "posteo"; + address = "chvp@posteo.net"; + host = "posteo.de"; + passFile = "mail/Posteo"; + extraConfig = { + folders = { drafts = "Drafts"; inbox = "INBOX"; sent = "Sent"; trash = "Trash"; }; + }; + }; + jonggroen = makeAccount { + name = "jonggroen"; + address = "charlotte@jonggroen.be"; + imapHost = "imap.gmail.com"; + smtpHost = "smtp.gmail.com"; + passFile = "jonggroen/GoogleAppMail"; + useStartTls = true; + extraConfig = { + flavor = "gmail.com"; + folders = { + drafts = "[Gmail].Drafts"; + inbox = "INBOX"; + sent = "[Gmail].Sent Mail"; + trash = "[Gmail].Bin"; + }; + }; + }; + postbot = makeAccount { + name = "postbot"; + address = "postbot@vanpetegem.me"; + host = "mail.vanpetegem.me"; + passFile = "mail/Postbot"; + extraConfig = { + folders = { drafts = "Drafts"; inbox = "INBOX"; sent = "Sent"; trash = "Trash"; }; + }; + }; + webmaster = makeAccount { + name = "webmaster"; + address = "webmaster@vanpetegem.me"; + host = "mail.vanpetegem.me"; + passFile = "mail/Webmaster"; + extraConfig = { + folders = { drafts = "Drafts"; inbox = "INBOX"; sent = "Sent"; trash = "Trash"; }; + }; + }; + }; + }; home.file.".mailcap".text = '' text/html; ${pkgs.firefox}/bin/firefox %s ; nametemplate=%s.html; needsterminal text/html; ${pkgs.w3m}/bin/w3m -I %{charset} -T text/html ; copiousoutput; nametemplate=%s.html ''; - accounts.email = { - maildirBasePath = "mail"; - accounts = { - personal = baseAccount // { - address = "charlotte@vanpetegem.me"; - folders = { - drafts = "Drafts"; - inbox = "INBOX"; - sent = "Sent"; - trash = "Trash"; - }; - imap = { - host = "mail.vanpetegem.me"; - port = 993; - tls.enable = true; - }; - imapnotify = { - enable = true; - boxes = [ "INBOX" ]; - onNotify = "${pkgs.offlineimap}/bin/offlineimap -a personal -f INBOX"; - onNotifyPost = { mail = "${pkgs.libnotify}/bin/notify-send 'New mail arrived'"; }; - }; - neomutt = { - enable = true; - sendMailCommand = "msmtpq --read-envelope-from --read-recipients --account personal"; - }; - passwordCommand = "${passwordScript} mail/Personal"; - primary = true; - smtp = { - host = "mail.vanpetegem.me"; - port = 465; - tls.enable = true; - }; - userName = "charlotte@vanpetegem.me"; - }; - work = baseAccount // { - address = "charlotte.vanpetegem@ugent.be"; - folders = { - drafts = "Drafts"; - inbox = "INBOX"; - sent = "Sent Items"; - trash = "Deleted Items"; - }; - imap = { - host = "outlook.office365.com"; - port = 993; - tls.enable = true; - }; - imapnotify = { - enable = true; - boxes = [ "INBOX" ]; - onNotify = "${pkgs.offlineimap}/bin/offlineimap -a work -f INBOX"; - onNotifyPost = { mail = "${pkgs.libnotify}/bin/notify-send 'New mail arrived'"; }; - }; - neomutt = { - enable = true; - sendMailCommand = "msmtpq --read-envelope-from --read-recipients --account work"; - }; - passwordCommand = "${passwordScript} work/UGentNet"; - smtp = { - host = "smtp.office365.com"; - port = 587; - tls = { - enable = true; - useStartTls = true; - }; - }; - userName = "charlotte.vanpetegem@ugent.be"; - }; - posteo = baseAccount // { - address = "chvp@posteo.net"; - folders = { - drafts = "Drafts"; - inbox = "INBOX"; - sent = "Sent"; - trash = "Trash"; - }; - imap = { - host = "posteo.de"; - port = 993; - tls.enable = true; - }; - imapnotify = { - enable = true; - boxes = [ "INBOX" ]; - onNotify = "${pkgs.offlineimap}/bin/offlineimap -a work -f INBOX"; - onNotifyPost = { mail = "${pkgs.libnotify}/bin/notify-send 'New mail arrived'"; }; - }; - neomutt = { - enable = true; - sendMailCommand = "msmtpq --read-envelope-from --read-recipients --account posteo"; - }; - passwordCommand = "${passwordScript} mail/Posteo"; - smtp = { - host = "posteo.de"; - port = 465; - tls.enable = true; - }; - userName = "chvp@posteo.net"; - }; - jonggroen = baseAccount // { - address = "charlotte@jonggroen.be"; - flavor = "gmail.com"; - folders = { - drafts = "[Gmail].Drafts"; - inbox = "INBOX"; - sent = "[Gmail].Sent Mail"; - trash = "[Gmail].Bin"; - }; - imap = { - host = "imap.gmail.com"; - port = 993; - tls.enable = true; - }; - imapnotify = { - enable = true; - boxes = [ "INBOX" ]; - onNotify = "${pkgs.offlineimap}/bin/offlineimap -a jonggroen -f INBOX"; - onNotifyPost = { mail = "${pkgs.libnotify}/bin/notify-send 'New mail arrived'"; }; - }; - neomutt = { - enable = true; - sendMailCommand = "msmtpq --read-envelope-from --read-recipients --account jonggroen"; - }; - passwordCommand = "${passwordScript} jonggroen/GoogleAppMail"; - smtp = { - host = "smtp.gmail.com"; - port = 587; - tls = { - enable = true; - useStartTls = true; - }; - }; - userName = "charlotte@jonggroen.be"; - }; - }; - }; programs = { msmtp.enable = true; neomutt = { @@ -182,5 +152,27 @@ in services = { imapnotify.enable = true; }; + systemd.user = { + services = { + offlineimap = { + Unit = { + Description = "OfflineIMAP email fetcher"; + After = "network-online.target"; + Wants = "network-online.target"; + }; + Service = { ExecStart = "${pkgs.offlineimap}/bin/offlineimap"; }; + }; + } // lib.listToAttrs (map genNotifyImapPatch [ "jonggroen" "personal" "postbot" "posteo" "webmaster" "work" ]); + timers = { + offlineimap = { + Unit = { Description = "OfflineIMAP email fetcher"; }; + Timer = { + OnCalendar = "*:0/5"; + Unit = "offlineimap.service"; + }; + Install = { WantedBy = [ "timers.target" ]; }; + }; + }; + }; }; }