diff --git a/config/neomutt/accounts/account.rc b/config/neomutt/accounts/account.rc index 5a36632..b618aa7 100644 --- a/config/neomutt/accounts/account.rc +++ b/config/neomutt/accounts/account.rc @@ -1,10 +1,10 @@ -set sendmail = "/usr/bin/msmtp -a $my_account" +set sendmail = "/usr/bin/msmtp $my_msmtp_conf -a $my_account" set spoolfile = "+$my_account/Inbox" set record = "+$my_account/Sent" set postponed = "+$my_account/Draft" set trash = "+$my_account/Trash" -macro index,pager gs "mbsync $my_account" "IMAP sync account" -macro index,pager gi "mbsync $my_account:Inbox" "IMAP sync Inbox" +macro index,pager gs "mbsync $my_mbsync_conf $my_account" "IMAP sync account" +macro index,pager gi "mbsync $my_mbsync_conf $my_account:Inbox" "IMAP sync Inbox" # vim: syntax=neomuttrc diff --git a/config/neomutt/common.rc b/config/neomutt/common.rc new file mode 100644 index 0000000..6de2b52 --- /dev/null +++ b/config/neomutt/common.rc @@ -0,0 +1,93 @@ +set copy # See also $record +unmailboxes * +source "~/.config/neomutt/mailboxes.sh $folder|" + +# Load external configs +source sidebar.rc +source colors.rc +source gpg.rc +source keys.rc + +# Accounts +source "~/.config/neomutt/folder-hooks.sh $folder|" + +# Basic options +unset wait_key # Only wait if command exited != 0 +set delete # delete messages for real +unset confirmappend # don't ask when adding to a mailbox +set quit #default; exits neomutt +unset move #default; don't move read messages +unset mark_old # don't mark unread mail as old when exiting mailbox +set beep_new # Hope your term bell is set to something sensible :P +unset pipe_decode # decode and weed headers before , urlscan seems to require it unset +set thorough_search #default; decode mail before searching ~b and ~h +set sleep_time = 0 # Speed up folder opening +set change_folder_next # Default to next folder in list +set mail_check = 5 #default; look for new mail every 'n' seconds +set mail_check_stats # Allow mail stats gathering +set mail_check_stats_interval = 10 # Mail stats calc interval + +# Status bar +set status_chars = " *%A" # mailbox unchanged/changed/RO/attach-msg mode +set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───" + +######### +# Index # +######### +set date_format = "%d/%m/%y %H:%M" +set index_format = "[%Z] %D - %-20.20F %s" +set sort = threads +set sort_aux = last-date-received +set uncollapse_jump # Jump to unread when unfolding +set sort_re #default; useful for mailbox sort in sidebar +unset narrow_tree #default; compact thread tree arrows + +######### +# Pager # +######### +set pager_index_lines = 10 # lines aboves the pager +set pager_context = 3 # lines of context around selected msg in index +set pager_stop # don't jump to next msg when scrolling past the end +set menu_scroll # don't skip to next page when reaching bottom +set tilde # pad blank lines with '~' +unset markers # remove '+' on wrapped lines +set smart_wrap #default; wrap at word boundaries +set quote_regex = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" +# Prefer plaintext and process html through mailcap +alternative_order text/plain text/enriched text/html +auto_view text/html +# Prune headers +ignore * +unignore From To Reply-To Cc Bcc Subject Date +unignore Organization X-Label X-Mailer User-Agent + +########### +# Compose # +########### +# https://www.zigg.com/2018/natalie-nguyen.html +my_hdr X-Clacks-Overhead: GNU Natalie Nguyen, Terry Pratchett +set use_from # set a From: header +set use_envelope_from # which from? +set sig_dashes # dashes before sig +set edit_headers # show headers when composing +set fast_reply # skip to compose when replying +set askcc # ask for CC: +set fcc_attach # save attachments with the body +unset mime_forward # forward attachments as part of body +set forward_format = "Fwd: %s" # format of subject when forwarding +set forward_decode # decode when forwarding +set attribution = "On %d, %n wrote:" # format of quoting header +set reply_to # reply to Reply to: field +set reverse_name # reply as whomever it was to +set include # include message in replies +set forward_quote # include message in forwards +set send_charset = utf-8 +set sendmail_wait = 0 # wait for msmtp to finish sending +set abort_noattach = ask-yes # warn for missing attachment +set abort_noattach_regex = "\\<(attach(|ed|ments?)|(attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons))\\>" + +set editor = "vim -c 'set tw=70 et wrap' '+/^$' " + +set mask = ".*" # Which files to match + +# vim: syntax=neomuttrc diff --git a/config/neomutt/folder-hooks.sh b/config/neomutt/folder-hooks.sh index a2a4eda..3c44a95 100755 --- a/config/neomutt/folder-hooks.sh +++ b/config/neomutt/folder-hooks.sh @@ -1,8 +1,8 @@ #!/bin/sh usage() { - echo "$0 " - echo " Generate mutt folder hooks for every maildir account in \$folder" + >&2 echo "$0 " + >&2 echo " Generate mutt folder hooks for every maildir account in \$folder" exit 1 } @@ -14,14 +14,12 @@ acc_dir="$HOME/.config/neomutt/accounts/" mail_dir="$1" # Select default account -default="$(find "$acc_dir" -name "*.mail" -printf "source '%p'\n" -quit)" +#default="$(find "$acc_dir" -name "*.mail" -printf "source '%p'\n" -quit)" -if [ -z "$default" ]; then - >&2 echo "No mail accounts found in $acc_dir" - exit 1 -fi - -printf '%s\n' "$default" +#if [ -z "$default" ]; then +# >&2 echo "No mail accounts found in $acc_dir" +# exit 1 +#fi # Order of the keys to use for the account switch macro chars="1234567890azertyuiopqsdfghjklmwxcvbn" @@ -30,6 +28,12 @@ i=1 # Setup folder hooks for all the accounts for f in "$acc_dir"*.mail; do account="$(basename -s '.mail' "$f")" + if [ ! -d "$mail_dir/$account" ]; then + continue + fi + if [ -z "$default" ]; then + default="source '$f'" + fi inbox="$(find "$mail_dir/$account" -maxdepth 1 -iname "inbox" -type d -printf "%f" -quit)" printf 'folder-hook =%s '\''source %s'\''\n' "$account" "$f" key="$(printf '%s' "$chars" | cut -c "$i")" @@ -37,3 +41,7 @@ for f in "$acc_dir"*.mail; do "$key" "$account" "$inbox" "$account" i=$((i+1)) done + +if [ ! -z "$default" ]; then + printf '%s\n' "$default" +fi diff --git a/config/neomutt/keys.rc b/config/neomutt/keys.rc index 52ffd03..30b929d 100644 --- a/config/neomutt/keys.rc +++ b/config/neomutt/keys.rc @@ -6,6 +6,7 @@ bind index,pager \Cu half-up bind index,pager \Cd half-down bind index,pager g noop # required to define multikeys binds bind index,pager sync-mailbox +macro index,pager ga "mailsync" "Sync all IMAP mailboxes" ########### # SIDEBAR # @@ -51,6 +52,8 @@ bind pager R group-reply bind pager gh display-toggle-weed bind pager ge extract-keys +macro pager gu " urlscan " + ########## # ATTACH # ########## diff --git a/config/neomutt/mailboxes.sh b/config/neomutt/mailboxes.sh index ec26d21..72892bc 100755 --- a/config/neomutt/mailboxes.sh +++ b/config/neomutt/mailboxes.sh @@ -1,8 +1,8 @@ #!/bin/sh usage() { - echo "$0 " - echo " Generate neomutt mailboxes & named-mailboxes for every maildir in \$folder" + >&2 echo "$0 " + >&2 echo " Generate neomutt mailboxes & named-mailboxes for every maildir in \$folder" exit 1 } diff --git a/config/neomutt/neomuttrc b/config/neomutt/neomuttrc index 19f13d3..738d0e9 100644 --- a/config/neomutt/neomuttrc +++ b/config/neomutt/neomuttrc @@ -1,94 +1,13 @@ -# Maildir setup +# Default config set mbox_type = Maildir -set copy # See also $record (f*ckin recursion) set folder = "~/mail" -unmailboxes * -source "~/.config/neomutt/mailboxes.sh $folder|" +set my_msmtp_conf = "" # Leave empty for default +set my_mbsync_conf = "" # Leave empty for default +source common.rc -# Load external configs -source sidebar.rc -source colors.rc -source gpg.rc -source keys.rc - -# Accounts -source "~/.config/neomutt/folder-hooks.sh $folder|" - -# Basic options -unset wait_key # Only wait if command exited != 0 -set delete # delete messages for real -unset confirmappend # don't ask when adding to a mailbox -set quit #default; exits neomutt -unset move #default; don't move read messages -unset mark_old # don't mark unread mail as old when exiting mailbox -set beep_new # Hope your term bell is set to something sensible :P -set pipe_decode # decode and weed headers before -set thorough_search #default; decode mail before searching ~b and ~h -set sleep_time = 0 # Speed up folder opening -set change_folder_next # Default to next folder in list -set mail_check = 5 #default; look for new mail every 'n' seconds -set mail_check_stats # Allow mail stats gathering -set mail_check_stats_interval = 10 # Mail stats calc interval - -# Status bar -set status_chars = " *%A" # mailbox unchanged/changed/RO/attach-msg mode -set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───" - -######### -# Index # -######### -set date_format = "%d/%m/%y %H:%M" -set index_format = "[%Z] %D - %-20.20F %s" -set sort = threads -set sort_aux = last-date-received -set uncollapse_jump # Jump to unread when unfolding -set sort_re #default; useful for mailbox sort in sidebar -unset narrow_tree #default; compact thread tree arrows - -######### -# Pager # -######### -set pager_index_lines = 10 # lines aboves the pager -set pager_context = 3 # lines of context around selected msg in index -set pager_stop # don't jump to next msg when scrolling past the end -set menu_scroll # don't skip to next page when reaching bottom -set tilde # pad blank lines with '~' -unset markers # remove '+' on wrapped lines -set smart_wrap #default; wrap at word boundaries -set quote_regex = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" -# Prefer plaintext and process html through mailcap -alternative_order text/plain text/enriched text/html -auto_view text/html -# Prune headers -ignore * -unignore From To Reply-To Cc Bcc Subject Date -unignore Organization X-Label X-Mailer User-Agent - -########### -# Compose # -########### -# https://www.zigg.com/2018/natalie-nguyen.html -my_hdr X-Clacks-Overhead: GNU Natalie Nguyen, Terry Pratchett -set use_from # set a From: header -set use_envelope_from # which from? -set sig_dashes # dashes before sig -set edit_headers # show headers when composing -set fast_reply # skip to compose when replying -set askcc # ask for CC: -set fcc_attach # save attachments with the body -unset mime_forward # forward attachments as part of body -set forward_format = "Fwd: %s" # format of subject when forwarding -set forward_decode # decode when forwarding -set attribution = "On %d, %n wrote:" # format of quoting header -set reply_to # reply to Reply to: field -set reverse_name # reply as whomever it was to -set include # include message in replies -set forward_quote # include message in forwards -set send_charset = utf-8 -set sendmail_wait = 0 # wait for msmtp to finish sending -set abort_noattach = ask-yes # warn for missing attachment -set abort_noattach_regex = "\\<(attach(|ed|ments?)|(attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons))\\>" - -set editor = "vim -c 'set tw=70 et wrap' '+/^$' " - -set mask = ".*" # Which files to match +# Override sidebar_new_mail_only +# Move back to sidebar.rc once the issue is resolved +# https://github.com/neomutt/neomutt/issues/2208 +sidebar_whitelist `find $folder -mindepth 1 -maxdepth 1 -type d ! -name cur ! -name tmp ! -name new ! -name .notmuch -printf '"%f"\0' | xargs -0` +sidebar_whitelist `find $folder -mindepth 1 -maxdepth 1 -type d ! -name cur ! -name tmp ! -name new ! -name .notmuch -printf '"%p"\0' | xargs -0` +sidebar_whitelist `find ~/mail -mindepth 1 -type d -iname inbox -printf '"%p"\0' | xargs -0` diff --git a/config/neomutt/sidebar.rc b/config/neomutt/sidebar.rc index ed52bd5..c4db799 100644 --- a/config/neomutt/sidebar.rc +++ b/config/neomutt/sidebar.rc @@ -12,8 +12,5 @@ set sidebar_new_mail_only # Only display mailbox with new/flagged mail unset sidebar_next_new_wrap # wrap to beginning unset sidebar_on_right # keep bar on the left set sidebar_sort_method = 'path' # sort by mailbox path alphabetically -# Override sidebar_new_mail_only -sidebar_whitelist `find ~/mail -mindepth 1 -maxdepth 1 -type d ! -name cur ! -name tmp ! -name new ! -name .notmuch -printf '"%p"\0' | xargs -0` -sidebar_whitelist `find ~/mail -mindepth 1 -type d -iname inbox -printf '"%p"\0' | xargs -0` # vim: syntax=neomuttrc diff --git a/config/neomutt/work.rc b/config/neomutt/work.rc new file mode 100644 index 0000000..ee41625 --- /dev/null +++ b/config/neomutt/work.rc @@ -0,0 +1,14 @@ +# Work config +set mbox_type = Maildir +set folder = "~/work/mail" +set my_msmtp_conf = "-C $folder/msmtprc" # Leave empty for default +set my_mbsync_conf = "-c $folder/mbsyncrc" # Leave empty for default +source common.rc + +# Override sidebar_new_mail_only +# Move back to sidebar.rc once the issue is resolved +# https://github.com/neomutt/neomutt/issues/2208 +sidebar_whitelist `find ~/work/mail -mindepth 1 -maxdepth 1 -type d ! -name cur ! -name tmp ! -name new ! -name .notmuch -printf '"%p"\0' | xargs -0` +sidebar_whitelist `find ~/work/mail -mindepth 1 -type d -iname inbox -printf '"%p"\0' | xargs -0` + +# vim: syntax=neomuttrc