From 1fd34a82cb03ba93f90ce58dd75d08039316e57e Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Wed, 15 Jul 2020 14:02:00 -0400 Subject: feat(gs/home): Add config for email notifications This uses the notifymuch package pulled from https://github.com/NixOS/nixpkgs/pull/92797 right now, but eventually I would like to pull from a vendored version since there are some changes I would like to make to how the notifications are rendered and it looks like upstream is unmaintained. Change-Id: I3d1d355a09171a33677f095aa068f2499d50b37b Reviewed-on: https://cl.tvl.fyi/c/depot/+/1177 Reviewed-by: glittershark Tested-by: BuildkiteCI --- users/glittershark/system/home/modules/email.nix | 111 +++++++++++++++-------- 1 file changed, 72 insertions(+), 39 deletions(-) (limited to 'users/glittershark/system/home/modules/email.nix') diff --git a/users/glittershark/system/home/modules/email.nix b/users/glittershark/system/home/modules/email.nix index 80c5385e69..62c8be19a2 100644 --- a/users/glittershark/system/home/modules/email.nix +++ b/users/glittershark/system/home/modules/email.nix @@ -1,6 +1,31 @@ -{ pkgs, ... }: -{ - # programs.mbsync.enable = true; +{ lib, pkgs, ... }: + +with lib; + +let + + # from home-manager/modules/services/lieer.nix + escapeUnitName = name: + let + good = upperChars ++ lowerChars ++ stringToCharacters "0123456789-_"; + subst = c: if any (x: x == c) good then c else "-"; + in stringAsChars subst name; + + accounts = { + work = { + primary = true; + address = "griffin@urbint.com"; + aliases = [ "grfn@urbint.com" ]; + passEntry = "urbint/msmtp-app-password"; + }; + + personal = { + address = "root@gws.fyi"; + passEntry = "root-gws-msmtp"; + }; + }; + +in { programs.lieer.enable = true; programs.notmuch.enable = true; services.lieer.enable = true; @@ -11,44 +36,52 @@ msmtp ]; + nixpkgs.overlays = [(self: super: { + notifymuch = self.python3Packages.callPackage ../../pkgs/notifymuch.nix {}; + })]; + + systemd.user.services = mapAttrs' (name: account: { + name = escapeUnitName "lieer-${name}"; + value.Service.ExecStart = mkForce "${pkgs.writeShellScript "sync-${name}" '' + ${pkgs.gmailieer}/bin/gmi sync + ${pkgs.notifymuch}/bin/notifymuch + ''}"; + }) accounts; + + xdg.configFile."notifymuch/notifymuch.cfg".text = generators.toINI {} { + notifymuch = { + query = "is:unread and is:important"; + mail_client = ""; + recency_interval_hours = "48"; + hidden_tags = "inbox unread attachment replied sent encrypted signed"; + }; + }; + accounts.email.maildirBasePath = "mail"; - accounts.email.accounts = - let - mkAccount = params@{ passEntry, ... }: { - realName = "Griffin Smith"; - passwordCommand = "pass ${passEntry}"; - - flavor = "gmail.com"; - - imapnotify = { - enable = true; - boxes = [ "Inbox" ]; - }; - - gpg = { - key = "0F11A989879E8BBBFDC1E23644EF5B5E861C09A7"; - signByDefault = true; - }; - - # mbsync.enable = true; - notmuch.enable = true; - lieer = { - enable = true; - sync.enable = true; - }; - msmtp.enable = true; - } // builtins.removeAttrs params ["passEntry"]; - in { - work = mkAccount { - primary = true; - address = "griffin@urbint.com"; - aliases = [ "grfn@urbint.com" ]; - passEntry = "urbint/msmtp-app-password"; - }; + accounts.email.accounts = mapAttrs (_: params@{ passEntry, ... }: { + realName = "Griffin Smith"; + passwordCommand = "pass ${passEntry}"; + + flavor = "gmail.com"; + + imapnotify = { + enable = true; + boxes = [ "Inbox" ]; + }; + + gpg = { + key = "0F11A989879E8BBBFDC1E23644EF5B5E861C09A7"; + signByDefault = true; + }; - personal = mkAccount { - address = "root@gws.fyi"; - passEntry = "root-gws-msmtp"; + notmuch.enable = true; + lieer = { + enable = true; + sync = { + enable = true; + frequency = "*:*"; }; }; + msmtp.enable = true; + } // builtins.removeAttrs params ["passEntry"]) accounts; } -- cgit 1.4.1