This commit is contained in:
Henrik Bakken
2025-05-17 02:21:18 +02:00
parent 8bab83a7c9
commit c287391ead
10 changed files with 721 additions and 2 deletions
+399
View File
@@ -0,0 +1,399 @@
source "~/.config/neomutt/unbindrc"
# cache
set header_cache = ~/.cache/mutt
set message_cachedir = "~/.cache/mutt"
set mailcap_path = $HOME/.config/neomutt/mailcap
set rfc2047_parameters = yes
set check_mbox_size = yes
set new_mail_command = "notify-send 'New Email'"
set imap_check_subscribed
#------------------------------------------------------------
# Accounts
#------------------------------------------------------------
source "~/.config/neomutt/henrik@hjarl.com"
# macro index,pager i1 '<sync-mailbox><enter-command>source $HOME/.config/neomutt/REPLACEME<enter><change-folder>!<enter>;<check-stats>' "switch to REPLACEME"
#------------------------------------------------------------
# Settings
#------------------------------------------------------------
#### General Settings
set smtp_authenticators = 'gssapi:login'
unset help
set sleep_time = 0 # Pause 0 seconds for informational messages
set pager_read_delay = 3 # View a message for 3 seconds to mark as read
set mark_old = no # Unread mail stay unread until read
set mime_forward = no # attachments are forwarded with mail
set wait_key = no # mutt won't ask "press key to continue"
set fast_reply # skip to compose when replying
set fcc_attach # save attachments with the body
set forward_format = "Fwd: %s" # format of subject when forwarding
set forward_quote # quote forwarded message
set reverse_name # reply as whomever it was to
set reverse_realname = yes # use any real name provided when replying
set auto_tag # automatically apply commands to all tagged messages (if some messages are tagged)
set include # include message in replies
set delete # messages marked for deleting will automatically be purged without prompting
set quit
set mail_check = 5 # to avoid lags using IMAP with some email providers (yahoo for example)
set timeout = 3 # how long to wait after user input until unblocking background stuff like mail syncing
set count_alternatives = yes # recurse into text/multipart when looking for attachement types
set thorough_search = no # don't process mail (via mailcap etc) before parsing with queries like ~B
set flag_safe # flagged messages can't be deleted
#### Header Options
ignore * # ignore all headers
unignore to: cc: # ..then selectively show only these headers
unhdr_order * # some distros order things by default
hdr_order from: to: cc: date: subject: # header item ordering
#### View Settings
set allow_ansi # allow ansi escape codes (e.g. colors)
set pager_index_lines = 10 # number of index lines to show
set pager_context = 3 # number of context lines to show
set pager_stop # don't go to next message automatically
set menu_scroll # scroll in menus
set smart_wrap # wrap lines at word boundaries rather than splitting up words
set wrap = 90 # email view width
set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"
# Tidy up emails significantly
set display_filter="perl -0777pe 's/___{10,}[^_]*microsoft teams meeting.*to join the meeting<([^>]*).*(___{10,})/\\n────────────────────────────────────────────────────────────────────────\\n\\nTeams Meeting ~~\\n\\nMeeting URL:\\n$1\\n\\n────────────────────────────────────────────────────────────────────────/is'| sed 's/^\\(To\\|CC\\): \\([^<]*[^>]\\)$/\\1\:<\\2>/g' | perl -0777pe 's/(((?!.*CC:)To:|CC:).+?(?=>\\n)>)/$1!REMOVE_ME!\\n!END!/gs' | sed '/^To:/{;:l N;/!END!/b; s/\\(\\n\\| *\\|\\t\\t*\\)/ /g; bl}' | sed '/^To:/,/>$/ s/\\([^>]*>,\\?\\)/\\1\\n/g' | sed -e 's/^ \\(CC:\\)\\(.*$\\)/\\1\\n\\2/' -e 's/^\\(To:\\)\\(.*$\\)/\\1 --------------------------------------------------------------------\\n\\2/' -e 's/^!END!$/------------------------------------------------------------------------/' -e '/!REMOVE_ME!/d' -e '/\\[-- Type: text.* --\\]/d' -e '/\\[-- Autoview.* --\\]/d' -e '/\\[-- Type.* --\\]/d' -e '/\\[-- .*unsupported.* --\\]/d' -e '/\\[-- Attachment #[0-9] --\\]/d' -e 's/Attachment #[0-9]: //g' -e '/./,/^$/!d' -e 's/\\([A-Z]*\\), *\\([A-Za-z]*\\)\\(\"\\)\\?/\\2 \\L\\u\\1\\E\\3/g'"
#### Notmuch Config
set nm_query_type = threads # bring in the whole thread instead of just the matched message, really useful
set nm_default_url = "notmuch:///$HOME/.local/share/mail" # default notmuch URL
set nm_record_tags = "sent" # default 'sent' tag
set virtual_spoolfile = yes # allow using virtual mailboxes as spoolfile
macro index \Cg "<enter-command>unset wait_key<enter><shell-escape>read -p 'Enter a search: ' x; echo \$x >~/.cache/mutt_terms<enter><change-folder>All Accounts<enter><limit>~i \"\`notmuch --config ~/.config/notmuch/notmuchrc search --output=messages \$(/bin/cat ~/.cache/mutt_terms) | head -n 1000 | perl -le '@a=<>;chomp@a;s/\^id:// for@a;$,=\"|\";print@a' | sed 's/id://g' \`\"<enter>" "Search all mailboxes in all accounts (Global search)"
#### Content/Autoview
auto_view application/ics
auto_view text/calendar
auto_view text/plain
auto_view text/html
auto_view application/pgp-encrypted
alternative_order text/calendar application/ics text/plain text/enriched text/html
#### Sidebar Config
set sidebar_divider_char = '│'
set sidebar_folder_indent = yes
set sidebar_indent_string = ' - '
set sidebar_non_empty_mailbox_only = yes
set sidebar_visible = no
set sidebar_width = 50
set sidebar_next_new_wrap = yes
set sidebar_short_path = yes
set sidebar_component_depth = 0
set sidebar_sort = "path"
#### Thread ordering
set use_threads=threads
set sort=last-date
set sort_aux=date
set collapse_all = yes
set uncollapse_new = no
set thread_received = yes
set narrow_tree = no
#### Lists
set auto_subscribe
### Sounds
set beep = no # don't beep for errors
set beep_new # beep for new messages
#### Text editor
set edit_headers = yes
set autoedit = yes
set editor="~/.local/bin/mutt-trim %s; nvim +':set textwidth=72' +':set wrapmargin=0' +':set wrap' +':set spell' %s"
#### Markdown to html email conversion
macro compose M "F pandoc -s -f markdown -t html \ny^T^Utext/html; charset=UTF-8\n" "Convert from MD to HTML"
#### Show patch files (requires git-split-diffs)
macro attach P "|git-split-diffs --color | less -RF<enter>" "View a patch file as a diff"
set wait_key = no
#------------------------------------------------------------
# Bind
#------------------------------------------------------------
# General Navigation
bind index <Left> collapse-thread
bind index <Right> collapse-thread
bind index h collapse-thread
bind index l collapse-thread
bind index + link-threads
bind index zz current-middle
bind index zt current-top
bind index zb current-bottom
bind index \\ limit
macro index <return> "<display-message>\n<skip-headers>\n"
macro index \# "<edit-label>\n" "Mark as Complete"
macro index x "<limit>all\n" "show all messages (undo limit)"
macro index \ci "<limit>~F\n" "Limit by flagged"
bind attach <return> view-mailcap
bind browser gg top-page
bind browser G bottom-page
bind pager j next-line
bind pager k previous-line
bind pager <Down> next-line
bind pager <Up> previous-line
bind pager G bottom
bind pager gg top
macro pager J "<next-entry>\n<skip-headers>\n"
macro pager K "<previous-entry>\n<skip-headers>\n"
bind index,pager f change-folder
bind index,pager \Cu half-up
bind index,pager \Cd half-down
bind index,pager \Cb sidebar-toggle-visible
bind index,pager \Cj sidebar-next
bind index,pager \Ck sidebar-prev
bind index,pager \Co sidebar-open
bind index,pager \Cn next-unread
bind index,pager \Cp previous-unread
bind index,pager H view-raw-message
bind index,pager v view-attachments
bind index,pager | pipe-message
bind browser,query <return> select-entry
bind index,attach,browser,query G last-entry
bind index,attach,browser,query gg first-entry
bind index,attach,browser,query j next-entry
bind index,attach,browser,query k previous-entry
bind index,attach,browser,query <Down> next-entry
bind index,attach,browser,query <Up> previous-entry
bind index,pager,attach,browser,query,alias,compose q exit
# Mail manipulation from index list
bind index t tag-entry
bind index T tag-thread
bind index <space> flag-message
bind index u undelete-message
bind index U undelete-thread
bind index,pager d delete-message
bind index,pager L edit-label
# Compose, Replies and Forwarding
bind index,pager c mail # compose message
bind index,pager \Cr recall-message # (from drafts)
bind index,pager r reply
bind index,pager R group-reply
bind index,pager F forward-message
# Compose screen options
bind compose y send-message
bind compose a attach-file
bind compose p postpone-message
bind compose e edit-message
bind compose t edit-to
bind compose f edit-from
bind compose s edit-subject
bind compose c edit-cc
bind compose b edit-bcc
bind compose r rename-file
bind compose F filter-entry
bind compose \Ct edit-type
bind compose \Ck move-up
bind compose \Cj move-down
bind compose <return> view-attach
bind attach,compose | pipe-entry
# Commands and Misc
bind index,pager $ sync-mailbox # more like a refresh than a sync
bind editor <Tab> complete-query
bind index,pager n search-next
bind index,pager N search-opposite
bind index,pager p search-opposite
bind index,pager,attach,editor,compose <F5> refresh
macro index,pager \cl '<pipe-message>urlscan -d -w 80<enter>' "call urlscan to open links"
macro index O "<shell-escape>mbsync -a -c $HOME/.config/isync/mbsyncrc<enter>" "run mbsync to sync all mail"
macro attach s '<save-entry><kill-line>~/Downloads/<enter>a' "Save file to ~/Downloads"
macro browser h '<change-dir><kill-line>..<enter>' "Go to parent folder"
macro index \Ca "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
macro attach,compose \cl "<pipe-entry> urlscan -d -w 80<Enter>" "call urlscan to extract URLs out of a message"
set abort_key = "<Esc>"
# copy / move messages
macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
#------------------------------------------------------------
# Colors
#------------------------------------------------------------
# Nerd icons idea based on https://github.com/sheoak/neomutt-powerline-nerdfonts/
# Dracula colors based on Dracula Theme by Paul Townsend <paul@caprica.org>
# Formatting ----------------------------------------------------------------------
set date_format = "%a %d %h %H:%M"
set index_format=" %zc %zs %zt | %-35.35L %@attachment_info@ ?%-30.100s %> %?Y?%Y ? %(!%a %d %h %H:%M) "
set pager_format="%n %T %s%*  %{!%d %b · %H:%M} %?X? %X?%P"
set status_format = " %D %?u? %u ?%?R? %R ?%?d? %d ?%?t? %t ?%?F? %F ?%?p? %p? \n \n"
set compose_format="-- NeoMutt: Compose [Approx. msg size: %l Atts: %a]%>-"
set sidebar_format = '%B%?F? [%F]?%* %?N?%N/? %?S?%S?'
index-format-hook attachment_info '=B text/calendar ~X 1' ' '
index-format-hook attachment_info '=B text/calendar' " "
index-format-hook attachment_info '~X 1' " "
index-format-hook attachment_info '~A' " "
# General Colors ------------------------------------------------------------------
color normal default default # general text
color error color231 color212 # error messages
color message default default # messages at the bottom
color prompt default default # prompt text
color search black color10 # search highlight
# Statusbar Colors ----------------------------------------------------------------
color status color141 default
color status color7 color8 '([a-zA-Z0-9\.,]|\[|\])(\s)' # bubble content 1
color status color7 color8 '(\s)([a-zA-Z0-9\.,]|\[|\])' # bubble content 2
color status color7 color8 '(\% )' # % symbol
color status color7 color8 '(\S)' # empty spaces
color status color8 default '(|)' # statusline "bubbles"
color status color69 black '(\` )' # bubble account variation
color status white color69 '([a-zA-Z0-9\.]+)()' # account text
color status green color8 '' # Unread messages count
color status blue color8 '' # Read messages count icon
color status yellow color8 '' # Flagged icon
color status red color8 '' # Pending delete icon
# Index Colors --------------------------------------------------------------------
color index color15 default '~N' # new messages
color index color8 default '~R' # read messages
color index color8 default '~Q' # messages which have been replied to
color index_collapsed color4 default # collapsed thread (message count text)
color index color5 default '!~Q^~p' # sent only to me and haven't been replied to
color index color22 default '~h X-Label..' # messages with a complete label
color index color6 default '~F' # flagged messages
color index color6 default '~F~N' # flagged messages (new)
color index color14 default '~F~R' # flagged messages (read)
color index color1 default '~D' # deleted messages
color index color1 default '~D~N' # deleted messages (new)
color index color9 default '~D~R' # deleted messages (read)
color index color3 default '~T' # tagged messages
color index color3 default '~T~N' # tagged messages (new)
color index color11 default '~T~R' # tagged messages (read)
color tree color8 color8 # thread tree lines/arrow
color indicator default color8 # selection indicator
color index_date color8 default # date is always the same colour
color index_label color6 default # label is always the same colour
# Sidebar Colors ------------------------------------------------------------------
color sidebar_indicator color14 black # currently selected mailbox
color sidebar_highlight white color8 # highlighted, but not open, mailbox.
color sidebar_ordinary color8 default # Color to give mailboxes by default
color sidebar_divider color8 black # divider between sidebar & content
color sidebar_flagged red black # mailboxes containing flagged mail
color sidebar_new green black # mailboxes containing new mail
color sidebar_unread color7 default # mailboxes containing unread mail
color sidebar_unread color7 default # mailboxes containing unread mail
# Message Headers -----------------------------------------------------------------
color hdrdefault color8 default
# Message Body --------------------------------------------------------------------
# Attachments
color attachment color8 default
# Signature
color signature color8 default
# emails
# color body color14 default '[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+'
# hide "mailto"
color body color0 color0 '<mailto:[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+>'
# URLs
color body color3 default '(https?|ftp)://[-\.,/%~_:?&=\#a-zA-Z0-9\+]+'
# Dividers
color body color8 default '(^[-_]*$)'
# Important info in calendar invites
color body color6 default '^(Date\/Time|Location|Organiser|Invitees|Teams Meeting)(:| \~\~)'
# Quotes
color quoted color61 default
color quoted1 color117 default
color quoted2 color84 default
color quoted3 color215 default
color quoted4 color212 default
# Forward/reply headers
color body color8 default '(^(To|From|Sent|Subject):.*)'
# Patch syntax highlighting
color body brightwhite default '^[[:space:]].*'
color body yellow default ^(diff).*
color body white default ^[\-\-\-].*
color body white default ^[\+\+\+].*
color body green default ^[\+].*
color body red default ^[\-].*
color body brightblue default [@@].*
color body cyan default ^(Signed-off-by).*
color body brightwhite default ^(Cc)
color body yellow default "^diff \-.*"
color body brightwhite default "^index [a-f0-9].*"
color body brightblue default "^---$"
color body white default "^\-\-\- .*"
color body white default "^[\+]{3} .*"
color body green default "^[\+][^\+]+.*"
color body red default "^\-[^\-]+.*"
color body brightblue default "^@@ .*"
color body green default "LGTM"
color body brightmagenta default "-- Commit Summary --"
color body brightmagenta default "-- File Changes --"
color body brightmagenta default "-- Patch Links --"
color body green default "^Merged #.*"
color body red default "^Closed #.*"
color body brightblue default "^Reply to this email.*"
# Misc -----------------------------------------------------------------------------
# no addressed to me, to me, group, cc, sent by me, mailing list
set to_chars=" "
# unchanged mailbox, changed, read only, attach mode
set status_chars = " "
ifdef crypt_chars set crypt_chars = " "
set flag_chars = " "
# hide some tags
set hidden_tags = "unread,draft,flagged,passed,replied,attachment,signed,encrypted"
tag-transforms "replied" "↻ " \
"encrytpted" "" \
"signed" "" \
"attachment" "" \
# The formats must start with 'G' and the entire sequence is case sensitive.
tag-formats "replied" "GR" \
"encrypted" "GE" \
"signed" "GS" \
"attachment" "GA" \
# don't put '+' at the beginning of wrapped lines
set markers = no