about summary refs log tree commit diff
path: root/users
diff options
context:
space:
mode:
authorGriffin Smith <grfn@gws.fyi>2020-07-15T18·02-0400
committerglittershark <grfn@gws.fyi>2020-07-15T18·06+0000
commit1fd34a82cb03ba93f90ce58dd75d08039316e57e (patch)
tree7820e2570d8c4ff3a25d8e8747be570f8dc3b79f /users
parent8c34a475671cc67216c9b7dbccc4cb493fd05227 (diff)
feat(gs/home): Add config for email notifications r/1301
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
Diffstat (limited to 'users')
-rw-r--r--users/glittershark/system/home/modules/email.nix111
-rw-r--r--users/glittershark/system/pkgs/notifymuch.nix55
2 files changed, 127 insertions, 39 deletions
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;
 }
diff --git a/users/glittershark/system/pkgs/notifymuch.nix b/users/glittershark/system/pkgs/notifymuch.nix
new file mode 100644
index 0000000000..065bcddd07
--- /dev/null
+++ b/users/glittershark/system/pkgs/notifymuch.nix
@@ -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;
+  };
+}