diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-05-27 11:13:06 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-05-27 11:13:06 +0530 |
| commit | 4242a01983eb57ac44d5fcfbda75339d486ea4f1 (patch) | |
| tree | 3ba2952ec94b76fcbf88f326db4abe776abeb54f /modules/email | |
| parent | 73a49b61fddb77107cb692fa70b8dc361952e556 (diff) | |
| download | nixos-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/.gitignore | 1 | ||||
| -rw-r--r-- | modules/email/aerc-binds.conf | 146 | ||||
| -rw-r--r-- | modules/email/aerc.conf | 26 | ||||
| -rw-r--r-- | modules/email/aerc.home.nix | 77 | ||||
| -rw-r--r-- | modules/email/aerc.theme.nix | 51 | ||||
| -rw-r--r-- | modules/email/mailbox-sync.module.nix | 70 | ||||
| -rw-r--r-- | modules/email/query-map.conf | 9 |
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 |
