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 <grfn@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Griffin Smith 2020-07-15 14:02:00 -04:00 committed by glittershark
parent 8c34a47567
commit 1fd34a82cb
2 changed files with 124 additions and 36 deletions

View file

@ -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}";
accounts.email.accounts = mapAttrs (_: params@{ passEntry, ... }: {
realName = "Griffin Smith";
passwordCommand = "pass ${passEntry}";
flavor = "gmail.com";
flavor = "gmail.com";
imapnotify = {
enable = true;
boxes = [ "Inbox" ];
};
imapnotify = {
enable = true;
boxes = [ "Inbox" ];
};
gpg = {
key = "0F11A989879E8BBBFDC1E23644EF5B5E861C09A7";
signByDefault = true;
};
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";
};
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;
}

View file

@ -0,0 +1,55 @@
{ stdenv
, buildPythonApplication
, isPy3k
, fetchFromGitHub
, notmuch
, pygobject3
, gobject-introspection
, libnotify
, wrapGAppsHook
, gtk3
}:
buildPythonApplication rec {
pname = "notifymuch";
version = "0.1";
disabled = ! isPy3k;
src = fetchFromGitHub {
owner = "kspi";
repo = "notifymuch";
rev = "9d4aaf54599282ce80643b38195ff501120807f0";
sha256 = "1lssr7iv43mp5v6nzrfbqlfzx8jcc7m636wlfyhhnd8ydd39n6k4";
};
propagatedBuildInputs = [
notmuch
pygobject3
libnotify
gtk3
];
nativeBuildInputs = [
gobject-introspection
wrapGAppsHook
];
dontWrapGApps = true;
preFixup = ''
echo "wrapper args"
echo "''${makeWrapperArgs[@]}"
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
echo "wrapper args again"
echo "''${makeWrapperArgs[@]}"
'';
strictDeps = false;
meta = with stdenv.lib; {
description = "Display desktop notifications for unread mail in a notmuch database";
homepage = "https://github.com/kspi/notifymuch";
maintainers = with maintainers; [ glittershark ];
license = licenses.gpl3;
};
}