aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/communication/neomutt/.neomuttrc132
-rw-r--r--modules/communication/neomutt/default.nix5
-rw-r--r--modules/communication/neomutt/keybindings.nix295
-rw-r--r--modules/communication/neomutt/macros.nix37
-rw-r--r--modules/communication/neomutt/neomutt.nix338
-rw-r--r--modules/communication/neomutt/theme.nix130
6 files changed, 468 insertions, 469 deletions
diff --git a/modules/communication/neomutt/.neomuttrc b/modules/communication/neomutt/.neomuttrc
new file mode 100644
index 0000000..9e0a42f
--- /dev/null
+++ b/modules/communication/neomutt/.neomuttrc
@@ -0,0 +1,132 @@
+# vim: filetype=muttrc
+#
+# Base16 OneDark Dark terminal colors for neomutt
+# Each column in the index receives a distinct color to keep the UI organized.
+
+set menu_scroll = yes
+
+# cancel any prompt/command-line entry with Esc, vim-style
+set abort_key = "<Esc>"
+
+# 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
+
+# Nerd Font icon-based flag/attachment/crypto indicators
+# order: new, old, deleted, flagged, replied, old(unused), tagged, encrypt, ...
+set flag_chars = "󰓹󰀼󰆴󰁟󰇰󰇮󰍩󰍨󰇱󰗚"
+set to_chars = " "
+set crypt_chars = " "
+set attach_format = "%u%D%I %t%4n %T%.40d %> [%m/%M, %e%?C?, %C?, %s] "
+
+set index_format = " %5C │ %Z │ %{%d/%m/%y %H:%M} │ %-25.25a │ %s%* "
+
+# Hide the keybindings help bar at the top to save vertical space
+set help = no
+
+# Status bar with Nerd Font icons per field
+set status_format = "  Unread: %5u │ 󰛏 New: %5n │  Tagged: %5t │  Filter: %V │  Sorted By: %s "
+
+# --- Basic UI Colors --------------------------------------------------
+# target foreground background
+color normal white default # base05 (Standard text)
+color error red default # base08 (Red)
+color tilde brightblack default # base03 (Dark Grey)
+color message cyan default # base0C (Cyan)
+color markers red default # base08 (Red)
+color attachment magenta default # base0E (Magenta)
+color search magenta default # base0E (Magenta)
+color prompt cyan default # base0C (Questions/prompts)
+color progress black yellow # 󰦖 base0A bg (Progress bar)
+
+# Selected row and status bar
+color status white brightblack # base05 on base03
+color indicator default brightblack # default on base03 (Selected email)
+color tree magenta default # base03 (Thread arrows)
+
+# Whole-line fallback for the index (base for anything not caught below)
+color index white default # base05
+
+# --- Index Columns (The Multi-Color Table) ----------------------------
+# Applies distinct colors to specific columns for ALL messages (~A)
+color index_number cyan default "~A" # base05 (Fixed: was brightblack)
+color index_date green default "~A" # base0B (Green)
+color index_flags red default "~A" # base08 (Red)
+color index_size cyan default "~A" # 󰈔 base0C (Cyan)
+color index_author yellow default "~A" # base0A (Yellow)
+color index_subject white default "~A" # base05 (Standard text for Read messages)
+color index_collapsed yellow default # base0A (Collapsed thread count, %M)
+color index_label magenta default # 󰓹 base0E (Message label, %y %Y)
+color index_tag cyan default # base0C (Message tags, %G)
+color index_tags cyan default # 󰓼 base0C (Transformed tags, %g %J)
+
+# --- Index Message States ---------------------------------------------
+# By targeting *only* `index_subject`, you preserve your multi-color
+# columns while still easily identifying unread or flagged emails.
+color index_subject blue default "~U" # Unread: Blue (base0D)
+color index_subject blue default "~N" # 󰄯 New: Blue (base0D)
+color index_subject red default "~F" # Flagged: Red (base08)
+color index_subject magenta default "~Q" # 󰛃 Replied: Magenta (base0E)
+color index_subject black red "~D" # Deleted
+
+# This rule now colors the "email (name)" column as it is considered the 'author'
+color index_author yellow default "~A"
+color index_subject white default "~A" # %s
+
+# We removed the ~R (Read) override so it stays white.
+# For Deleted (~D), if brightblack is still too dark to see, we can use a red background instead:
+color index_subject black red "~D" # Deleted: Black on Red background
+
+# Thread collapsing states
+color index_subject yellow default "~v" # Collapsed thread
+color index_subject blue default "~v~(~N)" # 󰝜 Collapsed with unread inside
+color index_subject red default "~v~(~F)" # 󰈺 Collapsed with flagged inside
+
+# Subtle zebra striping between adjacent index rows (barely-there contrast)
+color stripe_odd default default
+color stripe_even default default
+
+# --- Message Headers --------------------------------------------------
+color hdrdefault cyan default # base0C
+color header yellow default "^(From|To|Cc|Bcc)" # base0A
+color header blue default "^(Subject)" # base0D
+color header green default "^(Date)" # base03
+
+# Attachment header lines (shown above each MIME part in the pager)
+color attach_headers cyan default #
+
+# --- Message Body -----------------------------------------------------
+color quoted blue default # base0D
+color quoted1 cyan default # base0C
+color quoted2 yellow default # base0A
+color quoted3 red default # base08
+color quoted4 magenta default # base0E
+color quoted5 blue default # base0D (cycle repeats)
+color quoted6 cyan default # base0C
+color quoted7 yellow default # base0A
+color quoted8 red default # base08
+color quoted9 magenta default # base0E
+
+color signature green default # 󰛿 base0B
+color bold white default # base05
+color underline white default # base05
+
+# URLs
+color body blue default "([a-z][a-z0-9+-]*://[^ ]+)"
+
+# PGP
+color body green default "(Good signature)" # verified
+color body red default "(BAD signature)" # bad
+color body brightblack default "^gpg: " #
+
+# --- Sidebar (was completely unset despite sidebar.enable = true) -----
+set sidebar_format = " %D%* %?N? %N ?%?F? %F ?"
+color sidebar_background default default # transparent, blends with terminal bg
+color sidebar_divider white default # base03 (matches old tree color)
+color sidebar_ordinary white default # base05 (normal mailbox entries)
+color sidebar_new green default # 󰇮 base0B (mailboxes with new mail)
+color sidebar_flagged red default # base08 (mailboxes with flagged mail)
+color sidebar_spool_file yellow default # 󰇰 base0A (your inbox/spool)
+color sidebar_highlight white brightblack # base05 on base03 (cursor position)
+color sidebar_indicator default brightblack # default on base03 (currently open mailbox)
diff --git a/modules/communication/neomutt/default.nix b/modules/communication/neomutt/default.nix
index 34147fd..c5cbaf0 100644
--- a/modules/communication/neomutt/default.nix
+++ b/modules/communication/neomutt/default.nix
@@ -4,9 +4,10 @@
imports = [
./account
./sync
- ./neomutt.nix
./assertions.nix
- ./theme.nix
+ ./keybindings.nix
+ ./macros.nix
+ ./neomutt.nix
];
options.communication.neomutt = {
diff --git a/modules/communication/neomutt/keybindings.nix b/modules/communication/neomutt/keybindings.nix
new file mode 100644
index 0000000..949d520
--- /dev/null
+++ b/modules/communication/neomutt/keybindings.nix
@@ -0,0 +1,295 @@
+{ config, lib, ... }:
+
+{
+ config.programs.neomutt.binds = lib.mkIf config.communication.neomutt.enable [
+ # --- sidebar navigation (vim: k=up, j=down) ---
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "\\CK";
+ action = "sidebar-prev";
+ }
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "\\CJ";
+ action = "sidebar-next";
+ }
+ {
+ # select the highlighted mailbox directly, no Ctrl+O needed
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "o";
+ action = "sidebar-open";
+ }
+
+ # --- open / go deeper (vim: l = right/forward) ---
+ {
+ map = [ "index" ];
+ key = "<Return>";
+ action = "display-message";
+ }
+ {
+ map = [ "index" ];
+ key = "l";
+ action = "display-message";
+ }
+ {
+ map = [ "browser" ];
+ key = "<Return>";
+ action = "select-entry";
+ }
+ {
+ map = [ "browser" ];
+ key = "l";
+ action = "select-entry";
+ }
+ {
+ map = [ "attach" ];
+ key = "<Return>";
+ action = "view-attach";
+ }
+ {
+ map = [ "attach" ];
+ key = "l";
+ action = "view-attach";
+ }
+ {
+ map = [
+ "alias"
+ "query"
+ ];
+ key = "<Return>";
+ action = "select-entry";
+ }
+
+ # --- back / exit (vim: h = left/back) ---
+ {
+ map = [ "pager" ];
+ key = "h";
+ action = "exit";
+ }
+ {
+ map = [ "browser" ];
+ key = "h";
+ action = "exit";
+ }
+ {
+ map = [ "attach" ];
+ key = "h";
+ action = "exit";
+ }
+ {
+ map = [ "index" ];
+ key = "h";
+ action = "collapse-thread";
+ }
+
+ # --- pager line scrolling (vim: j/k move by line) ---
+ {
+ map = [ "pager" ];
+ key = "j";
+ action = "next-line";
+ }
+ {
+ map = [ "pager" ];
+ key = "k";
+ action = "previous-line";
+ }
+ {
+ # kept from before: jump straight to the next unread message,
+ # extends the h/l "back/forward" metaphor already in use
+ map = [ "pager" ];
+ key = "l";
+ action = "next-unread";
+ }
+
+ # --- top/bottom of buffer (vim: gg/G -- NOT 0/$, which mean
+ # start/end of *line* in vim and would be a false friend here) ---
+ {
+ map = [ "index" ];
+ key = "gg";
+ action = "first-entry";
+ }
+ {
+ map = [ "index" ];
+ key = "G";
+ action = "last-entry";
+ }
+ {
+ map = [ "pager" ];
+ key = "gg";
+ action = "top";
+ }
+ {
+ map = [ "pager" ];
+ key = "G";
+ action = "bottom";
+ }
+ {
+ map = [ "browser" ];
+ key = "gg";
+ action = "first-entry";
+ }
+ {
+ map = [ "browser" ];
+ key = "G";
+ action = "last-entry";
+ }
+
+ # --- page scrolling (vim: Ctrl-f/b full page, Ctrl-d/u half page) ---
+ {
+ map = [ "pager" ];
+ key = "\\Cf";
+ action = "next-page";
+ }
+ {
+ map = [ "pager" ];
+ key = "\\Cb";
+ action = "previous-page";
+ }
+ {
+ map = [ "pager" ];
+ key = "\\Cd";
+ action = "half-down";
+ }
+ {
+ map = [ "pager" ];
+ key = "\\Cu";
+ action = "half-up";
+ }
+ {
+ # index has no half-page concept, so Ctrl-d/u fall back to
+ # the same full-page scroll as Ctrl-f/b
+ map = [ "index" ];
+ key = "\\Cf";
+ action = "next-page";
+ }
+ {
+ map = [ "index" ];
+ key = "\\Cb";
+ action = "previous-page";
+ }
+ {
+ map = [ "index" ];
+ key = "\\Cd";
+ action = "half-down";
+ }
+ {
+ map = [ "index" ];
+ key = "\\Cu";
+ action = "half-up";
+ }
+
+ # --- search (vim: / forward, ? backward, n/N repeat) ---
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "/";
+ action = "search";
+ }
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "?";
+ action = "search-reverse";
+ }
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "n";
+ action = "search-next";
+ }
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "N";
+ action = "search-opposite";
+ }
+
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "u";
+ action = "undelete-message";
+ }
+
+ # --- copy (vim: yy yank -- non-destructive, unlike save-message
+ # which moves/deletes the original) ---
+ {
+ map = [ "index" ];
+ key = "y";
+ action = "noop";
+ }
+ {
+ map = [ "index" ];
+ key = "yy";
+ action = "copy-message";
+ }
+
+ # --- tagging (vim: v/V visual select single/whole block) ---
+ # NOTE: this overrides neomutt's default "v" (view-attachments).
+ # Attachments are still reachable from the pager/index via the
+ # mailcap auto-view or the attach menu, but if you want plain
+ # "v" back for view-attachments, just delete these two binds.
+ {
+ map = [ "index" ];
+ key = "v";
+ action = "tag-entry";
+ }
+ {
+ map = [ "index" ];
+ key = "V";
+ action = "tag-thread";
+ }
+
+ # --- mailbox switching (vim: gt = next tab) ---
+ {
+ map = [ "index" ];
+ key = "gt";
+ action = "next-unread-mailbox";
+ }
+
+ # --- filter/limit (vim: gf to 'find' or 'filter') ---
+ {
+ map = [ "index" ];
+ key = "gf";
+ action = "limit";
+ }
+
+ # --- filter/limit (vim: gf to 'find' or 'filter') ---
+ {
+ map = [ "index" ];
+ key = "gF";
+ action = "limit";
+ }
+
+ # --- help message to show functions and keybindings ---
+ {
+ map = [
+ "index"
+ "pager"
+ "browser"
+ "attach"
+ ];
+ key = "g?";
+ action = "help";
+ }
+ ];
+}
diff --git a/modules/communication/neomutt/macros.nix b/modules/communication/neomutt/macros.nix
new file mode 100644
index 0000000..e1a754e
--- /dev/null
+++ b/modules/communication/neomutt/macros.nix
@@ -0,0 +1,37 @@
+{ config, lib, ... }:
+
+{
+ config.programs.neomutt.binds = lib.mkIf config.communication.neomutt.enable [
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "O";
+ action = "<enter-command>set my_wait_key=$wait_key wait_key=no<enter><sync-mailbox><shell-escape>${lib.getExe config.scripts.neomutt-sync.package}<enter><sync-mailbox><enter-command>set wait_key=$my_wait_key<enter>";
+ }
+ {
+ # gx: extract links from the current message and open one, vim-netrw style
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "gx";
+ action = "<pipe-message>urlscan<Enter>";
+ }
+ {
+ map = [
+ "index"
+ "pager"
+ ];
+ key = "gl";
+ action = "<shell-escape>less ~/.config/neomutt/flag_legend.txt<enter>";
+ }
+ {
+ # ZZ: save and quit, vim-style (sync mailbox, then quit)
+ map = [ "index" ];
+ key = "ZZ";
+ action = "<sync-mailbox><quit>";
+ }
+ ];
+}
diff --git a/modules/communication/neomutt/neomutt.nix b/modules/communication/neomutt/neomutt.nix
index 16d4b37..f6c7f8e 100644
--- a/modules/communication/neomutt/neomutt.nix
+++ b/modules/communication/neomutt/neomutt.nix
@@ -82,343 +82,7 @@ in
unmailboxes = true;
checkStatsInterval = 20;
- extraConfig = ''
- set menu_scroll = yes
-
- # cancel any prompt/command-line entry with Esc, vim-style
- set abort_key = "<Esc>"
-
- # 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 = [
- # --- sidebar navigation (vim: k=up, j=down) ---
- {
- map = [
- "index"
- "pager"
- ];
- key = "\\CK";
- action = "sidebar-prev";
- }
- {
- map = [
- "index"
- "pager"
- ];
- key = "\\CJ";
- action = "sidebar-next";
- }
- {
- # select the highlighted mailbox directly, no Ctrl+O needed
- map = [
- "index"
- "pager"
- ];
- key = "o";
- action = "sidebar-open";
- }
-
- # --- open / go deeper (vim: l = right/forward) ---
- {
- map = [ "index" ];
- key = "<Return>";
- action = "display-message";
- }
- {
- map = [ "index" ];
- key = "l";
- action = "display-message";
- }
- {
- map = [ "browser" ];
- key = "<Return>";
- action = "select-entry";
- }
- {
- map = [ "browser" ];
- key = "l";
- action = "select-entry";
- }
- {
- map = [ "attach" ];
- key = "<Return>";
- action = "view-attach";
- }
- {
- map = [ "attach" ];
- key = "l";
- action = "view-attach";
- }
- {
- map = [
- "alias"
- "query"
- ];
- key = "<Return>";
- action = "select-entry";
- }
-
- # --- back / exit (vim: h = left/back) ---
- {
- map = [ "pager" ];
- key = "h";
- action = "exit";
- }
- {
- map = [ "browser" ];
- key = "h";
- action = "exit";
- }
- {
- map = [ "attach" ];
- key = "h";
- action = "exit";
- }
- {
- map = [ "index" ];
- key = "h";
- action = "collapse-thread";
- }
-
- # --- pager line scrolling (vim: j/k move by line) ---
- {
- map = [ "pager" ];
- key = "j";
- action = "next-line";
- }
- {
- map = [ "pager" ];
- key = "k";
- action = "previous-line";
- }
- {
- # kept from before: jump straight to the next unread message,
- # extends the h/l "back/forward" metaphor already in use
- map = [ "pager" ];
- key = "l";
- action = "next-unread";
- }
-
- # --- top/bottom of buffer (vim: gg/G -- NOT 0/$, which mean
- # start/end of *line* in vim and would be a false friend here) ---
- {
- map = [ "index" ];
- key = "gg";
- action = "first-entry";
- }
- {
- map = [ "index" ];
- key = "G";
- action = "last-entry";
- }
- {
- map = [ "pager" ];
- key = "gg";
- action = "top";
- }
- {
- map = [ "pager" ];
- key = "G";
- action = "bottom";
- }
- {
- map = [ "browser" ];
- key = "gg";
- action = "first-entry";
- }
- {
- map = [ "browser" ];
- key = "G";
- action = "last-entry";
- }
-
- # --- page scrolling (vim: Ctrl-f/b full page, Ctrl-d/u half page) ---
- {
- map = [ "pager" ];
- key = "\\Cf";
- action = "next-page";
- }
- {
- map = [ "pager" ];
- key = "\\Cb";
- action = "previous-page";
- }
- {
- map = [ "pager" ];
- key = "\\Cd";
- action = "half-down";
- }
- {
- map = [ "pager" ];
- key = "\\Cu";
- action = "half-up";
- }
- {
- # index has no half-page concept, so Ctrl-d/u fall back to
- # the same full-page scroll as Ctrl-f/b
- map = [ "index" ];
- key = "\\Cf";
- action = "next-page";
- }
- {
- map = [ "index" ];
- key = "\\Cb";
- action = "previous-page";
- }
- {
- map = [ "index" ];
- key = "\\Cd";
- action = "half-down";
- }
- {
- map = [ "index" ];
- key = "\\Cu";
- action = "half-up";
- }
-
- # --- search (vim: / forward, ? backward, n/N repeat) ---
- {
- map = [
- "index"
- "pager"
- ];
- key = "/";
- action = "search";
- }
- {
- map = [
- "index"
- "pager"
- ];
- key = "?";
- action = "search-reverse";
- }
- {
- map = [
- "index"
- "pager"
- ];
- key = "n";
- action = "search-next";
- }
- {
- map = [
- "index"
- "pager"
- ];
- key = "N";
- action = "search-opposite";
- }
-
- {
- map = [
- "index"
- "pager"
- ];
- key = "u";
- action = "undelete-message";
- }
-
- # --- copy (vim: yy yank -- non-destructive, unlike save-message
- # which moves/deletes the original) ---
- {
- map = [ "index" ];
- key = "y";
- action = "noop";
- }
- {
- map = [ "index" ];
- key = "yy";
- action = "copy-message";
- }
-
- # --- tagging (vim: v/V visual select single/whole block) ---
- # NOTE: this overrides neomutt's default "v" (view-attachments).
- # Attachments are still reachable from the pager/index via the
- # mailcap auto-view or the attach menu, but if you want plain
- # "v" back for view-attachments, just delete these two binds.
- {
- map = [ "index" ];
- key = "v";
- action = "tag-entry";
- }
- {
- map = [ "index" ];
- key = "V";
- action = "tag-thread";
- }
-
- # --- mailbox switching (vim: gt = next tab) ---
- {
- map = [ "index" ];
- key = "gt";
- action = "next-unread-mailbox";
- }
-
- # --- filter/limit (vim: gf to 'find' or 'filter') ---
- {
- map = [ "index" ];
- key = "gf";
- action = "limit";
- }
-
- # --- filter/limit (vim: gf to 'find' or 'filter') ---
- {
- map = [ "index" ];
- key = "gF";
- action = "limit";
- }
-
- # --- help message to show functions and keybindings ---
- {
- map = [
- "index"
- "pager"
- "browser"
- "attach"
- ];
- key = "g?";
- action = "help";
- }
- ];
-
- macros = [
- {
- map = [
- "index"
- "pager"
- ];
- key = "O";
- action = "<enter-command>set my_wait_key=$wait_key wait_key=no<enter><sync-mailbox><shell-escape>${lib.getExe config.scripts.neomutt-sync.package}<enter><sync-mailbox><enter-command>set wait_key=$my_wait_key<enter>";
- }
- {
- # gx: extract links from the current message and open one, vim-netrw style
- map = [
- "index"
- "pager"
- ];
- key = "gx";
- action = "<pipe-message>urlscan<Enter>";
- }
- {
- map = [
- "index"
- "pager"
- ];
- key = "gl";
- action = "<shell-escape>less ~/.config/neomutt/flag_legend.txt<enter>";
- }
- {
- # ZZ: save and quit, vim-style (sync mailbox, then quit)
- map = [ "index" ];
- key = "ZZ";
- action = "<sync-mailbox><quit>";
- }
- ];
+ extraConfig = builtins.readFile ./.neomuttrc;
};
};
}
diff --git a/modules/communication/neomutt/theme.nix b/modules/communication/neomutt/theme.nix
deleted file mode 100644
index 38e8abd..0000000
--- a/modules/communication/neomutt/theme.nix
+++ /dev/null
@@ -1,130 +0,0 @@
-{ config, lib, ... }:
-
-# Colorscheme - True base16 OneDark colors for neomutt
-# Leverages Kitty's precise mapping to base16 (color0-15)
-{
- config.programs.neomutt.extraConfig = lib.mkIf config.communication.neomutt.enable ''
- # vim: filetype=muttrc
- #
- # Base16 OneDark Dark terminal colors for neomutt
- # Each column in the index receives a distinct color to keep the UI organized.
-
- # Nerd Font icon-based flag/attachment/crypto indicators
- # order: new, old, deleted, flagged, replied, old(unused), tagged, encrypt, ...
- set flag_chars = "󰓹󰀼󰆴󰁟󰇰󰇮󰍩󰍨󰇱󰗚"
- set to_chars = " "
- set crypt_chars = " "
- set attach_format = "%u%D%I %t%4n %T%.40d %> [%m/%M, %e%?C?, %C?, %s] "
-
- set index_format = " %5C │ %Z │ %{%d/%m/%y %H:%M} │ %-25.25a │ %s%* "
-
- # Hide the keybindings help bar at the top to save vertical space
- set help = no
-
- # Status bar with Nerd Font icons per field
- set status_format = "  Unread: %5u │ 󰛏 New: %5n │  Tagged: %5t │  Search: %f │  Filter: %v │  Sorted By: %s │"
-
- # --- Basic UI Colors --------------------------------------------------
- # target foreground background
- color normal white default # base05 (Standard text)
- color error red default # base08 (Red)
- color tilde brightblack default # base03 (Dark Grey)
- color message cyan default # base0C (Cyan)
- color markers red default # base08 (Red)
- color attachment magenta default # base0E (Magenta)
- color search magenta default # base0E (Magenta)
- color prompt cyan default # base0C (Questions/prompts)
- color progress black yellow # 󰦖 base0A bg (Progress bar)
-
- # Selected row and status bar
- color status white brightblack # base05 on base03
- color indicator default brightblack # default on base03 (Selected email)
- color tree magenta default # base03 (Thread arrows)
-
- # Whole-line fallback for the index (base for anything not caught below)
- color index white default # base05
-
- # --- Index Columns (The Multi-Color Table) ----------------------------
- # Applies distinct colors to specific columns for ALL messages (~A)
- color index_number cyan default "~A" # base05 (Fixed: was brightblack)
- color index_date green default "~A" # base0B (Green)
- color index_flags red default "~A" # base08 (Red)
- color index_size cyan default "~A" # 󰈔 base0C (Cyan)
- color index_author yellow default "~A" # base0A (Yellow)
- color index_subject white default "~A" # base05 (Standard text for Read messages)
- color index_collapsed yellow default # base0A (Collapsed thread count, %M)
- color index_label magenta default # 󰓹 base0E (Message label, %y %Y)
- color index_tag cyan default # base0C (Message tags, %G)
- color index_tags cyan default # 󰓼 base0C (Transformed tags, %g %J)
-
- # --- Index Message States ---------------------------------------------
- # By targeting *only* `index_subject`, you preserve your multi-color
- # columns while still easily identifying unread or flagged emails.
- color index_subject blue default "~U" # Unread: Blue (base0D)
- color index_subject blue default "~N" # 󰄯 New: Blue (base0D)
- color index_subject red default "~F" # Flagged: Red (base08)
- color index_subject magenta default "~Q" # 󰛃 Replied: Magenta (base0E)
- color index_subject black red "~D" # Deleted
-
- # This rule now colors the "email (name)" column as it is considered the 'author'
- color index_author yellow default "~A"
- color index_subject white default "~A" # %s
-
- # We removed the ~R (Read) override so it stays white.
- # For Deleted (~D), if brightblack is still too dark to see, we can use a red background instead:
- color index_subject black red "~D" # Deleted: Black on Red background
-
- # Thread collapsing states
- color index_subject yellow default "~v" # Collapsed thread
- color index_subject blue default "~v~(~N)" # 󰝜 Collapsed with unread inside
- color index_subject red default "~v~(~F)" # 󰈺 Collapsed with flagged inside
-
- # Subtle zebra striping between adjacent index rows (barely-there contrast)
- color stripe_odd default default
- color stripe_even default default
-
- # --- Message Headers --------------------------------------------------
- color hdrdefault cyan default # base0C
- color header yellow default "^(From|To|Cc|Bcc)" # base0A
- color header blue default "^(Subject)" # base0D
- color header green default "^(Date)" # base03
-
- # Attachment header lines (shown above each MIME part in the pager)
- color attach_headers cyan default #
-
- # --- Message Body -----------------------------------------------------
- color quoted blue default # base0D
- color quoted1 cyan default # base0C
- color quoted2 yellow default # base0A
- color quoted3 red default # base08
- color quoted4 magenta default # base0E
- color quoted5 blue default # base0D (cycle repeats)
- color quoted6 cyan default # base0C
- color quoted7 yellow default # base0A
- color quoted8 red default # base08
- color quoted9 magenta default # base0E
-
- color signature green default # 󰛿 base0B
- color bold white default # base05
- color underline white default # base05
-
- # URLs
- color body blue default "([a-z][a-z0-9+-]*://[^ ]+)"
-
- # PGP
- color body green default "(Good signature)" # verified
- color body red default "(BAD signature)" # bad
- color body brightblack default "^gpg: " #
-
- # --- Sidebar (was completely unset despite sidebar.enable = true) -----
- set sidebar_format = " %D%* %?N? %N ?%?F? %F ?"
- color sidebar_background default default # transparent, blends with terminal bg
- color sidebar_divider white default # base03 (matches old tree color)
- color sidebar_ordinary white default # base05 (normal mailbox entries)
- color sidebar_new green default # 󰇮 base0B (mailboxes with new mail)
- color sidebar_flagged red default # base08 (mailboxes with flagged mail)
- color sidebar_spool_file yellow default # 󰇰 base0A (your inbox/spool)
- color sidebar_highlight white brightblack # base05 on base03 (cursor position)
- color sidebar_indicator default brightblack # default on base03 (currently open mailbox)
- '';
-}