aboutsummaryrefslogtreecommitdiff
path: root/modules/email
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-05-27 11:13:06 +0530
committerAkshay Nair <phenax5@gmail.com>2025-05-27 11:13:06 +0530
commit4242a01983eb57ac44d5fcfbda75339d486ea4f1 (patch)
tree3ba2952ec94b76fcbf88f326db4abe776abeb54f /modules/email
parent73a49b61fddb77107cb692fa70b8dc361952e556 (diff)
downloadnixos-config-4242a01983eb57ac44d5fcfbda75339d486ea4f1.tar.gz
nixos-config-4242a01983eb57ac44d5fcfbda75339d486ea4f1.zip
Refactor email setup + add email sender to notification
Diffstat (limited to 'modules/email')
-rw-r--r--modules/email/.gitignore1
-rw-r--r--modules/email/aerc-binds.conf146
-rw-r--r--modules/email/aerc.conf26
-rw-r--r--modules/email/aerc.home.nix77
-rw-r--r--modules/email/aerc.theme.nix51
-rw-r--r--modules/email/mailbox-sync.module.nix70
-rw-r--r--modules/email/query-map.conf9
7 files changed, 0 insertions, 380 deletions
diff --git a/modules/email/.gitignore b/modules/email/.gitignore
deleted file mode 100644
index a211cae..0000000
--- a/modules/email/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-private.nix
diff --git a/modules/email/aerc-binds.conf b/modules/email/aerc-binds.conf
deleted file mode 100644
index 442c9ea..0000000
--- a/modules/email/aerc-binds.conf
+++ /dev/null
@@ -1,146 +0,0 @@
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-t> = :term<Enter>
-? = :help keys<Enter>
-<C-c> = :prompt 'Quit? ' quit<Enter>
-<C-q> = :prompt 'Quit? ' quit<Enter>
-<C-z> = :suspend<Enter>
-
-
-
-
-[messages]
-q = :prompt 'Quit? ' quit<Enter>
-
-a = :read<Enter>
-A = :unread<Enter>
-i = :tag +important<Enter>
-I = :tag -important<Enter>
-
-<Enter> = :view<Enter>
-
-j = :next<Enter>
-k = :prev<Enter>
-<C-d> = :next 50%<Enter>
-<C-f> = :next 100%<Enter>
-<C-u> = :prev 50%<Enter>
-<C-b> = :prev 100%<Enter>
-g = :select 0<Enter>
-G = :select -1<Enter>
-
-J = :next-folder<Enter>
-K = :prev-folder<Enter>
-
-v = :mark -t<Enter>
-<Space> = :mark -t<Enter>:next<Enter>
-V = :mark -v<Enter>
-
-T = :toggle-threads<Enter>
-za = :fold -t<Enter>
-
-C = :compose<Enter>
-
-rr = :reply -a<Enter>
-Rr = :reply<Enter>
-
-! = :term<space>
-| = :pipe<space>
-
-/ = :search<space>
-\ = :filter<space>
-n = :next-result<Enter>
-N = :prev-result<Enter>
-<Esc> = :clear<Enter>
-
-s = :split<Enter>
-S = :vsplit<Enter>
-
-[messages:folder=Drafts]
-<Enter> = :recall<Enter>
-
-
-
-
-[view]
-/ = :toggle-key-passthrough<Enter>/
-q = :close<Enter>
-o = :open<Enter>
-S = :save<space>
-| = :pipe<space>
-D = :delete<Enter>
-
-<C-l> = :open-link <space>
-
-f = :forward<Enter>
-rr = :reply -a<Enter>
-Rr = :reply<Enter>
-
-H = :toggle-headers<Enter>
-<C-k> = :prev-part<Enter>
-<C-j> = :next-part<Enter>
-J = :next<Enter>
-K = :prev<Enter>
-
-
-
-
-[view::passthrough]
-$noinherit = true
-$ex = <C-x>
-<Esc> = :toggle-key-passthrough<Enter>
-
-
-
-
-[compose]
-$noinherit = true
-$ex = <C-x>
-$complete = <C-o>
-<C-k> = :prev-field<Enter>
-<C-j> = :next-field<Enter>
-<tab> = :next-field<Enter>
-<backtab> = :prev-field<Enter>
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-q> = :prompt 'Quit? ' quit -f<Enter>
-<C-a> = :attach -m ~<Enter>
-<C-s> = :preview<Enter>
-
-
-
-
-[compose::editor]
-$noinherit = true
-$ex = <C-x>
-<C-k> = :prev-field<Enter>
-<C-j> = :next-field<Enter>
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-q> = :prompt 'Quit? ' quit -f<Enter>
-<C-a> = :attach -m ~<Enter>
-<C-s> = :preview<Enter>
-
-
-
-
-[compose::review]
-# Inline comments are used as descriptions on the review screen
-y = :send<Enter> # Send
-n = :abort<Enter> # Abort (discard message, no confirmation)
-p = :preview<Enter> # Preview message
-e = :edit<Enter> # Edit (body and headers)
-a = :attach<space> # Add attachment
-d = :detach<space> # Remove attachment
-P = :postpone<Enter> # Postpone
-
-
-
-
-
-[terminal]
-$noinherit = true
-$ex = <C-x>
-
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-
diff --git a/modules/email/aerc.conf b/modules/email/aerc.conf
deleted file mode 100644
index 5585d25..0000000
--- a/modules/email/aerc.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-[general]
-enable-osc8 = true
-unsafe-accounts-conf = true
-
-[ui]
-auto-mark-read = true
-
-[viewer]
-parse-http-links = true
-
-[compose]
-editor = nvim
-file-picker-cmd = lf -selection-path=%f
-empty-subject-warning = true
-no-attachment-warning = ^[^>]*attach(ed|ment)
-
-[filters]
-text/plain=bat -f --paging=never --file-name="$AERC_SUBJECT ($AERC_FROM)" --style=header,grid
-text/html=! w3m -I UTF-8 -T text/html
-text/*=bat -fP --file-name="$AERC_FILENAME" --style=plain
-application/pdf=pdftotext - -
-
-[openers]
-image/*=sxiv {}
-application/pdf=zathura {}
-
diff --git a/modules/email/aerc.home.nix b/modules/email/aerc.home.nix
deleted file mode 100644
index 1ba4f7d..0000000
--- a/modules/email/aerc.home.nix
+++ /dev/null
@@ -1,77 +0,0 @@
-{ config, ... }:
-# Create private.nix with work.email, work.name
-# Setup with `notmuch setup`
-# Authenticate with `take ~/mail/account.gmail/ && gmi init <email>`
-let
- private = import ./private.nix;
- theme = import ./aerc.theme.nix;
- maildir = "${config.home.homeDirectory}/mail";
- work-maildir = "${maildir}/account.gmail";
-in {
- imports = [ ./mailbox-sync.module.nix ];
-
- services.mailbox-sync = {
- enable = true;
- name = "work";
- maildir = work-maildir;
- sync.frequency = "*:0/5";
- notify.enable = true;
- };
-
- programs.notmuch = {
- enable = true;
- new = {
- tags = ["new"];
- ignore = ["/.*[.](json|lock|bak)$/"];
- };
- extraConfig = {
- database = {
- path = maildir;
- };
- user = {
- name = private.work.name;
- primary_email = private.work.email;
- };
- search = {
- exclude_tags = "ignored";
- };
- };
- };
-
- programs.aerc = {
- enable = true;
-
- extraAccounts.Work = {
- from = "${private.work.name} <${private.work.email}>";
- source = "notmuch://${maildir}";
- outgoing = "gmi send -t -C ${work-maildir}";
- query-map = "${./query-map.conf}";
- folders-sort = "Inbox,Unread,Important,_sent,_spam";
- default = "INBOX";
- copy-to = "Sent";
- postpone = "[Gmail]/Drafts";
- cache-headers = true;
- };
-
- extraConfig = builtins.readFile ./aerc.conf;
- extraBinds = builtins.readFile ./aerc-binds.conf;
-
- stylesets.default = theme;
- };
-
- xdg.desktopEntries.aerc-window = {
- name = "aerc";
- exec = "sensible-terminal -e aerc %u";
- terminal = false;
- mimeType = ["x-scheme-handler/mailto"];
- genericName = "Mail Client";
- comment = "Launches the aerc email client";
- categories = ["Office" "Network" "Email" "ConsoleOnly"];
- type = "Application";
- icon = "utilities-terminal";
- settings = {
- Keywords = "Email;Mail;IMAP;SMTP";
- Version = "1.0";
- };
- };
-}
diff --git a/modules/email/aerc.theme.nix b/modules/email/aerc.theme.nix
deleted file mode 100644
index f2f525d..0000000
--- a/modules/email/aerc.theme.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-let
- accent = "#4f3aA3";
-in {
- "title.bg" = accent;
- "title.fg" = "black";
- "title.bold" = true;
- "header.bold" = true;
- "header.fg" = accent;
- "tab.bold" = true;
- "tab.selected.fg" = "white";
- "tab.selected.bg" = accent;
- "tab.selected.bold" = true;
- "dirlist*.selected.bg" = accent;
- "dirlist*.selected.fg" = "white";
- "dirlist*.selected.bold" = false;
- "*error.bold" = true;
- "*error.fg" = "red";
- "*warning.fg" = "yellow";
- "*success.fg" = "green";
- "statusline_default.bg" = "#303030";
- "statusline_error.fg" = "red";
- "msglist_unread.fg" = "#ffffff";
- "msglist_unread.bold" = true;
- "msglist_deleted.fg" = "#666666";
- "msglist_*.selected.bg" = accent;
- "msglist_marked.fg" = "black";
- "msglist_marked.selected.fg" = "black";
- "msglist_marked.bg" = "#BD93F9";
- "msglist_marked.selected.bg" = "#9956f5";
- "completion_pill.reverse" = false;
- "selector_focused.bold" = false;
- "selector_focused.bg" = accent;
- "selector_focused.fg" = "white";
- "selector_chooser.bold" = false;
- "selector_chooser.bg" = accent;
- "selector_chooser.fg" = "white";
- "default.selected.bold" = false;
- "default.selected.fg" = "white";
- "default.selected.bg" = accent;
- "completion_default.selected.bg" = accent;
- "completion_default.selected.fg" = "white";
- "part_filename.bold" = true;
- "part_mimetype.fg" = accent;
- "part_filename.selected.bg" = accent;
- "part_filename.selected.fg" = "white";
- "part_mimetype.selected.bg" = accent;
- "part_mimetype.selected.fg" = "white";
- "part_mimetype.selected.bold" = true;
- "part_switcher.selected.bg" = accent;
- "part_switcher.selected.fg" = "white";
-}
diff --git a/modules/email/mailbox-sync.module.nix b/modules/email/mailbox-sync.module.nix
deleted file mode 100644
index ad5f94e..0000000
--- a/modules/email/mailbox-sync.module.nix
+++ /dev/null
@@ -1,70 +0,0 @@
-{ config, pkgs, lib, ... }:
-with lib;
-let
- cfg = config.services.mailbox-sync;
-
- notmuch = "${pkgs.notmuch}/bin/notmuch";
- gmi = "${pkgs.lieer}/bin/gmi";
- notify-send = "${pkgs.libnotify}/bin/notify-send";
- jq = "${pkgs.jq}/bin/jq";
-
- notify-script = ''
- emails=$(${notmuch} search --format=json '${cfg.notify.filter}' \
- | ${jq} -r '.[0:5] | map("* " + .subject + " (tag: " + (.tags | join(" ")) + ")") | join("\n\n")');
-
- # Notify
- ${notify-send} --app-name=notmuch "New mail baybey ($new_mail_count)" "$emails";
- '';
-
- sync-script = ''
- #!${pkgs.bash}/bin/bash
- set -eu -o pipefail;
-
- ${gmi} sync;
-
- new_mail_count=$(${notmuch} count '${cfg.notify.filter}');
- if [ $new_mail_count = 0 ]; then
- echo "No new mail";
- else
- ${if cfg.notify.enable then notify-script else ""}
- fi
-
- ${notmuch} tag -new -- tag:new;
- '';
-
- service-unit = {
- Unit.ConditionPathExists = "${cfg.maildir}/.gmailieer.json";
- Service = {
- Type = "oneshot";
- ExecStart = "${pkgs.writeScript "mailbox-sync-script" sync-script}";
- WorkingDirectory = cfg.maildir;
- Environment = "NOTMUCH_CONFIG=${config.xdg.configHome}/notmuch/default/config";
- };
- };
-
- timer-unit = {
- Timer = {
- OnCalendar = cfg.sync.frequency;
- RandomizedDelaySec = 30;
- };
- Install.WantedBy = [ "timers.target" ];
- };
-in {
- options.services.mailbox-sync = {
- enable = mkEnableOption "mailbox sync";
- name = mkOption { type = types.str; default = "default"; };
- maildir = mkOption { type = types.str; };
- sync.frequency = mkOption { type = types.str; default = "*:0/5"; };
- notify.enable = mkEnableOption "notify on new mail";
- notify.filter = mkOption {
- type = types.str;
- default = "tag:inbox and tag:unread and tag:new";
- };
- };
-
- config = mkIf cfg.enable {
- programs.lieer.enable = true;
- systemd.user.services."mailbox-sync-${cfg.name}" = service-unit;
- systemd.user.timers."mailbox-sync-${cfg.name}" = timer-unit;
- };
-}
diff --git a/modules/email/query-map.conf b/modules/email/query-map.conf
deleted file mode 100644
index fe14b08..0000000
--- a/modules/email/query-map.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-Inbox=tag:inbox and not tag:archived and not tag:sent and not tag:deleted and not tag:spam
-
-Unread=tag:inbox and tag:unread and not tag:spam
-
-Important=tag:important and not tag:archived and not tag:deleted and not tag:spam
-
-_sent=tag:sent and not tag:archived not tag:deleted
-
-_spam=tag:spam