From b71db736d1cdc93a2d0b1d477ab8572c1187799e Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Sat, 11 Jul 2026 03:59:33 +0530 Subject: feat(neomutt): add keybindings, sidebar colors, mailcap, and urlscan integration - Remap sidebar-open from Ctrl+O to 'o' for single-key access - Add Enter/l/h/0/$ keybindings across index, pager, and browser modes - Add macros: O (mbsync sync), gx (urlscan link extraction), gl (flag legend) - Add extraConfig with abort_key, mailcap_path, and auto_view for attachments - Add mailcap for w3m/html, image/pdf/video/audio openers via xdg-open - Add flag_legend.txt help file accessible via 'gl' - Add home.packages for urlscan and w3m - Add checkStatsInterval = 20 - Add sidebar colors (background, divider, ordinary, new, flagged, spool_file, highlight, indicator) - Add prompt, progress, stripe_odd/stripe_even, and attach_headers colors - Add index_collapsed, index_label, index_tag, and index_tags color targets - Fix indicator to use brightblack background instead of blue for better contrast - Extend quoted colors from 4 to 9 levels for deeply nested replies - Change Date header color to green - Update index_format with padding for cleaner alignment - Add mailboxes, Expunge = Both, and notmuch virtual mailboxes to email example --- modules/programs/neomutt/default.nix | 140 ++++++++++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 3 deletions(-) (limited to 'modules/programs/neomutt/default.nix') diff --git a/modules/programs/neomutt/default.nix b/modules/programs/neomutt/default.nix index 940ce9a..e489328 100644 --- a/modules/programs/neomutt/default.nix +++ b/modules/programs/neomutt/default.nix @@ -2,21 +2,76 @@ { config, lib, + pkgs, ... }: - { imports = [ ./assertions.nix ./theme.nix ]; - config = lib.mkIf config.programs.neomutt.enable { + home.packages = [ + pkgs.urlscan + pkgs.w3m + ]; + + xdg.configFile."neomutt/mailcap".text = '' + text/html; w3m -dump -T text/html '%s'; copiousoutput; nametemplate=%s.html + text/html; $BROWSER '%s'; nametemplate=%s.html + image/*; xdg-open '%s' & + application/pdf; xdg-open '%s'; nametemplate=%s.pdf + video/*; xdg-open '%s' & + audio/*; xdg-open '%s' & + application/*; xdg-open '%s' & + ''; + + xdg.configFile."neomutt/flag_legend.txt".text = '' + NeoMutt Index Flags + =================== + + Message state ($flag_chars) + N New - unread, arrived since you last checked + O Old - unread, but seen in a previous session + D Deleted - marked for deletion (pending expunge) + d Att-del - has attachments marked for deletion + ! Flagged - important (toggle with F) + * Tagged - selected for a bulk operation (toggle with t) + r Replied - you've replied to this message + S Signed - PGP/SMIME signed + P Encrypted - PGP/SMIME encrypted + s Cert - contains a S/MIME certificate/key + K PGP key - contains a PGP public key + (blank) - read, nothing else notable + + Addressing ($to_chars) + + To you only - sent to you and only you + T To (with others) - you're in the To: list, among others + C Cc only - you're only in the Cc: list + F From you - sent by you + L Mailing list - sent to a list you're subscribed to + (blank) - not in To/Cc (e.g. Bcc, unlisted) + + Press q to close. + ''; + programs.neomutt = { sidebar.enable = true; sort = "reverse-threads"; vimKeys = true; unmailboxes = true; + checkStatsInterval = 20; + + extraConfig = '' + # cancel any prompt/command-line entry with Esc, vim-style + set abort_key = "" + + # attachments: use our mailcap for dedicated openers, + # and auto-render html/images inline where sensible + set mailcap_path = "~/.config/neomutt/mailcap" + auto_view text/html image/png image/jpeg image/gif application/pdf + ''; + binds = [ { map = [ @@ -35,13 +90,75 @@ action = "sidebar-next"; } { + # select the highlighted mailbox directly, no Ctrl+O needed map = [ "index" "pager" ]; - key = "\\CO"; + key = "o"; action = "sidebar-open"; } + + { + map = [ "index" ]; + key = ""; + action = "display-message"; + } + { + map = [ "browser" ]; + key = ""; + action = "select-entry"; + } + { + map = [ "attach" ]; + key = ""; + action = "view-attach"; + } + { + map = [ + "alias" + "query" + ]; + key = ""; + action = "select-entry"; + } + { + map = [ "pager" ]; + key = ""; + action = "next-page"; + } + + { + map = [ "index" ]; + key = "l"; + action = "display-message"; + } + { + map = [ "pager" ]; + key = "h"; + action = "exit"; + } + { + map = [ "pager" ]; + key = "l"; + action = "next-unread"; + } + { + map = [ "index" ]; + key = "h"; + action = "collapse-thread"; + } + + { + map = [ "pager" ]; + key = "0"; + action = "top"; + } + { + map = [ "pager" ]; + key = "$"; + action = "bottom"; + } ]; macros = [ @@ -53,6 +170,23 @@ key = "O"; action = "mbsync -a"; } + { + # gx: extract links from the current message and open one, vim-netrw style + map = [ + "index" + "pager" + ]; + key = "gx"; + action = "urlscan"; + } + { + map = [ + "index" + "pager" + ]; + key = "gl"; + action = "less ~/.config/neomutt/flag_legend.txt"; + } ]; }; }; -- cgit v1.2.3