From: martin f. krafft Date: Tue, 22 Aug 2023 11:01:20 +0000 (+1200) Subject: import of config from mutt X-Git-Url: https://git.madduck.net/etc/neomutt.git/commitdiff_plain/4aa48dd515a5b14c67c301bf9f2555e7644ea6ea?hp=a6ac44586209b9b0be5add1bef270451f3dcb677 import of config from mutt --- diff --git a/.config/neomutt/__pycache__/buildmimetree.cpython-311-pytest-7.4.0.pyc b/.config/neomutt/__pycache__/buildmimetree.cpython-311-pytest-7.4.0.pyc new file mode 100644 index 0000000..0df1cec Binary files /dev/null and b/.config/neomutt/__pycache__/buildmimetree.cpython-311-pytest-7.4.0.pyc differ diff --git a/.config/neomutt/ack-recipients b/.config/neomutt/ack-recipients new file mode 100644 index 0000000..f3a4275 --- /dev/null +++ b/.config/neomutt/ack-recipients @@ -0,0 +1,23 @@ +# ~/.config/neomutt/ack-recipients +# +# This file stores sha256sums of lower-cased e-mail addresses (no newline) +# instead of the addresses themselves as a measure to protect privacy. You can +# get new lines like this: +# +# printf my.new@e-mail.addre.ss | tr [[:upper:]] [[:lower:]] \ +# | sha256sum | sed -e 's, .*,,' +# +8e31c9e140910b4d3a44a014ca968b858f0909d26633a0d0814082381946d596 +af52810da7583e744c8613b34b95c3121c3fdabc4bd0b71618e1b7d250ffd42b +f3839e4359797b49add476bdda1645441ad453f5fded8ce33afb7e3b7a6e47f8 +0ffa31c9a82edc0a0e342ec7f6e656de555941b56a398c00a3531a1553f4df42 +58291f6dee0af784ea87ad76b74f48208721fa0b210a48c333bde3560ca00545 +11b39707dcafbd3410d79dff68d0635b7de820f1be6515d859214c4504e0a829 +7f4fad89b42b5690f57512e9ae88b1049777e3059a4b6a159fae67885ac5da15 +4522c6357736f50bc68fe87bd602176f730926019a9c72c6eafa96d3b3bdf37c +0aec1a9b0ca4a181aac6f85cd3f5e628c4da3a15aa40518ca7ccf5311fd4bbeb +d76070145d21ec707f12b834c24aee6ec35c628b636d6e1606172c65a373b0e3 +07979ca17b8706b2c3fbfb744dad1d057d098aa3be0e2b325fe6e4024b310d29 +3d66a23f23b70f1838369c8292cddc3a50e5ebb6ae3cb41a6c2ef8354a913814 +615aa8482f524f9c66696ebd4bb5bb7836e2819c63313be2c067a4f9a0d546cc +b92544617b44d0058ac3bbb01dad4fed076f1c926edce41d02bbd60e0a110cdd diff --git a/.config/neomutt/aliases b/.config/neomutt/aliases new file mode 100644 index 0000000..2ac2f57 --- /dev/null +++ b/.config/neomutt/aliases @@ -0,0 +1,178 @@ +alias daddy Dr. Hartmut Krafft +alias ruth Ruth Krafft +alias tombo Thomas Krafft +alias andy Andreas Krafft +alias brüder tombo andy +alias eltern daddy ruth +alias familie eltern brüder + +alias penny Penny Krafft + +alias pius Prof. Dr. Pius Baschera + +alias lesser Andreas Lesser + +alias wiedemann Prof. Dr. Andreas Wiedemann + +alias alex Alexander Grüter + +alias wolfgruber Dr. Matthias Wolfgruber +alias meyrat Marco Meyrat +alias fd Nicola Fortmann-Drühe +alias krauch Dr. Tilman Krauch +alias fd Nicola Fortmann-Drühe +alias beirat fd wolfgruber krauch meyrat + +alias eslam Mark Eslamlooy +alias eslam1 Mark Eslamlooy + +alias distler Renate Distler + +alias wirtz Markus Wirtz + +alias pohlmann Peter Pohlmann +alias kohorst Stephan Kohorst +alias burmester Dr. Helmut Burmester +alias bästlein Dr. Hanno Bästlein +alias iwu pohlmann kohorst burmester bästlein + +alias weg WEG Hanfstaenglstrasse 15/17 +alias wegbr WEG-Beirat Hanfstaenglstrasse 15/17 + +alias freya Freya Oehle +alias tobi Tobias Kempkensteffen +alias stroeher Jan-Hendrik Ströher +alias forum Roland Hradek +alias saule Sabrina Saule +alias spottster-gv freya tobi stroeher forum saule + +alias mario Mario Witte +alias zeifang Nico Zeifang +alias wiegard Stefan Wiegard +alias ri mario zeifang wiegard + +alias moe Maximilian Möhring +alias mang Simon Mang +alias jonathan Jonathan Berroth +alias keyp moe mang jonathan +alias rahul Rahul Watson Govindan +alias harry Harry Strasser +alias chenxi Chenxi Wang +alias freddy Freddy Dezeure +alias keyp-board rahul harry chenxi + +alias fabian Fabian Eckert +alias florian Florian Pachaly +alias christian Christian Vilsmaier +alias iris Iris Vilsmaier +alias chicco Christian Kohlhof , Ralf Meyer +alias recup fabian florian steffen christian iris chicco + +## FAMILY-ELGER +#alias ini christine wenninger +#alias bigi brigitte wenninger +#alias bernie bernward wenninger +#alias kathi-privat katharina wenninger +#alias kathi-compuware katharina wenninger +#alias kathi kathi-privat +#alias peti petra wenninger +#alias karsten karsten beckmann +#alias ingo ingo ludwig +#alias isabelelger isabel elger +#alias wenninger ini bigi bernie kathi peti karsten +# +## FAMILY-KRAFFT +#alias uwe uwe soltesz +#alias stefan stefan soltesz +#alias ulli ulli soltesz +#alias till till soltesz +#alias juergenwaage juergen waage +#alias ecki eckart waage +#alias gerrit gerrit waage +#alias gert gert soltesz +#alias inga inga soltesz +#alias soltesz uwe stefan ulli till +#alias waage ecki juergenwaage gerrit + +# LISTS +alias slug slug +alias debian-user debian users +alias debian-project debian project list +alias debian-devel debian developers +alias debian-mentors debian mentors +alias debian-curiosa debian curiosa list +alias debian-firewall debian firewall list +alias debian-ipv6 debian ipv6 +alias debian-isp debian isp list +alias debian-events debian events +alias debian-events-eu debian events in europe +alias debian-muc muenchner debianers +alias debian-ch swiss debian community +alias debian-vote debian vote list +alias debian-private debian private list +alias debian-books debian books +alias debian-release debian release team +alias debian-research debian research discussions +alias mutt-users mutt users +alias mutt mutt-users +alias postfix-users postfix users +alias postfix postfix-users +alias cypherpunks cypherpunks +alias buffy buffy developers list +alias netconf netconf developers list +alias debconf-discuss debconf discussion list +alias debconf-team debconf team list +alias dc-team debconf-team +alias debconf debconf-discuss +alias debconf-sponsors-team debconf sponsorship team list +alias dc-sponsors debconf-sponsors-team +alias dc15-team dc15 team discussion list +alias dc15 dc15 team mailbox +alias dc16-team dc16 team discussion list +alias dc16 dc16-team +alias debconf-kids debconf kids mailing list +alias dc-kids debconf-kids +alias vim vim help list +alias dovecot dovecot mailing list +alias vcs-home home in vcs discussion list +alias vcs-pkg vcs distro packaging discussion list +alias offlineimap offlineimap list +alias mailtags mailtags discussion list +alias asterisk asterisk users mailing list +alias unbound unbound users list +alias foo foo camp discussion list +alias rsyslog rsyslog list +alias salt salt users list +alias ansible ansible project list +alias libvirt libvirt users list +alias vmm vmm users list +alias osmand osm android users list +alias libreoffice libreoffice users list +alias lkml linux kernel mailing list +alias django django users list +alias django-devel django developers list +alias openssh OpenSSH development mailing list +alias unison unison users lists +alias unison-hackers unison hackers lists +alias sogo sogo users list +alias systemd systemd devel list +alias odoo odoo community discussion list +alias munin-users munin users list +alias awesome awesome window manager list +alias fsfe.de FSFE Koordinationsliste Deutschland +alias zsh-users zsh users list +alias zsh-workers zsh workers list +alias zsh-devel zsh-workers +alias gnupg-users gnupg users list +alias gpg gnupg-users +alias gnupg gnupg-users +alias ccc-muc µC3 talk Liste +alias lca lca chat list +alias openedu-parents OpenEDU parents list +alias stafford Stafford & Port Streets neighbourhood +alias tigervnc-users TigerVNC users list +alias netfilter netfilter users list + +alias btsc Debian bug tracker control bot + +# vim:tw=0:ft=muttrc diff --git a/.config/neomutt/alternates b/.config/neomutt/alternates new file mode 100644 index 0000000..c703ba7 --- /dev/null +++ b/.config/neomutt/alternates @@ -0,0 +1,37 @@ +alternates 'madduck(\+.+)?@(.+\.)*madduck\.net' +alternates (noc|abuse)@madduck\.net +alternates madduck@debian\.(org|ch|net) +alternates (madduck|accounting)@debconf\.org +alternates madduck@(.+\.)?sccs\.swarthmore\.edu +alternates krafft@ifi\.u(ni)?zh\.ch +alternates krafft@ailab\.ch +alternates m(artin.)?krafft@sudetia\.de +alternates mkrafft@aerasec\.de +alternates .+@(pobox|usenet)\.madduck\.net +alternates (madduck|changes|errata|feedback|contact|info)@debian-?(system|book)\.info +alternates .+@martin-krafft\..+ +alternates martin\.krafft@(lero|(staffmail\.)?ul)\.ie +alternates .+@pantsfullofunix\.net +alternates .+@limerence\.org +alternates .+@belligerence\.net +alternates ma(rtin|dduck)@alpinflegel\.de +alternates ma(rtin|dduck)@krafftwerk\..+ +alternates k(bk|gf)g@krafftwerk\.de +alternates martin@krafft\.(de|ch|ie) +alternates comments\+.+@blog\.madduck\.net +alternates .+@hanfstaenglstrasse\.de +alternates martin\.krafft@uni-wh\.de +alternates martin\.krafft@mtfk\.(org|de) +alternates madduck@fsfe\.org +alternates martin\.krafft@teckids\.org +alternates .+@tahi-ventures\.(cc|ch|com|de|eu|info|net|org) +alternates .+@tahi\.(vc|cc|kiwi\.nz|ventures) +alternates .+@grounded.ventures +alternates .+@portfolio\.tahi\.v(c|entures) +alternates m@rtin\.kiwi +alternates .+@(.+\.)?nymphenburg-squash\.de +#alternates .+@(rw|int|home)\.madduck\.net +alternates .+@penny[au]ndmartin\.net +alternates martin\.krafft@toni(\.immo|-kg\.de) + +# vim:ft=muttrc diff --git a/.config/neomutt/append-header b/.config/neomutt/append-header new file mode 100755 index 0000000..ab7444b --- /dev/null +++ b/.config/neomutt/append-header @@ -0,0 +1,75 @@ +#!/bin/sh +# +# edit-header - helper script to append/replace/remove headers with mutt +# +# Based on an idea by David Champion +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +if [ ! -x "$(command -v formail)" ]; then + echo E: formail not installed. >&2 + exit 1 +fi + +header="${1:-}" +if [ -z "$header" ]; then + echo "E: no header specified" >&2 + exit 1 +fi + +get_header_contents() +{ + local contents + printf "Enter ${1:-header} contents: " >/dev/tty + read contents &2 + exit 1 + ;; + +esac + +echo "set my_editor=\"\$editor\"" +echo "set my_filter=\"$editor\"" +echo -n "push '" +echo -n "set editor=\"\$my_filter\"" +echo -n "" +echo -n "set editor=\"\$my_editor\"" +echo -n "unset my_filter" +echo -n "unset my_editor" +echo "'" diff --git a/.config/neomutt/batch-subject-editor b/.config/neomutt/batch-subject-editor new file mode 100755 index 0000000..0649ac5 --- /dev/null +++ b/.config/neomutt/batch-subject-editor @@ -0,0 +1,32 @@ +#!/bin/sh +# +# batch-subject-editor - helper script to change subject lines with mutt +# +# Based on an idea by David Champion +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +if [ -z "${__RLWRAPPED:-}" ] && [ -x $(command -v rlwrap) ]; then + __RLWRAPPED=true exec rlwrap "$0" "$@" +fi + +printf 'Enter new subject: ' >/dev/tty +read subj &2 + exit 1 +fi + +SED_DELIM=, +subj=$(echo "$subj" | sed -re "s${SED_DELIM}\\\&g") + +RE_REPLY='((re|aw|antwort)([[(]?[[:digit:]]+[)]]?)?):[[:space:]]*' +RE_SUBJ_PREFIX="^Subject:[[:space:]]*(${RE_REPLY})*" +RE_SUBJ='.*' +EDITOR="sed -i -re \"s${SED_DELIM}(${RE_SUBJ_PREFIX})${RE_SUBJ}${SED_DELIM}\\\1$subj${SED_DELIM}i\"" + +printf "set editor='${EDITOR} %s'" diff --git a/.config/neomutt/bgrun b/.config/neomutt/bgrun new file mode 100755 index 0000000..37f40ad --- /dev/null +++ b/.config/neomutt/bgrun @@ -0,0 +1,180 @@ +#!/bin/sh + +#exec 2>> /tmp/bgrun.stderr +#set -x + +SELF="${0##*/}" + +TEMPDIR= +TEMPRUNDIR=.tempdir-run.d +cleanup() { + if [ -d $TEMPRUNDIR ]; then + local TEMPDIR; TEMPDIR="$PWD" + notify_output + cd / + rm -rf "$TEMPDIR" + fi + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +} +trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +enter_tempdir() { + if [ -d $TEMPRUNDIR ]; then + return + + else + if [ -z "${TMPDIR:-}" ]; then + TMPDIR=/tmp + fi + for i in $LOGNAME volatile; do + if [ -d "${TMPDIR}/$i" ]; then + TMPDIR="${TMPDIR}/$i" + break + fi + done + cd $(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) + mkdir $TEMPRUNDIR + fi +} + +notify() { + if [ -x "$(command -v awesome-client)" ]; then + local stdout stderr escaped output + stdout="${2:-}" + stderr="${3:-}" + for i in stdout stderr; do + if eval test -s $TEMPRUNDIR/output.$i; then + escaped=$(eval sed -e 's,\",\\\",g' $TEMPRUNDIR/output.$i) + output="${output:+$output +}${i}: +$escaped" + fi + done + [ -n "${escaped:-}" ] || return + awesome-client <<-_eof + local naughty = require("naughty") + naughty.notify({ preset = naughty.config.presets.low, + title = "${1:-Output from mutt/$SELF}", + text = [[$output]] + }) + _eof + fi +} + +notify_output() { + [ -d $TEMPRUNDIR ] || return + local stdout stderr anything + + for i in stdout stderr; do + if [ -s "$TEMPRUNDIR/output.$i" ]; then + eval $i="'$TEMPRUNDIR/output.$i'" + else + eval $i=/dev/null + fi + done + + notify "Output from mutt/$SELF" $stdout $stderr +} + +guess_extension() { + python3 -c "import mimetypes; print(mimetypes.guess_extension('$1'))" +} + +get_file() { + local t + if [ -z "$1" ]; then + t=$(mktemp -p "$PWD" tmp.XXXXXXXXXX$(guess_extension "$MIMETYPE")) + cat > "$t" + echo "$t" + else + t="$(echo -n ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" + ln "$1" "$t" 2>/dev/null || cp "$1" "$t" + echo "$PWD/$t" + fi +} + +MIMETYPE= FILENAME= VIEWER= DELAY=1 +state= +for arg in "$@"; do + case "$state/$arg" in + + (/-t) state=t;; + (t/*) MIMETYPE="$arg"; state=;; + + (/-f) state=f;; + (f/*) FILENAME="$arg"; state=;; + + (/-d) state=d;; + (d/*) DELAY="$arg"; state=;; + + (/-v) state=v;; + (v/*) VIEWER="$arg"; state=;; + + (*) + echo >&2 "E: Invalid argument: $i" + exit 1 + ;; + + esac +done + +launch_viewer() { + local filename; filename="$1" + if [ -z "$VIEWER" ]; then + [ -n "${2:-}" ] && filename="${2}:${1}" + run-mailcap "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + else + $VIEWER "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + fi +} + +case "$SELF" in + (bgview) + # make a copy of the file, then launch a shell process in the background + # to divert to run-mailcap, after which the temporary directory gets + # cleaned up. + enter_tempdir + FILE="$(get_file "$FILENAME")" + ( + ts=$(($(date +%s) + $DELAY)) + launch_viewer "$FILE" "$MIMETYPE" + while [ $(date +%s) -lt $ts ]; do sleep 1; done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; + (bgview-fifo) + # hack to stay around until the viewer has read the file: make a fifo and + # wait for the cat process to finish writing to it, which means that it + # must have been consumed on the other end. + enter_tempdir + FILE="$(get_file "$FILENAME")" + FIFO="fifo-${FILE##*/}" + mkfifo "$FIFO" + cat "$FILE" > "$FIFO" & + # For some reason, we do have to write a tempfile and cannot seem to + # redirect stdin directly to the fifo, i.e. this does not work instead of + # the previous three lines: + ## cat > "$FIFO" & + launch_viewer "$FIFO" "$MIMETYPE" + wait + cleanup + ;; + (bgview-delay) + # hack to stay around until the file hasn't been accessed for a few + # seconds, so that we can clean up. This is for cases when the FIFO method + # doesn't work, because e.g. Firefox randomly chooses it needs to read + # HTML files twice. + enter_tempdir + FILE="$(get_file "$FILENAME")" + touch "$FILE" + (launch_viewer "$FILE" "$MIMETYPE") & + ( + while [ $(($(stat -c%X "$FILE") + $DELAY)) -gt $(date +%s) ]; do + sleep 1 + done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; +esac diff --git a/.config/neomutt/bgview b/.config/neomutt/bgview new file mode 100755 index 0000000..37f40ad --- /dev/null +++ b/.config/neomutt/bgview @@ -0,0 +1,180 @@ +#!/bin/sh + +#exec 2>> /tmp/bgrun.stderr +#set -x + +SELF="${0##*/}" + +TEMPDIR= +TEMPRUNDIR=.tempdir-run.d +cleanup() { + if [ -d $TEMPRUNDIR ]; then + local TEMPDIR; TEMPDIR="$PWD" + notify_output + cd / + rm -rf "$TEMPDIR" + fi + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +} +trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +enter_tempdir() { + if [ -d $TEMPRUNDIR ]; then + return + + else + if [ -z "${TMPDIR:-}" ]; then + TMPDIR=/tmp + fi + for i in $LOGNAME volatile; do + if [ -d "${TMPDIR}/$i" ]; then + TMPDIR="${TMPDIR}/$i" + break + fi + done + cd $(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) + mkdir $TEMPRUNDIR + fi +} + +notify() { + if [ -x "$(command -v awesome-client)" ]; then + local stdout stderr escaped output + stdout="${2:-}" + stderr="${3:-}" + for i in stdout stderr; do + if eval test -s $TEMPRUNDIR/output.$i; then + escaped=$(eval sed -e 's,\",\\\",g' $TEMPRUNDIR/output.$i) + output="${output:+$output +}${i}: +$escaped" + fi + done + [ -n "${escaped:-}" ] || return + awesome-client <<-_eof + local naughty = require("naughty") + naughty.notify({ preset = naughty.config.presets.low, + title = "${1:-Output from mutt/$SELF}", + text = [[$output]] + }) + _eof + fi +} + +notify_output() { + [ -d $TEMPRUNDIR ] || return + local stdout stderr anything + + for i in stdout stderr; do + if [ -s "$TEMPRUNDIR/output.$i" ]; then + eval $i="'$TEMPRUNDIR/output.$i'" + else + eval $i=/dev/null + fi + done + + notify "Output from mutt/$SELF" $stdout $stderr +} + +guess_extension() { + python3 -c "import mimetypes; print(mimetypes.guess_extension('$1'))" +} + +get_file() { + local t + if [ -z "$1" ]; then + t=$(mktemp -p "$PWD" tmp.XXXXXXXXXX$(guess_extension "$MIMETYPE")) + cat > "$t" + echo "$t" + else + t="$(echo -n ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" + ln "$1" "$t" 2>/dev/null || cp "$1" "$t" + echo "$PWD/$t" + fi +} + +MIMETYPE= FILENAME= VIEWER= DELAY=1 +state= +for arg in "$@"; do + case "$state/$arg" in + + (/-t) state=t;; + (t/*) MIMETYPE="$arg"; state=;; + + (/-f) state=f;; + (f/*) FILENAME="$arg"; state=;; + + (/-d) state=d;; + (d/*) DELAY="$arg"; state=;; + + (/-v) state=v;; + (v/*) VIEWER="$arg"; state=;; + + (*) + echo >&2 "E: Invalid argument: $i" + exit 1 + ;; + + esac +done + +launch_viewer() { + local filename; filename="$1" + if [ -z "$VIEWER" ]; then + [ -n "${2:-}" ] && filename="${2}:${1}" + run-mailcap "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + else + $VIEWER "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + fi +} + +case "$SELF" in + (bgview) + # make a copy of the file, then launch a shell process in the background + # to divert to run-mailcap, after which the temporary directory gets + # cleaned up. + enter_tempdir + FILE="$(get_file "$FILENAME")" + ( + ts=$(($(date +%s) + $DELAY)) + launch_viewer "$FILE" "$MIMETYPE" + while [ $(date +%s) -lt $ts ]; do sleep 1; done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; + (bgview-fifo) + # hack to stay around until the viewer has read the file: make a fifo and + # wait for the cat process to finish writing to it, which means that it + # must have been consumed on the other end. + enter_tempdir + FILE="$(get_file "$FILENAME")" + FIFO="fifo-${FILE##*/}" + mkfifo "$FIFO" + cat "$FILE" > "$FIFO" & + # For some reason, we do have to write a tempfile and cannot seem to + # redirect stdin directly to the fifo, i.e. this does not work instead of + # the previous three lines: + ## cat > "$FIFO" & + launch_viewer "$FIFO" "$MIMETYPE" + wait + cleanup + ;; + (bgview-delay) + # hack to stay around until the file hasn't been accessed for a few + # seconds, so that we can clean up. This is for cases when the FIFO method + # doesn't work, because e.g. Firefox randomly chooses it needs to read + # HTML files twice. + enter_tempdir + FILE="$(get_file "$FILENAME")" + touch "$FILE" + (launch_viewer "$FILE" "$MIMETYPE") & + ( + while [ $(($(stat -c%X "$FILE") + $DELAY)) -gt $(date +%s) ]; do + sleep 1 + done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; +esac diff --git a/.config/neomutt/bgview-delay b/.config/neomutt/bgview-delay new file mode 100755 index 0000000..37f40ad --- /dev/null +++ b/.config/neomutt/bgview-delay @@ -0,0 +1,180 @@ +#!/bin/sh + +#exec 2>> /tmp/bgrun.stderr +#set -x + +SELF="${0##*/}" + +TEMPDIR= +TEMPRUNDIR=.tempdir-run.d +cleanup() { + if [ -d $TEMPRUNDIR ]; then + local TEMPDIR; TEMPDIR="$PWD" + notify_output + cd / + rm -rf "$TEMPDIR" + fi + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +} +trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +enter_tempdir() { + if [ -d $TEMPRUNDIR ]; then + return + + else + if [ -z "${TMPDIR:-}" ]; then + TMPDIR=/tmp + fi + for i in $LOGNAME volatile; do + if [ -d "${TMPDIR}/$i" ]; then + TMPDIR="${TMPDIR}/$i" + break + fi + done + cd $(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) + mkdir $TEMPRUNDIR + fi +} + +notify() { + if [ -x "$(command -v awesome-client)" ]; then + local stdout stderr escaped output + stdout="${2:-}" + stderr="${3:-}" + for i in stdout stderr; do + if eval test -s $TEMPRUNDIR/output.$i; then + escaped=$(eval sed -e 's,\",\\\",g' $TEMPRUNDIR/output.$i) + output="${output:+$output +}${i}: +$escaped" + fi + done + [ -n "${escaped:-}" ] || return + awesome-client <<-_eof + local naughty = require("naughty") + naughty.notify({ preset = naughty.config.presets.low, + title = "${1:-Output from mutt/$SELF}", + text = [[$output]] + }) + _eof + fi +} + +notify_output() { + [ -d $TEMPRUNDIR ] || return + local stdout stderr anything + + for i in stdout stderr; do + if [ -s "$TEMPRUNDIR/output.$i" ]; then + eval $i="'$TEMPRUNDIR/output.$i'" + else + eval $i=/dev/null + fi + done + + notify "Output from mutt/$SELF" $stdout $stderr +} + +guess_extension() { + python3 -c "import mimetypes; print(mimetypes.guess_extension('$1'))" +} + +get_file() { + local t + if [ -z "$1" ]; then + t=$(mktemp -p "$PWD" tmp.XXXXXXXXXX$(guess_extension "$MIMETYPE")) + cat > "$t" + echo "$t" + else + t="$(echo -n ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" + ln "$1" "$t" 2>/dev/null || cp "$1" "$t" + echo "$PWD/$t" + fi +} + +MIMETYPE= FILENAME= VIEWER= DELAY=1 +state= +for arg in "$@"; do + case "$state/$arg" in + + (/-t) state=t;; + (t/*) MIMETYPE="$arg"; state=;; + + (/-f) state=f;; + (f/*) FILENAME="$arg"; state=;; + + (/-d) state=d;; + (d/*) DELAY="$arg"; state=;; + + (/-v) state=v;; + (v/*) VIEWER="$arg"; state=;; + + (*) + echo >&2 "E: Invalid argument: $i" + exit 1 + ;; + + esac +done + +launch_viewer() { + local filename; filename="$1" + if [ -z "$VIEWER" ]; then + [ -n "${2:-}" ] && filename="${2}:${1}" + run-mailcap "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + else + $VIEWER "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + fi +} + +case "$SELF" in + (bgview) + # make a copy of the file, then launch a shell process in the background + # to divert to run-mailcap, after which the temporary directory gets + # cleaned up. + enter_tempdir + FILE="$(get_file "$FILENAME")" + ( + ts=$(($(date +%s) + $DELAY)) + launch_viewer "$FILE" "$MIMETYPE" + while [ $(date +%s) -lt $ts ]; do sleep 1; done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; + (bgview-fifo) + # hack to stay around until the viewer has read the file: make a fifo and + # wait for the cat process to finish writing to it, which means that it + # must have been consumed on the other end. + enter_tempdir + FILE="$(get_file "$FILENAME")" + FIFO="fifo-${FILE##*/}" + mkfifo "$FIFO" + cat "$FILE" > "$FIFO" & + # For some reason, we do have to write a tempfile and cannot seem to + # redirect stdin directly to the fifo, i.e. this does not work instead of + # the previous three lines: + ## cat > "$FIFO" & + launch_viewer "$FIFO" "$MIMETYPE" + wait + cleanup + ;; + (bgview-delay) + # hack to stay around until the file hasn't been accessed for a few + # seconds, so that we can clean up. This is for cases when the FIFO method + # doesn't work, because e.g. Firefox randomly chooses it needs to read + # HTML files twice. + enter_tempdir + FILE="$(get_file "$FILENAME")" + touch "$FILE" + (launch_viewer "$FILE" "$MIMETYPE") & + ( + while [ $(($(stat -c%X "$FILE") + $DELAY)) -gt $(date +%s) ]; do + sleep 1 + done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; +esac diff --git a/.config/neomutt/bgview-fifo b/.config/neomutt/bgview-fifo new file mode 100755 index 0000000..37f40ad --- /dev/null +++ b/.config/neomutt/bgview-fifo @@ -0,0 +1,180 @@ +#!/bin/sh + +#exec 2>> /tmp/bgrun.stderr +#set -x + +SELF="${0##*/}" + +TEMPDIR= +TEMPRUNDIR=.tempdir-run.d +cleanup() { + if [ -d $TEMPRUNDIR ]; then + local TEMPDIR; TEMPDIR="$PWD" + notify_output + cd / + rm -rf "$TEMPDIR" + fi + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +} +trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +enter_tempdir() { + if [ -d $TEMPRUNDIR ]; then + return + + else + if [ -z "${TMPDIR:-}" ]; then + TMPDIR=/tmp + fi + for i in $LOGNAME volatile; do + if [ -d "${TMPDIR}/$i" ]; then + TMPDIR="${TMPDIR}/$i" + break + fi + done + cd $(mktemp -dp "$TMPDIR" mutt.XXXXXXXXXX) + mkdir $TEMPRUNDIR + fi +} + +notify() { + if [ -x "$(command -v awesome-client)" ]; then + local stdout stderr escaped output + stdout="${2:-}" + stderr="${3:-}" + for i in stdout stderr; do + if eval test -s $TEMPRUNDIR/output.$i; then + escaped=$(eval sed -e 's,\",\\\",g' $TEMPRUNDIR/output.$i) + output="${output:+$output +}${i}: +$escaped" + fi + done + [ -n "${escaped:-}" ] || return + awesome-client <<-_eof + local naughty = require("naughty") + naughty.notify({ preset = naughty.config.presets.low, + title = "${1:-Output from mutt/$SELF}", + text = [[$output]] + }) + _eof + fi +} + +notify_output() { + [ -d $TEMPRUNDIR ] || return + local stdout stderr anything + + for i in stdout stderr; do + if [ -s "$TEMPRUNDIR/output.$i" ]; then + eval $i="'$TEMPRUNDIR/output.$i'" + else + eval $i=/dev/null + fi + done + + notify "Output from mutt/$SELF" $stdout $stderr +} + +guess_extension() { + python3 -c "import mimetypes; print(mimetypes.guess_extension('$1'))" +} + +get_file() { + local t + if [ -z "$1" ]; then + t=$(mktemp -p "$PWD" tmp.XXXXXXXXXX$(guess_extension "$MIMETYPE")) + cat > "$t" + echo "$t" + else + t="$(echo -n ${1##*/} | sed -re 's![^[:alnum:],.@%^+=_-]!_!gi')" + ln "$1" "$t" 2>/dev/null || cp "$1" "$t" + echo "$PWD/$t" + fi +} + +MIMETYPE= FILENAME= VIEWER= DELAY=1 +state= +for arg in "$@"; do + case "$state/$arg" in + + (/-t) state=t;; + (t/*) MIMETYPE="$arg"; state=;; + + (/-f) state=f;; + (f/*) FILENAME="$arg"; state=;; + + (/-d) state=d;; + (d/*) DELAY="$arg"; state=;; + + (/-v) state=v;; + (v/*) VIEWER="$arg"; state=;; + + (*) + echo >&2 "E: Invalid argument: $i" + exit 1 + ;; + + esac +done + +launch_viewer() { + local filename; filename="$1" + if [ -z "$VIEWER" ]; then + [ -n "${2:-}" ] && filename="${2}:${1}" + run-mailcap "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + else + $VIEWER "$filename" > $TEMPRUNDIR/output.stdout 2> $TEMPRUNDIR/output.stderr + fi +} + +case "$SELF" in + (bgview) + # make a copy of the file, then launch a shell process in the background + # to divert to run-mailcap, after which the temporary directory gets + # cleaned up. + enter_tempdir + FILE="$(get_file "$FILENAME")" + ( + ts=$(($(date +%s) + $DELAY)) + launch_viewer "$FILE" "$MIMETYPE" + while [ $(date +%s) -lt $ts ]; do sleep 1; done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; + (bgview-fifo) + # hack to stay around until the viewer has read the file: make a fifo and + # wait for the cat process to finish writing to it, which means that it + # must have been consumed on the other end. + enter_tempdir + FILE="$(get_file "$FILENAME")" + FIFO="fifo-${FILE##*/}" + mkfifo "$FIFO" + cat "$FILE" > "$FIFO" & + # For some reason, we do have to write a tempfile and cannot seem to + # redirect stdin directly to the fifo, i.e. this does not work instead of + # the previous three lines: + ## cat > "$FIFO" & + launch_viewer "$FIFO" "$MIMETYPE" + wait + cleanup + ;; + (bgview-delay) + # hack to stay around until the file hasn't been accessed for a few + # seconds, so that we can clean up. This is for cases when the FIFO method + # doesn't work, because e.g. Firefox randomly chooses it needs to read + # HTML files twice. + enter_tempdir + FILE="$(get_file "$FILENAME")" + touch "$FILE" + (launch_viewer "$FILE" "$MIMETYPE") & + ( + while [ $(($(stat -c%X "$FILE") + $DELAY)) -gt $(date +%s) ]; do + sleep 1 + done + cleanup + ) & + trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + ;; +esac diff --git a/.config/neomutt/colours b/.config/neomutt/colours new file mode 100644 index 0000000..a741805 --- /dev/null +++ b/.config/neomutt/colours @@ -0,0 +1,72 @@ +# color terminals: +# (default, white, black, green, magenta, blue, cyan, yellow, red) +# (bright...) +# (color1,color2,...,colorN-1) +# +# object foreground background +# +color normal default default # normal text +color indicator white black # actual message +color tree default default # thread arrows +color status brightwhite black # status line +color error brightred default # errors +color message default default # info messages +color signature blue default # signature +color attachment brightblack default # MIME attachments +color search brightblack yellow # search matches +color tilde brightmagenta default # ~ at bottom of msg +color markers white default # + at beginning of wrapped lines +color hdrdefault blue default # default header lines +color bold brightred default # hiliting bold patterns in body +color underline brightmagenta default # hiliting underlined patterns in body +color quoted red default # quoted text +color quoted1 magenta default +color quoted2 green default +color quoted3 red default +color quoted4 magenta default +color quoted5 green default +color quoted6 red default +color quoted7 magenta default +color quoted8 green default +color quoted9 red default +# +# object foreground backg. RegExp +# +color header brightblue default "^(from|subject):" +#color body cyan default "((ftp|http|https)://|news:)[^ >)\"\t]+" +color body magenta default "((ftp|http|https)://|(file|news):|www\\.)[-a-z0-9_.:]*[a-z0-9](/[^][{} \t\n\r\"<>()]*[^][{} \t\n\r\"<>().,:!])?/?" +color body magenta default "[-_+=.[:alnum:]]+@[-_.[:alnum:]]+" +#color body red default "(^| )\\*[-a-z0-9????*]+\\*[,.?]?[ \n]" +#color body green default "(^| )_[-a-z0-9????_]+_[,.?]?[ \n]" +color body red default "(^| )\\*[-a-z0-9*]+\\*[,.?]?[ \n]" +color body green default "(^| )_[-a-z0-9_]+_[,.?]?[ \n]" + +uncolor index * # unset all color index entries + +color index brightblack default "~T" +color index red default "~N|~O" +color index brightred default "~T (~N|~O)" +color index white blue "~F" +color index brightwhite blue "~T ~F" +color index white red "(~N|~O) ~F" +color index brightwhite red "~T (~N|~O) ~F" +color index cyan default "~D" +color index brightcyan default "~T ~D" + +folder-hook . "uncolor index brightblack default '!~D !~P'" +folder-hook store "color index brightblack default '!~D !~P'" + +folder-hook . "uncolor index brightwhite magenta '~h X-Postponed:'" +folder-hook store "color index brightwhite magenta '~h X-Postponed:'" +folder-hook . "color index brightwhite magenta '(~N|~O) !~D ~h X-Tickle:'" + +folder-hook . "color index default red '!~P ~H .'" +folder-hook spam "uncolor index default red '!~P ~H .'" +folder-hook retrain "uncolor index default red '!~P ~H .'" + +color sidebar_new red default +color sidebar_divider default black +color sidebar_indicator white black +color sidebar_highlight white blue + +# vim:sw=9:noet:sts=9:ts=9:ft=muttrc diff --git a/.config/neomutt/confvars b/.config/neomutt/confvars new file mode 100644 index 0000000..82253d7 --- /dev/null +++ b/.config/neomutt/confvars @@ -0,0 +1,6846 @@ +# Auto-generated using mkconf from manual.txt +# on 2023-08-11 16:33:16 +# +# Invoked as: ./mkconf +# + +# 3.1. abort_backspace +# +# Type: boolean +# Default: yes +# +# If set, hitting backspace against an empty prompt aborts the prompt. +# + + +# 3.2. abort_key +# +# Type: string +# Default: “007” +# +# Specifies the key that can be used to abort prompts. The format is the same as +# used in "bind" commands. The default is equivalent to "Ctrl-G". Note that the +# specified key should not be used in other bindings, as the abort operation has +# higher precedence and the binding will not have the desired effect. +# +# Example: +# +# set abort_key = "" +# +# Please note that when using as the abort key, you may also want to set +# the environment variable ESCDELAY to a low value or even 0 which will reduce +# the time that ncurses waits to distinguish singular key presses from the +# start of a terminal escape sequence. The default time is 1000 milliseconds and +# thus quite noticeable. +# + + +# 3.3. abort_noattach +# +# Type: quadoption +# Default: no +# +# If set to yes, when composing messages containing the regular expression +# specified by $abort_noattach_regex and no attachments are given, composition +# will be aborted. If set to no, composing messages as such will never be +# aborted. +# +# Example: +# +# set abort_noattach_regex = "\" +# +set abort_noattach=ask-yes + + +# 3.4. abort_noattach_regex +# +# Type: regular expression +# Default: “<(attach|attached|attachments?)>” +# +# Specifies a regular expression to match against the body of the message, to +# determine if an attachment was mentioned but mistakenly forgotten. If it +# matches, $abort_noattach will be consulted to determine if message sending will +# be aborted. +# +# Like other regular expressions in NeoMutt, the search is case sensitive if the +# pattern contains at least one upper case letter, and case insensitive +# otherwise. +# + + +# 3.5. abort_nosubject +# +# Type: quadoption +# Default: ask-yes +# +# If set to yes, when composing messages and no subject is given at the subject +# prompt, composition will be aborted. If set to no, composing messages with no +# subject given at the subject prompt will never be aborted. +# + + +# 3.6. abort_unmodified +# +# Type: quadoption +# Default: yes +# +# If set to yes, composition will automatically abort after editing the message +# body if no changes are made to the file (this check only happens after the +# first edit of the file). When set to no, composition will never be aborted. +# + + +# 3.7. alias_file +# +# Type: path +# Default: “~/.neomuttrc” +# +# The default file in which to save aliases created by the +# function. Entries added to this file are encoded in the character set specified +# by $config_charset if it is set or the current character set otherwise. +# +# Note: NeoMutt will not automatically source this file; you must explicitly use +# the "source" command for it to be executed in case this option points to a +# dedicated alias file. +# +# The default for this option is the currently used neomuttrc file, or "~ +# /.neomuttrc" if no user neomuttrc was found. +# +set alias_file="$my_confdir/aliases" + + +# 3.8. alias_format +# +# Type: string +# Default: “%3n %f%t %-15a %-56r | %c” +# +# Specifies the format of the data displayed for the "alias" menu. The following +# printf(3)-style sequences are available: +# +# ┌───┬───────────────────────────────────────────────────────────────┐ +# │%a │Alias name │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%c │Comment │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%f │Flags - currently, a "d" for an alias marked for deletion │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%n │Index number │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%r │Address which alias expands to │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%t │Character which indicates if the alias is tagged for inclusion │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%>X│right justify the rest of the string and pad with character "X"│ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%|X│pad to the end of the line with character "X" │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%*X│soft-fill with character "X" as pad │ +# └───┴───────────────────────────────────────────────────────────────┘ +# + + +# 3.9. allow_8bit +# +# Type: boolean +# Default: yes +# +# Controls whether 8-bit data is converted to 7-bit using either Quoted- +# Printable or Base64 encoding when sending mail. +# + + +# 3.10. allow_ansi +# +# Type: boolean +# Default: no +# +# Controls whether ANSI color codes in messages (and color tags in rich text +# messages) are to be interpreted. Messages containing these codes are rare, but +# if this option is set, their text will be colored accordingly. Note that this +# may override your color choices, and even present a security problem, since a +# message could include a line like +# +# [-- PGP output follows ... +# +# and give it the same color as your attachment color (see also $crypt_timestamp +# ). +# + + +# 3.11. arrow_cursor +# +# Type: boolean +# Default: no +# +# When set, an arrow ("->") will be used to indicate the current entry in menus +# instead of highlighting the whole line. On slow network or modem links this +# will make response faster because there is less that has to be redrawn on the +# screen when moving to the next or previous entries in the menu. +# + + +# 3.12. arrow_string +# +# Type: string +# Default: “->” +# +# Specifies the string of arrow_cursor when arrow_cursor enabled. +# + + +# 3.13. ascii_chars +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will use plain ASCII characters when displaying thread and +# attachment trees, instead of the default ACS characters. +# + + +# 3.14. ask_bcc +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will prompt you for blind-carbon-copy (Bcc) recipients before +# editing an outgoing message. +# + + +# 3.15. ask_cc +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will prompt you for carbon-copy (Cc) recipients before editing +# the body of an outgoing message. +# + + +# 3.16. ask_follow_up +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will prompt you for follow-up groups before editing the body of +# an outgoing message. +# + + +# 3.17. ask_x_comment_to +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will prompt you for x-comment-to field before editing the body +# of an outgoing message. +# + + +# 3.18. assumed_charset +# +# Type: string +# Default: (empty) +# +# This variable is a colon-separated list of character encoding schemes for +# messages without character encoding indication. Header field values and message +# body content without character encoding indication would be assumed that they +# are written in one of this list. By default, all the header fields and message +# body without any charset indication are assumed to be in "us-ascii". +# +# For example, Japanese users might prefer this: +# +# set assumed_charset="iso-2022-jp:euc-jp:shift_jis:utf-8" +# +# However, only the first content is valid for the message body. +# + + +# 3.19. attach_charset +# +# Type: string +# Default: (empty) +# +# This variable is a colon-separated list of character encoding schemes for text +# file attachments. NeoMutt uses this setting to guess which encoding files being +# attached are encoded in to convert them to a proper character set given in +# $send_charset. +# +# If unset, the value of $charset will be used instead. For example, the +# following configuration would work for Japanese text handling: +# +# set attach_charset="iso-2022-jp:euc-jp:shift_jis:utf-8" +# +# Note: for Japanese users, "iso-2022-*" must be put at the head of the value as +# shown above if included. +# + + +# 3.20. attach_format +# +# Type: string +# Default: “%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] ” +# +# This variable describes the format of the "attachment" menu. The following +# printf(3)-style sequences are understood: +# +# ┌───┬─────────────────────────────────────────────────────────────────────────┐ +# │%C │Charset │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%c │Requires charset conversion ("n" or "c") │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%D │Deleted flag │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%d │Description (if none, falls back to %F) │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%e │MIME content-transfer-encoding │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%f │Filename │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%F │Filename in content-disposition header (if none, falls back to %f) │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%I │Disposition ("I" for inline, "A" for attachment) │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%m │Major MIME type │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%M │MIME subtype │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%n │Attachment number │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%Q │"Q", if MIME part qualifies for attachment counting │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%s │Size (see formatstrings-size) │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%T │Graphic tree characters │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%t │Tagged flag │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%u │Unlink (=to delete) flag │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%X │Number of qualifying MIME parts in this part and its children (please see│ +# │ │the "attachments" section for possible speed effects) │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%>X│Right justify the rest of the string and pad with character "X" │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%|X│Pad to the end of the line with character "X" │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%*X│Soft-fill with character "X" as pad │ +# └───┴─────────────────────────────────────────────────────────────────────────┘ +# +# For an explanation of "soft-fill", see the $index_format documentation. +# + + +# 3.21. attach_save_dir +# +# Type: path +# Default: “./” +# +# The directory where attachments are saved. +# +set attach_save_dir=$tmpdir + + +# 3.22. attach_save_without_prompting +# +# Type: boolean +# Default: no +# +# This variable, when set to true, will cause attachments to be saved to the +# 'attach_save_dir' location without prompting the user for the filename. +# + + +# 3.23. attach_sep +# +# Type: string +# Default: “n” +# +# The separator to add between attachments when operating (saving, printing, +# piping, etc) on a list of tagged attachments. +# + + +# 3.24. attach_split +# +# Type: boolean +# Default: yes +# +# If this variable is unset, when operating (saving, printing, piping, etc) on a +# list of tagged attachments, NeoMutt will concatenate the attachments and will +# operate on them as a single attachment. The $attach_sep separator is added +# after each attachment. When set, NeoMutt will operate on the attachments one by +# one. +# + + +# 3.25. attribution +# +# Type: string +# Default: “On %d, %n wrote:” +# +# This is the string that will precede a message which has been included in a +# reply. For a full listing of defined printf(3)-like sequences see the section +# on $index_format. +# +set attribution="$my_attribution_en" + + +# 3.26. attribution_locale +# +# Type: string +# Default: (empty) +# +# The locale used by strftime(3) to format dates in the attribution string. Legal +# values are the strings your system accepts for the locale environment variable +# $LC_TIME. +# +# This variable is to allow the attribution date format to be customized by +# recipient or folder using hooks. By default, NeoMutt will use your locale +# environment, so there is no need to set this except to override that default. +# + + +# 3.27. auto_edit +# +# Type: boolean +# Default: no +# +# When set along with $edit_headers, NeoMutt will skip the initial send-menu +# (prompting for subject and recipients) and allow you to immediately begin +# editing the body of your message. The send-menu may still be accessed once you +# have finished editing the body of your message. +# +# Note: when this option is set, you can't use send-hooks that depend on the +# recipients when composing a new (non-reply) message, as the initial list of +# recipients is empty. +# +# Also see $fast_reply. +# +set auto_edit=yes + + +# 3.28. auto_subscribe +# +# Type: boolean +# Default: no +# +# When set, NeoMutt assumes the presence of a List-Post header means the +# recipient is subscribed to the list. Unless the mailing list is in the +# "unsubscribe" or "unlist" lists, it will be added to the "subscribe" list. +# Parsing and checking these things slows header reading down, so this option is +# disabled by default. +# + + +# 3.29. auto_tag +# +# Type: boolean +# Default: no +# +# When set, functions in the index menu which affect a message will be applied to +# all tagged messages (if there are any). When unset, you must first use the +# function (bound to ";" by default) to make the next function apply +# to all tagged messages. +# + + +# 3.30. autocrypt +# +# Type: boolean +# Default: no +# +# When set, enables autocrypt, which provides passive encryption protection with +# keys exchanged via headers. See "autocryptdoc" for more details. (Autocrypt +# only) +# + + +# 3.31. autocrypt_acct_format +# +# Type: string +# Default: “%4n %-30a %20p %10s” +# +# This variable describes the format of the "autocrypt account" menu. The +# following printf(3)-style sequences are understood +# +# ┌──┬─────────────────────────────┐ +# │%a│email address │ +# ├──┼─────────────────────────────┤ +# │%k│gpg keyid │ +# ├──┼─────────────────────────────┤ +# │%n│current entry number │ +# ├──┼─────────────────────────────┤ +# │%p│prefer-encrypt flag │ +# ├──┼─────────────────────────────┤ +# │%s│status flag (active/inactive)│ +# └──┴─────────────────────────────┘ +# +# (Autocrypt only) +# + + +# 3.32. autocrypt_dir +# +# Type: path +# Default: “~/.mutt/autocrypt” +# +# This variable sets where autocrypt files are stored, including the GPG keyring +# and SQLite database. See "autocryptdoc" for more details. (Autocrypt only) +# + + +# 3.33. autocrypt_reply +# +# Type: boolean +# Default: yes +# +# When set, replying to an autocrypt email automatically enables autocrypt in the +# reply. You may want to unset this if you're using the same key for autocrypt as +# normal web-of-trust, so that autocrypt isn't forced on for all encrypted +# replies. (Autocrypt only) +# + + +# 3.34. beep +# +# Type: boolean +# Default: yes +# +# When this variable is set, NeoMutt will beep when an error occurs. +# +set beep=no + + +# 3.35. beep_new +# +# Type: boolean +# Default: no +# +# When this variable is set, NeoMutt will beep whenever it prints a message +# notifying you of new mail. This is independent of the setting of the $beep +# variable. +# + + +# 3.36. bounce +# +# Type: quadoption +# Default: ask-yes +# +# Controls whether you will be asked to confirm bouncing messages. If set to yes +# you don't get asked if you want to bounce a message. Setting this variable to +# no is not generally useful, and thus not recommended, because you are unable to +# bounce messages. +# + + +# 3.37. bounce_delivered +# +# Type: boolean +# Default: yes +# +# When this variable is set, NeoMutt will include Delivered-To headers when +# bouncing messages. Postfix users may wish to unset this variable. +# +# Note: On Debian systems, this option is unset by default in /etc/Muttrc. +# +set bounce_delivered=no + + +# 3.38. braille_friendly +# +# Type: boolean +# Default: no +# +# When this variable is set, NeoMutt will place the cursor at the beginning of +# the current line in menus, even when the $arrow_cursor variable is unset, +# making it easier for blind persons using Braille displays to follow these +# menus. The option is unset by default because many visual terminals don't +# permit making the cursor invisible. +# + + +# 3.39. browser_abbreviate_mailboxes +# +# Type: boolean +# Default: yes +# +# When this variable is set, NeoMutt will abbreviate mailbox names in the browser +# mailbox list, using '~' and '=' shortcuts. +# +# The default "alpha" setting of $sort_browser uses locale-based sorting (using +# strcoll(3)), which ignores some punctuation. This can lead to some situations +# where the order doesn't make intuitive sense. In those cases, it may be +# desirable to unset this variable. +# + + +# 3.40. catchup_newsgroup +# +# Type: quadoption +# Default: ask-yes +# +# If this variable is set, NeoMutt will mark all articles in newsgroup as read +# when you quit the newsgroup (catchup newsgroup). +# + + +# 3.41. certificate_file +# +# Type: path +# Default: “~/.mutt_certificates” +# +# This variable specifies the file where the certificates you trust are saved. +# When an unknown certificate is encountered, you are asked if you accept it or +# not. If you accept it, the certificate can also be saved in this file and +# further connections are automatically accepted. +# +# You can also manually add CA certificates in this file. Any server certificate +# that is signed with one of these CA certificates is also automatically +# accepted. +# +# Example: +# +# set certificate_file=~/.neomutt/certificates +# + + +# 3.42. change_folder_next +# +# Type: boolean +# Default: no +# +# When this variable is set, the function mailbox suggestion will +# start at the next folder in your "mailboxes" list, instead of starting at the +# first folder in the list. +# + + +# 3.43. charset +# +# Type: string +# Default: (empty) +# +# Character set your terminal uses to display and enter textual data. It is also +# the fallback for $send_charset. +# +# Upon startup NeoMutt tries to derive this value from environment variables such +# as $LC_CTYPE or $LANG. +# +# Note: It should only be set in case NeoMutt isn't able to determine the +# character set used correctly. +# + + +# 3.44. check_mbox_size +# +# Type: boolean +# Default: no +# +# When this variable is set, NeoMutt will use file size attribute instead of +# access time when checking for new mail in mbox and mmdf folders. +# +# This variable is unset by default and should only be enabled when new mail +# detection for these folder types is unreliable or doesn't work. +# +# Note that enabling this variable should happen before any "mailboxes" +# directives occur in configuration files regarding mbox or mmdf folders because +# NeoMutt needs to determine the initial new mail status of such a mailbox by +# performing a fast mailbox scan when it is defined. Afterwards the new mail +# status is tracked by file size changes. +# + + +# 3.45. check_new +# +# Type: boolean +# Default: yes +# +# Note: this option only affects maildir and MH style mailboxes. +# +# When set, NeoMutt will check for new mail delivered while the mailbox is open. +# Especially with MH mailboxes, this operation can take quite some time since it +# involves scanning the directory and checking each file to see if it has already +# been looked at. If this variable is unset, no check for new mail is performed +# while the mailbox is open. +# + + +# 3.46. collapse_all +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will collapse all threads when entering a folder. +# + + +# 3.47. collapse_flagged +# +# Type: boolean +# Default: yes +# +# When unset, NeoMutt will not collapse a thread if it contains any flagged +# messages. +# + + +# 3.48. collapse_unread +# +# Type: boolean +# Default: yes +# +# When unset, NeoMutt will not collapse a thread if it contains any unread +# messages. +# + + +# 3.49. compose_format +# +# Type: string +# Default: “-- NeoMutt: Compose [Approx. msg size: %l Atts: %a]%>-” +# +# Controls the format of the status line displayed in the "compose" menu. This +# string is similar to $status_format, but has its own set of printf(3)-like +# sequences: +# +# ┌───┬─────────────────────────────────────────────────────────────────────────┐ +# │%a │Total number of attachments │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%h │Local hostname │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%l │Approximate size (in bytes) of the current message (see │ +# │ │formatstrings-size) │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%v │NeoMutt version string │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%>X│right justify the rest of the string and pad with character "X" │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%|X│pad to the end of the line with character "X" │ +# ├───┼─────────────────────────────────────────────────────────────────────────┤ +# │%*X│soft-fill with character "X" as pad │ +# └───┴─────────────────────────────────────────────────────────────────────────┘ +# +# See the text describing the $status_format option for more information on how +# to set $compose_format. +# + + +# 3.50. compose_show_user_headers +# +# Type: boolean +# Default: yes +# +# When set, Neomutt will display user-defined headers (set via my_hdr or from +# editing with edit-headers). +# +set compose_show_user_headers=no + +# 3.51. config_charset +# +# Type: string +# Default: (empty) +# +# When defined, NeoMutt will recode commands in rc files from this encoding to +# the current character set as specified by $charset and aliases written to +# $alias_file from the current character set. +# +# Please note that if setting $charset it must be done before setting +# $config_charset. +# +# Recoding should be avoided as it may render unconvertable characters as +# question marks which can lead to undesired side effects (for example in regular +# expressions). +# + + +# 3.52. confirm_append +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will prompt for confirmation when appending messages to an +# existing mailbox. +# +set confirm_append=no + + +# 3.53. confirm_create +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will prompt for confirmation when saving messages to a +# mailbox which does not yet exist before creating it. +# + + +# 3.54. connect_timeout +# +# Type: number +# Default: 30 +# +# Causes NeoMutt to timeout a network connection (for IMAP, POP or SMTP) after +# this many seconds if the connection is not able to be established. A negative +# value causes NeoMutt to wait indefinitely for the connection attempt to +# succeed. +# + + +# 3.55. content_type +# +# Type: string +# Default: “text/plain” +# +# Sets the default Content-Type for the body of newly composed messages. +# +set content_type="text/plain; markup=markdown" + + +# 3.56. copy +# +# Type: quadoption +# Default: yes +# +# This variable controls whether or not copies of your outgoing messages will be +# saved for later references. Also see $record, $save_name, $force_name and " +# fcc-hook". +# +set copy=yes + + +# 3.57. copy_decode_weed +# +# Type: boolean +# Default: no +# +# Controls whether NeoMutt will weed headers when invoking the or +# functions. +# + + +# 3.58. count_alternatives +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will recurse inside multipart/alternatives while performing +# attachment searching and counting(see attachments). +# +# Traditionally, multipart/alternative parts have simply represented different +# encodings of the main content of the email. Unfortunately, some mail clients +# have started to place email attachments inside one of alternatives. Setting +# this will allow NeoMutt to find and count matching attachments hidden there, +# and include them in the index via %X or through ~X pattern matching. +# + + +# 3.59. crypt_auto_encrypt +# +# Type: boolean +# Default: no +# +# Setting this variable will cause NeoMutt to always attempt to PGP encrypt +# outgoing messages. This is probably only useful in connection to the "send-hook +# " command. It can be overridden by use of the pgp menu, when encryption is not +# required or signing is requested as well. If $smime_is_default is set, then +# OpenSSL is used instead to create S/MIME messages and settings can be +# overridden by use of the smime menu instead. (Crypto only) +# + + +# 3.60. crypt_auto_pgp +# +# Type: boolean +# Default: yes +# +# This variable controls whether or not NeoMutt may automatically enable PGP +# encryption/signing for messages. See also $crypt_auto_encrypt, +# $crypt_reply_encrypt, $crypt_auto_sign, $crypt_reply_sign and $smime_is_default +# . +# + + +# 3.61. crypt_auto_sign +# +# Type: boolean +# Default: no +# +# Setting this variable will cause NeoMutt to always attempt to cryptographically +# sign outgoing messages. This can be overridden by use of the pgp menu, when +# signing is not required or encryption is requested as well. If +# $smime_is_default is set, then OpenSSL is used instead to create S/MIME +# messages and settings can be overridden by use of the smime menu instead of the +# pgp menu. (Crypto only) +# + + +# 3.62. crypt_auto_smime +# +# Type: boolean +# Default: yes +# +# This variable controls whether or not NeoMutt may automatically enable S/MIME +# encryption/signing for messages. See also $crypt_auto_encrypt, +# $crypt_reply_encrypt, $crypt_auto_sign, $crypt_reply_sign and $smime_is_default +# . +# + + +# 3.63. crypt_chars +# +# Type: character string +# Default: “SPsK ” +# +# Controls the characters used in cryptography flags. +# +# ┌─────────┬───────┬───────────────────────────────────────────────────────────┐ +# │Character│Default│Description │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │1 │S │The mail is signed, and the signature is successfully │ +# │ │ │verified. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │2 │P │The mail is PGP encrypted. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │3 │s │The mail is signed. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │4 │K │The mail contains a PGP public key. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │5 ││The mail has no crypto info. │ +# └─────────┴───────┴───────────────────────────────────────────────────────────┘ +# + + +# 3.64. crypt_confirm_hook +# +# Type: boolean +# Default: yes +# +# If set, then you will be prompted for confirmation of keys when using the +# crypt-hook command. If unset, no such confirmation prompt will be presented. +# This is generally considered unsafe, especially where typos are concerned. +# + + +# 3.65. crypt_opportunistic_encrypt +# +# Type: boolean +# Default: no +# +# Setting this variable will cause NeoMutt to automatically enable and disable +# encryption, based on whether all message recipient keys can be located by +# NeoMutt. +# +# When this option is enabled, NeoMutt will enable/disable encryption each time +# the TO, CC, and BCC lists are edited. If $edit_headers is set, NeoMutt will +# also do so each time the message is edited. +# +# While this is set, encryption can't be manually enabled/disabled. The pgp or +# smime menus provide a selection to temporarily disable this option for the +# current message. +# +# If $crypt_auto_encrypt or $crypt_reply_encrypt enable encryption for a message, +# this option will be disabled for that message. It can be manually re-enabled in +# the pgp or smime menus. (Crypto only) +# +set crypt_opportunistic_encrypt=no + + +# 3.66. crypt_opportunistic_encrypt_strong_keys +# +# Type: boolean +# Default: no +# +# When set, this modifies the behavior of $crypt_opportunistic_encrypt to only +# search for "strong keys", that is, keys with full validity according to the +# web-of-trust algorithm. A key with marginal or no validity will not enable +# opportunistic encryption. +# +# For S/MIME, the behavior depends on the backend. Classic S/MIME will filter for +# certificates with the 't'(trusted) flag in the .index file. The GPGME backend +# will use the same filters as with OpenPGP, and depends on GPGME's logic for +# assigning the GPGME_VALIDITY_FULL and GPGME_VALIDITY_ULTIMATE validity flag. +# + + +# 3.67. crypt_protected_headers_read +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will display protected headers ("Memory Hole") in the pager, +# When set, NeoMutt will display protected headers in the pager, and will update +# the index and header cache with revised headers. +# +# Protected headers are stored inside the encrypted or signed part of an an +# email, to prevent disclosure or tampering. For more information see https:// +# github.com/autocrypt/protected-headers Currently NeoMutt only supports the +# Subject header. +# +# Encrypted messages using protected headers often substitute the exposed Subject +# header with a dummy value (see $crypt_protected_headers_subject). NeoMutt will +# update its concept of the correct subject after the message is opened, i.e. via +# the function. If you reply to a message before opening it, +# NeoMutt will end up using the dummy Subject header, so be sure to open such a +# message first. (Crypto only) +# + + +# 3.68. crypt_protected_headers_save +# +# Type: boolean +# Default: no +# +# When $crypt_protected_headers_read is set, and a message with a protected +# Subject is opened, NeoMutt will save the updated Subject into the header cache +# by default. This allows searching/limiting based on the protected Subject +# header if the mailbox is re-opened, without having to re-open the message each +# time. However, for mbox/mh mailbox types, or if header caching is not set up, +# you would need to re-open the message each time the mailbox was reopened before +# you could see or search/limit on the protected subject again. +# +# When this variable is set, NeoMutt additionally saves the protected Subject +# back in the clear-text message headers. This provides better usability, but +# with the tradeoff of reduced security. The protected Subject header, which may +# have previously been encrypted, is now stored in clear-text in the message +# headers. Copying the message elsewhere, via NeoMutt or external tools, could +# expose this previously encrypted data. Please make sure you understand the +# consequences of this before you enable this variable. (Crypto only) +# + + +# 3.69. crypt_protected_headers_subject +# +# Type: string +# Default: “...” +# +# When $crypt_protected_headers_write is set, and the message is marked for +# encryption, this will be substituted into the Subject field in the message +# headers. +# +# To prevent a subject from being substituted, unset this variable, or set it to +# the empty string. (Crypto only) +# + + +# 3.70. crypt_protected_headers_write +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will generate protected headers for signed and encrypted +# emails. +# +# Protected headers are stored inside the encrypted or signed part of an an +# email, to prevent disclosure or tampering. For more information see https:// +# github.com/autocrypt/protected-headers +# +# Currently NeoMutt only supports the Subject header. (Crypto only) +# + + +# 3.71. crypt_reply_encrypt +# +# Type: boolean +# Default: yes +# +# If set, automatically PGP or OpenSSL encrypt replies to messages which are +# encrypted. (Crypto only) +# + + +# 3.72. crypt_reply_sign +# +# Type: boolean +# Default: no +# +# If set, automatically PGP or OpenSSL sign replies to messages which are signed. +# +# Note: this does not work on messages that are encrypted and signed! (Crypto +# only) +# + + +# 3.73. crypt_reply_sign_encrypted +# +# Type: boolean +# Default: no +# +# If set, automatically PGP or OpenSSL sign replies to messages which are +# encrypted. This makes sense in combination with $crypt_reply_encrypt, because +# it allows you to sign all messages which are automatically encrypted. This +# works around the problem noted in $crypt_reply_sign, that NeoMutt is not able +# to find out whether an encrypted message is also signed. (Crypto only) +# + + +# 3.74. crypt_timestamp +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt will include a time stamp in the lines surrounding PGP or S/ +# MIME output, so spoofing such lines is more difficult. If you are using colors +# to mark these lines, and rely on these, you may unset this setting. (Crypto +# only) +# + + +# 3.75. crypt_use_gpgme +# +# Type: boolean +# Default: yes +# +# This variable controls the use of the GPGME-enabled crypto backends. If it is +# set and NeoMutt was built with GPGME support, the gpgme code for S/MIME and PGP +# will be used instead of the classic code. Note that you need to set this option +# in .neomuttrc; it won't have any effect when used interactively. +# +# Note that the GPGME backend does not support creating old-style inline +# (traditional) PGP encrypted or signed messages (see $pgp_auto_inline). +# + + +# 3.76. crypt_use_pka +# +# Type: boolean +# Default: no +# +# Controls whether NeoMutt uses PKA (see http://www.g10code.de/docs/ +# pka-intro.de.pdf) during signature verification (only supported by the GPGME +# backend). +# +set crypt_use_pka=yes + + +# 3.77. crypt_verify_sig +# +# Type: quadoption +# Default: yes +# +# If "yes", always attempt to verify PGP or S/MIME signatures. If "ask-*", ask +# whether or not to verify the signature. If "no", never attempt to verify +# cryptographic signatures. (Crypto only) +# + + +# 3.78. date_format +# +# Type: string +# Default: “!%a, %b %d, %Y at %I:%M:%S%p %Z” +# +# This variable controls the format of the date printed by the "%d" sequence in +# $index_format. This is passed to the strftime(3) function to process the date, +# see the man page for the proper syntax. +# +# Unless the first character in the string is a bang ("!"), the month and week +# day names are expanded according to the locale. If the first character in the +# string is a bang, the bang is discarded, and the month and week day names in +# the rest of the string are expanded in the C locale (that is in US English). +# +set date_format="%F" + + +# 3.79. debug_file +# +# Type: path +# Default: “~/.neomuttdebug” +# +# Debug logging is controlled by the variables $debug_file and $debug_level. +# $debug_file specifies the root of the filename. NeoMutt will add "0" to the +# end. Each time NeoMutt is run with logging enabled, the log files are rotated. +# A maximum of five log files are kept, numbered 0 (most recent) to 4 (oldest). +# +# This option can be enabled on the command line, "neomutt -l mylog" +# +# See also: $debug_level +# + + +# 3.80. debug_level +# +# Type: number +# Default: 0 +# +# Debug logging is controlled by the variables $debug_file and $debug_level. +# +# The debug level controls how much information is saved to the log file. If you +# have a problem with NeoMutt, then enabling logging may help find the cause. +# Levels 1-3 will usually provide enough information for writing a bug report. +# Levels 4,5 will be extremely verbose. +# +# Warning: Logging at high levels may save private information to the file. +# +# This option can be enabled on the command line, "neomutt -d 2" +# +# See also: $debug_file +# + + +# 3.81. default_hook +# +# Type: string +# Default: “~f %s !~P | (~P ~C %s)” +# +# This variable controls how "message-hook", "reply-hook", "send-hook", " +# send2-hook", "save-hook", and "fcc-hook" will be interpreted if they are +# specified with only a simple regex, instead of a matching pattern. The hooks +# are expanded when they are declared, so a hook will be interpreted according to +# the value of this variable at the time the hook is declared. +# +# The default value matches if the message is either from a user matching the +# regular expression given, or if it is from you (if the from address matches " +# alternates") and is to or cc'ed to a user matching the given regular +# expression. +# + + +# 3.82. delete +# +# Type: quadoption +# Default: ask-yes +# +# Controls whether or not messages are really deleted when closing or +# synchronizing a mailbox. If set to yes, messages marked for deleting will +# automatically be purged without prompting. If set to no, messages marked for +# deletion will be kept in the mailbox. +# +set delete=yes + + +# 3.83. delete_untag +# +# Type: boolean +# Default: yes +# +# If this option is set, NeoMutt will untag messages when marking them for +# deletion. This applies when you either explicitly delete a message, or when you +# save it to another folder. +# + + +# 3.84. digest_collapse +# +# Type: boolean +# Default: yes +# +# If this option is set, NeoMutt's received-attachments menu will not show the +# subparts of individual messages in a multipart/digest. To see these subparts, +# press "v" on that menu. +# + + +# 3.85. display_filter +# +# Type: command +# Default: (empty) +# +# When set, specifies a command used to filter messages. When a message is viewed +# it is passed as standard input to $display_filter, and the filtered message is +# read from the standard output. +# +# When preparing the message, NeoMutt inserts some escape sequences into the +# text. They are of the form: ]9;XXX where "XXX" is a random 64-bit +# number. +# +# If these escape sequences interfere with your filter, they can be removed using +# a tool like ansifilter or sed 's/^x1b]9;[0-9]+x7//' +# +# If they are removed, then PGP and MIME headers will no longer be coloured. This +# can be fixed by adding this to your config: color body magenta default '^[-- +# .* --]$'. +# + + +# 3.86. dsn_notify +# +# Type: string +# Default: (empty) +# +# This variable sets the request for when notification is returned. The string +# consists of a comma separated list (no spaces!) of one or more of the +# following: never, to never request notification, failure, to request +# notification on transmission failure, delay, to be notified of message delays, +# success, to be notified of successful transmission. +# +# Example: +# +# set dsn_notify="failure,delay" +# +# Note: when using $sendmail for delivery, you should not enable this unless you +# are either using Sendmail 8.8.x or greater or a MTA providing a sendmail(1) +# -compatible interface supporting the -N option for DSN. For SMTP delivery, DSN +# support is auto-detected so that it depends on the server whether DSN will be +# used or not. +# + + +# 3.87. dsn_return +# +# Type: string +# Default: (empty) +# +# This variable controls how much of your message is returned in DSN messages. It +# may be set to either hdrs to return just the message header, or full to return +# the full message. +# +# Example: +# +# set dsn_return=hdrs +# +# Note: when using $sendmail for delivery, you should not enable this unless you +# are either using Sendmail 8.8.x or greater or a MTA providing a sendmail(1) +# -compatible interface supporting the -R option for DSN. For SMTP delivery, DSN +# support is auto-detected so that it depends on the server whether DSN will be +# used or not. +# + + +# 3.88. duplicate_threads +# +# Type: boolean +# Default: yes +# +# This variable controls whether NeoMutt, when $sort is set to threads, threads +# messages with the same Message-Id together. If it is set, it will indicate that +# it thinks they are duplicates of each other with an equals sign in the thread +# tree. +# + + +# 3.89. edit_headers +# +# Type: boolean +# Default: no +# +# This option allows you to edit the header of your outgoing messages along with +# the body of your message. +# +# Although the compose menu may have localized header labels, the labels passed +# to your editor will be standard RFC2822 headers, (e.g. To:, Cc:, Subject:). +# Headers added in your editor must also be RFC2822 headers, or one of the pseudo +# headers listed in "edit-header". NeoMutt will not understand localized header +# labels, just as it would not when parsing an actual email. +# +# Note that changes made to the References: and Date: headers are ignored for +# interoperability reasons. +# +set edit_headers=yes + + +# 3.90. editor +# +# Type: command +# Default: (empty) +# +# This variable specifies which editor is used by NeoMutt. It defaults to the +# value of the $VISUAL, or $EDITOR, environment variable, or to the string "/usr/ +# bin/editor" if neither of those are set. +# +# The $editor string may contain a %s escape, which will be replaced by the name +# of the file to be edited. If the %s escape does not appear in $editor, a space +# and the name to be edited are appended. +# +# The resulting string is then executed by running +# +# sh -c 'string' +# +# where string is the expansion of $editor described above. +# +set editor="mailplate --edit --auto --keep-unknown" + + +# 3.91. empty_subject +# +# Type: string +# Default: “Re: your mail” +# +# This variable specifies the subject to be used when replying to an email with +# an empty subject. It defaults to "Re: your mail". +# + + +# 3.92. encode_from +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will quoted-printable encode messages when they contain the +# string "From " (note the trailing space) in the beginning of a line. This is +# useful to avoid the tampering certain mail delivery and transport agents tend +# to do with messages (in order to prevent tools from misinterpreting the line as +# a mbox message separator). +# + + +# 3.93. envelope_from_address +# +# Type: e-mail address +# Default: (empty) +# +# Manually sets the envelope sender for outgoing messages. This value is ignored +# if $use_envelope_from is unset. +# + + +# 3.94. external_search_command +# +# Type: command +# Default: (empty) +# +# If set, contains the name of the external program used by "~I" patterns. This +# will usually be a wrapper script around mairix, mu, or similar indexers other +# than notmuch (for which there is optional special support). +# +# Here is an example how it works. Let's assume $external_search_command is set +# to "mairix_filter", and mairix_filter is a script which runs the old but well +# loved mairix indexer with the arguments given to mairix_filter, in the "raw" +# mode of mairix, producing on the standard output a list of Message-IDs, one per +# line. +# +# If possible, it also filters down the results coming from mairix such that only +# messages in the current folder remain. It can do this because it gets a hidden +# first argument which is the path to the folder. (This can be the type of clean +# and simple script called a one-liner.) +# +# Now if NeoMutt gets a limit or tag command followed by the pattern "~I '-t +# s:bleeping='", mairix_filter runs mairix with the arguments from inside the +# quotes (the quotes are needed because of the space after "-t"), mairix finds +# all messages with "bleeping" in the Subject plus all messages sharing threads +# with these and outputs their file names, and mairix_filter translates the file +# names into Message-IDs. Finally, NeoMutt reads the Message-IDs and targets the +# matching messages with the command given to it. +# +# You, the user, still have to rewrite the mairix_filter script to match the +# behavior of your indexer, but this should help users of indexers other than +# notmuch to integrate them cleanly with NeoMutt. +# + + +# 3.95. fast_reply +# +# Type: boolean +# Default: no +# +# When set, the initial prompt for recipients (to, cc, bcc) and subject are +# skipped when the relevant information is already provided. These cases include +# replying to messages and passing the relevant command line arguments. The +# initial prompt for recipients is also skipped when composing a new message to +# the current message sender, while the initial prompt for subject is also +# skipped when forwarding messages. +# +# Note: this variable has no effect when the $auto_edit variable is set. +# +# See also: $auto_edit, $edit_headers, $ask_cc, $ask_bcc +# + + +# 3.96. fcc_attach +# +# Type: quadoption +# Default: yes +# +# This variable controls whether or not attachments on outgoing messages are +# saved along with the main body of your message. +# +# Note: $fcc_before_send forces the default (set) behavior of this option. +# + + +# 3.97. fcc_before_send +# +# Type: boolean +# Default: no +# +# When this variable is set, FCCs will occur before sending the message. Before +# sending, the message cannot be manipulated, so it will be stored the exact same +# as sent: $fcc_attach and $fcc_clear will be ignored (using their default +# values). +# +# When unset, the default, FCCs will occur after sending. Variables $fcc_attach +# and $fcc_clear will be respected, allowing it to be stored without attachments +# or encryption/signing if desired. +# + + +# 3.98. fcc_clear +# +# Type: boolean +# Default: no +# +# When this variable is set, FCCs will be stored unencrypted and unsigned, even +# when the actual message is encrypted and/or signed. +# +# Note: $fcc_before_send forces the default (unset) behavior of this option. (PGP +# only) +# +# See also $pgp_self_encrypt, $smime_self_encrypt +# + + +# 3.99. flag_chars +# +# Type: character string +# Default: “*!DdrONon- ” +# +# Controls the characters used in several flags. +# +# ┌─────────┬───────┬─────────────────────────────────────────────┐ +# │Character│Default│Description │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │1 │* │The mail is tagged. │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │2 │! │The mail is flagged as important. │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │3 │D │The mail is marked for deletion. │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │4 │d │The mail has attachments marked for deletion.│ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │5 │r │The mail has been replied to. │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │6 │O │The mail is Old (Unread but seen). │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │7 │N │The mail is New (Unread but not seen). │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │8 │o │The mail thread is Old (Unread but seen). │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │9 │n │The mail thread is New (Unread but not seen).│ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │10 │- │The mail is read - %S expando. │ +# ├─────────┼───────┼─────────────────────────────────────────────┤ +# │11 ││The mail is read - %Z expando. │ +# └─────────┴───────┴─────────────────────────────────────────────┘ +# + + +# 3.100. flag_safe +# +# Type: boolean +# Default: no +# +# If set, flagged messages can't be deleted. +# + + +# 3.101. folder +# +# Type: mailbox +# Default: “~/Mail” +# +# Specifies the default location of your mailboxes. A "+" or "=" at the beginning +# of a pathname will be expanded to the value of this variable. Note that if you +# change this variable (from the default) value you need to make sure that the +# assignment occurs before you use "+" or "=" for any other variables since +# expansion takes place when handling the "mailboxes" command. +# +set folder="~/mail" + + +# 3.102. folder_format +# +# Type: string +# Default: “%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %i” +# +# This variable allows you to customize the file browser display to your personal +# taste. This string is similar to $index_format, but has its own set of printf +# (3)-like sequences: +# +# ┌───┬─┬───────────────────────────────────────────────────────────────────────┐ +# │%C │ │Current file number │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%d │ │Date/time folder was last modified │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%D │ │Date/time folder was last modified using $date_format. │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%f │ │Filename ("/" is appended to directory names, "@" to symbolic links and│ +# │ │ │"*" to executable files) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%F │ │File permissions │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%g │ │Group name (or numeric gid, if missing) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%i │ │Description of the folder │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%l │ │Number of hard links │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%m │*│Number of messages in the mailbox │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%n │*│Number of unread messages in the mailbox │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%N │ │"N" if mailbox has new mail, blank otherwise │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%s │ │Size in bytes (see formatstrings-size) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%t │ │"*" if the file is tagged, blank otherwise │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%u │ │Owner name (or numeric uid, if missing) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%>X│ │Right justify the rest of the string and pad with character "X" │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%|X│ │Pad to the end of the line with character "X" │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%*X│ │Soft-fill with character "X" as pad │ +# └───┴─┴───────────────────────────────────────────────────────────────────────┘ +# +# For an explanation of "soft-fill", see the $index_format documentation. +# +# * = can be optionally printed if nonzero +# +# %m, %n, and %N only work for monitored mailboxes. %m requires $mail_check_stats +# to be set. %n requires $mail_check_stats to be set (except for IMAP mailboxes). +# +set folder_format='%t%N%2C %D %4s %f' + + +# 3.103. followup_to +# +# Type: boolean +# Default: yes +# +# Controls whether or not the "Mail-Followup-To:" header field is generated when +# sending mail. When set, NeoMutt will generate this field when you are replying +# to a known mailing list, specified with the "subscribe" or "lists" commands. +# +# This field has two purposes. First, preventing you from receiving duplicate +# copies of replies to messages which you send to mailing lists, and second, +# ensuring that you do get a reply separately for any messages sent to known +# lists to which you are not subscribed. +# +# The header will contain only the list's address for subscribed lists, and both +# the list address and your own email address for unsubscribed lists. Without +# this header, a group reply to your message sent to a subscribed list will be +# sent to both the list and your address, resulting in two copies of the same +# email for you. +# + + +# 3.104. followup_to_poster +# +# Type: quadoption +# Default: ask-yes +# +# If this variable is set and the keyword "poster" is present in Followup-To +# header, follow-up to newsgroup function is not permitted. The message will be +# mailed to the submitter of the message via mail. +# + + +# 3.105. force_name +# +# Type: boolean +# Default: no +# +# This variable is similar to $save_name, except that NeoMutt will store a copy +# of your outgoing message by the username of the address you are sending to even +# if that mailbox does not exist. +# +# Also see the $record variable. +# + + +# 3.106. forward_attachments +# +# Type: quadoption +# Default: ask-yes +# +# When forwarding inline (i.e. $mime_forward unset or answered with "no" and +# $forward_decode set), attachments which cannot be decoded in a reasonable +# manner will be attached to the newly composed message if this quadoption is set +# or answered with "yes". +# + + +# 3.107. forward_attribution_intro +# +# Type: string +# Default: “----- Forwarded message from %f -----” +# +# This is the string that will precede a message which has been forwarded in the +# main body of a message (when $mime_forward is unset). For a full listing of +# defined printf(3)-like sequences see the section on $index_format. See also +# $attribution_locale. +# + + +# 3.108. forward_attribution_trailer +# +# Type: string +# Default: “----- End forwarded message -----” +# +# This is the string that will follow a message which has been forwarded in the +# main body of a message (when $mime_forward is unset). For a full listing of +# defined printf(3)-like sequences see the section on $index_format. See also +# $attribution_locale. +# + + +# 3.109. forward_decode +# +# Type: boolean +# Default: yes +# +# Controls the decoding of complex MIME messages into text/plain when forwarding +# a message. The message header is also RFC2047 decoded. This variable is only +# used, if $mime_forward is unset, otherwise $mime_forward_decode is used +# instead. +# + + +# 3.110. forward_decrypt +# +# Type: boolean +# Default: yes +# +# Controls the handling of encrypted messages when forwarding a message. When set +# , the outer layer of encryption is stripped off. This variable is only used if +# $mime_forward is set and $mime_forward_decode is unset. (PGP only) +# + + +# 3.111. forward_edit +# +# Type: quadoption +# Default: yes +# +# This quadoption controls whether or not the user is automatically placed in the +# editor when forwarding messages. For those who always want to forward with no +# modification, use a setting of "no". +# + + +# 3.112. forward_format +# +# Type: string +# Default: “[%a: %s]” +# +# This variable controls the default subject when forwarding a message. It uses +# the same format sequences as the $index_format variable. +# +set forward_format="(fwd) %s" + + +# 3.113. forward_quote +# +# Type: boolean +# Default: no +# +# When set, forwarded messages included in the main body of the message (when +# $mime_forward is unset) will be quoted using $indent_string. +# + + +# 3.114. forward_references +# +# Type: boolean +# Default: no +# +# When set, forwarded messages set the "In-Reply-To:" and "References:" headers +# in the same way as normal replies would. Hence the forwarded message becomes +# part of the original thread instead of starting a new one. +# + + +# 3.115. from +# +# Type: e-mail address +# Default: (empty) +# +# When set, this variable contains a default "from" address. It can be overridden +# using "my_hdr" (including from a "send-hook") and $reverse_name. This variable +# is ignored if $use_from is unset. +# +# If not specified, then it may be read from the environment variable $EMAIL. +# +set from='martin f krafft ' + + +# 3.116. from_chars +# +# Type: character string +# Default: (empty) +# +# Controls the character used to prefix the %F and %L fields in the index. +# +# ┌─────────┬───────────────────────────────────────────────────────────────────┐ +# │Character│Description │ +# ├─────────┼───────────────────────────────────────────────────────────────────┤ +# │1 │Mail is written by you and has a To address, or has a known mailing│ +# │ │list in the To address. │ +# ├─────────┼───────────────────────────────────────────────────────────────────┤ +# │2 │Mail is written by you and has a Cc address, or has a known mailing│ +# │ │list in the Cc address. │ +# ├─────────┼───────────────────────────────────────────────────────────────────┤ +# │3 │Mail is written by you and has a Bcc address. │ +# ├─────────┼───────────────────────────────────────────────────────────────────┤ +# │4 │All remaining cases. │ +# └─────────┴───────────────────────────────────────────────────────────────────┘ +# +# If this is empty or unset (default), the traditional long "To ", "Cc " and "Bcc +# " prefixes are used. If set but too short to include a character for a +# particular case, a single space will be prepended to the field. To prevent any +# prefix at all from being added in a particular case, use the special value CR +# (aka ^M) for the corresponding character. +# +# This slightly odd interface is necessitated by NeoMutt's handling of string +# variables; one can't tell a variable that is unset from one that is set to the +# empty string. +# + + +# 3.117. gecos_mask +# +# Type: regular expression +# Default: “^[^,]*” +# +# A regular expression used by NeoMutt to parse the GECOS field of a password +# entry when expanding the alias. The default value will return the string up to +# the first "," encountered. If the GECOS field contains a string like "lastname, +# firstname" then you should set it to ".*". +# +# This can be useful if you see the following behavior: you address an e-mail to +# user ID "stevef" whose full name is "Steve Franklin". If NeoMutt expands +# "stevef" to '"Franklin" stevef@foo.bar' then you should set the $gecos_mask to +# a regular expression that will match the whole name so NeoMutt will expand +# "Franklin" to "Franklin, Steve". +# + + +# 3.118. greeting +# +# Type: string +# Default: (empty) +# +# When set, this is the string that will precede every message as a greeting +# phrase to the recipients. +# +# "Format strings" are similar to the strings used in the "C" function printf to +# format output (see the man page for more detail). The following sequences are +# defined in NeoMutt: +# +# ┌──┬──────────────────────────────┐ +# │%n│Recipient's real name │ +# ├──┼──────────────────────────────┤ +# │%u│User (login) name of recipient│ +# ├──┼──────────────────────────────┤ +# │%v│First name of recipient │ +# └──┴──────────────────────────────┘ +# + + +# 3.119. group_index_format +# +# Type: string +# Default: “%4C %M%N %5s %-45.45f %d” +# +# This variable allows you to customize the newsgroup browser display to your +# personal taste. This string is similar to "index_format", but has its own set +# of printf()-like sequences: +# +# ┌───┬──────────────────────────────────────────────────────────────────┐ +# │%C │Current newsgroup number │ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%d │Description of newsgroup (becomes from server) │ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%f │Newsgroup name │ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%M │- if newsgroup not allowed for direct post (moderated for example)│ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%N │N if newsgroup is new, u if unsubscribed, blank otherwise │ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%n │Number of new articles in newsgroup │ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%s │Number of unread articles in newsgroup │ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%>X│Right justify the rest of the string and pad with character "X" │ +# ├───┼──────────────────────────────────────────────────────────────────┤ +# │%|X│Pad to the end of the line with character "X" │ +# └───┴──────────────────────────────────────────────────────────────────┘ +# + + +# 3.120. hdrs +# +# Type: boolean +# Default: yes +# +# When unset, the header fields normally added by the "my_hdr" command are not +# created. This variable must be unset before composing a new message or replying +# in order to take effect. If set, the user defined header fields are added to +# every new message. +# + + +# 3.121. header +# +# Type: boolean +# Default: no +# +# When set, this variable causes NeoMutt to include the header of the message you +# are replying to into the edit buffer. The $weed setting applies. +# + + +# 3.122. header_cache +# +# Type: path +# Default: (empty) +# +# This variable points to the header cache database. If the path points to an +# existing directory, NeoMutt will create a dedicated header cache database per +# folder. Otherwise, the path points to a regular file, which will be created as +# needed and used as a shared global header cache for all folders. By default it +# is unset so no header caching will be used. +# +# Header caching can greatly improve speed when opening POP, IMAP MH or Maildir +# folders, see "caching" for details. +# +set header_cache="~/.var/neomutt/header_cache" + + +# 3.123. header_cache_backend +# +# Type: string +# Default: (empty) +# +# This variable specifies the header cache backend. If no backend is specified, +# the first available backend will be used in the following order: tokyocabinet, +# kyotocabinet, qdbm, rocksdb, gdbm, bdb, tdb, lmdb. +# + + +# 3.124. header_color_partial +# +# Type: boolean +# Default: no +# +# When set, color header regexes behave like color body regexes: color is applied +# to the exact text matched by the regex. When unset, color is applied to the +# entire header. +# +# One use of this option might be to apply color to just the header labels. +# +# See "color" for more details. +# + + +# 3.125. help +# +# Type: boolean +# Default: yes +# +# When set, help lines describing the bindings for the major functions provided +# by each menu are displayed on the first line of the screen. +# +# Note: The binding will not be displayed correctly if the function is bound to a +# sequence rather than a single keystroke. Also, the help line may not be updated +# if a binding is changed while NeoMutt is running. Since this variable is +# primarily aimed at new users, neither of these should present a major problem. +# + + +# 3.126. hidden_host +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will skip the host name part of $hostname variable when +# adding the domain part to addresses. This variable does not affect the +# generation of Message-IDs, and it will not lead to the cut-off of first-level +# domains. +# + + +# 3.127. hidden_tags +# +# Type: string list +# Default: “unread,draft,flagged,passed,replied,attachment,signed,encrypted” +# +# This variable specifies a list of comma-separated private notmuch/imap tags +# which should not be printed on screen. +# + + +# 3.128. hide_limited +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will not show the presence of messages that are hidden by +# limiting, in the thread tree. +# + + +# 3.129. hide_missing +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will not show the presence of missing messages in the thread +# tree. +# + + +# 3.130. hide_thread_subject +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will not show the subject of messages in the thread tree that +# have the same subject as their parent or closest previously displayed sibling. +# + + +# 3.131. hide_top_limited +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will not show the presence of messages that are hidden by +# limiting, at the top of threads in the thread tree. Note that when +# $hide_limited is set, this option will have no effect. +# + + +# 3.132. hide_top_missing +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will not show the presence of missing messages at the top of +# threads in the thread tree. Note that when $hide_missing is set, this option +# will have no effect. +# + + +# 3.133. history +# +# Type: number +# Default: 10 +# +# This variable controls the size (in number of strings remembered) of the string +# history buffer per category. The buffer is cleared each time the variable is +# set. +# + + +# 3.134. history_file +# +# Type: path +# Default: “~/.mutthistory” +# +# The file in which NeoMutt will save its history. +# +# Also see $save_history. +# +set history_file="~/.var/neomutt/history" + + +# 3.135. history_remove_dups +# +# Type: boolean +# Default: no +# +# When set, all of the string history will be scanned for duplicates when a new +# entry is added. Duplicate entries in the $history_file will also be removed +# when it is periodically compacted. +# + + +# 3.136. honor_disposition +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will not display attachments with a disposition of +# "attachment" inline even if it could render the part to plain text. These MIME +# parts can only be viewed from the attachment menu. +# +# If unset, NeoMutt will render all MIME parts it can properly transform to plain +# text. +# + + +# 3.137. honor_followup_to +# +# Type: quadoption +# Default: yes +# +# This variable controls whether or not a Mail-Followup-To header is honored when +# group-replying to a message. +# + + +# 3.138. hostname +# +# Type: string +# Default: (empty) +# +# Specifies the fully-qualified hostname of the system NeoMutt is running on +# containing the host's name and the DNS domain it belongs to. It is used as the +# domain part (after "@") for local email addresses as well as Message-Id +# headers. +# +# If not specified in a config file, then NeoMutt will try to determine the +# hostname itself. +# +# Optionally, NeoMutt can be compiled with a fixed domain name. +# +# Also see $use_domain and $hidden_host. +# +# Note: On Debian systems, the default for this variable is obtained from /etc/ +# mailname when Mutt starts. +# + + +# 3.139. idn_decode +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will show you international domain names decoded. Note: You +# can use IDNs for addresses even if this is unset. This variable only affects +# decoding. (IDN only) +# + + +# 3.140. idn_encode +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will encode international domain names using IDN. Unset this +# if your SMTP server can handle newer (RFC6531) UTF-8 encoded domains. (IDN +# only) +# + + +# 3.141. ignore_list_reply_to +# +# Type: boolean +# Default: no +# +# Affects the behavior of the function when replying to messages from +# mailing lists (as defined by the "subscribe" or "lists" commands). When set, if +# the "Reply-To:" field is set to the same value as the "To:" field, NeoMutt +# assumes that the "Reply-To:" field was set by the mailing list to automate +# responses to the list, and will ignore this field. To direct a response to the +# mailing list when this option is set, use the function; +# will reply to both the sender and the list. +# +set ignore_list_reply_to=yes + + +# 3.142. imap_authenticators +# +# Type: string list +# Default: (empty) +# +# This is a colon-separated list of authentication methods NeoMutt may attempt to +# use to log in to an IMAP server, in the order NeoMutt should try them. +# Authentication methods are either "login" or the right side of an IMAP "AUTH= +# xxx" capability string, e.g. "digest-md5", "gssapi" or "cram-md5". This option +# is case-insensitive. If it's unset (the default) NeoMutt will try all available +# methods, in order from most-secure to least-secure. +# +# Example: +# +# set imap_authenticators="gssapi:cram-md5:login" +# +# Note: NeoMutt will only fall back to other authentication methods if the +# previous methods are unavailable. If a method is available but authentication +# fails, NeoMutt will not connect to the IMAP server. +# + + +# 3.143. imap_check_subscribed +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will fetch the set of subscribed folders from your server +# whenever a mailbox is selected, and add them to the set of mailboxes it polls +# for new mail just as if you had issued individual "mailboxes" commands. +# + + +# 3.144. imap_condstore +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will use the CONDSTORE extension (RFC7162) if advertised by +# the server. NeoMutt's current implementation is basic, used only for initial +# message fetching and flag updates. +# +# For some IMAP servers, enabling this will slightly speed up downloading initial +# messages. Unfortunately, Gmail is not one those, and displays worse performance +# when enabled. Your mileage may vary. +# + + +# 3.145. imap_delim_chars +# +# Type: string +# Default: “/.” +# +# This contains the list of characters that NeoMutt will use as folder separators +# for IMAP paths, when no separator is provided on the IMAP connection. +# + + +# 3.146. imap_fetch_chunk_size +# +# Type: number (long) +# Default: 0 +# +# When set to a value greater than 0, new headers will be downloaded in groups of +# this many headers per request. If you have a very large mailbox, this might +# prevent a timeout and disconnect when opening the mailbox, by sending a FETCH +# per set of this many headers, instead of a single FETCH for all new headers. +# + + +# 3.147. imap_headers +# +# Type: string +# Default: (empty) +# +# NeoMutt requests these header fields in addition to the default headers +# ("Date:", "From:", "Sender:", "Subject:", "To:", "Cc:", "Message-Id:", +# "References:", "Content-Type:", "Content-Description:", "In-Reply-To:", +# "Reply-To:", "Lines:", "List-Post:", "X-Label:") from IMAP servers before +# displaying the index menu. You may want to add more headers for spam detection. +# +# Note: This is a space separated list, items should be uppercase and not contain +# the colon, e.g. "X-BOGOSITY X-SPAM-STATUS" for the "X-Bogosity:" and +# "X-Spam-Status:" header fields. +# + + +# 3.148. imap_idle +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will attempt to use the IMAP IDLE extension to check for new +# mail in the current mailbox. Some servers (dovecot was the inspiration for this +# option) react badly to NeoMutt's implementation. If your connection seems to +# freeze up periodically, try unsetting this. +# + + +# 3.149. imap_keepalive +# +# Type: number +# Default: 300 +# +# This variable specifies the maximum amount of time in seconds that NeoMutt will +# wait before polling open IMAP connections, to prevent the server from closing +# them before NeoMutt has finished with them. The default is well within the +# RFC-specified minimum amount of time (30 minutes) before a server is allowed to +# do this, but in practice the RFC does get violated every now and then. Reduce +# this number if you find yourself getting disconnected from your IMAP server due +# to inactivity. +# + + +# 3.150. imap_list_subscribed +# +# Type: boolean +# Default: no +# +# This variable configures whether IMAP folder browsing will look for only +# subscribed folders or all folders. This can be toggled in the IMAP browser with +# the function. +# + + +# 3.151. imap_login +# +# Type: string +# Default: (empty) +# +# Your login name on the IMAP server. +# +# This variable defaults to the value of $imap_user. +# + + +# 3.152. imap_oauth_refresh_command +# +# Type: command +# Default: (empty) +# +# The command to run to generate an OAUTH refresh token for authorizing your +# connection to your IMAP server. This command will be run on every connection +# attempt that uses the OAUTHBEARER or XOAUTH2 authentication mechanisms. See " +# oauth" for details. +# + + +# 3.153. imap_pass +# +# Type: string +# Default: (empty) +# +# Specifies the password for your IMAP account. If unset, NeoMutt will prompt you +# for your password when you invoke the function or try to open +# an IMAP folder. +# +# Warning: you should only use this option when you are on a fairly secure +# machine, because the superuser can read your neomuttrc even if you are the only +# one who can read the file. +# + + +# 3.154. imap_passive +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will not open new IMAP connections to check for new mail. +# NeoMutt will only check for new mail over existing IMAP connections. This is +# useful if you don't want to be prompted for user/password pairs on NeoMutt +# invocation, or if opening the connection is slow. +# + + +# 3.155. imap_peek +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will avoid implicitly marking your mail as read whenever you +# fetch a message from the server. This is generally a good thing, but can make +# closing an IMAP folder somewhat slower. This option exists to appease speed +# freaks. +# + + +# 3.156. imap_pipeline_depth +# +# Type: number +# Default: 15 +# +# Controls the number of IMAP commands that may be queued up before they are sent +# to the server. A deeper pipeline reduces the amount of time NeoMutt must wait +# for the server, and can make IMAP servers feel much more responsive. But not +# all servers correctly handle pipelined commands, so if you have problems you +# might want to try setting this variable to 0. +# +# Note: Changes to this variable have no effect on open connections. +# + + +# 3.157. imap_poll_timeout +# +# Type: number +# Default: 15 +# +# This variable specifies the maximum amount of time in seconds that NeoMutt will +# wait for a response when polling IMAP connections for new mail, before timing +# out and closing the connection. Set to 0 to disable timing out. +# + + +# 3.158. imap_qresync +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will use the QRESYNC extension (RFC7162) if advertised by the +# server. NeoMutt's current implementation is basic, used only for initial +# message fetching and flag updates. +# +# Note: this feature is currently experimental. If you experience strange +# behavior, such as duplicate or missing messages please file a bug report to let +# us know. +# + + +# 3.159. imap_rfc5161 +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will use the IMAP ENABLE extension (RFC5161) to select +# CAPABILITIES. Some servers (notably Coremail System IMap Server) do not +# properly respond to ENABLE commands, which might cause NeoMutt to hang. If your +# connection seems to freeze at login, try unsetting this. See also https:// +# github.com/neomutt/neomutt/issues/1689 +# + + +# 3.160. imap_server_noise +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will display warning messages from the IMAP server as error +# messages. Since these messages are often harmless, or generated due to +# configuration problems on the server which are out of the users' hands, you may +# wish to suppress them at some point. +# + + +# 3.161. imap_user +# +# Type: string +# Default: (empty) +# +# The name of the user whose mail you intend to access on the IMAP server. +# +# This variable defaults to your user name on the local machine. +# + + +# 3.162. implicit_autoview +# +# Type: boolean +# Default: no +# +# If set to "yes", NeoMutt will look for a mailcap entry with the "copiousoutput" +# flag set for every MIME attachment it doesn't have an internal viewer defined +# for. If such an entry is found, NeoMutt will use the viewer defined in that +# entry to convert the body part to text form. +# +set implicit_autoview=no + + +# 3.163. include +# +# Type: quadoption +# Default: ask-yes +# +# Controls whether or not a copy of the message(s) you are replying to is +# included in your reply. +# +set include=yes + + +# 3.164. include_encrypted +# +# Type: boolean +# Default: no +# +# Controls whether or not NeoMutt includes separately encrypted attachment +# contents when replying. +# +# This variable was added to prevent accidental exposure of encrypted contents +# when replying to an attacker. If a previously encrypted message were attached +# by the attacker, they could trick an unwary recipient into decrypting and +# including the message in their reply. +# + + +# 3.165. include_only_first +# +# Type: boolean +# Default: no +# +# Controls whether or not NeoMutt includes only the first attachment of the +# message you are replying. +# + + +# 3.166. indent_string +# +# Type: string +# Default: “> ” +# +# Specifies the string to prepend to each line of text quoted in a message to +# which you are replying. You are strongly encouraged not to change this value, +# as it tends to agitate the more fanatical netizens. +# +# The value of this option is ignored if $text_flowed is set, because the quoting +# mechanism is strictly defined for format=flowed. +# +# This option is a format string, please see the description of $index_format for +# supported printf(3)-style sequences. +# + + +# 3.167. index_format +# +# Type: string +# Default: “%4C %Z %{%b %d} %-15.15L (%?l?%4l&%4c?) %s” +# +# This variable allows you to customize the message index display to your +# personal taste. +# +# "Format strings" are similar to the strings used in the C function printf(3) to +# format output (see the man page for more details). For an explanation of the %? +# construct, see the status_format description. The following sequences are +# defined in NeoMutt: +# +# ┌───────┬─────────────────────────────────────────────────────────────────────┐ +# │%a │Address of the author │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%A │Reply-to address (if present; otherwise: address of author) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%b │Filename of the original message folder (think mailbox) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%B │Same as %K │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%C │Current message number │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%c │Number of characters (bytes) in the body of the message (see │ +# │ │formatstrings-size) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%cr │Number of characters (bytes) in the raw message, including the header│ +# │ │(see formatstrings-size) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%D │Date and time of message using date_format and local timezone │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%d │Date and time of message using date_format and sender's timezone │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%e │Current message number in thread │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%E │Number of messages in current thread │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%F │Author name, or recipient name if the message is from you │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%Fp │Like %F, but plain. No contextual formatting is applied to recipient │ +# │ │name │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%f │Sender (address + real name), either From: or Return-Path: │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%g │Newsgroup name (if compiled with NNTP support) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%g │Message tags (e.g. notmuch tags/imap flags) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%Gx │Individual message tag (e.g. notmuch tags/imap flags) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%H │Spam attribute(s) of this message │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%I │Initials of author │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%i │Message-id of the current message │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%J │Message tags (if present, tree unfolded, and != parent's tags) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%K │The list to which the letter was sent (if any; otherwise: empty) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │ │If an address in the "To:" or "Cc:" header field matches an address │ +# │%L │Defined by the user's "subscribe" command, this displays "To │ +# │ │", otherwise the same as %F │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%l │number of lines in the unprocessed message (may not work with │ +# │ │maildir, mh, and IMAP folders) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%M │Number of hidden messages if the thread is collapsed │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%m │Total number of message in the mailbox │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%N │Message score │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%n │Author's real name (or address if missing) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%O │Original save folder where NeoMutt would formerly have Stashed the │ +# │ │message: list name or recipient name If not sent to a list │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%P │Progress indicator for the built-in pager (how much of the file has │ +# │ │been displayed) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%q │Newsgroup name (if compiled with NNTP support) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%R │Comma separated list of "Cc:" recipients │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%r │Comma separated list of "To:" recipients │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%S │Single character status of the message ("N"/"O"/"D"/"d"/"!"/"r"/"*") │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%s │Subject of the message │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%T │The appropriate character from the $to_chars string │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%t │"To:" field (recipients) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%u │User (login) name of the author │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%v │First name of the author, or the recipient if the message is from you│ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%W │Name of organization of author ("Organization:" field) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%x │"X-Comment-To:" field (if present and compiled with NNTP support) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%X │Number of MIME attachments (please see the "attachments" section for │ +# │ │possible speed effects) │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │ │"X-Label:" field, if present, and (1) not at part of a thread tree, │ +# │%Y │(2) at the top of a thread, or (3) "X-Label:" is different from │ +# │ │Preceding message's "X-Label:" │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%y │"X-Label:" field, if present │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │ │A three character set of message status flags. The first character is│ +# │ │new/read/replied flags ("n"/"o"/"r"/"O"/"N"). The second is deleted │ +# │%Z │or encryption flags ("D"/"d"/"S"/"P"/"s"/"K"). The third is either │ +# │ │tagged/flagged ("*"/"!"), or one of the characters Listed in │ +# │ │$to_chars. │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%zc │Message crypto flags │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%zs │Message status flags │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%zt │Message tag flags │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%@name@│insert and evaluate format-string from the matching " │ +# │ │index-format-hook" command │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │ │the date and time of the message is converted to sender's time zone, │ +# │ │and "fmt" is expanded by the library function strftime(3); if the │ +# │%{fmt} │first character inside the braces is a bang ("!"), the date is │ +# │ │formatted ignoring any locale settings. Note that the sender's time │ +# │ │zone might only be available as a numerical offset, so "%Z" behaves │ +# │ │like "%z". │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │ │the date and time of the message is converted to the local time zone,│ +# │%[fmt] │and "fmt" is expanded by the library function strftime(3); if the │ +# │ │first character inside the brackets is a bang ("!"), the date is │ +# │ │formatted ignoring any locale settings. │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │ │the local date and time when the message was received, and "fmt" is │ +# │%(fmt) │expanded by the library function strftime(3); if the first character │ +# │ │inside the parentheses is a bang ("!"), the date is formatted │ +# │ │ignoring any locale settings. │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%>X │right justify the rest of the string and pad with character "X" │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%|X │pad to the end of the line with character "X" │ +# ├───────┼─────────────────────────────────────────────────────────────────────┤ +# │%*X │soft-fill with character "X" as pad │ +# └───────┴─────────────────────────────────────────────────────────────────────┘ +# +# Date format expressions can be constructed based on relative dates. Using the +# date formatting operators along with nested conditionals, the date format can +# be modified based on how old a message is. See the section on "Conditional +# Dates" for an explanation and examples +# +# Note that for mbox/mmdf, "%l" applies to the unprocessed message, and for +# maildir/mh, the value comes from the "Lines:" header field when present (the +# meaning is normally the same). Thus the value depends on the encodings used in +# the different parts of the message and has little meaning in practice. +# +# "Soft-fill" deserves some explanation: Normal right-justification will print +# everything to the left of the "%>", displaying padding and whatever lies to the +# right only if there's room. By contrast, soft-fill gives priority to the +# right-hand side, guaranteeing space to display it and showing padding only if +# there's still room. If necessary, soft-fill will eat text leftwards to make +# room for rightward text. +# +# Note that these expandos are supported in "save-hook", "fcc-hook" and " +# fcc-save-hook", too. +# + + +# 3.168. inews +# +# Type: command +# Default: (empty) +# +# If set, specifies the program and arguments used to deliver news posted by +# NeoMutt. Otherwise, NeoMutt posts article using current connection to news +# server. The following printf-style sequence is understood: +# +# ┌──┬──────────────────┐ +# │%a│account url │ +# ├──┼──────────────────┤ +# │%p│port │ +# ├──┼──────────────────┤ +# │%P│port if specified │ +# ├──┼──────────────────┤ +# │%s│news server name │ +# ├──┼──────────────────┤ +# │%S│url schema │ +# ├──┼──────────────────┤ +# │%u│username │ +# └──┴──────────────────┘ +# +# Example: +# +# set inews="/usr/local/bin/inews -hS" +# + + +# 3.169. ispell +# +# Type: command +# Default: “ispell” +# +# How to invoke ispell (GNU's spell-checking software). +# + + +# 3.170. keep_flagged +# +# Type: boolean +# Default: no +# +# If set, read messages marked as flagged will not be moved from your spool +# mailbox to your $mbox mailbox, or as a result of a "mbox-hook" command. +# + + +# 3.171. local_date_header +# +# Type: boolean +# Default: yes +# +# If set, the date in the Date header of emails that you send will be in your +# local timezone. If unset a UTC date will be used instead to avoid leaking +# information about your current location. +# + + +# 3.172. mail_check +# +# Type: number +# Default: 5 +# +# This variable configures how often (in seconds) NeoMutt should look for new +# mail. Also see the $timeout variable. +# + + +# 3.173. mail_check_recent +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will only notify you about new mail that has been received +# since the last time you opened the mailbox. When unset, NeoMutt will notify you +# if any new mail exists in the mailbox, regardless of whether you have visited +# it recently. +# +# When $mark_old is set, NeoMutt does not consider the mailbox to contain new +# mail if only old messages exist. +# + + +# 3.174. mail_check_stats +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will periodically calculate message statistics of a mailbox +# while polling for new mail. It will check for unread, flagged, and total +# message counts. Because this operation is more performance intensive, it +# defaults to unset, and has a separate option, $mail_check_stats_interval, to +# control how often to update these counts. +# +# Message statistics can also be explicitly calculated by invoking the +# function. +# +set mail_check_stats=yes + + +# 3.175. mail_check_stats_interval +# +# Type: number +# Default: 60 +# +# When $mail_check_stats is set, this variable configures how often (in seconds) +# NeoMutt will update message counts. +# + + +# 3.176. mailcap_path +# +# Type: string list +# Default: “~/.mailcap:/usr/share/neomutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/ +# etc/mailcap:/usr/local/etc/mailcap” +# +# This variable specifies a list of colon-separated files to consult when +# attempting to display MIME bodies not directly supported by NeoMutt. The +# default value is generated during startup: see the "mailcap" section of the +# manual. +# +# $mailcap_path is overridden by the environment variable $MAILCAPS. +# +# The default search path is from RFC1524. +# +set mailcap_path="$my_confdir/mailcap.containers:$my_confdir/mailcap.icalendar:$my_confdir/mailcap.backgrounding:$my_confdir/mailcap.htmldump" + + +# 3.177. mailcap_sanitize +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt will restrict possible characters in mailcap % expandos to a +# well-defined set of safe characters. This is the safe setting, but we are not +# sure it doesn't break some more advanced MIME stuff. +# +# DON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE DOING! +# + + +# 3.178. maildir_check_cur +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will poll both the new and cur directories of a maildir folder +# for new messages. This might be useful if other programs interacting with the +# folder (e.g. dovecot) are moving new messages to the cur directory. Note that +# setting this option may slow down polling for new messages in large folders, +# since NeoMutt has to scan all cur messages. +# + + +# 3.179. maildir_header_cache_verify +# +# Type: boolean +# Default: yes +# +# Check for Maildir unaware programs other than NeoMutt having modified maildir +# files when the header cache is in use. This incurs one stat(2) per message +# every time the folder is opened (which can be very slow for NFS folders). +# +set maildir_header_cache_verify=no + + +# 3.180. maildir_trash +# +# Type: boolean +# Default: no +# +# If set, messages marked as deleted will be saved with the maildir trashed flag +# instead of unlinked. Note: this only applies to maildir-style mailboxes. +# Setting it will have no effect on other mailbox types. +# + + +# 3.181. mark_macro_prefix +# +# Type: string +# Default: “'” +# +# Prefix for macros created using mark-message. A new macro automatically +# generated with a will be composed from this prefix and the letter +# a. +# + + +# 3.182. mark_old +# +# Type: boolean +# Default: yes +# +# Controls whether or not NeoMutt marks new unread messages as old if you exit a +# mailbox without reading them. With this option set, the next time you start +# NeoMutt, the messages will show up with an "O" next to them in the index menu, +# indicating that they are old. +# +set mark_old=no + + +# 3.183. markers +# +# Type: boolean +# Default: yes +# +# Controls the display of wrapped lines in the internal pager. If set, a "+" +# marker is displayed at the beginning of wrapped lines. +# +# Also see the $smart_wrap variable. +# +set markers=no + + +# 3.184. mask +# +# Type: regular expression +# Default: “!^.[^.]” +# +# A regular expression used in the file browser, optionally preceded by the not +# operator "!". Only files whose names match this mask will be shown. The match +# is always case-sensitive. +# + + +# 3.185. mbox +# +# Type: mailbox +# Default: “~/mbox” +# +# This specifies the folder into which read mail in your $spool_file folder will +# be appended. +# +# Also see the $move variable. +# +set mbox="=spool" + + +# 3.186. mbox_type +# +# Type: enumeration +# Default: mbox +# +# The default mailbox type used when creating new folders. May be any of "mbox", +# "MMDF", "MH" or "Maildir". +# +# This can also be set using the -m command-line option. +# +set mbox_type=Maildir + + +# 3.187. me_too +# +# Type: boolean +# Default: no +# +# If unset, NeoMutt will remove your address (see the "alternates" command) from +# the list of recipients when replying to a message. +# + + +# 3.188. menu_context +# +# Type: number +# Default: 0 +# +# This variable controls the number of lines of context that are given when +# scrolling through menus. (Similar to $pager_context.) +# +set menu_context=5 + + +# 3.189. menu_move_off +# +# Type: boolean +# Default: yes +# +# When unset, the bottom entry of menus will never scroll up past the bottom of +# the screen, unless there are less entries than lines. When set, the bottom +# entry may move off the bottom. +# + + +# 3.190. menu_scroll +# +# Type: boolean +# Default: no +# +# When set, menus will be scrolled up or down one line when you attempt to move +# across a screen boundary. If unset, the screen is cleared and the next or +# previous page of the menu is displayed (useful for slow links to avoid many +# redraws). +# +set menu_scroll=yes + + +# 3.191. message_cache_clean +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will clean out obsolete entries from the message cache when the +# mailbox is synchronized. You probably only want to set it every once in a +# while, since it can be a little slow (especially for large folders). +# + + +# 3.192. message_cachedir +# +# Type: path +# Default: (empty) +# +# Set this to a directory and NeoMutt will cache copies of messages from your +# IMAP and POP servers here. You are free to remove entries at any time. +# +# When setting this variable to a directory, NeoMutt needs to fetch every remote +# message only once and can perform regular expression searches as fast as for +# local folders. +# +# Also see the $message_cache_clean variable. +# + + +# 3.193. message_format +# +# Type: string +# Default: “%s” +# +# This is the string displayed in the "attachment" menu for attachments of type +# message/rfc822. For a full listing of defined printf(3)-like sequences see the +# section on $index_format. +# + + +# 3.194. meta_key +# +# Type: boolean +# Default: no +# +# If set, forces NeoMutt to interpret keystrokes with the high bit (bit 8) set as +# if the user had pressed the Esc key and whatever key remains after having the +# high bit removed. For example, if the key pressed has an ASCII value of 0xf8, +# then this is treated as if the user had pressed Esc then "x". This is because +# the result of removing the high bit from 0xf8 is 0x78, which is the ASCII +# character "x". +# + + +# 3.195. mh_purge +# +# Type: boolean +# Default: no +# +# When unset, NeoMutt will mimic mh's behavior and rename deleted messages to , +# in mh folders instead of really deleting them. This leaves the +# message on disk but makes programs reading the folder ignore it. If the +# variable is set, the message files will simply be deleted. +# +# This option is similar to $maildir_trash for Maildir folders. +# + + +# 3.196. mh_seq_flagged +# +# Type: string +# Default: “flagged” +# +# The name of the MH sequence used for flagged messages. +# + + +# 3.197. mh_seq_replied +# +# Type: string +# Default: “replied” +# +# The name of the MH sequence used to tag replied messages. +# + + +# 3.198. mh_seq_unseen +# +# Type: string +# Default: “unseen” +# +# The name of the MH sequence used for unseen messages. +# + + +# 3.199. mime_forward +# +# Type: quadoption +# Default: no +# +# When set, the message you are forwarding will be attached as a separate message +# /rfc822 MIME part instead of included in the main body of the message. This is +# useful for forwarding MIME messages so the receiver can properly view the +# message as it was delivered to you. If you like to switch between MIME and not +# MIME from mail to mail, set this variable to "ask-no" or "ask-yes". +# +# Also see $forward_decode and $mime_forward_decode. +# +set mime_forward=ask-yes + + +# 3.200. mime_forward_decode +# +# Type: boolean +# Default: no +# +# Controls the decoding of complex MIME messages into text/plain when forwarding +# a message while $mime_forward is set. Otherwise $forward_decode is used +# instead. +# + + +# 3.201. mime_forward_rest +# +# Type: quadoption +# Default: yes +# +# When forwarding multiple attachments of a MIME message from the attachment +# menu, attachments which can't be decoded in a reasonable manner will be +# attached to the newly composed message if this option is set. +# + + +# 3.202. mime_type_query_command +# +# Type: command +# Default: (empty) +# +# This specifies a command to run, to determine the mime type of a new attachment +# when composing a message. Unless $mime_type_query_first is set, this will only +# be run if the attachment's extension is not found in the mime.types file. +# +# The string may contain a "%s", which will be substituted with the attachment +# filename. NeoMutt will add quotes around the string substituted for "%s" +# automatically according to shell quoting rules, so you should avoid adding your +# own. If no "%s" is found in the string, NeoMutt will append the attachment +# filename to the end of the string. +# +# The command should output a single line containing the attachment's mime type. +# +# Suggested values are "xdg-mime query filetype" or "file -bi". +# + + +# 3.203. mime_type_query_first +# +# Type: boolean +# Default: no +# +# When set, the $mime_type_query_command will be run before the mime.types +# lookup. +# + + +# 3.204. mix_entry_format +# +# Type: string +# Default: “%4n %c %-16s %a” +# +# This variable describes the format of a remailer line on the mixmaster chain +# selection screen. The following printf(3)-like sequences are supported: +# +# ┌───┬───────────────────────────────────────────────────────────────┐ +# │%a │The remailer's e-mail address │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%c │Remailer capabilities │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%n │The running number on the menu │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%s │The remailer's short name │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%>X│right justify the rest of the string and pad with character "X"│ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%|X│pad to the end of the line with character "X" │ +# ├───┼───────────────────────────────────────────────────────────────┤ +# │%*X│soft-fill with character "X" as pad │ +# └───┴───────────────────────────────────────────────────────────────┘ +# + + +# 3.205. mixmaster +# +# Type: command +# Default: “mixmaster” +# +# This variable contains the path to the Mixmaster binary on your system. It is +# used with various sets of parameters to gather the list of known remailers, and +# to finally send a message through the mixmaster chain. +# +# Note: On Debian systems, this option is set by default to “mixmaster-filter” in +# /etc/Muttrc. +# +set mixmaster="mixmaster-filter" + + +# 3.206. move +# +# Type: quadoption +# Default: no +# +# Controls whether or not NeoMutt will move read messages from your spool mailbox +# to your $mbox mailbox, or as a result of a "mbox-hook" command. +# +set move=no + + +# 3.207. narrow_tree +# +# Type: boolean +# Default: no +# +# This variable, when set, makes the thread tree narrower, allowing deeper +# threads to fit on the screen. +# +set narrow_tree=yes + + +# 3.208. net_inc +# +# Type: number +# Default: 10 +# +# Operations that expect to transfer a large amount of data over the network will +# update their progress every $net_inc kilobytes. If set to 0, no progress +# messages will be displayed. +# +# See also $read_inc, $write_inc and $net_inc. +# + + +# 3.209. new_mail_command +# +# Type: command +# Default: (empty) +# +# If set, NeoMutt will call this command after a new message is received. See the +# $status_format documentation for the values that can be formatted into this +# command. +# + + +# 3.210. news_cache_dir +# +# Type: path +# Default: “~/.neomutt” +# +# This variable pointing to directory where NeoMutt will save cached news +# articles and headers in. If unset, articles and headers will not be saved at +# all and will be reloaded from the server each time. +# + + +# 3.211. news_server +# +# Type: string +# Default: (empty) +# +# This variable specifies domain name or address of NNTP server. +# +# You can also specify username and an alternative port for each news server, +# e.g. [[s]news://][username[:password]@]server[:port] +# +# This option can also be set using the command line option "-g", the environment +# variable $NNTPSERVER, or putting the server name in the file "/etc/nntpserver". +# + + +# 3.212. newsgroups_charset +# +# Type: string +# Default: “utf-8” +# +# Character set of newsgroups descriptions. +# + + +# 3.213. newsrc +# +# Type: path +# Default: “~/.newsrc” +# +# The file, containing info about subscribed newsgroups - names and indexes of +# read articles. The following printf-style sequence is understood: +# +# ┌───────┬─────────────────┬───────────────────┐ +# │Expando│Description │Example │ +# ├───────┼─────────────────┼───────────────────┤ +# │%a │Account url │news:news.gmane.org│ +# ├───────┼─────────────────┼───────────────────┤ +# │%p │Port │119 │ +# ├───────┼─────────────────┼───────────────────┤ +# │%P │Port if specified│10119 │ +# ├───────┼─────────────────┼───────────────────┤ +# │%s │News server name │news.gmane.org │ +# ├───────┼─────────────────┼───────────────────┤ +# │%S │Url schema │news │ +# ├───────┼─────────────────┼───────────────────┤ +# │%u │Username │username │ +# └───────┴─────────────────┴───────────────────┘ +# + + +# 3.214. nm_db_limit +# +# Type: number +# Default: 0 +# +# This variable specifies the default limit used in notmuch queries. +# + + +# 3.215. nm_default_url +# +# Type: string +# Default: (empty) +# +# This variable specifies the default Notmuch database in format notmuch:// +# . +# +#set nm_default_url="notmuch://$HOME/nmmail" + + +# 3.216. nm_exclude_tags +# +# Type: string +# Default: (empty) +# +# The messages tagged with these tags are excluded and not loaded from notmuch DB +# to NeoMutt unless specified explicitly. +# + + +# 3.217. nm_flagged_tag +# +# Type: string +# Default: “flagged” +# +# This variable specifies notmuch tag which is used for flagged messages. The +# variable is used to count flagged messages in DB and set the flagged flag when +# modifying tags. All other NeoMutt commands use standard (e.g. maildir) flags. +# + + +# 3.218. nm_open_timeout +# +# Type: number +# Default: 5 +# +# This variable specifies the timeout for database open in seconds. +# + + +# 3.219. nm_query_type +# +# Type: string +# Default: “messages” +# +# This variable specifies the default query type (threads or messages) used in +# notmuch queries. +# +#set nm_query_type="threads" + + +# 3.220. nm_query_window_current_position +# +# Type: number +# Default: 0 +# +# This variable contains the position of the current search for window based +# vfolder. +# + + +# 3.221. nm_query_window_current_search +# +# Type: string +# Default: (empty) +# +# This variable contains the currently setup notmuch search for window based +# vfolder. +# + + +# 3.222. nm_query_window_duration +# +# Type: number +# Default: 0 +# +# This variable sets the time duration of a windowed notmuch query. Accepted +# values all non negative integers. A value of 0 disables the feature. +# +#set nm_query_window_duration=2 + + +# 3.223. nm_query_window_enable +# +# Type: boolean +# Default: no +# +# This variable enables windowed notmuch queries even if window duration is 0. +# +#set nm_query_window_enable=yes + + +# 3.224. nm_query_window_or_terms +# +# Type: string +# Default: (empty) +# +# This variable contains additional notmuch search terms for messages to be shown +# regardless of date. +# +# Example: +# +# Using "notmuch://?query=tag:inbox" as the mailbox and "tag:flagged and +# tag:unread" as the or terms, NeoMutt will produce a query window such as: +# +# notmuch://?query=tag:inbox and (date:... or (tag:flagged and tag:unread)) +# +#set nm_query_window_or_terms="tag:unread and tag:flagged" + + +# 3.225. nm_query_window_timebase +# +# Type: string +# Default: “week” +# +# This variable sets the time base of a windowed notmuch query. Accepted values +# are 'minute', 'hour', 'day', 'week', 'month', 'year' +# + + +# 3.226. nm_record +# +# Type: boolean +# Default: no +# +# This variable specifies whether, when writing a just-sent message to the +# $record, the message should also be added to the notmuch DB. Replies inherit +# the notmuch tags from the original message. See $nm_record_tags for how to +# modify the set of notmuch tags assigned to sent messages written to the record. +# +#set nm_record=yes + + +# 3.227. nm_record_tags +# +# Type: string +# Default: (empty) +# +# This variable specifies the notmuch tag modifications (addition, removal, +# toggling) applied to messages added to the Neomutt record when $nm_record is +# true. See the description of the function for the syntax. +# +#set nm_record_tags="-unread,reply,archive" + + +# 3.228. nm_replied_tag +# +# Type: string +# Default: “replied” +# +# This variable specifies notmuch tag which is used for replied messages. The +# variable is used to set the replied flag when modifying tags. All other NeoMutt +# commands use standard (e.g. maildir) flags. +# + + +# 3.229. nm_unread_tag +# +# Type: string +# Default: “unread” +# +# This variable specifies notmuch tag which is used for unread messages. The +# variable is used to count unread messages in DB and set the unread flag when +# modifiying tags. All other NeoMutt commands use standard (e.g. maildir) flags. +# + + +# 3.230. nntp_authenticators +# +# Type: string +# Default: (empty) +# +# This is a colon-delimited list of authentication methods NeoMutt may attempt to +# use to log in to a news server, in the order NeoMutt should try them. +# Authentication methods are either "user" or any SASL mechanism, e.g. +# "digest-md5", "gssapi" or "cram-md5". This option is case-insensitive. If it's +# unset (the default) NeoMutt will try all available methods, in order from +# most-secure to least-secure. +# +# Example: +# +# set nntp_authenticators="digest-md5:user" +# +# Note: NeoMutt will only fall back to other authentication methods if the +# previous methods are unavailable. If a method is available but authentication +# fails, NeoMutt will not connect to the IMAP server. +# + + +# 3.231. nntp_context +# +# Type: number +# Default: 1000 +# +# This variable defines number of articles which will be in index when newsgroup +# entered. If active newsgroup have more articles than this number, oldest +# articles will be ignored. Also controls how many articles headers will be saved +# in cache when you quit newsgroup. +# + + +# 3.232. nntp_listgroup +# +# Type: boolean +# Default: yes +# +# This variable controls whether or not existence of each article is checked when +# newsgroup is entered. +# + + +# 3.233. nntp_load_description +# +# Type: boolean +# Default: yes +# +# This variable controls whether or not descriptions for each newsgroup must be +# loaded when newsgroup is added to list (first time list loading or new +# newsgroup adding). +# + + +# 3.234. nntp_pass +# +# Type: string +# Default: (empty) +# +# Your password for NNTP account. +# + + +# 3.235. nntp_poll +# +# Type: number +# Default: 60 +# +# The time in seconds until any operations on newsgroup except post new article +# will cause recheck for new news. If set to 0, NeoMutt will recheck newsgroup on +# each operation in index (stepping, read article, etc.). +# + + +# 3.236. nntp_user +# +# Type: string +# Default: (empty) +# +# Your login name on the NNTP server. If unset and NNTP server requires +# authentication, NeoMutt will prompt you for your account name when you connect +# to news server. +# + + +# 3.237. pager +# +# Type: command +# Default: “builtin” +# +# This variable specifies which pager you would like to use to view messages. The +# value "builtin" means to use the built-in pager, otherwise this variable should +# specify the pathname of the external pager you would like to use. +# +# Using an external pager may have some disadvantages: Additional keystrokes are +# necessary because you can't call NeoMutt functions directly from the pager, and +# screen resizes cause lines longer than the screen width to be badly formatted +# in the help menu. +# + + +# 3.238. pager_context +# +# Type: number +# Default: 0 +# +# This variable controls the number of lines of context that are given when +# displaying the next or previous page in the internal pager. By default, NeoMutt +# will display the line after the last one on the screen at the top of the next +# page (0 lines of context). +# +# This variable also specifies the amount of context given for search results. If +# positive, this many lines will be given before a match, if 0, the match will be +# top-aligned. +# +set pager_context=2 + + +# 3.239. pager_format +# +# Type: string +# Default: “-%Z- %C/%m: %-20.20n %s%* -- (%P)” +# +# This variable controls the format of the one-line message "status" displayed +# before each message in either the internal or an external pager. The valid +# sequences are listed in the $index_format section. +# +set pager_format="<%a> %* %i (%P)" + + +# 3.240. pager_index_lines +# +# Type: number +# Default: 0 +# +# Determines the number of lines of a mini-index which is shown when in the +# pager. The current message, unless near the top or bottom of the folder, will +# be roughly one third of the way down this mini-index, giving the reader the +# context of a few messages before and after the message. This is useful, for +# example, to determine how many messages remain to be read in the current +# thread. A value of 0 results in no index being shown. If the number of messages +# in the current folder is less than $pager_index_lines, then the index will only +# use as many lines as it needs. +# +set pager_index_lines=$menu_context + + +# 3.241. pager_read_delay +# +# Type: number +# Default: 0 +# +# Determines the number of seconds that must elapse after first opening a new +# message in the pager before that message will be marked as read. A value of 0 +# results in the message being marked read unconditionally; for other values, +# navigating to another message or exiting the pager before the timeout will +# leave the message marked unread. This setting is ignored if $pager is not +# builtin. +# + + +# 3.242. pager_skip_quoted_context +# +# Type: number +# Default: 0 +# +# Determines the number of lines of context to show before the unquoted text when +# using the function. When set to a positive number at most that +# many lines of the previous quote are displayed. If the previous quote is +# shorter the whole quote is displayed. +# +# The (now deprecated) skip_quoted_offset is an alias for this variable, and +# should no longer be used. +# + + +# 3.243. pager_stop +# +# Type: boolean +# Default: no +# +# When set, the internal-pager will not move to the next message when you are at +# the end of a message and invoke the function. +# +set pager_stop=yes + + +# 3.244. pattern_format +# +# Type: string +# Default: “%2n %-15e %d” +# +# This variable describes the format of the "pattern completion" menu. The +# following printf(3)-style sequences are understood: +# +# ┌──┬────────────────────┐ +# │%d│pattern description │ +# ├──┼────────────────────┤ +# │%e│pattern expression │ +# ├──┼────────────────────┤ +# │%n│index number │ +# └──┴────────────────────┘ +# + + +# 3.245. pgp_auto_decode +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will automatically attempt to decrypt traditional PGP messages +# whenever the user performs an operation which ordinarily would result in the +# contents of the message being operated on. For example, if the user displays a +# pgp-traditional message which has not been manually checked with the +# function, NeoMutt will automatically check the message +# for traditional pgp. +# + + +# 3.246. pgp_auto_inline +# +# Type: boolean +# Default: no +# +# This option controls whether NeoMutt generates old-style inline (traditional) +# PGP encrypted or signed messages under certain circumstances. This can be +# overridden by use of the pgp menu, when inline is not required. The GPGME +# backend does not support this option. +# +# Note that NeoMutt might automatically use PGP/MIME for messages which consist +# of more than a single MIME part. NeoMutt can be configured to ask before +# sending PGP/MIME messages when inline (traditional) would not work. +# +# Also see the $pgp_mime_auto variable. +# +# Also note that using the old-style PGP message format is strongly deprecated. +# (PGP only) +# + + +# 3.247. pgp_check_exit +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt will check the exit code of the PGP subprocess when signing or +# encrypting. A non-zero exit code means that the subprocess failed. (PGP only) +# + + +# 3.248. pgp_check_gpg_decrypt_status_fd +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt will check the status file descriptor output of +# $pgp_decrypt_command and $pgp_decode_command for GnuPG status codes indicating +# successful decryption. This will check for the presence of DECRYPTION_OKAY, +# absence of DECRYPTION_FAILED, and that all PLAINTEXT occurs between the +# BEGIN_DECRYPTION and END_DECRYPTION status codes. +# +# If unset, NeoMutt will instead match the status fd output against +# $pgp_decryption_okay. (PGP only) +# + + +# 3.249. pgp_clear_sign_command +# +# Type: command +# Default: (empty) +# +# This format is used to create an old-style "clearsigned" PGP message. Note that +# the use of this format is strongly deprecated. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. Note that in this case, %r expands to the search +# string, which is a list of one or more quoted values such as email address, +# name, or keyid. (PGP only) +# + + +# 3.250. pgp_decode_command +# +# Type: command +# Default: (empty) +# +# This format strings specifies a command which is used to decode application/pgp +# attachments. +# +# The PGP command formats have their own set of printf(3)-like sequences: +# +# ┌──┬──────────────────────────────────────────────────────────────────────────┐ +# │%a│The value of $pgp_sign_as if set, otherwise the value of $pgp_default_key.│ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%f│Expands to the name of a file containing a message. │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%p│Expands to PGPPASSFD=0 when a pass phrase is needed, to an empty string │ +# │ │otherwise. Note: This may be used with a %? construct. │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%r│One or more key IDs (or fingerprints if available). │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%s│Expands to the name of a file containing the signature part of a multipart│ +# │ │/signed attachment when verifying it. │ +# └──┴──────────────────────────────────────────────────────────────────────────┘ +# +# For examples on how to configure these formats for the various versions of PGP +# which are floating around, see the pgp and gpg sample configuration files in +# the samples/ subdirectory which has been installed on your system alongside the +# documentation. (PGP only) +# + + +# 3.251. pgp_decrypt_command +# +# Type: command +# Default: (empty) +# +# This command is used to decrypt a PGP encrypted message. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# +# Note: When decrypting messages using gpg, a pinentry program needs to be +# invoked unless the password is cached within gpg-agent. Currently, the +# pinentry-tty program (usually distributed with gpg) isn't suitable for being +# invoked by NeoMutt. You are encouraged to use a different pinentry-program when +# running NeoMutt in order to avoid problems. +# +# See also: https://github.com/neomutt/neomutt/issues/1014 +# + + +# 3.252. pgp_decryption_okay +# +# Type: regular expression +# Default: (empty) +# +# If you assign text to this variable, then an encrypted PGP message is only +# considered successfully decrypted if the output from $pgp_decrypt_command +# contains the text. This is used to protect against a spoofed encrypted message, +# with multipart/encrypted headers but containing a block that is not actually +# encrypted. (e.g. simply signed and ascii armored text). +# +# Note that if $pgp_check_gpg_decrypt_status_fd is set, this variable is ignored. +# (PGP only) +# + + +# 3.253. pgp_default_key +# +# Type: string +# Default: (empty) +# +# This is the default key-pair to use for PGP operations. It will be used for +# encryption (see $postpone_encrypt and $pgp_self_encrypt). +# +# It will also be used for signing unless $pgp_sign_as is set. +# +# The (now deprecated) pgp_self_encrypt_as is an alias for this variable, and +# should no longer be used. (PGP only) +# + + +# 3.254. pgp_encrypt_only_command +# +# Type: command +# Default: (empty) +# +# This command is used to encrypt a body part without signing it. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. Note that in this case, %r expands to the search +# string, which is a list of one or more quoted values such as email address, +# name, or keyid. (PGP only) +# + + +# 3.255. pgp_encrypt_sign_command +# +# Type: command +# Default: (empty) +# +# This command is used to both sign and encrypt a body part. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.256. pgp_entry_format +# +# Type: string +# Default: “%4n %t%f %4l/0x%k %-4a %2c %u” +# +# This variable allows you to customize the PGP key selection menu to your +# personal taste. If $crypt_use_gpgme is set, then it applies to S/MIME key +# selection menu also. This string is similar to $index_format, but has its own +# set of printf(3)-like sequences: +# +# ┌──────┬──────────────────────────────────────────────────────┐ +# │%a │Algorithm │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%c │Capabilities │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%f │Flags │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%k │Key id │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%l │Key length │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%n │Number │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%p │Protocol │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%t │Trust/validity of the key-uid association │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%u │User id │ +# ├──────┼──────────────────────────────────────────────────────┤ +# │%[]│Date of the key where is an strftime(3) expression│ +# └──────┴──────────────────────────────────────────────────────┘ +# +# (Crypto only) or (PGP only when GPGME disabled) +# + + +# 3.257. pgp_export_command +# +# Type: command +# Default: (empty) +# +# This command is used to export a public key from the user's key ring. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.258. pgp_get_keys_command +# +# Type: command +# Default: (empty) +# +# This command is invoked whenever NeoMutt needs to fetch the public key +# associated with an email address. Of the sequences supported by +# $pgp_decode_command, %r is the only printf(3)-like sequence used with this +# format. Note that in this case, %r expands to the email address, not the public +# key ID (the key ID is unknown, which is why NeoMutt is invoking this command). +# (PGP only) +# + + +# 3.259. pgp_good_sign +# +# Type: regular expression +# Default: (empty) +# +# If you assign a text to this variable, then a PGP signature is only considered +# verified if the output from $pgp_verify_command contains the text. Use this +# variable if the exit code from the command is 0 even for bad signatures. (PGP +# only) +# + + +# 3.260. pgp_ignore_subkeys +# +# Type: boolean +# Default: yes +# +# Setting this variable will cause NeoMutt to ignore OpenPGP subkeys. Instead, +# the principal key will inherit the subkeys' capabilities. Unset this if you +# want to play interesting key selection games. (PGP only) +# + + +# 3.261. pgp_import_command +# +# Type: command +# Default: (empty) +# +# This command is used to import a key from a message into the user's public key +# ring. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.262. pgp_list_pubring_command +# +# Type: command +# Default: (empty) +# +# This command is used to list the public key ring's contents. The output format +# must be analogous to the one used by +# +# gpg --list-keys --with-colons --with-fingerprint +# +# Note: gpg's fixed-list-mode option should not be used. It produces a different +# date format which may result in NeoMutt showing incorrect key generation dates. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.263. pgp_list_secring_command +# +# Type: command +# Default: (empty) +# +# This command is used to list the secret key ring's contents. The output format +# must be analogous to the one used by: +# +# gpg --list-keys --with-colons --with-fingerprint +# +# Note: gpg's fixed-list-mode option should not be used. It produces a different +# date format which may result in NeoMutt showing incorrect key generation dates. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.264. pgp_long_ids +# +# Type: boolean +# Default: yes +# +# If set, use 64 bit PGP key IDs, if unset use the normal 32 bit key IDs. NOTE: +# Internally, NeoMutt has transitioned to using fingerprints (or long key IDs as +# a fallback). This option now only controls the display of key IDs in the key +# selection menu and a few other places. (PGP only) +# + + +# 3.265. pgp_mime_auto +# +# Type: quadoption +# Default: ask-yes +# +# This option controls whether NeoMutt will prompt you for automatically sending +# a (signed/encrypted) message using PGP/MIME when inline (traditional) fails +# (for any reason). +# +# Also note that using the old-style PGP message format is strongly deprecated. +# (PGP only) +# + + +# 3.266. pgp_reply_inline +# +# Type: boolean +# Default: no +# +# Setting this variable will cause NeoMutt to always attempt to create an inline +# (traditional) message when replying to a message which is PGP encrypted/signed +# inline. This can be overridden by use of the pgp menu, when inline is not +# required. This option does not automatically detect if the (replied-to) message +# is inline; instead it relies on NeoMutt internals for previously checked/ +# flagged messages. +# +# Note that NeoMutt might automatically use PGP/MIME for messages which consist +# of more than a single MIME part. NeoMutt can be configured to ask before +# sending PGP/MIME messages when inline (traditional) would not work. +# +# Also see the $pgp_mime_auto variable. +# +# Also note that using the old-style PGP message format is strongly deprecated. +# (PGP only) +# + + +# 3.267. pgp_retainable_sigs +# +# Type: boolean +# Default: no +# +# If set, signed and encrypted messages will consist of nested multipart/signed +# and multipart/encrypted body parts. +# +# This is useful for applications like encrypted and signed mailing lists, where +# the outer layer (multipart/encrypted) can be easily removed, while the inner +# multipart/signed part is retained. (PGP only) +# +set pgp_retainable_sigs=yes + + +# 3.268. pgp_self_encrypt +# +# Type: boolean +# Default: yes +# +# When set, PGP encrypted messages will also be encrypted using the key in +# $pgp_default_key. (PGP only) +# + + +# 3.269. pgp_show_unusable +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt will display non-usable keys on the PGP key selection menu. +# This includes keys which have been revoked, have expired, or have been marked +# as "disabled" by the user. (PGP only) +# +set pgp_show_unusable=no + + +# 3.270. pgp_sign_as +# +# Type: string +# Default: (empty) +# +# If you have a different key pair to use for signing, you should set this to the +# signing key. Most people will only need to set $pgp_default_key. It is +# recommended that you use the keyid form to specify your key (e.g. 0x00112233). +# (PGP only) +# +set pgp_sign_as="0x9C9D6979AE941637" + + +# 3.271. pgp_sign_command +# +# Type: command +# Default: (empty) +# +# This command is used to create the detached PGP signature for a multipart/ +# signed PGP/MIME body part. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.272. pgp_sort_keys +# +# Type: sort order +# Default: address +# +# Specifies how the entries in the pgp menu are sorted. The following are legal +# values: +# +# ┌───────┬──────────────────────────────┐ +# │address│sort alphabetically by user id│ +# ├───────┼──────────────────────────────┤ +# │keyid │sort alphabetically by key id │ +# ├───────┼──────────────────────────────┤ +# │date │sort by key creation date │ +# ├───────┼──────────────────────────────┤ +# │trust │sort by the trust of the key │ +# └───────┴──────────────────────────────┘ +# +# If you prefer reverse order of the above values, prefix it with "reverse-". +# (PGP only) +# + + +# 3.273. pgp_strict_enc +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt will automatically encode PGP/MIME signed messages as +# quoted-printable. Please note that unsetting this variable may lead to problems +# with non-verifyable PGP signatures, so only change this if you know what you +# are doing. (PGP only) +# + + +# 3.274. pgp_timeout +# +# Type: number (long) +# Default: 300 +# +# The number of seconds after which a cached passphrase will expire if not used. +# (PGP only) +# + + +# 3.275. pgp_use_gpg_agent +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt expects a gpg-agent(1) process will handle private key +# passphrase prompts. If unset, NeoMutt will prompt for the passphrase and pass +# it via stdin to the pgp command. +# +# Note that as of version 2.1, GnuPG automatically spawns an agent and requires +# the agent be used for passphrase management. Since that version is increasingly +# prevalent, this variable now defaults set. +# +# NeoMutt works with a GUI or curses pinentry program. A TTY pinentry should not +# be used. +# +# If you are using an older version of GnuPG without an agent running, or another +# encryption program without an agent, you will need to unset this variable. (PGP +# only) +# +set pgp_use_gpg_agent=yes + + +# 3.276. pgp_verify_command +# +# Type: command +# Default: (empty) +# +# This command is used to verify PGP signatures. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.277. pgp_verify_key_command +# +# Type: command +# Default: (empty) +# +# This command is used to verify key information from the key selection menu. +# +# This is a format string, see the $pgp_decode_command command for possible +# printf(3)-like sequences. (PGP only) +# + + +# 3.278. pipe_decode +# +# Type: boolean +# Default: no +# +# Used in connection with the function. When unset, NeoMutt will +# pipe the messages without any preprocessing. When set, NeoMutt will attempt to +# decode the messages first. +# +# Also see $pipe_decode_weed, which controls whether headers will be weeded when +# this is set. +# + + +# 3.279. pipe_decode_weed +# +# Type: boolean +# Default: yes +# +# For , when $pipe_decode is set, this further controls whether +# NeoMutt will weed headers. +# + + +# 3.280. pipe_sep +# +# Type: string +# Default: “n” +# +# The separator to add between messages when piping a list of tagged messages to +# an external Unix command. +# + + +# 3.281. pipe_split +# +# Type: boolean +# Default: no +# +# Used in connection with the function following . If +# this variable is unset, when piping a list of tagged messages NeoMutt will +# concatenate the messages and will pipe them all concatenated. When set, NeoMutt +# will pipe the messages one by one. In both cases the messages are piped in the +# current sorted order, and the $pipe_sep separator is added after each message. +# + + +# 3.282. pop_auth_try_all +# +# Type: boolean +# Default: yes +# +# If set, NeoMutt will try all available authentication methods. When unset, +# NeoMutt will only fall back to other authentication methods if the previous +# methods are unavailable. If a method is available but authentication fails, +# NeoMutt will not connect to the POP server. +# + + +# 3.283. pop_authenticators +# +# Type: string list +# Default: (empty) +# +# This is a colon-separated list of authentication methods NeoMutt may attempt to +# use to log in to an POP server, in the order NeoMutt should try them. +# Authentication methods are either "user", "apop" or any SASL mechanism, e.g. +# "digest-md5", "gssapi" or "cram-md5". This option is case-insensitive. If this +# option is unset (the default) NeoMutt will try all available methods, in order +# from most-secure to least-secure. +# +# Example: +# +# set pop_authenticators="digest-md5:apop:user" +# + + +# 3.284. pop_check_interval +# +# Type: number +# Default: 60 +# +# This variable configures how often (in seconds) NeoMutt should look for new +# mail in the currently selected mailbox if it is a POP mailbox. +# + + +# 3.285. pop_delete +# +# Type: quadoption +# Default: ask-no +# +# If set, NeoMutt will delete successfully downloaded messages from the POP +# server when using the function. When unset, NeoMutt will download +# messages but also leave them on the POP server. +# + + +# 3.286. pop_host +# +# Type: string +# Default: (empty) +# +# The name of your POP server for the function. You can also specify +# an alternative port, username and password, i.e.: +# +# [pop[s]://][username[:password]@]popserver[:port] +# +# where "[...]" denotes an optional part. +# + + +# 3.287. pop_last +# +# Type: boolean +# Default: no +# +# If this variable is set, NeoMutt will try to use the "LAST" POP command for +# retrieving only unread messages from the POP server when using the +# function. +# + + +# 3.288. pop_oauth_refresh_command +# +# Type: command +# Default: (empty) +# +# The command to run to generate an OAUTH refresh token for authorizing your +# connection to your POP server. This command will be run on every connection +# attempt that uses the OAUTHBEARER authentication mechanism. See "oauth" for +# details. +# + + +# 3.289. pop_pass +# +# Type: string +# Default: (empty) +# +# Specifies the password for your POP account. If unset, NeoMutt will prompt you +# for your password when you open a POP mailbox. +# +# Warning: you should only use this option when you are on a fairly secure +# machine, because the superuser can read your neomuttrc even if you are the only +# one who can read the file. +# + + +# 3.290. pop_reconnect +# +# Type: quadoption +# Default: ask-yes +# +# Controls whether or not NeoMutt will try to reconnect to the POP server if the +# connection is lost. +# + + +# 3.291. pop_user +# +# Type: string +# Default: (empty) +# +# Your login name on the POP server. +# +# This variable defaults to your user name on the local machine. +# + + +# 3.292. post_indent_string +# +# Type: string +# Default: (empty) +# +# Similar to the $attribution variable, NeoMutt will append this string after the +# inclusion of a message which is being replied to. +# + + +# 3.293. post_moderated +# +# Type: quadoption +# Default: ask-yes +# +# If set to yes, NeoMutt will post article to newsgroup that have not permissions +# to posting (e.g. moderated). Note: if news server does not support posting to +# that newsgroup or totally read-only, that posting will not have an effect. +# + + +# 3.294. postpone +# +# Type: quadoption +# Default: ask-yes +# +# Controls whether or not messages are saved in the $postponed mailbox when you +# elect not to send immediately. If set to ask-yes or ask-no, you will be +# prompted with "Save (postpone) draft message?" when quitting from the "compose" +# screen. +# +# Also see the $recall variable. +# + + +# 3.295. postpone_encrypt +# +# Type: boolean +# Default: no +# +# When set, postponed messages that are marked for encryption will be +# self-encrypted. NeoMutt will first try to encrypt using the value specified in +# $pgp_default_key or $smime_default_key. If those are not set, it will try the +# deprecated $postpone_encrypt_as. (Crypto only) +# + + +# 3.296. postpone_encrypt_as +# +# Type: string +# Default: (empty) +# +# This is a deprecated fall-back variable for $postpone_encrypt. Please use +# $pgp_default_key or $smime_default_key. (Crypto only) +# + + +# 3.297. postponed +# +# Type: mailbox +# Default: “~/postponed” +# +# NeoMutt allows you to indefinitely "postpone sending a message" which you are +# editing. When you choose to postpone a message, NeoMutt saves it in the mailbox +# specified by this variable. +# +# Also see the $postpone variable. +# +set postponed="=drafts" + + +# 3.298. preconnect +# +# Type: string +# Default: (empty) +# +# If set, a shell command to be executed if NeoMutt fails to establish a +# connection to the server. This is useful for setting up secure connections, +# e.g. with ssh(1). If the command returns a nonzero status, NeoMutt gives up +# opening the server. Example: +# +# set preconnect="ssh -f -q -L 1234:mailhost.net:143 mailhost.net sleep 20 < /dev/null > /dev/null" +# +# Mailbox "foo" on "mailhost.net" can now be reached as "{localhost:1234}foo". +# +# Note: For this example to work, you must be able to log in to the remote +# machine without having to enter a password. +# + + +# 3.299. preferred_languages +# +# Type: string list +# Default: (empty) +# +# This variable specifies a list of comma-separated languages. RFC8255 : user +# preferred languages to be searched in parts and display. Example: +# +# set preferred_languages="en,fr,de" +# + + +# 3.300. print +# +# Type: quadoption +# Default: ask-no +# +# Controls whether or not NeoMutt really prints messages. This is set to "ask-no" +# by default, because some people accidentally hit "p" often. +# + + +# 3.301. print_command +# +# Type: command +# Default: “lpr” +# +# This specifies the command pipe that should be used to print messages. +# +set print_command="muttprint" + + +# 3.302. print_decode +# +# Type: boolean +# Default: yes +# +# Used in connection with the function. If this option is set, +# the message is decoded before it is passed to the external command specified by +# $print_command. If this option is unset, no processing will be applied to the +# message when printing it. The latter setting may be useful if you are using +# some advanced printer filter which is able to properly format e-mail messages +# for printing. +# +# Also see $print_decode_weed, which controls whether headers will be weeded when +# this is set. +# + + +# 3.303. print_decode_weed +# +# Type: boolean +# Default: yes +# +# For , when $print_decode is set, this further controls whether +# NeoMutt will weed headers. +# + + +# 3.304. print_split +# +# Type: boolean +# Default: no +# +# Used in connection with the function. If this option is set, +# the command specified by $print_command is executed once for each message which +# is to be printed. If this option is unset, the command specified by +# $print_command is executed only once, and all the messages are concatenated, +# with a form feed as the message separator. +# +# Those who use the enscript(1) program's mail-printing mode will most likely +# want to set this option. +# +set print_split=yes + + +# 3.305. prompt_after +# +# Type: boolean +# Default: yes +# +# If you use an external $pager, setting this variable will cause NeoMutt to +# prompt you for a command when the pager exits rather than returning to the +# index menu. If unset, NeoMutt will return to the index menu when the external +# pager exits. +# + + +# 3.306. query_command +# +# Type: command +# Default: (empty) +# +# This specifies the command NeoMutt will use to make external address queries. +# The string may contain a "%s", which will be substituted with the query string +# the user types. NeoMutt will add quotes around the string substituted for "%s" +# automatically according to shell quoting rules, so you should avoid adding your +# own. If no "%s" is found in the string, NeoMutt will append the user's query to +# the end of the string. See "query" (https://neomutt.org/guide/ +# advancedusage.html#query) for more information. +# +set query_command="lbdbq" + + +# 3.307. query_format +# +# Type: string +# Default: “%3c %t %-25.25n %-25.25a | %e” +# +# This variable describes the format of the "query" menu. The following printf(3) +# -style sequences are understood: +# +# ┌───┬─┬─────────────────────────────────────────────────────┐ +# │%a │ │Destination address │ +# ├───┼─┼─────────────────────────────────────────────────────┤ +# │%c │ │Current entry number │ +# ├───┼─┼─────────────────────────────────────────────────────┤ +# │%e │*│Extra information │ +# ├───┼─┼─────────────────────────────────────────────────────┤ +# │%n │ │Destination name │ +# ├───┼─┼─────────────────────────────────────────────────────┤ +# │%t │ │"*" if current entry is tagged, a space otherwise │ +# ├───┼─┼─────────────────────────────────────────────────────┤ +# │%>X│ │Right justify the rest of the string and pad with "X"│ +# ├───┼─┼─────────────────────────────────────────────────────┤ +# │%|X│ │Pad to the end of the line with "X" │ +# ├───┼─┼─────────────────────────────────────────────────────┤ +# │%*X│ │Soft-fill with character "X" as pad │ +# └───┴─┴─────────────────────────────────────────────────────┘ +# +# For an explanation of "soft-fill", see the $index_format documentation. +# +# * = can be optionally printed if nonzero, see the $status_format documentation. +# + + +# 3.308. quit +# +# Type: quadoption +# Default: yes +# +# This variable controls whether "quit" and "exit" actually quit from NeoMutt. If +# this option is set, they do quit, if it is unset, they have no effect, and if +# it is set to ask-yes or ask-no, you are prompted for confirmation when you try +# to quit. +# + + +# 3.309. quote_regex +# +# Type: regular expression +# Default: “^([ t]*[|>:}#])+” +# +# A regular expression used in the internal pager to determine quoted sections of +# text in the body of a message. Quoted text may be filtered out using the +# command, or colored according to the "color quoted" family of +# directives. +# +# Higher levels of quoting may be colored differently ("color quoted1", "color +# quoted2", etc.). The quoting level is determined by removing the last character +# from the matched text and recursively reapplying the regular expression until +# it fails to produce a match. +# +# Match detection may be overridden by the $smileys regular expression. +# + + +# 3.310. read_inc +# +# Type: number +# Default: 10 +# +# If set to a value greater than 0, NeoMutt will display which message it is +# currently on when reading a mailbox or when performing search actions such as +# search and limit. The message is printed after this many messages have been +# read or searched (e.g., if set to 25, NeoMutt will print a message when it is +# at message 25, and then again when it gets to message 50). This variable is +# meant to indicate progress when reading or searching large mailboxes which may +# take some time. When set to 0, only a single message will appear before the +# reading the mailbox. +# +# Also see the $write_inc, $net_inc and $time_inc variables and the "tuning" +# section of the manual for performance considerations. +# + + +# 3.311. read_only +# +# Type: boolean +# Default: no +# +# If set, all folders are opened in read-only mode. +# + + +# 3.312. real_name +# +# Type: string +# Default: (empty) +# +# This variable specifies what "real" or "personal" name should be used when +# sending messages. +# +# If not specified, then the user's "real name" will be read from /etc/passwd. +# This option will not be used, if "$from" is set. +# + + +# 3.313. recall +# +# Type: quadoption +# Default: ask-yes +# +# Controls whether or not NeoMutt recalls postponed messages when composing a new +# message. +# +# Setting this variable to yes is not generally useful, and thus not recommended. +# Note that the function can be used to manually recall +# postponed messages. +# +# Also see $postponed variable. +# +set recall=no + + +# 3.314. record +# +# Type: mailbox +# Default: “~/sent” +# +# This specifies the file into which your outgoing messages should be appended. +# (This is meant as the primary method for saving a copy of your messages, but +# another way to do this is using the "my_hdr" command to create a "Bcc:" field +# with your email address in it.) +# +# The value of $record is overridden by the $force_name and $save_name variables, +# and the "fcc-hook" command. Also see $copy and $write_bcc. +# +set record="=store" + + +# 3.315. reflow_space_quotes +# +# Type: boolean +# Default: yes +# +# This option controls how quotes from format=flowed messages are displayed in +# the pager and when replying (with $text_flowed unset). When set, this option +# adds spaces after each level of quote marks, turning ">>>foo" into "> > > foo". +# +# Note: If $reflow_text is unset, this option has no effect. Also, this option +# does not affect replies when $text_flowed is set. +# + + +# 3.316. reflow_text +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will reformat paragraphs in text/plain parts marked format= +# flowed. If unset, NeoMutt will display paragraphs unaltered from how they +# appear in the message body. See RFC3676 for details on the format=flowed +# format. +# +# Also see $reflow_wrap, and $wrap. +# + + +# 3.317. reflow_wrap +# +# Type: number +# Default: 78 +# +# This variable controls the maximum paragraph width when reformatting text/plain +# parts when $reflow_text is set. When the value is 0, paragraphs will be wrapped +# at the terminal's right margin. A positive value sets the paragraph width +# relative to the left margin. A negative value set the paragraph width relative +# to the right margin. +# +# Also see $wrap. +# +set reflow_wrap=-10 + + +# 3.318. reply_regex +# +# Type: regular expression +# Default: “^((re|aw|sv)([[0-9]+])*:[ t]*)*” +# +# A regular expression used to recognize reply messages when threading and +# replying. The default value corresponds to the English "Re:", the German "Aw:" +# and the Swedish "Sv:". +# + + +# 3.319. reply_self +# +# Type: boolean +# Default: no +# +# If unset and you are replying to a message sent by you, NeoMutt will assume +# that you want to reply to the recipients of that message rather than to +# yourself. +# +# Also see the "alternates" command. +# + + +# 3.320. reply_to +# +# Type: quadoption +# Default: ask-yes +# +# If set, when replying to a message, NeoMutt will use the address listed in the +# Reply-to: header as the recipient of the reply. If unset, it will use the +# address in the From: header field instead. This option is useful for reading a +# mailing list that sets the Reply-To: header field to the list address and you +# want to send a private message to the author of a message. +# + + +# 3.321. reply_with_xorig +# +# Type: boolean +# Default: no +# +# This variable provides a toggle. When active, the From: header will be +# extracted from the current mail's 'X-Original-To:' header. This setting does +# not have precedence over "reverse_real_name". +# +# Assuming 'fast_reply' is disabled, this option will prompt the user with a +# prefilled From: header. +# + + +# 3.322. resolve +# +# Type: boolean +# Default: yes +# +# When set, the cursor will be automatically advanced to the next (possibly +# undeleted) message whenever a command that modifies the current message is +# executed. +# + + +# 3.323. resume_draft_files +# +# Type: boolean +# Default: no +# +# If set, draft files (specified by -H on the command line) are processed +# similarly to when resuming a postponed message. Recipients are not prompted +# for; send-hooks are not evaluated; no alias expansion takes place; user-defined +# headers and signatures are not added to the message. +# + + +# 3.324. resume_edited_draft_files +# +# Type: boolean +# Default: yes +# +# If set, draft files previously edited (via -E -H on the command line) will have +# $resume_draft_files automatically set when they are used as a draft file again. +# +# The first time a draft file is saved, NeoMutt will add a header, +# X-Mutt-Resume-Draft to the saved file. The next time the draft file is read in, +# if NeoMutt sees the header, it will set $resume_draft_files. +# +# This option is designed to prevent multiple signatures, user-defined headers, +# and other processing effects from being made multiple times to the draft file. +# + + +# 3.325. reverse_alias +# +# Type: boolean +# Default: no +# +# This variable controls whether or not NeoMutt will display the "personal" name +# from your aliases in the index menu if it finds an alias that matches the +# message's sender. For example, if you have the following alias: +# +# alias juser abd30425@somewhere.net (Joe User) +# +# and then you receive mail which contains the following header: +# +# From: abd30425@somewhere.net +# +# It would be displayed in the index menu as "Joe User" instead of +# "abd30425@somewhere.net." This is useful when the person's e-mail address is +# not human friendly. +# + + +# 3.326. reverse_name +# +# Type: boolean +# Default: no +# +# It may sometimes arrive that you receive mail to a certain machine, move the +# messages to another machine, and reply to some the messages from there. If this +# variable is set, the default From: line of the reply messages is built using +# the address where you received the messages you are replying to if that address +# matches your "alternates". If the variable is unset, or the address that would +# be used doesn't match your "alternates", the From: line will use your address +# on the current machine. +# +# Also see the "alternates" command and $reverse_real_name. +# +set reverse_name=yes + + +# 3.327. reverse_real_name +# +# Type: boolean +# Default: yes +# +# This variable fine-tunes the behavior of the $reverse_name feature. +# +# When it is unset, NeoMutt will remove the real name part of a matching address. +# This allows the use of the email address without having to also use what the +# sender put in the real name field. +# +# When it is set, NeoMutt will use the matching address as-is. +# +# In either case, a missing real name will be filled in afterwards using the +# value of $real_name. +# + + +# 3.328. rfc2047_parameters +# +# Type: boolean +# Default: no +# +# When this variable is set, NeoMutt will decode RFC2047-encoded MIME parameters. +# You want to set this variable when NeoMutt suggests you to save attachments to +# files named like: +# +# =?iso-8859-1?Q?file=5F=E4=5F991116=2Ezip?= +# =?utf-8?Q?z=C4=99ta.png?= +# +# When this variable is set interactively, the change won't be active until you +# change folders. +# +# Note that this use of RFC2047's encoding is explicitly prohibited by the +# standard, but nevertheless encountered in the wild and produced by, e.g., +# Outlook. +# +# Also note that setting this parameter will not have the effect that NeoMutt +# generates this kind of encoding. Instead, NeoMutt will unconditionally use the +# encoding specified in RFC2231. +# +set rfc2047_parameters=yes + + +# 3.329. save_address +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will take the sender's full address when choosing a default +# folder for saving a mail. If $save_name or $force_name is set too, the +# selection of the Fcc folder will be changed as well. +# + + +# 3.330. save_empty +# +# Type: boolean +# Default: yes +# +# When unset, mailboxes which contain no saved messages will be removed when +# closed (the exception is $spool_file which is never removed). If set, mailboxes +# are never removed. +# +# Note: This only applies to mbox and MMDF folders, NeoMutt does not delete MH +# and Maildir directories. +# + + +# 3.331. save_history +# +# Type: number +# Default: 0 +# +# This variable controls the size of the history (per category) saved in the +# $history_file file. +# +set save_history=100 + + +# 3.332. save_name +# +# Type: boolean +# Default: no +# +# This variable controls how copies of outgoing messages are saved. When set, a +# check is made to see if a mailbox specified by the recipient address exists +# (this is done by searching for a mailbox in the $folder directory with the +# username part of the recipient address). If the mailbox exists, the outgoing +# message will be saved to that mailbox, otherwise the message is saved to the +# $record mailbox. +# +# Also see the $force_name variable. +# + + +# 3.333. save_unsubscribed +# +# Type: boolean +# Default: no +# +# When set, info about unsubscribed newsgroups will be saved into "newsrc" file +# and into cache. +# + + +# 3.334. score +# +# Type: boolean +# Default: yes +# +# When this variable is unset, scoring is turned off. This can be useful to +# selectively disable scoring for certain folders when the +# $score_threshold_delete variable and related are used. +# + + +# 3.335. score_threshold_delete +# +# Type: number +# Default: -1 +# +# Messages which have been assigned a score equal to or lower than the value of +# this variable are automatically marked for deletion by NeoMutt. Since NeoMutt +# scores are always greater than or equal to zero, the default setting of this +# variable will never mark a message for deletion. +# + + +# 3.336. score_threshold_flag +# +# Type: number +# Default: 9999 +# +# Messages which have been assigned a score greater than or equal to this +# variable's value are automatically marked "flagged". +# + + +# 3.337. score_threshold_read +# +# Type: number +# Default: -1 +# +# Messages which have been assigned a score equal to or lower than the value of +# this variable are automatically marked as read by NeoMutt. Since NeoMutt scores +# are always greater than or equal to zero, the default setting of this variable +# will never mark a message read. +# + + +# 3.338. search_context +# +# Type: number +# Default: 0 +# +# For the pager, this variable specifies the number of lines shown before search +# results. By default, search results will be top-aligned. +# +set search_context=5 + + +# 3.339. send_charset +# +# Type: string +# Default: “us-ascii:iso-8859-1:utf-8” +# +# A colon-delimited list of character sets for outgoing messages. NeoMutt will +# use the first character set into which the text can be converted exactly. If +# your $charset is not "iso-8859-1" and recipients may not understand "UTF-8", it +# is advisable to include in the list an appropriate widely used standard +# character set (such as "iso-8859-2", "koi8-r" or "iso-2022-jp") either instead +# of or after "iso-8859-1". +# +# In case the text can't be converted into one of these exactly, NeoMutt uses +# $charset as a fallback. +# +set send_charset="utf-8" + + +# 3.340. sendmail +# +# Type: command +# Default: “/usr/sbin/sendmail -oem -oi” +# +# Specifies the program and arguments used to deliver mail sent by NeoMutt. +# NeoMutt expects that the specified program interprets additional arguments as +# recipient addresses. NeoMutt appends all recipients after adding a -- delimiter +# (if not already present). Additional flags, such as for $use_8bit_mime, +# $use_envelope_from, $dsn_notify, or $dsn_return will be added before the +# delimiter. +# +# See also: $write_bcc. +# +set sendmail="$my_confdir/sendmail" + + +# 3.341. sendmail_wait +# +# Type: number +# Default: 0 +# +# Specifies the number of seconds to wait for the $sendmail process to finish +# before giving up and putting delivery in the background. +# +# NeoMutt interprets the value of this variable as follows: +# +# ┌──┬──────────────────────────────────────────────────────────────────┐ +# │>0│number of seconds to wait for sendmail to finish before continuing│ +# ├──┼──────────────────────────────────────────────────────────────────┤ +# │0 │wait forever for sendmail to finish │ +# ├──┼──────────────────────────────────────────────────────────────────┤ +# │<0│always put sendmail in the background without waiting │ +# └──┴──────────────────────────────────────────────────────────────────┘ +# +# Note that if you specify a value other than 0, the output of the child process +# will be put in a temporary file. If there is some error, you will be informed +# as to where to find the output. +# + + +# 3.342. shell +# +# Type: command +# Default: “/bin/sh” +# +# Command to use when spawning a subshell. If not specified, then the user's +# login shell from /etc/passwd is used. +# + + +# 3.343. show_multipart_alternative +# +# Type: string +# Default: (empty) +# +# When set to info, the multipart/alternative information is shown. When set to +# inline, all of the alternatives are displayed. When not set, the default +# behavior is to show only the chosen alternative. +# + + +# 3.344. show_new_news +# +# Type: boolean +# Default: yes +# +# If set, news server will be asked for new newsgroups on entering the browser. +# Otherwise, it will be done only once for a news server. Also controls whether +# or not number of new articles of subscribed newsgroups will be then checked. +# + + +# 3.345. show_only_unread +# +# Type: boolean +# Default: no +# +# If set, only subscribed newsgroups that contain unread articles will be +# displayed in browser. +# + + +# 3.346. sidebar_component_depth +# +# Type: number +# Default: 0 +# +# By default the sidebar will show the mailbox's path, relative to the $folder +# variable. This specifies the number of parent directories to hide from display +# in the sidebar. For example: If a maildir is normally displayed in the sidebar +# as dir1/dir2/dir3/maildir, setting sidebar_component_depth=2 will display it as +# dir3/maildir, having truncated the 2 highest directories. +# +# See also: $sidebar_short_path +# + + +# 3.347. sidebar_delim_chars +# +# Type: string +# Default: “/.” +# +# This contains the list of characters which you would like to treat as folder +# separators for displaying paths in the sidebar. +# +# Local mail is often arranged in directories: 'dir1/dir2/mailbox'. +# +# set sidebar_delim_chars='/' +# +# IMAP mailboxes are often named: 'folder1.folder2.mailbox'. +# +# set sidebar_delim_chars='.' +# +# See also: $sidebar_short_path, $sidebar_folder_indent, $sidebar_indent_string. +# + + +# 3.348. sidebar_divider_char +# +# Type: string +# Default: (empty) +# +# This specifies the characters to be drawn between the sidebar (when visible) +# and the other NeoMutt panels. ASCII and Unicode line-drawing characters are +# supported. +# +set sidebar_divider_char=" " + + +# 3.349. sidebar_folder_indent +# +# Type: boolean +# Default: no +# +# Set this to indent mailboxes in the sidebar. +# +# See also: $sidebar_short_path, $sidebar_indent_string, $sidebar_delim_chars. +# +set sidebar_folder_indent=yes + + +# 3.350. sidebar_format +# +# Type: string +# Default: “%D%* %n” +# +# This variable allows you to customize the sidebar display. This string is +# similar to $index_format, but has its own set of printf(3)-like sequences: +# +# ┌───┬──┬──────────────────────────────────────────────────────────────────────┐ +# │%B │ │Name of the mailbox │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%d │* │Number of deleted messages in the mailbox │ +# │ │@ │ │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%D │ │Descriptive name of the mailbox │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%F │* │Number of flagged messages in the mailbox │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%L │* │Number of messages after limiting │ +# │ │@ │ │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%n │ │"N" if mailbox has new mail, ' ' (space) otherwise │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%N │* │Number of unread messages in the mailbox (seen or unseen) │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%o │* │Number of old messages in the mailbox (unread, seen) │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%r │* │Number of read messages in the mailbox (read, seen) │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%S │* │Size of mailbox (total number of messages) │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%t │* │Number of tagged messages in the mailbox │ +# │ │@ │ │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%Z │* │Number of new messages in the mailbox (unread, unseen) │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%! │ │"!" : one flagged message; "!!" : two flagged messages; "n!" : n │ +# │ │ │flagged messages (for n > 2). Otherwise prints nothing. │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%>X│ │Right justify the rest of the string and pad with "X" │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%|X│ │Pad to the end of the line with "X" │ +# ├───┼──┼──────────────────────────────────────────────────────────────────────┤ +# │%*X│ │Soft-fill with character "X" as pad │ +# └───┴──┴──────────────────────────────────────────────────────────────────────┘ +# +# * = Can be optionally printed if nonzero +# +# @ = Only applicable to the current folder +# +# In order to use %S, %N, %F, and %!, $mail_check_stats must be set. When thus +# set, a suggested value for this option is "%B%?F? [%F]?%* %?N?%N/?%S". +# +set sidebar_format="%D%?F? [%F]?%* %?N?%N/?%S" + + +# 3.351. sidebar_indent_string +# +# Type: string +# Default: “ ” +# +# This specifies the string that is used to indent mailboxes in the sidebar. It +# defaults to two spaces. +# +# See also: $sidebar_short_path, $sidebar_folder_indent, $sidebar_delim_chars. +# +set sidebar_indent_string=" " + + +# 3.352. sidebar_new_mail_only +# +# Type: boolean +# Default: no +# +# When set, the sidebar will only display mailboxes containing new, or flagged, +# mail. +# +# See also: $sidebar_whitelist, $sidebar_non_empty_mailbox_only. +# + + +# 3.353. sidebar_next_new_wrap +# +# Type: boolean +# Default: no +# +# When set, the command will not stop and the end of the list +# of mailboxes, but wrap around to the beginning. The command +# is similarly affected, wrapping around to the end of the list. +# +set sidebar_next_new_wrap=yes + + +# 3.354. sidebar_non_empty_mailbox_only +# +# Type: boolean +# Default: no +# +# When set, the sidebar will only display mailboxes that contain one or more +# mails. +# +# See also: $sidebar_new_mail_only, $sidebar_whitelist. +# + + +# 3.355. sidebar_on_right +# +# Type: boolean +# Default: no +# +# When set, the sidebar will appear on the right-hand side of the screen. +# + + +# 3.356. sidebar_short_path +# +# Type: boolean +# Default: no +# +# By default the sidebar will show the mailbox's path, relative to the $folder +# variable. Setting sidebar_shortpath=yes will shorten the names relative to the +# previous name. Here's an example: +# +# ┌────────────┬─────────────┬───────────────────────────────────────────────┐ +# │shortpath=no│shortpath=yes│shortpath=yes, folderindent=yes, indentstr=".."│ +# ├────────────┼─────────────┼───────────────────────────────────────────────┤ +# │fruit │fruit │fruit │ +# ├────────────┼─────────────┼───────────────────────────────────────────────┤ +# │fruit.apple │apple │..apple │ +# ├────────────┼─────────────┼───────────────────────────────────────────────┤ +# │fruit.banana│banana │..banana │ +# ├────────────┼─────────────┼───────────────────────────────────────────────┤ +# │fruit.cherry│cherry │..cherry │ +# └────────────┴─────────────┴───────────────────────────────────────────────┘ +# +# See also: $sidebar_delim_chars, $sidebar_folder_indent, $sidebar_indent_string, +# $sidebar_component_depth. +# +set sidebar_short_path=no + + +# 3.357. sidebar_sort_method +# +# Type: sort order +# Default: order +# +# Specifies how to sort mailbox entries in the sidebar. By default, the entries +# are sorted alphabetically. Valid values: +# +# • path (alphabetically) +# +# • count (all message count) +# +# • flagged (flagged message count) +# +# • new (unread message count) +# +# • unread (unread message count) +# +# • unsorted +# +# You may optionally use the "reverse-" prefix to specify reverse sorting order +# (example: "set sidebar_sort_method=reverse-alpha"). +# +# The "alpha" and "name" values are synonyms for "path". +# +set sidebar_sort_method=path + + +# 3.358. sidebar_visible +# +# Type: boolean +# Default: no +# +# This specifies whether or not to show sidebar. The sidebar shows a list of all +# your mailboxes. +# +# See also: $sidebar_format, $sidebar_width +# +set sidebar_visible=no + + +# 3.359. sidebar_width +# +# Type: number +# Default: 30 +# +# This controls the width of the sidebar. It is measured in screen columns. For +# example: sidebar_width=20 could display 20 ASCII characters, or 10 Chinese +# characters. +# +set sidebar_width=20 + + +# 3.360. sig_dashes +# +# Type: boolean +# Default: yes +# +# If set, a line containing "-- " (note the trailing space) will be inserted +# before your $signature. It is strongly recommended that you not unset this +# variable unless your signature contains just your name. The reason for this is +# because many software packages use "-- n" to detect your signature. For +# example, NeoMutt has the ability to highlight the signature in a different +# color in the built-in pager. +# +set sig_dashes=no + + +# 3.361. sig_on_top +# +# Type: boolean +# Default: no +# +# If set, the signature will be included before any quoted or forwarded text. It +# is strongly recommended that you do not set this variable unless you really +# know what you are doing, and are prepared to take some heat from netiquette +# guardians. +# + + +# 3.362. signature +# +# Type: path +# Default: “~/.signature” +# +# Specifies the filename of your signature, which is appended to all outgoing +# messages. If the filename ends with a pipe ("|"), it is assumed that filename +# is a shell command and input should be read from its standard output. +# + + +# 3.363. simple_search +# +# Type: string +# Default: “~f %s | ~s %s” +# +# Specifies how NeoMutt should expand a simple search into a real search pattern. +# A simple search is one that does not contain any of the "~" pattern operators. +# See "patterns" for more information on search patterns. +# +# For example, if you simply type "joe" at a search or limit prompt, NeoMutt will +# automatically expand it to the value specified by this variable by replacing +# "%s" with the supplied string. For the default value, "joe" would be expanded +# to: "~f joe | ~s joe". +# +set simple_search="~L %s | ~s %s" + + +# 3.364. size_show_bytes +# +# Type: boolean +# Default: no +# +# If set, message sizes will display bytes for values less than 1 kilobyte. See +# formatstrings-size. +# + + +# 3.365. size_show_fractions +# +# Type: boolean +# Default: yes +# +# If set, message sizes will be displayed with a single decimal value for sizes +# from 0 to 10 kilobytes and 1 to 10 megabytes. See formatstrings-size. +# + + +# 3.366. size_show_mb +# +# Type: boolean +# Default: yes +# +# If set, message sizes will display megabytes for values greater than or equal +# to 1 megabyte. See formatstrings-size. +# + + +# 3.367. size_units_on_left +# +# Type: boolean +# Default: no +# +# If set, message sizes units will be displayed to the left of the number. See +# formatstrings-size. +# + + +# 3.368. sleep_time +# +# Type: number +# Default: 1 +# +# Specifies time, in seconds, to pause while displaying certain informational +# messages, while moving from folder to folder and after expunging messages from +# the current folder. The default is to pause one second, so a value of zero for +# this option suppresses the pause. +# + + +# 3.369. smart_wrap +# +# Type: boolean +# Default: yes +# +# Controls the display of lines longer than the screen width in the internal +# pager. If set, long lines are wrapped at a word boundary. If unset, lines are +# simply wrapped at the screen edge. Also see the $markers variable. +# + + +# 3.370. smileys +# +# Type: regular expression +# Default: “(>From )|(:[-^]?[][)(><}{|/DP])” +# +# The pager uses this variable to catch some common false positives of +# $quote_regex, most notably smileys and not consider a line quoted text if it +# also matches $smileys. This mostly happens at the beginning of a line. +# + + +# 3.371. smime_ask_cert_label +# +# Type: boolean +# Default: yes +# +# This flag controls whether you want to be asked to enter a label for a +# certificate about to be added to the database or not. It is set by default. (S/ +# MIME only) +# + + +# 3.372. smime_ca_location +# +# Type: path +# Default: (empty) +# +# This variable contains the name of either a directory, or a file which contains +# trusted certificates for use with OpenSSL. (S/MIME only) +# + + +# 3.373. smime_certificates +# +# Type: path +# Default: (empty) +# +# Since for S/MIME there is no pubring/secring as with PGP, NeoMutt has to handle +# storage and retrieval of keys by itself. This is very basic right now, and keys +# and certificates are stored in two different directories, both named as the +# hash-value retrieved from OpenSSL. There is an index file which contains +# mailbox-address keyid pairs, and which can be manually edited. This option +# points to the location of the certificates. (S/MIME only) +# +set smime_certificates="~/.smime/certificates" + + +# 3.374. smime_decrypt_command +# +# Type: command +# Default: (empty) +# +# This format string specifies a command which is used to decrypt application/ +# x-pkcs7-mime attachments. +# +# The OpenSSL command formats have their own set of printf(3)-like sequences +# similar to PGP's: +# +# ┌──┬──────────────────────────────────────────────────────────────────────────┐ +# │%f│Expands to the name of a file containing a message. │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%s│Expands to the name of a file containing the signature part of a multipart│ +# │ │/signed attachment when verifying it. │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%k│The key-pair specified with $smime_default_key │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%i│Intermediate certificates │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%c│One or more certificate IDs. │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%a│The algorithm used for encryption. │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │%d│The message digest algorithm specified with $smime_sign_digest_alg. │ +# ├──┼──────────────────────────────────────────────────────────────────────────┤ +# │ │CA location: Depending on whether $smime_ca_location points to a directory│ +# │%C│or file, this expands to "-CApath $smime_ca_location" or "-CAfile │ +# │ │$smime_ca_location". │ +# └──┴──────────────────────────────────────────────────────────────────────────┘ +# +# For examples on how to configure these formats, see the smime.rc in the samples +# / subdirectory which has been installed on your system alongside the +# documentation. (S/MIME only) +# + + +# 3.375. smime_decrypt_use_default_key +# +# Type: boolean +# Default: yes +# +# If set (default) this tells NeoMutt to use the default key for decryption. +# Otherwise, if managing multiple certificate-key-pairs, NeoMutt will try to use +# the mailbox-address to determine the key to use. It will ask you to supply a +# key, if it can't find one. (S/MIME only) +# + + +# 3.376. smime_default_key +# +# Type: string +# Default: (empty) +# +# This is the default key-pair to use for S/MIME operations, and must be set to +# the keyid (the hash-value that OpenSSL generates) to work properly. +# +# It will be used for encryption (see $postpone_encrypt and $smime_self_encrypt). +# +# It will be used for decryption unless $smime_decrypt_use_default_key is unset. +# +# It will also be used for signing unless $smime_sign_as is set. +# +# The (now deprecated) smime_self_encrypt_as is an alias for this variable, and +# should no longer be used. (S/MIME only) +# + + +# 3.377. smime_encrypt_command +# +# Type: command +# Default: (empty) +# +# This command is used to create encrypted S/MIME messages. +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# +# Encrypt the message to $smime_default_key too. (S/MIME only) Note: On Debian +# systems, this defaults to the first existing file in the following list: ~ +# /.smime/ca-certificates.crt ~/.smime/ca-bundle.crt /etc/ssl/certs/ +# ca-certificates.crt. +# + + +# 3.378. smime_encrypt_with +# +# Type: string +# Default: “aes256” +# +# This sets the algorithm that should be used for encryption. Valid choices are +# "aes128", "aes192", "aes256", "des", "des3", "rc2-40", "rc2-64", "rc2-128". (S/ +# MIME only) +# + + +# 3.379. smime_get_cert_command +# +# Type: command +# Default: (empty) +# +# This command is used to extract X509 certificates from a PKCS7 structure. +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# + + +# 3.380. smime_get_cert_email_command +# +# Type: command +# Default: (empty) +# +# This command is used to extract the mail address(es) used for storing X509 +# certificates, and for verification purposes (to check whether the certificate +# was issued for the sender's mailbox). +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# + + +# 3.381. smime_get_signer_cert_command +# +# Type: command +# Default: (empty) +# +# This command is used to extract only the signers X509 certificate from a S/MIME +# signature, so that the certificate's owner may get compared to the email's +# "From:" field. +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# + + +# 3.382. smime_import_cert_command +# +# Type: command +# Default: (empty) +# +# This command is used to import a certificate via smime_keys. +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. NOTE: %c and %k will default to $smime_sign_as if +# set, otherwise $smime_default_key. (S/MIME only) +# + + +# 3.383. smime_is_default +# +# Type: boolean +# Default: no +# +# The default behavior of NeoMutt is to use PGP on all auto-sign/encryption +# operations. To override and to use OpenSSL instead this must be set. However, +# this has no effect while replying, since NeoMutt will automatically select the +# same application that was used to sign/encrypt the original message. (Note that +# this variable can be overridden by unsetting $crypt_auto_smime.) (S/MIME only) +# + + +# 3.384. smime_keys +# +# Type: path +# Default: (empty) +# +# Since for S/MIME there is no pubring/secring as with PGP, NeoMutt has to handle +# storage and retrieval of keys/certs by itself. This is very basic right now, +# and stores keys and certificates in two different directories, both named as +# the hash-value retrieved from OpenSSL. There is an index file which contains +# mailbox-address keyid pair, and which can be manually edited. This option +# points to the location of the private keys. (S/MIME only) +# +set smime_keys="~/.smime/keys" + + +# 3.385. smime_pk7out_command +# +# Type: command +# Default: (empty) +# +# This command is used to extract PKCS7 structures of S/MIME signatures, in order +# to extract the public X509 certificate(s). +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# + + +# 3.386. smime_self_encrypt +# +# Type: boolean +# Default: yes +# +# When set, S/MIME encrypted messages will also be encrypted using the +# certificate in $smime_default_key. (S/MIME only) +# + + +# 3.387. smime_sign_as +# +# Type: string +# Default: (empty) +# +# If you have a separate key to use for signing, you should set this to the +# signing key. Most people will only need to set $smime_default_key. (S/MIME +# only) +# + + +# 3.388. smime_sign_command +# +# Type: command +# Default: (empty) +# +# This command is used to created S/MIME signatures of type multipart/signed, +# which can be read by all mail clients. +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# + + +# 3.389. smime_sign_digest_alg +# +# Type: string +# Default: “sha256” +# +# This sets the algorithm that should be used for the signature message digest. +# Valid choices are "md5", "sha1", "sha224", "sha256", "sha384", "sha512". (S/ +# MIME only) +# + + +# 3.390. smime_timeout +# +# Type: number +# Default: 300 +# +# The number of seconds after which a cached passphrase will expire if not used. +# (S/MIME only) +# + + +# 3.391. smime_verify_command +# +# Type: command +# Default: (empty) +# +# This command is used to verify S/MIME signatures of type multipart/signed. +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# + + +# 3.392. smime_verify_opaque_command +# +# Type: command +# Default: (empty) +# +# This command is used to verify S/MIME signatures of type application/ +# x-pkcs7-mime. +# +# This is a format string, see the $smime_decrypt_command command for possible +# printf(3)-like sequences. (S/MIME only) +# + + +# 3.393. smtp_authenticators +# +# Type: string list +# Default: (empty) +# +# This is a colon-separated list of authentication methods NeoMutt may attempt to +# use to log in to an SMTP server, in the order NeoMutt should try them. +# Authentication methods are any SASL mechanism, e.g. "plain", "digest-md5", +# "gssapi" or "cram-md5". This option is case-insensitive. If it is "unset" (the +# default) NeoMutt will try all available methods, in order from most-secure to +# least-secure. Support for the "plain" mechanism is bundled; other mechanisms +# are provided by an external SASL library (look for '+sasl' in the output of +# neomutt -v). +# +# Example: +# +# set smtp_authenticators="digest-md5:cram-md5" +# + + +# 3.394. smtp_oauth_refresh_command +# +# Type: command +# Default: (empty) +# +# The command to run to generate an OAUTH refresh token for authorizing your +# connection to your SMTP server. This command will be run on every connection +# attempt that uses the OAUTHBEARER or XOAUTH2 authentication mechanisms. See " +# oauth" for details. +# + + +# 3.395. smtp_pass +# +# Type: string +# Default: (empty) +# +# Specifies the password for your SMTP account. If unset, NeoMutt will prompt you +# for your password when you first send mail via SMTP. See $smtp_url to configure +# NeoMutt to send mail via SMTP. +# +# Warning: you should only use this option when you are on a fairly secure +# machine, because the superuser can read your neomuttrc even if you are the only +# one who can read the file. +# + + +# 3.396. smtp_url +# +# Type: string +# Default: (empty) +# +# Defines the SMTP smarthost where sent messages should relayed for delivery. +# This should take the form of an SMTP URL, e.g.: +# +# smtp[s]://[user[:pass]@]host[:port] +# +# where "[...]" denotes an optional part. Setting this variable overrides the +# value of the $sendmail variable. +# +# Also see $write_bcc. +# + + +# 3.397. smtp_user +# +# Type: string +# Default: (empty) +# +# The username for the SMTP server. +# +# This variable defaults to your user name on the local machine. +# + + +# 3.398. sort +# +# Type: sort order +# Default: date +# +# Specifies how to sort messages in the "index" menu. Valid values are: +# +# • date +# +# • date-received +# +# • from +# +# • score +# +# • size +# +# • spam +# +# • subject +# +# • threads +# +# • to +# +# • unsorted +# +# You may optionally use the "reverse-" prefix to specify reverse sorting order, +# or the "last-" prefix to sort threads based on the corresponding attribute of +# the last descendant rather than the thread root. If both prefixes are in use, +# "reverse-" must come before "last-". The "last-" prefix has no effect on a flat +# view. +# +# Any ties in the primary sort are broken by $sort_aux. When $use_threads is +# "threads" or "reverse", $sort controls the sorting between threads, and +# $sort_aux controls the sorting within a thread. +# +# The "date-sent" value is a synonym for "date". The "mailbox-order" value is a +# synonym for "unsorted". +# +# The values of "threads" and "reverse-threads" are legacy options, which cause +# the value of $sort_aux to also contol sorting between threads, and they may not +# be used with the "last-" prefix. The preferred way to enable a threaded view is +# via $use_threads. This variable can also be set via the and +# functions. +# +# Note: When $use_threads is "threads", the last thread sorts to the bottom; when +# it is "reversed", the last thread sorts to the top. The use of "reverse-" in +# $sort swaps which end the last thread will sort to. +# +# See the "Use Threads Feature" section for further explanation and examples, +# https://neomutt.org/feature/use-threads. +# +set sort=threads + + +# 3.399. sort_alias +# +# Type: sort order +# Default: alias +# +# Specifies how the entries in the "alias" menu are sorted. The following are +# legal values: +# +# • address (sort alphabetically by email address) +# +# • alias (sort alphabetically by alias name) +# +# • unsorted (leave in order specified in .neomuttrc) +# +# Note: This also affects the entries of the address query menu, thus potentially +# overruling the order of entries as generated by $query_command. +# + + +# 3.400. sort_aux +# +# Type: sort order +# Default: date +# +# This provides a secondary sort for messages in the "index" menu, used when the +# $sort value is equal for two messages. +# +# When sorting by threads, this variable controls how subthreads are sorted +# within a single thread (for the order between threads, see $sort). This can be +# set to any value that $sort can, including with the use of "reverse-" and +# "last-" prefixes, except for variations using "threads" (in that case, NeoMutt +# will just use "date"). For instance, +# +# set sort_aux=last-date-received +# +# would mean that if a new message is received in a thread, that subthread +# becomes the last one displayed (or the first, if you have "set use_threads= +# reverse".) When using $use_threads, it is more common to use "last-" with $sort +# and not with $sort_aux. +# +# See the "Use Threads Feature" section for further explanation and examples, +# https://neomutt.org/feature/use-threads. +# +set sort_aux=last-date-received + + +# 3.401. sort_browser +# +# Type: sort order +# Default: alpha +# +# Specifies how to sort entries in the file browser. By default, the entries are +# sorted alphabetically. Valid values: +# +# • alpha (alphabetically) +# +# • count (all message count) +# +# • date +# +# • desc (description) +# +# • new (new message count) +# +# • size +# +# • unsorted +# +# You may optionally use the "reverse-" prefix to specify reverse sorting order +# (example: "set sort_browser=reverse-date"). +# +# The "unread" value is a synonym for "new". +# + + +# 3.402. sort_re +# +# Type: boolean +# Default: yes +# +# This variable is only useful when sorting by threads with $strict_threads unset +# . In that case, it changes the heuristic mutt uses to thread messages by +# subject. With $sort_re set, mutt will only attach a message as the child of +# another message by subject if the subject of the child message starts with a +# substring matching the setting of $reply_regex. With $sort_re unset, mutt will +# attach the message whether or not this is the case, as long as the non- +# $reply_regex parts of both messages are identical. +# + + +# 3.403. spam_separator +# +# Type: string +# Default: “,” +# +# This variable controls what happens when multiple spam headers are matched: if +# unset, each successive header will overwrite any previous matches value for the +# spam label. If set, each successive match will append to the previous, using +# this variable's value as a separator. +# + + +# 3.404. spool_file +# +# Type: mailbox +# Default: (empty) +# +# If your spool mailbox is in a non-default place where NeoMutt can't find it, +# you can specify its location with this variable. The description from +# "named-mailboxes" or "virtual-mailboxes" may be used for the spool_file. +# +# If not specified, then the environment variables $MAIL and $MAILDIR will be +# checked. +# +set spool_file="=inbox" + + +# 3.405. ssl_ca_certificates_file +# +# Type: path +# Default: (empty) +# +# This variable specifies a file containing trusted CA certificates. Any server +# certificate that is signed with one of these CA certificates is also +# automatically accepted. (GnuTLS only) +# +# Example: +# +# set ssl_ca_certificates_file=/etc/ssl/certs/ca-certificates.crt +# +# Note: On Debian systems, this option is set by default to “threads” in /etc/ +# Muttrc. +# +set ssl_ca_certificates_file="/etc/ssl/certs/ca-certificates.crt" + + +# 3.406. ssl_ciphers +# +# Type: string +# Default: (empty) +# +# Contains a colon-separated list of ciphers to use when using SSL. For OpenSSL, +# see ciphers(1) for the syntax of the string. +# +# For GnuTLS, this option will be used in place of "NORMAL" at the start of the +# priority string. See gnutls_priority_init(3) for the syntax and more details. +# (Note: GnuTLS version 2.1.7 or higher is required.) +# + + +# 3.407. ssl_client_cert +# +# Type: path +# Default: (empty) +# +# The file containing a client certificate and its associated private key. +# + + +# 3.408. ssl_force_tls +# +# Type: boolean +# Default: yes +# +# If this variable is set, NeoMutt will require that all connections to remote +# servers be encrypted. Furthermore it will attempt to negotiate TLS even if the +# server does not advertise the capability, since it would otherwise have to +# abort the connection anyway. This option supersedes $ssl_starttls. +# + + +# 3.409. ssl_min_dh_prime_bits +# +# Type: number +# Default: 0 +# +# This variable specifies the minimum acceptable prime size (in bits) for use in +# any Diffie-Hellman key exchange. A value of 0 will use the default from the +# GNUTLS library. (GnuTLS only) +# + + +# 3.410. ssl_starttls +# +# Type: quadoption +# Default: yes +# +# If set (the default), NeoMutt will attempt to use STARTTLS on servers +# advertising the capability. When unset, NeoMutt will not attempt to use +# STARTTLS regardless of the server's capabilities. +# +# Note that STARTTLS is subject to many kinds of attacks, including the ability +# of a machine-in-the-middle to suppress the advertising of support. Setting +# $ssl_force_tls is recommended if you rely on STARTTLS. +# + + +# 3.411. ssl_use_sslv3 +# +# Type: boolean +# Default: no +# +# If set , NeoMutt will use SSLv3 when communicating with servers that request +# it. N.B. As of 2015, SSLv3 is considered insecure, and using it is inadvisable. +# See https://tools.ietf.org/html/rfc7525 . +# + + +# 3.412. ssl_use_tlsv1 +# +# Type: boolean +# Default: no +# +# If set , NeoMutt will use TLSv1.0 when communicating with servers that request +# it. N.B. As of 2015, TLSv1.0 is considered insecure, and using it is +# inadvisable. See https://tools.ietf.org/html/rfc7525 . +# + + +# 3.413. ssl_use_tlsv1_1 +# +# Type: boolean +# Default: no +# +# If set , NeoMutt will use TLSv1.1 when communicating with servers that request +# it. N.B. As of 2015, TLSv1.1 is considered insecure, and using it is +# inadvisable. See https://tools.ietf.org/html/rfc7525 . +# + + +# 3.414. ssl_use_tlsv1_2 +# +# Type: boolean +# Default: yes +# +# If set , NeoMutt will use TLSv1.2 when communicating with servers that request +# it. +# + + +# 3.415. ssl_use_tlsv1_3 +# +# Type: boolean +# Default: yes +# +# If set , NeoMutt will use TLSv1.3 when communicating with servers that request +# it. +# + + +# 3.416. ssl_verify_dates +# +# Type: boolean +# Default: yes +# +# If set (the default), NeoMutt will not automatically accept a server +# certificate that is either not yet valid or already expired. You should only +# unset this for particular known hosts, using the function. +# + + +# 3.417. ssl_verify_host +# +# Type: boolean +# Default: yes +# +# If set (the default), NeoMutt will not automatically accept a server +# certificate whose host name does not match the host used in your folder URL. +# You should only unset this for particular known hosts, using the +# function. +# + + +# 3.418. status_chars +# +# Type: character string +# Default: “-*%A” +# +# Controls the characters used by the "%r" indicator in $status_format. +# +# ┌─────────┬───────┬───────────────────────────────────────────────────────────┐ +# │Character│Default│Description │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │1 │- │Mailbox is unchanged │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │2 │* │Mailbox has been changed and needs to be resynchronized │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │ │ │Mailbox is read-only, or will not be written when exiting. │ +# │3 │% │(You can toggle whether to write changes to a mailbox with │ +# │ │ │the operation, bound by default to "%") │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │ │ │Folder opened in attach-message mode. (Certain operations │ +# │4 │A │like composing a new mail, replying, forwarding, etc. are │ +# │ │ │not permitted in this mode) │ +# └─────────┴───────┴───────────────────────────────────────────────────────────┘ +# + + +# 3.419. status_format +# +# Type: string +# Default: “-%r-NeoMutt: %D [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d? +# %?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%?T?%T/?%s/%S) +# -%>-(%P)---” +# +# Controls the format of the status line displayed in the "index" menu. This +# string is similar to $index_format, but has its own set of printf(3)-like +# sequences: +# +# ┌───┬─┬───────────────────────────────────────────────────────────────────────┐ +# │%b │*│Number of mailboxes with new mail │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%d │*│Number of deleted messages │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%D │ │Description of the mailbox │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%f │ │The full pathname of the current mailbox │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%F │*│Number of flagged messages │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%h │ │Local hostname │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%l │*│Size (in bytes) of the current mailbox (see formatstrings-size) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%L │*│Size (in bytes) of the messages shown (i.e., which match the current │ +# │ │ │limit) (see formatstrings-size) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%m │*│The number of messages in the mailbox │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%M │*│The number of messages shown (i.e., which match the current limit) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%n │*│Number of new messages in the mailbox (unread, unseen) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%o │*│Number of old messages in the mailbox (unread, seen) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%p │*│Number of postponed messages │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%P │ │Percentage of the way through the index │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%r │ │Modified/read-only/won't-write/attach-message indicator, According to │ +# │ │ │$status_chars │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%R │*│Number of read messages in the mailbox (read, seen) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%s │ │Current sorting mode ($sort) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%S │ │Current aux sorting method ($sort_aux) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%t │*│Number of tagged messages in the mailbox │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%T │*│Current threading mode ($use_threads) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%u │*│Number of unread messages in the mailbox (seen or unseen) │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%v │ │NeoMutt version string │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%V │*│Currently active limit pattern, if any │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%>X│ │Right justify the rest of the string and pad with "X" │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%|X│ │Pad to the end of the line with "X" │ +# ├───┼─┼───────────────────────────────────────────────────────────────────────┤ +# │%*X│ │Soft-fill with character "X" as pad │ +# └───┴─┴───────────────────────────────────────────────────────────────────────┘ +# +# For an explanation of "soft-fill", see the $index_format documentation. +# +# * = can be optionally printed if nonzero +# +# Some of the above sequences can be used to optionally print a string if their +# value is nonzero. For example, you may only want to see the number of flagged +# messages if such messages exist, since zero is not particularly meaningful. To +# optionally print a string based upon one of the above sequences, the following +# construct is used: +# +# %??? +# +# where sequence_char is a character from the table above, and optional_string is +# the string you would like printed if sequence_char is nonzero. optional_string +# may contain other sequences as well as normal text, but you may not nest +# optional strings. +# +# Here is an example illustrating how to optionally print the number of new +# messages in a mailbox: +# +# %?n?%n new messages.? +# +# You can also switch between two strings using the following construct: +# +# %??&? +# +# If the value of sequence_char is non-zero, if_string will be expanded, +# otherwise else_string will be expanded. +# +# As another example, here is how to show either $sort and $sort_aux or +# $use_threads and $sort, based on whether threads are enabled with $use_threads: +# +# %?T?%s/%S&%T/%s? +# +# You can force the result of any printf(3)-like sequence to be lowercase by +# prefixing the sequence character with an underscore ("_") sign. For example, if +# you want to display the local hostname in lowercase, you would use: "%_h". +# +# If you prefix the sequence character with a colon (":") character, NeoMutt will +# replace any dots in the expansion by underscores. This might be helpful with +# IMAP folders that don't like dots in folder names. +# +set status_format=" %r %f [m:%?M?%M/?%m%?n? n:%n?%?o? o:%o?%?d? d:%d?%?F? f:%F?%?t? t:%t?%?p? p:%p?%?b? i:%b?%?l? %l?] %?V?%V ?(%s/%S) %> (%P) " + + +# 3.420. status_on_top +# +# Type: boolean +# Default: no +# +# Setting this variable causes the "status bar" to be displayed on the first line +# of the screen rather than near the bottom. If $help is set too, it'll be placed +# at the bottom. +# + + +# 3.421. strict_threads +# +# Type: boolean +# Default: no +# +# If set, threading will only make use of the "In-Reply-To" and "References:" +# fields when you $sort by message threads. By default, messages with the same +# subject are grouped together in "pseudo threads.". This may not always be +# desirable, such as in a personal mailbox where you might have several unrelated +# messages with the subjects like "hi" which will get grouped together. See also +# $sort_re for a less drastic way of controlling this behavior. +# +set strict_threads=yes + + +# 3.422. suspend +# +# Type: boolean +# Default: yes +# +# When unset, NeoMutt won't stop when the user presses the terminal's susp key, +# usually "^Z". This is useful if you run NeoMutt inside an xterm using a command +# like "xterm -e neomutt". +# + + +# 3.423. text_flowed +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will generate "format=flowed" bodies with a content type of +# "text/plain; format=flowed". This format is easier to handle for some mailing +# software, and generally just looks like ordinary text. To actually make use of +# this format's features, you'll need support in your editor. +# +# The option only controls newly composed messages. Postponed messages, resent +# messages, and draft messages (via -H on the command line) will use the +# content-type of the source message. +# +# Note that $indent_string is ignored when this option is set. +# +set text_flowed=yes + + +# 3.424. thorough_search +# +# Type: boolean +# Default: yes +# +# Affects the ~b, ~B, and ~h search operations described in section "patterns". +# If set, the headers and body/attachments of messages to be searched are decoded +# before searching. If unset, messages are searched as they appear in the folder. +# +# Users searching attachments or for non-ASCII characters should set this value +# because decoding also includes MIME parsing/decoding and possible character set +# conversions. Otherwise NeoMutt will attempt to match against the raw message +# received (for example quoted-printable encoded or with encoded headers) which +# may lead to incorrect search results. +# +set thorough_search=yes + + +# 3.425. thread_received +# +# Type: boolean +# Default: no +# +# When set, NeoMutt uses the date received rather than the date sent to thread +# messages by subject. +# +set thread_received=yes + + +# 3.426. tilde +# +# Type: boolean +# Default: no +# +# When set, the internal-pager will pad blank lines to the bottom of the screen +# with a tilde ("~"). +# +set tilde=yes + + +# 3.427. time_inc +# +# Type: number +# Default: 0 +# +# Along with $read_inc, $write_inc, and $net_inc, this variable controls the +# frequency with which progress updates are displayed. It suppresses updates less +# than $time_inc milliseconds apart. This can improve throughput on systems with +# slow terminals, or when running NeoMutt on a remote system. +# +# Also see the "tuning" section of the manual for performance considerations. +# +set time_inc=250 + + +# 3.428. timeout +# +# Type: number +# Default: 600 +# +# When NeoMutt is waiting for user input either idling in menus or in an +# interactive prompt, NeoMutt would block until input is present. Depending on +# the context, this would prevent certain operations from working, like checking +# for new mail or keeping an IMAP connection alive. +# +# This variable controls how many seconds NeoMutt will at most wait until it +# aborts waiting for input, performs these operations and continues to wait for +# input. +# +# A value of zero or less will cause NeoMutt to never time out. +# + + +# 3.429. tmpdir +# +# Type: path +# Default: “/tmp” +# +# This variable allows you to specify where NeoMutt will place its temporary +# files needed for displaying and composing messages. +# +# If this variable is not set, the environment variable $TMPDIR is used. Failing +# that, then "/tmp" is used. +# +set tmpdir=`mktemp -d` + + +# 3.430. to_chars +# +# Type: character string +# Default: “ +TCFLR” +# +# Controls the character used to indicate mail addressed to you. +# +# ┌─────────┬───────┬───────────────────────────────────────────────────────────┐ +# │Character│Default│Description │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │1 ││The mail is not addressed to your address. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │2 │+ │You are the only recipient of the message. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │3 │T │Your address appears in the "To:" header field, but you are│ +# │ │ │not the only recipient of the message. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │4 │C │Your address is specified in the "Cc:" header field, but │ +# │ │ │you are not the only recipient. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │5 │F │Indicates the mail that was sent by you. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │6 │L │Indicates the mail was sent to a mailing-list you subscribe│ +# │ │ │to. │ +# ├─────────┼───────┼───────────────────────────────────────────────────────────┤ +# │7 │R │Your address appears in the "Reply-To:" header field but │ +# │ │ │none of the above applies. │ +# └─────────┴───────┴───────────────────────────────────────────────────────────┘ +# + + +# 3.431. toggle_quoted_show_levels +# +# Type: number +# Default: 0 +# +# Quoted text may be filtered out using the command. If set to a +# number greater than 0, then the command will only filter out +# quote levels above this number. +# + + +# 3.432. trash +# +# Type: mailbox +# Default: (empty) +# +# If set, this variable specifies the path of the trash folder where the mails +# marked for deletion will be moved, instead of being irremediably purged. +# +# NOTE: When you delete a message in the trash folder, it is really deleted, so +# that you have a way to clean the trash. +# + + +# 3.433. ts_enabled +# +# Type: boolean +# Default: no +# +# Controls whether NeoMutt tries to set the terminal status line and icon name. +# Most terminal emulators emulate the status line in the window title. +# +set ts_enabled=yes + + +# 3.434. ts_icon_format +# +# Type: string +# Default: “M%?n?AIL&ail?” +# +# Controls the format of the icon title, as long as "$ts_enabled" is set. This +# string is identical in formatting to the one used by "$status_format". +# + + +# 3.435. ts_status_format +# +# Type: string +# Default: “NeoMutt with %?m?%m messages&no messages?%?n? [%n NEW]?” +# +# Controls the format of the terminal status line (or window title), provided +# that "$ts_enabled" has been set. This string is identical in formatting to the +# one used by "$status_format". +# +set ts_status_format="[`tty|sed -re 's,.+pts/,,'`]mutt@%h%r %f%?V?[%V]&?" + + +# 3.436. tunnel +# +# Type: command +# Default: (empty) +# +# Setting this variable will cause NeoMutt to open a pipe to a command instead of +# a raw socket. You may be able to use this to set up preauthenticated +# connections to your IMAP/POP3/SMTP server. Example: +# +# set tunnel="ssh -q mailhost.net /usr/local/libexec/imapd" +# +# Note: For this example to work you must be able to log in to the remote machine +# without having to enter a password. +# +# When set, NeoMutt uses the tunnel for all remote connections. Please see " +# account-hook" in the manual for how to use different tunnel commands per +# connection. +# + + +# 3.437. tunnel_is_secure +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will assume the $tunnel connection does not need STARTTLS to +# be enabled. It will also allow IMAP PREAUTH server responses inside a tunnel to +# proceed. This is appropriate if $tunnel uses ssh or directly invokes the server +# locally. +# +# When unset, NeoMutt will negotiate STARTTLS according to the ssl_starttls and +# ssl_force_tls variables. If ssl_force_tls is set, NeoMutt will abort connecting +# if an IMAP server responds with PREAUTH. This setting is appropriate if $tunnel +# does not provide security and could be tampered with by attackers. +# + + +# 3.438. uncollapse_jump +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will jump to the next unread message, if any, when the +# current thread is uncollapsed. +# + + +# 3.439. uncollapse_new +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will automatically uncollapse any collapsed thread that +# receives a new message. When unset, collapsed threads will remain collapsed. +# the presence of the new message will still affect index sorting, though. +# + + +# 3.440. use_8bit_mime +# +# Type: boolean +# Default: no +# +# Warning: do not set this variable unless you are using a version of sendmail +# which supports the -B8BITMIME flag (such as sendmail 8.8.x) or you may not be +# able to send mail. +# +# When set, NeoMutt will invoke $sendmail with the -B8BITMIME flag when sending +# 8-bit messages to enable ESMTP negotiation. +# + + +# 3.441. use_domain +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will qualify all local addresses (ones without the "@host" +# portion) with the value of $hostname. If unset, no addresses will be qualified. +# + + +# 3.442. use_envelope_from +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will set the envelope sender of the message. If +# $envelope_from_address is set, it will be used as the sender address. If unset, +# NeoMutt will attempt to derive the sender from the "From:" header. +# +# Note that this information is passed to sendmail command using the -f command +# line switch. Therefore setting this option is not useful if the $sendmail +# variable already contains -f or if the executable pointed to by $sendmail +# doesn't support the -f switch. +# +set use_envelope_from=yes + + +# 3.443. use_from +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will generate the "From:" header field when sending messages. +# If unset, no "From:" header field will be generated unless the user explicitly +# sets one using the "my_hdr" command. +# + + +# 3.444. use_ipv6 +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will look for IPv6 addresses of hosts it tries to contact. If +# this option is unset, NeoMutt will restrict itself to IPv4 addresses. Normally, +# the default should work. +# + + +# 3.445. use_threads +# +# Type: enumeration +# Default: unset +# +# The style of threading used in the index. May be one of "flat" (no threading), +# "threads" (threaded, with subthreads below root message) or "reverse" +# (threaded, with subthreads above root message). For convenience, the value +# "yes" is a synonym for "threads", and "no" is a synonym for "flat". +# +# If this variable is never set, then $sort controls whether threading is used, +# $sort_aux controls both the sorting of threads and subthreads, and using +# to select threads affects only $sort. Once this variable is set, +# attempting to set $sort to a value using "threads" will warn, the value of +# $sort controls the sorting between threads while $sort_aux controls sorting +# within a thread, and toggles $use_threads. +# +# Example: +# +# set use_threads=yes +# +# See the "Use Threads Feature" section for further explanation and examples. +# + + +# 3.446. user_agent +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will add a "User-Agent:" header to outgoing messages, +# indicating which version of NeoMutt was used for composing them. +# + + +# 3.447. vfolder_format +# +# Type: string +# Default: “%2C %?n?%4n/& ?%4m %f” +# +# This variable allows you to customize the file browser display for virtual +# folders to your personal taste. This string uses many of the same expandos as +# $folder_format. +# + + +# 3.448. virtual_spool_file +# +# Type: boolean +# Default: no +# +# When set, NeoMutt will use the first defined virtual mailbox (see +# virtual-mailboxes) as a spool file. +# +# This command is now unnecessary. $spool_file has been extended to support +# mailbox descriptions as a value. +# + + +# 3.449. wait_key +# +# Type: boolean +# Default: yes +# +# Controls whether NeoMutt will ask you to press a key after an external command +# has been invoked by these functions: , , +# , , and commands. +# +# It is also used when viewing attachments with "auto_view", provided that the +# corresponding mailcap entry has a needsterminal flag, and the external program +# is interactive. +# +# When set, NeoMutt will always ask for a key. When unset, NeoMutt will wait for +# a key only if the external command returned a non-zero status. +# +set wait_key=no + + +# 3.450. weed +# +# Type: boolean +# Default: yes +# +# When set, NeoMutt will weed headers when displaying, forwarding, or replying to +# messages. +# +# Also see $copy_decode_weed, $pipe_decode_weed, $print_decode_weed. +# + + +# 3.451. wrap +# +# Type: number +# Default: 0 +# +# When set to a positive value, NeoMutt will wrap text at $wrap characters. When +# set to a negative value, NeoMutt will wrap text so that there are $wrap +# characters of empty space on the right side of the terminal. Setting it to zero +# makes NeoMutt wrap at the terminal width. +# +# Also see $reflow_wrap. +# +set wrap=$reflow_wrap + + +# 3.452. wrap_headers +# +# Type: number +# Default: 78 +# +# This option specifies the number of characters to use for wrapping an outgoing +# message's headers. Allowed values are between 78 and 998 inclusive. +# +# Note: This option usually shouldn't be changed. RFC5233 recommends a line +# length of 78 (the default), so please only change this setting when you know +# what you're doing. +# + + +# 3.453. wrap_search +# +# Type: boolean +# Default: yes +# +# Controls whether searches wrap around the end. +# +# When set, searches will wrap around the first (or last) item. When unset, +# incremental searches will not wrap. +# + + +# 3.454. write_bcc +# +# Type: boolean +# Default: no +# +# Controls whether NeoMutt writes out the "Bcc:" header when preparing messages +# to be sent. Some MTAs, such as Exim and Courier, do not strip the "Bcc:" +# header; so it is advisable to leave this unset unless you have a particular +# need for the header to be in the sent message. +# +# If NeoMutt is set to deliver directly via SMTP(see $smtp_url), this option does +# nothing: NeoMutt will never write out the "Bcc:" header in this case. +# +# Note this option only affects the sending of messages. Fcc'ed copies of a +# message will always contain the "Bcc:" header if one exists. +# +# Note: On Debian systems, exim4 and postfix strip BCC headers by default. The +# above warning applies to exim3 users, see /etc/Muttrc. +# + + +# 3.455. write_inc +# +# Type: number +# Default: 10 +# +# When writing a mailbox, a message will be printed every $write_inc messages to +# indicate progress. If set to 0, only a single message will be displayed before +# writing a mailbox. +# +# Also see the $read_inc, $net_inc and $time_inc variables and the "tuning" +# section of the manual for performance considerations. +# + + +# 3.456. x_comment_to +# +# Type: boolean +# Default: no +# +# If set, NeoMutt will add "X-Comment-To:" field (that contains full name of +# original article author) to article that followuped to newsgroup. +# + +# vim:sw=12:noet:sts=12:ts=12:ft=muttrc diff --git a/.config/neomutt/container-extractor b/.config/neomutt/container-extractor new file mode 100755 index 0000000..5296b7d --- /dev/null +++ b/.config/neomutt/container-extractor @@ -0,0 +1,47 @@ +#!/bin/sh +set -eu + +SELF="${0##*/}" + +if [ -z "${TMPDIR:-}" ]; then + TMPDIR=/tmp +fi +for i in $LOGNAME volatile; do + if [ -d "${TMPDIR}/$i" ]; then + TMPDIR="${TMPDIR}/$i" + break + fi +done +export TMPDIR +TMPDIR=$(mktemp -dp "$TMPDIR" cont.XXXXXXXXXX) +cleanup() +{ + cd / && rm -r "$TMPDIR" + [ ! -t 0 ] || stty echo + trap - 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 +} +trap cleanup 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +cd "$TMPDIR" + +case "$1" in + (application/ms-tnef) tnef;; + (application/x-zip-compressed) unzip /dev/stdin;; + (application/x-7z-compressed) z7 e /dev/stdin;; + (application/zip) unzip /dev/stdin;; +esac + +nfiles=$(ls -1 | wc -l) +if [ $nfiles -eq 1 ]; then + + set -x + setsid run-mailcap * & + PID=$! + ZSH_PREFILL_CMD="mv '$(echo -n *)' " x-terminal-emulator + perl -e "kill '-TERM', $PID" + +else + + ZSH_RUN_ON_LOAD="ls -l" x-terminal-emulator + +fi diff --git a/.config/neomutt/edit-header b/.config/neomutt/edit-header new file mode 100755 index 0000000..ab7444b --- /dev/null +++ b/.config/neomutt/edit-header @@ -0,0 +1,75 @@ +#!/bin/sh +# +# edit-header - helper script to append/replace/remove headers with mutt +# +# Based on an idea by David Champion +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +if [ ! -x "$(command -v formail)" ]; then + echo E: formail not installed. >&2 + exit 1 +fi + +header="${1:-}" +if [ -z "$header" ]; then + echo "E: no header specified" >&2 + exit 1 +fi + +get_header_contents() +{ + local contents + printf "Enter ${1:-header} contents: " >/dev/tty + read contents &2 + exit 1 + ;; + +esac + +echo "set my_editor=\"\$editor\"" +echo "set my_filter=\"$editor\"" +echo -n "push '" +echo -n "set editor=\"\$my_filter\"" +echo -n "" +echo -n "set editor=\"\$my_editor\"" +echo -n "unset my_filter" +echo -n "unset my_editor" +echo "'" diff --git a/.config/neomutt/filter-proxy b/.config/neomutt/filter-proxy new file mode 100755 index 0000000..e0b1ad2 --- /dev/null +++ b/.config/neomutt/filter-proxy @@ -0,0 +1,31 @@ +#!/bin/sh +# +# filter-proxy - enable filters to work on real files (using tmpfiles) +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +cmd= +file= +while [ -n "${1:-}" ]; do + if [ -z "${2:-}" ]; then + file="$1" + else + case "$1" in + *' '*) cmd="$cmd '$1'";; + *) cmd="$cmd $1";; + esac + fi + shift +done + +TMPFILE="$(mktemp --tmpdir proxy.XXXXXXXXXX)" +trap "rm -f $TMPFILE" 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +eval $cmd <"$file" >$TMPFILE +cat $TMPFILE >"$file" + +rm -f $TMPFILE +trap - 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 diff --git a/.config/neomutt/get-timestamp b/.config/neomutt/get-timestamp new file mode 100755 index 0000000..f165be6 --- /dev/null +++ b/.config/neomutt/get-timestamp @@ -0,0 +1,34 @@ +#!/bin/sh +# +# get-timestamp - helper script to obtain a timestamp from the user +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +if [ -z "${__RLWRAPPED:-}" ] && [ -x $(command -v rlwrap) ]; then + __RLWRAPPED=true exec rlwrap "$0" "$@" +fi + +printf 'When should I tickle you about this message? ' >/dev/tty +read timespec &2 + exit 1 + ;; + @[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) + date="$timespec";; + [0-9][0-9][0-9][0-9][-.][0-9][0-9][-.][0-9][0-9]) + date="$timespec";; + *[0-9]y) date="now + ${timespec%y} years 00:00";; + *[0-9]m) date="now + ${timespec%m} months 00:00";; + *[0-9]w) date="now + ${timespec%w} weeks 00:00";; + *[0-9]d|*[0-9]) date="now + ${timespec%d} days 00:00";; + *[0-9]h) date="now + ${timespec%h} hours";; + *) date="$timespec";; +esac + +exec date +'%s (%c)' -d "$date" diff --git a/.config/neomutt/headers b/.config/neomutt/headers new file mode 100644 index 0000000..dec911f --- /dev/null +++ b/.config/neomutt/headers @@ -0,0 +1,37 @@ +unhdr_order * +hdr_order date +hdr_order x-spam-relays-untrusted +hdr_order from +hdr_order organization organisation +hdr_order x-eqto x-original-to +hdr_order to cc +hdr_order subject +hdr_order message-id +hdr_order disposition-notification-to return-receipt-to +hdr_order x-debian-pr-package +hdr_order x-spam: +hdr_order x-trained-as x-crm114-autotrain +hdr_order user-agent x-mailer x-newsreader +hdr_order x-justme +hdr_order x-autoreplied +hdr_order x-tickle x-postponed x-was-postponed + +ignore * +unignore date +#unignore x-spam-relays-untrusted +unignore from +#unignore organization organisation +unignore x-eqto +unignore to cc +unignore subject +unignore message-id +unignore disposition-notification-to return-receipt-to +unignore x-debian-pr-package +unignore x-spam: +#unignore x-trained-as x-crm114-autotrain +#unignore user-agent x-mailer x-newsreader +unignore x-justme +unignore x-autoreplied +unignore x-tickle x-postponed x-was-postponed + +# vim:ft=muttrc diff --git a/.config/neomutt/hooks b/.config/neomutt/hooks new file mode 100644 index 0000000..29b0706 --- /dev/null +++ b/.config/neomutt/hooks @@ -0,0 +1,51 @@ +fcc-save-hook . =store + +send2-hook '~C @packages\.qa\.debian\.org' 'my_hdr X-PTS-Approved: please' + +fcc-hook -request@ '=discard' +send-hook '~s "Re: confirm" ~t -request@' 'push pc' + +# do not set M-F-T on mails to vger mailing list +send2-hook . 'set followup_to' +send2-hook '~C @vger\.kernel\.org' 'unset followup_to' + +send2-hook . 'set send_multipart_alternative" +send2-hook '~C @vger\.kernel\.org' 'unset send_multipart_alternative" + +# do a for L when sending to the git mailing list +# http://marc.info/?l=mutt-users&m=118734866910357&w=2 +#message-hook . 'bind pager L list-reply' +#message-hook '~C git@vger\.kernel\.org' 'bind pager L group-reply' +#macro index L 'L' +# NOTE: using M-F-T from procmail for now + +message-hook . 'set attribution="$my_attribution_en"' +#message-hook '~b "\\<(Danke|Grü(ß|ss)e|Gru(ß|ss)|Lieber?|geehrter?|Herr|Frau|Moin|Servus|Lg|Deine?|Ihre?)\\>"' 'set attribution="$my_attribution_de"' + +# do not get spam status via imap, as it would download the entire message +folder-hook . 'set index_format="%4C %Z %-10@date@ %-15.15F %4c%?M?/[%M]? %?H?[%H] ?%s"' +folder-hook feeds 'set index_format="%3C %{%F} %-7.7F %s"' +folder-hook imaps?:// 'set index_format="%4C %Z %{%F} %-15.15F %4c%?M?/[%M] & ?%s"' + +folder-hook spam push '~On*~Np' + +folder-hook . 'set pager_index_lines=5' +folder-hook feeds|mass 'set pager_index_lines=10' + +#folder-hook . 'set mark_old' +#folder-hook drafts|store|feeds|newsletters 'unset mark_old' + +folder-hook store push '~O|~Nn*' + +# since I have delete=yes, messages marked for trashing on mailbox entry must +# be due to IMAP clients or the like not purging them. I found that some +# clients automatically trash read mail from the INBOX, for *whatever* reason. +# I have not found the authors of those clients yet. In the mean time, since +# messages are not expected to be marked for deletion on mailbox entry, the +# following ensures that I lose no more mail. +folder-hook . push '~D' + +index-format-hook date "~d<1d" "%{%H:%M%Z}" +index-format-hook date "~A" "%d" + +# vim:ft=muttrc diff --git a/.config/neomutt/htmldump b/.config/neomutt/htmldump new file mode 100755 index 0000000..396b799 --- /dev/null +++ b/.config/neomutt/htmldump @@ -0,0 +1,59 @@ +#!/bin/sh + +get_mutt_confvar() { + local ret; + ret=$(neomutt -Q "$1" | sed -rne "s,.+(=| is) *,,p") + case "$ret" in + (set) echo return 0;; + (unset) echo return 1;; + ('') echo "${2:-}"; return 1;; + (*) echo "$ret";; + esac +} + +WRAP=$(get_mutt_confvar wrap 0) +if [ $WRAP -lt 0 ]; then + WIDTH=$((${COLUMNS:-78} + $WRAP)) + +elif [ $WRAP -gt 0 ]; then + WIDTH=$WRAP + +fi + +awesome-client <<-_eof + local naughty = require("naughty") + naughty.notify({ preset = naughty.config.presets.low, + title = "htmldump called", + text = [[$@]], + }) + _eof + +if command -v html2markdown >/dev/null; then + + exec html2markdown --asterisk-emphasis --body-width=$WIDTH --unicode-snob \ + --no-skip-internal-links --links-after-para --no-wrap-links \ + --decode-errors=replace --images-to-alt - "$2"| \ + sed -re 's,^\\--[[:space:]]+$,-- ,' + +elif command -v pandoc >/dev/null; then + + exec iconv -f "$2" -t utf-8 | pandoc -s -f html -t markdown_mmd \ + --columns=$WIDTH + +elif command -v elinks >/dev/null; then + + exec elinks -anonymous -localhost -eval "set document.codepage.assume = '$2'" \ + -dump-width $WIDTH \ + -eval "set document.browse.margin_width = 0" \ + -force-html -dump -dump-charset utf-8 -dump-color-mode 0 + +elif command -v w3m >/dev/null; then + + exec w3m -I "$2" -O utf-8 -T text/html -dump -cols $WIDTH + +else + + echo >&2 No HTML to text converter found. + exit 1 + +fi diff --git a/.config/neomutt/icalparser b/.config/neomutt/icalparser new file mode 100755 index 0000000..50ed472 --- /dev/null +++ b/.config/neomutt/icalparser @@ -0,0 +1,74 @@ +#!/usr/bin/python3 + +import sys +import os +from icalendar import Calendar, Event +from textwrap import fill, indent + +FIELDS = ('summary','location','organiser', + 'flags','uid','rrule') +COLSEP = ': ' + +COLUMNS = int(os.getenv('COLUMNS', 80))-10 +WIDTH = max(len(i) for i in FIELDS) +INDENT = WIDTH + len(COLSEP) + +def dtstrs(event): + start, end = event.get('dtstart').dt, event.get('dtend') + if not end: + duration = event.get('duration').dt + end = start + duration + else: + end = end.dt + + def strftime(dt, strf): + return dt.astimezone().strftime(strf) + + ret = [] + if start.tzinfo == end.tzinfo: + ret.append(strftime(start, '%F %R')) + + else: + ret.append(strftime(start, '%F %R %Z')) + + if start.date() == end.date(): + ret.append(strftime(end, '%T %Z')) + + else: + ret.append(strftime(end, '%F %R %Z')) + + return ret + +def parse_ics_file(fp): + cal = Calendar.from_ical(fp.read()) + + for event in cal.walk(): + if event.name != "VEVENT": continue + print('{} → {}'.format(*dtstrs(event))) + flags = [] + for k in ('status', 'class', 'transp', 'priority'): + t = event.get(k) + if t: flags.append((k, t)) + event['flags'] = ' '.join('{}:{}'.format(*f) for f in flags) + for label in FIELDS: + if label in event: + text = fill(str(event[label]), width=COLUMNS-INDENT, + initial_indent='', subsequent_indent=' '*INDENT) + print(f'{label.capitalize():>{WIDTH}s}{COLSEP}{text}') + + if 'description' in event: + output = [''] + lines = event['description'].split('\n') + for line in lines: + output.append(fill(line, width=COLUMNS, initial_indent=' ', + subsequent_indent=' ')) + print('\n'.join(output)) + +if __name__ == '__main__': + + if len(sys.argv) > 1 and sys.argv[1] != '-': + for f in sys.argv[1:]: + with open(f) as fp: + parse_ics_file(fp) + else: + parse_ics_file(sys.stdin) diff --git a/.config/neomutt/keybindings b/.config/neomutt/keybindings new file mode 100644 index 0000000..8283146 --- /dev/null +++ b/.config/neomutt/keybindings @@ -0,0 +1,97 @@ +macro generic,pager " zcat /usr/share/doc/neomutt/manual.txt.gz | sensible-pager" "show Neomutt documentation" + +bind index,pager | pipe-message +bind index,pager ! flag-message +bind index,pager \eP print-message +bind index,pager previous-entry +bind index,pager next-entry +bind index,pager \eU undelete-subthread +bind index,pager \eD delete-subthread + +bind index 0 first-entry +bind index G last-entry +bind pager 0 top +bind pager G bottom + +bind pager,index previous-unread + +macro index p "" "do nothing" + +bind index h noop + +macro index \es " set my_weed=\$weed set my_resolve=\$resolve set noweed noresolve^n set weed=\$my_weed set resolve=\$my_resolve" "decode message to current folder" +macro pager \es " set my_weed=\$weed set my_resolve=\$resolve set noweed noresolve^n set weed=\$my_weed set resolve=\$my_resolve" "decode message to current folder" +macro index \eS "<" "save messages to store" +macro pager \eS "<" "save message to store" +macro index S " set my_weed=\$weed set my_resolve=\$resolve set noweed noresolve< set weed=\$my_weed set resolve=\$my_resolve" "decode message to $record folder" +macro pager S " set my_weed=\$weed set my_resolve=\$resolve set noweed noresolve< set weed=\$my_weed set resolve=\$my_resolve" "decode message to $record folder" + +macro index,pager E ' source "$my_confdir/supersede-header X-Tickle get-timestamp|"=resubmit' "schedule messages with tickler" +macro index,pager \ex ' source "$my_confdir/remove-header X-Postponed|"' "release postponed messages" + +macro index,pager \e, "<" "go to $record folder" +macro index,pager \e. ">" "go to $spool folder" +macro index,pager \e1 "!" "go to inbox folder" + +bind index \eT tag-thread +bind index,pager \eK mail-key + +macro index,pager \eR " source $my_confdir/neomuttrc" "reload muttrc" +macro compose \eR " source $my_confdir/neomuttrc" "reload muttrc" + +macro index X "=retrain/spam" "retrain message as spam" +macro pager X "=retrain/spam" "retrain message as spam" +macro index Z "=retrain/ham" "retrain message as ham" +macro pager Z "=retrain/ham" "retrain message as ham" + +macro index,pager,attach,compose \Cb " set my_pipe_decode=\$pipe_decode set pipe_decode/usr/bin/urlscan set pipe_decode=\$my_pipe_decode" "invoke urlscan" + +macro compose Y '' "send message without storing" +macro compose \Cy 'c' "send message without signing" +macro compose \CY 'cY' "send message without storing signing" +macro compose N ' unset fcc_attach' "do not fcc-store attachment" + +macro index,pager F '~L ' "search for correspondents" +macro index,pager \ef '~(~L )' "search for correspondents (show complete threads)" + +bind index,pager \en search-opposite + +macro pager p 'less -c' "pipe message into pager" + +bind pager [ half-up +bind pager ] half-down + +#TODO this is a hack until switch-profile does not readd headers. +macro compose e " set my_editor=\$editor set editor=sensible-editor set editor=\$my_editor" "invoke normal editor to edit message" +macro index,pager e " set my_editor=\$editor set editor=sensible-editor set editor=\$my_editor" "invoke normal editor to edit message" + +macro index \ej " set my_editor=\$editor source $my_confdir/batch-subject-editor| set editor=\$my_editor" "change message subject" + +macro index,pager \er " set my_editor=\$editor set editor=\"$my_confdir/reuse-message \$my_editor\" set editor=\$my_editor" "invoke normal editor to edit message" +macro index,pager \eg " set my_editor=\$editor set editor=\"$my_confdir/reuse-message \$my_editor\" set editor=\$my_editor" "invoke normal editor to edit message" +macro index,pager \el " set my_editor=\$editor set editor=\"$my_confdir/reuse-message \$my_editor\" set editor=\$my_editor" "invoke normal editor to edit message" + +# override F6 from notmuch-mutt +macro index "" "do nothing" + +macro attach e " set my_mailcap_path=\$mailcap_path set mailcap_path=$my_confdir/mailcap.editing set mailcap_path=\$my_mailcap_path" "Call view in the mailcap edit context" +macro attach E " set my_mailcap_path=\$mailcap_path set mailcap_path=$my_confdir/mailcap.editing set mailcap_path=\$my_mailcap_path" "Call print in the mailcap edit context"" + +macro index,pager M " set my_weed=\$weed set noweedformail -czx X-RSS-URL: | xargs sensible-browser set weed=\$my_weed" + +macro index,pager " set my_pipe_decode=\$pipe_decode unset pipe_decode$my_confdir/viewmailattachments set pipe_decode=\$my_pipe_decode" "view attachments in browser" + +macro compose \ez " set my_editor=\$editor set editor='mogrify -sample 1000x1000' set editor=\$my_editor" "Resize attached image to within 1000x1000" +macro compose \eZ " set my_editor=\$editor set editor='mogrify -sample 2500x2500' set editor=\$my_editor" "Resize attached image to within 1000x1000" + +bind index,pager sidebar-prev +bind index,pager \e sidebar-prev +bind index,pager sidebar-next +bind index,pager \e sidebar-next +bind index,pager \e sidebar-open +bind index,pager \e sidebar-page-up +bind index,pager \e sidebar-page-down + +bind index,pager \\ sidebar-toggle-visible + +# vim:sw=12:noet:sts=12:ts=12:ft=muttrc diff --git a/.config/neomutt/list-mailboxes b/.config/neomutt/list-mailboxes new file mode 100755 index 0000000..d0bb5d5 --- /dev/null +++ b/.config/neomutt/list-mailboxes @@ -0,0 +1,15 @@ +#!/bin/sh + +if [ -f $VARDIR/offlineimap/mailboxes ]; then + sed 1d $VARDIR/offlineimap/mailboxes +fi + +find "$1/" -type d -name cur -printf '%h\n' | \ + sed -e "s,^$1/,=,g" -e "s,^$1\$,$2," | \ + egrep -v '^=(sp(ool|am)|discard|retrain(/(sp|h)am)?)$' | sort | \ +while read mailbox; do + + ! grep -q "^mailboxes ${mailbox}\$" $VARDIR/offlineimap/mailboxes || continue + echo "mailboxes $mailbox" + +done diff --git a/.config/neomutt/lists b/.config/neomutt/lists new file mode 100644 index 0000000..c2fb824 --- /dev/null +++ b/.config/neomutt/lists @@ -0,0 +1,114 @@ +lists staff@sccs.swarthmore.edu +subscribe slug@sccs.swarthmore.edu + +subscribe presse@uni-wh.de + +subscribe ailab-curiosa@lists.ifi.uzh.ch + +subscribe debian-books@lists.debian.org +subscribe debian-curiosa@lists.debian.org +subscribe debian-devel-announce@lists.debian.org +subscribe debian-devel@lists.debian.org +subscribe debian-events-eu@lists.debian.org +subscribe debian-events@lists.debian.org +subscribe debian-firewall@lists.debian.org +subscribe debian-infrastructure-announce@lists.debian.org +subscribe debian-ipv6@lists.debian.org +subscribe debian-isp@lists.debian.org +subscribe debian-lsb@lists.debian.org +subscribe debian-mentors@lists.debian.org +subscribe debian-private@lists.debian.org +subscribe debian-project@lists.debian.org +subscribe debian-release@lists.debian.org +subscribe debian-research@lists.debian.org +subscribe debian-security-announce@lists.debian.org +subscribe debian-user@lists.debian.org +subscribe debian-user-german@lists.debian.org +subscribe debian-vote@lists.debian.org +subscribe debian-women@lists.debian.org +subscribe debian-roadmap@lists.alioth.debian.org + +subscribe debconf-announce@lists.debconf.org +subscribe debconf-discuss@lists.debconf.org +subscribe debconf-team@lists.debconf.org +subscribe debconf-sponsors-team@lists.debconf.org +subscribe debconf-thailand@lists.madduck.net +subscribe debconf15-team@lists.debian.org +subscribe debconf16-team@lists.debian.org +subscribe debconf-kids@lists.debian.org + +subscribe lca-announce@lists.linux.org.au +subscribe (lca20[0-9][0-9]-)?chat@lists.(lca20[0-9][0-9]\.)?linux.org.au +subscribe yct@lists.lca20[1-9][0-9]\.linux\.org\.au + +subscribe area-muc@teams.debian.net +subscribe community@lists.debian.ch + +subscribe cong@agouros.de + +subscribe pkg-salt-team@lists.alioth.debian.org + +#subscribe (community|discuss)@opensource.mit.edu +subscribe os-renet@insel.cs.tu-berlin.de +subscribe openchat@lists.nzoss.org.nz +subscribe campers@groups.baacamp.org + +subscribe ansible-project@googlegroups.com +subscribe asterisk-users@lists.digium.com +subscribe backuppc-users@lists.sourceforge.net +subscribe dovecot@dovecot.org +subscribe libvirt-users@redhat.com +subscribe mailtags@lists.madduck.net +subscribe mutt-users@mutt.org +subscribe netconf-devel@lists.alioth.debian.org +subscribe offlineimap-project@lists.alioth.debian.org +subscribe postfix-users@postfix.org +subscribe rsyslog@lists.adiscon.com +subscribe salt-users@googlegroups.com +subscribe sane-devel@lists.alioth.debian.org +subscribe users@spamassassin.apache.org +subscribe vcs-pkg-discuss@lists.alioth.debian.org +subscribe vim(@vim.org|_use@googlegroups\.com) +subscribe zsh-(users|workers)@zsh.org +subscribe vmm-users@lists.sourceforge.net +subscribe osmand@googlegroups.com +subscribe users@global.libreoffice.org +subscribe linux-kernel@vger.kernel.org +subscribe netfilter@vger.kernel.org +subscribe django-(user|developer)s@googlegroups.com +subscribe openssh-unix-dev@mindrot.org +subscribe unison-users@yahoogroups.com +subscribe unison-hackers@lists.seas.upenn.edu +subscribe users@sogo.nu +subscribe systemd-devel@lists.freedesktop.org +subscribe community@mail.odoo.com +subscribe munin-users@lists.sourceforge.net +subscribe gnupg-users@gnupg.org +subscribe awesome@naquadah.org +subscribe germany@lists.fsfe.org +subscribe talk@lists.muc.ccc.de +subscribe cryptography@metzdowd.com +subscribe davical-general@lists.sourceforge.net +subscribe tigervnc-users@googlegroups.com + +subscribe openedu-parents@lists.openstem.com.au + +subscribe vcs-home@lists.madduck.net + +subscribe webis-android-beta@googlegroups.com + +subscribe django-users@googlegroups.com + +subscribe (alteherren|info)@sudetia\.de + +subscribe ip@(v2.)?listbox.com +subscribe cypherpunks@cpunks.org + +subscribe thorndon-c@lists.madduck.net + +subscribe staffordstreet@lists.madduck.net + +subscribe .+@r2e\.madduck\.net +subscribe blog@lists.madduck.net + +# vim:ft=muttrc diff --git a/.config/neomutt/mailcap.backgrounding b/.config/neomutt/mailcap.backgrounding new file mode 100644 index 0000000..f3d7136 --- /dev/null +++ b/.config/neomutt/mailcap.backgrounding @@ -0,0 +1,8 @@ +# +# Neomutt mailcap for backgrounding + +text/html; ~/.config/neomutt/bgview-delay -t %t; description=Backgrounded run of run-mailcap with delayed cleanup +application/*; ~/.config/neomutt/bgview -t %t; description=Backgrounded run of run-mailcap +image/*; ~/.config/neomutt/bgview -t %t; description=Backgrounded run of run-mailcap +audio/*; ~/.config/neomutt/bgview -t %t; description=Backgrounded run of run-mailcap +#multipart/related; ~/.config/neomutt/viewmailattachments; description=Backgrounded loading of HTML message with related parts diff --git a/.config/neomutt/mailcap.containers b/.config/neomutt/mailcap.containers new file mode 100644 index 0000000..9ea3892 --- /dev/null +++ b/.config/neomutt/mailcap.containers @@ -0,0 +1,8 @@ +# +# Neomutt mailcap for handling containers +# + +application/ms-tnef; ~/.config/neomutt/container-extractor '%t'; description=Microsoft NIH TNEF +application/x-zip-compressed; ~/.config/neomutt/container-extractor '%t'; description=Compressed ZIP files +application/x-7z-compressed; ~/.config/neomutt/container-extractor '%t'; description=Compressed ZIP files +application/zip; ~/.config/neomutt/container-extractor '%t'; description=Compressed ZIP files diff --git a/.config/neomutt/mailcap.editing b/.config/neomutt/mailcap.editing new file mode 100644 index 0000000..e58143b --- /dev/null +++ b/.config/neomutt/mailcap.editing @@ -0,0 +1,3 @@ +application/pdf; pdftool --file -f %s; print=pdftool --proc -f %s +application/*; ~/.config/neomutt/bgview -t %t +image/*; ~/.config/neomutt/bgview -t %t diff --git a/.config/neomutt/mailcap.htmldump b/.config/neomutt/mailcap.htmldump new file mode 100644 index 0000000..624bb9f --- /dev/null +++ b/.config/neomutt/mailcap.htmldump @@ -0,0 +1,5 @@ +# +# Neomutt mailcap for dumping HTML to text +# + +text/html; ~/.config/neomutt/htmldump --from %{charset}; description=HTML Text; nametemplate=%s.html; copiousoutput diff --git a/.config/neomutt/mailcap.icalendar b/.config/neomutt/mailcap.icalendar new file mode 100644 index 0000000..c6816fc --- /dev/null +++ b/.config/neomutt/mailcap.icalendar @@ -0,0 +1,7 @@ +# +# Neomutt mailcap for iCalendar previewing/khal import + +text/calendar; ~/.config/neomutt/icalparser; description=iCal details; copiousoutput; \ + print=sh -c "sensible-editor '%s' && khal import '%s'"; +application/ics; ~/.config/neomutt/icalparser; description=iCal details; copiousoutput; \ + print=sh -c "sensible-editor '%s' && khal import '%s'"; diff --git a/.config/neomutt/mkconf b/.config/neomutt/mkconf new file mode 100755 index 0000000..bab2a10 --- /dev/null +++ b/.config/neomutt/mkconf @@ -0,0 +1,78 @@ +#!/bin/sh +# +# BEWARE THIS IS UGLY +# +# I like this approach because it imports the full documentation for each +# setting. However, `mutt -O -D` may be much better suited for your needs. +# +set -eu + +FILE="${1:-${0%/*}/confvars}" +TARGET="${2:-}" + +if [ ! -f "$FILE" ]; then + echo >&2 "E: File $FILE does not exist" + exit 1 +fi + +if [ -z "$TARGET" ]; then + TARGET="$FILE" +fi + +TMPFILE="$(mktemp -t vit.XXXXXXXX)" +cleanup() { rm -f "$TMPFILE"; trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15; } +trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +process_stanza() { + echo "$2" + local opt setting trailer + opt="$(sed -ne "/^set ${1}=/,/# 3\./p" $FILE)" + if [ -n "$opt" ]; then + opt="${opt% +*}" + setting="${opt%% +*}" + echo >&2 "Importing setting: $setting …" + echo "$setting" + echo "$opt" | grep '^#' || : + fi + echo + echo +} + +option= +{ zcat /usr/share/doc/neomutt/manual.txt.gz | \ + sed -e '1,/^3\. Configuration Variables$/d;1d;/^4\./,$d' -e 's, , ,g'; + echo END; } | \ + +while read first rest; do + line="$first ${rest%% }" + case "$first" in + (3.[0-9]*|END) + [ -z "$option" ] || \ + process_stanza "$option" "${stanza}" + stanza="# $line" + option="$rest" + ;; + ('') + stanza="${stanza:+$stanza\n}#$line" + ;; + (*) + stanza="${stanza:+$stanza\n}# $line" + ;; + esac + +done > $TMPFILE + +cat <<_eof > "$TARGET" +# Auto-generated using mkconf from manual.txt +# on $(date +'%Y-%m-%d %H:%M:%S') +# +# Invoked as: $0${1:+ $@} +# + +$(cat "$TMPFILE") + +# vim:sw=12:noet:sts=12:ts=12:ft=muttrc +_eof +cleanup diff --git a/.config/neomutt/neomuttrc b/.config/neomutt/neomuttrc new file mode 100644 index 0000000..3c02cde --- /dev/null +++ b/.config/neomutt/neomuttrc @@ -0,0 +1,63 @@ +set my_confdir="$HOME/.config/neomutt" + +set my_attribution_de="Hinsichtlich folgendem, das \"%n\" am %{%Y-%m-%d} um %{%H:%M Uhr %Z} schrieb:" +set my_attribution_en="Regarding the following, written by \"%n\" on %{%Y-%m-%d} at %{%H:%M Uhr %Z}:" + +source $my_confdir/confvars +source $my_confdir/colours +source $my_confdir/headers +source $my_confdir/alternates +source $my_confdir/keybindings +source $my_confdir/lists +source $my_confdir/spam +#source $my_confdir/hooks + +auto_view text/html text/calendar +#auto_view application/x-gunzip application/x-tar-gz application/x-tar application/x-gtar +#auto_view application/postscript +alternative_order multipart/mixed multipart/related text/html text/enriched text/* +#alternative_order text/plain text/enriched text/html +#alternative_order text/enriched text/plain text application/postscript image/* +mime_lookup application/octet-stream + +mailto_allow cc in-reply-to references subject body + +source "test -f $alias_file && cat $alias_file 2>/dev/null || echo unset alias_file|" + +#virtual-mailboxes "all" "notmuch://?query=*" +#virtual-mailboxes "unread" "notmuch://?query=tag:unread" +#virtual-mailboxes "read" "notmuch://?query=not:tag:unread" +#virtual-mailboxes "spam" "notmuch://?query=tag:spam" + +#bind index,pager X change-vfolder +#bind index,pager + entire-thread +## generate virtual folder from query +#bind index,pager \eX vfolder-from-query +## generate virtual folder from query with time window +#bind index < vfolder-window-backward +#bind index > vfolder-window-forward +# +#bind index,pager \` modify-labels +#macro index,pager \Ct "!todo" "Toggle the 'todo' tag" +# +#index-format-hook date "~d<1d" "%{%H:%M%Z}" +#index-format-hook date "~A" "%d" +# +#tag-transforms "unread" "N" \ +# "replied" "r " \ +# "archive" "➥ " \ +# "todo" "T" \ +# "deleted" "␡" \ +# "invites" "CAL" +# +#tag-formats "inbox" "GI" \ +# "unread" "GU" \ +# "replied" "GR" \ +# "sent" "GS" \ +# "todo" "Gt" \ +# "deleted" "GD" \ +# "invites" "Gi" +# +#set index_format="%4C %?GU?%GU& ?%?GR?%GR& ?%?GI?%GI& ? %-10@date@ %-15.15F %4c%?M?/[%M]? %?H?[%H] ?%s" +# +#set pager_format="<%a> %* %J (%P)" diff --git a/.config/neomutt/remove-header b/.config/neomutt/remove-header new file mode 100755 index 0000000..ab7444b --- /dev/null +++ b/.config/neomutt/remove-header @@ -0,0 +1,75 @@ +#!/bin/sh +# +# edit-header - helper script to append/replace/remove headers with mutt +# +# Based on an idea by David Champion +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +if [ ! -x "$(command -v formail)" ]; then + echo E: formail not installed. >&2 + exit 1 +fi + +header="${1:-}" +if [ -z "$header" ]; then + echo "E: no header specified" >&2 + exit 1 +fi + +get_header_contents() +{ + local contents + printf "Enter ${1:-header} contents: " >/dev/tty + read contents &2 + exit 1 + ;; + +esac + +echo "set my_editor=\"\$editor\"" +echo "set my_filter=\"$editor\"" +echo -n "push '" +echo -n "set editor=\"\$my_filter\"" +echo -n "" +echo -n "set editor=\"\$my_editor\"" +echo -n "unset my_filter" +echo -n "unset my_editor" +echo "'" diff --git a/.config/neomutt/replace-header b/.config/neomutt/replace-header new file mode 100755 index 0000000..ab7444b --- /dev/null +++ b/.config/neomutt/replace-header @@ -0,0 +1,75 @@ +#!/bin/sh +# +# edit-header - helper script to append/replace/remove headers with mutt +# +# Based on an idea by David Champion +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +if [ ! -x "$(command -v formail)" ]; then + echo E: formail not installed. >&2 + exit 1 +fi + +header="${1:-}" +if [ -z "$header" ]; then + echo "E: no header specified" >&2 + exit 1 +fi + +get_header_contents() +{ + local contents + printf "Enter ${1:-header} contents: " >/dev/tty + read contents &2 + exit 1 + ;; + +esac + +echo "set my_editor=\"\$editor\"" +echo "set my_filter=\"$editor\"" +echo -n "push '" +echo -n "set editor=\"\$my_filter\"" +echo -n "" +echo -n "set editor=\"\$my_editor\"" +echo -n "unset my_filter" +echo -n "unset my_editor" +echo "'" diff --git a/.config/neomutt/reuse-message b/.config/neomutt/reuse-message new file mode 100755 index 0000000..0d8ed23 --- /dev/null +++ b/.config/neomutt/reuse-message @@ -0,0 +1,35 @@ +#!/bin/sh +set -eu + +eval mailfile="\${$#}" +editor= +for i in "$@"; do + # strip last argument from editor, yuk + case "$i" in + ("$mailfile") break;; + (*) editor="${editor:+$editor }$i";; + esac +done + +tmpfile=$(mktemp --tmpdir reuse.XXXXXXXXXX) +cleanup() { rm -f "$tmpfile"; trap - 1 2 3 4 5 6 7 8 10 11 12 13 14 15; } +trap cleanup 1 2 3 4 5 6 7 8 10 11 12 13 14 15 + +formail -I Subject: < "$mailfile" | \ + formail -I In-Reply-To: | \ + sed -e '/^$/,/^-- /d' | \ + sed -e '/^Bcc:/aSubject: ' > "$tmpfile" +cat "$tmpfile" > "$mailfile" + +cleanup + +if [ -n "$editor" ]; then + eval exec "$editor" "$mailfile" + +# the last three replicate mutt's default (cf. manual) +elif [ -n "$VISUAL" ]; then + eval exec "$VISUAL" "$mailfile" +elif [ -n "$EDITOR" ]; then + eval exec "$EDITOR" "$mailfile" +fi +exec /usr/bin/editor "$mailfile" diff --git a/.config/neomutt/sendmail b/.config/neomutt/sendmail new file mode 100755 index 0000000..cd0b8dd --- /dev/null +++ b/.config/neomutt/sendmail @@ -0,0 +1,49 @@ +#!/bin/sh +# +# neomutt/sendmail – sendmail wrapper to enforce some checks on outgoing mails +# +# The script basically just creates a temporary file and then invokes any +# executable scripts in ~/.config/neomutt/sendmail-checks.d in run-parts style. +# They receive the filename of a temporary file holding the message to be sent +# as $1, followed by all recipients as determined by mutt. +# +# Copyright © 2010 martin f. krafft Released under the +# terms of the Artistic Licence 2.0 +# +set -eux + +CHECKSDIR="$HOME/.config/neomutt/sendmail-checks.d" +SENDMAIL="/usr/sbin/sendmail -oem -oi" + +TMPFILE=$(mktemp --tmpdir mutt-sendmail.XXXXXXXXXX.msg) +settrap () { trap "$@" 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15; } +cleanup () { rm -f "$TMPFILE"; settrap -; } +settrap cleanup + +argtype=s +recipients= sendmail_args= +for i in "$@"; do + case "$argtype/$i" in + (s/--) argtype=r;; + (s/*) sendmail_args="${sendmail_args} $i";; + (r/*) recipients="${recipients} $i";; + esac +done + +cat > $TMPFILE + +remove_headers= +if ! formail -czx "Resent-" < "$TMPFILE" | grep -q .; then + # only do this for original mails, not bounces + recipients="$recipients $(formail -czx "X-Bcc" < "$TMPFILE" | tr -d ',')" + remove_headers="$remove_headers -IX-Bcc" +fi +args=$(for i in $recipients; do echo "--arg=$i"; done) +run-parts --exit-on-error --umask=0077 --arg="$TMPFILE" $args -- "$CHECKSDIR" + +recipients=$(echo "$recipients" | xargs) + +formail $remove_headers < "$TMPFILE" \ + | eval $SENDMAIL "$sendmail_args" -- "$recipients" + +cleanup diff --git a/.config/neomutt/sendmail-checks.d/ack-recipients b/.config/neomutt/sendmail-checks.d/ack-recipients new file mode 100755 index 0000000..350ec44 --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/ack-recipients @@ -0,0 +1,53 @@ +#!/bin/sh +# +# ack-recipients – require double-checking of some recipients +# +# refuse to send a mail as long as recipients listed in +# ~/.config/mutt/ack-recipients are not individually "signed-off" by adding +# their e-mail addresses to the X-Acked header. This header is removed from +# the mail before it is sent. +# +# The file ~/.config/mutt/ack-recipients stores sha256sums of lower-cased +# e-mail addresses (no newline) instead of the addresses themselves as a +# measure to protect privacy. You can get new lines like this: +# +# printf my.new@e-mail.addre.ss | tr '[[:upper:]]' '[[:lower:]]' \ +# | sha256sum | sed -e 's, .*,,' +# +# E.g. my address (see below) will become +# 84d5b33c9376f67274c2ec9ce0e03b6973fb8bc943ebd7abb470c903c47e00f4 +# +# Copyright © 2010 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +CHECKLIST="$HOME/.config/mutt/ack-recipients" +HEADER=X-Acked +ACKED_RCPTS=$(formail -czx ${HEADER}: < $1 | sed -re 's/,\s*/ /g' | tr '[[:upper:]]' '[[:lower:]]') +MAILFILE="$1"; shift + +ret=0 +for r in $@; do + ack=0 + # check if this recipient is in the list of acked recipients + rl=$(printf $r | tr '[[:upper:]]' '[[:lower:]]') + for a in $ACKED_RCPTS; do [ $a = $rl ] && ack=1 && break; done + rs=$(printf $rl | sha256sum) + # now check if this unacked recipient needs to be acked + if [ $ack -eq 0 ] && grep -q "^${rs%% *}$" "$CHECKLIST"; then + echo >&2 "E: will not send mail until $r has been added to the $HEADER header" + ret=1 + fi +done + +[ $ret -eq 0 ] || exit $ret + +# now remove the X-Acked header from the mail +TMPFILE=$(mktemp --tmpdir mutt-sendmail.XXXXXXXXXX.msg) +settrap () { trap "$@" 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15; } +cleanup () { rm -f "$TMPFILE"; settrap -; } +settrap cleanup +formail -I ${HEADER}: < "$MAILFILE" > "$TMPFILE" +mv "$TMPFILE" "$MAILFILE" +settrap - diff --git a/.config/neomutt/sendmail-checks.d/check-attachments b/.config/neomutt/sendmail-checks.d/check-attachments new file mode 100644 index 0000000..fe80dc0 --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/check-attachments @@ -0,0 +1,37 @@ +#!/bin/sh +# +# check-attachments — check that referenced attachments are actually attached +# +# This is based on the idea behind +# http://www.vim.org/scripts/download_script.php?src_id=3165: if the mail body +# matches a given regular expression, then check whether there are also +# non-PGP MIME parts in the message, or else refuse to send the message. +# +# You can override the checking by adding the X-No-Attachments header to the +# message. +# +# Copyright © 2010 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +RE_ENGLISH='attach(ing|ed|ment)?|included\W+(with|in)\W+th(is|e\W+(curr|pres)ent)\W+mail' +RE_GERMAN='an(geh(ä|=E4|=C3=A4)ngt|h(ä|=E4|=C3=A4)ngsel|bei)|bei(gef(ü|=FC|=C3=BC)gt|lage)|(im|siehe)\W+(anhang|beilage)' +RE_FRENCH='attach(e|er|(é|=E9|=C3=A9)e?s?|ement|ant)' +OVERRIDE_HEADER=X-No-Attach + +if ! grep -qi "^${OVERRIDE_HEADER}:" "$1" \ + && egrep -v '^(> |Content-Disposition:)' "$1" | egrep -qzi "($RE_ENGLISH|$RE_GERMAN|$RE_FRENCH)"; then + + nr_attach=$(sed -rne 's/^Content-Type:[[:space:]]+//pi' "$1" | + egrep -civ '^(multipart/|application/pgp-signature)') + + if [ $nr_attach -lt 2 ]; then + echo >&2 "E: the mail message likely references an attachment," + echo >&2 "E: but there seems to be no non-PGP MIME part." + echo >&2 "E: (add the $OVERRIDE_HEADER header to override the check)." + exit 1 + fi +fi + +sed -i -e "/^${OVERRIDE_HEADER}:/d" "$1" diff --git a/.config/neomutt/sendmail-checks.d/no-local-recipients b/.config/neomutt/sendmail-checks.d/no-local-recipients new file mode 100755 index 0000000..fa8de41 --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/no-local-recipients @@ -0,0 +1,28 @@ +#!/bin/sh +# +# no-local-recipients – prevent messages to local recipients from being sent +# +# messages with recipients like foo@$HOSTNAME are an indication that mutt has +# not expanded the aliases and thus appended $hostname (cf. $use_domain). In +# my use-case, that's a reason not to send a message. +# +# Copyright © 2010 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +shift # $1 is the tmpfile, we don't need that + +HOSTNAME=$(hostname --fqdn) + +ret=0 +for r in $@; do + case "$r" in + (*@${HOSTNAME}*) + echo >&2 "E: $r seems to be a local recipient, hence I won't send." + ret=1 + ;; + esac +done + +exit $ret diff --git a/.config/neomutt/sendmail-checks.d/pgp-mime-sig-description b/.config/neomutt/sendmail-checks.d/pgp-mime-sig-description new file mode 100755 index 0000000..45aa0e7 --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/pgp-mime-sig-description @@ -0,0 +1,15 @@ +#!/bin/sh +# +# pgp-mime-sig-description +# +# Update the PGP MIME signature description meta data +# +# Copyright © 2016 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +MIME_HEADER="Content-Type: application\/pgp-signature" +DESCRIPTION="Digital GPG signature (see http://martin-krafft.net/gpg/sig-policy/999bbcc4/current)" +sed -i -e "/^${MIME_HEADER}/s/signature.asc/digital_signature_gpg.asc/; + /^${MIME_HEADER}/aContent-Description: $DESCRIPTION" "$1" diff --git a/.config/neomutt/sendmail-checks.d/prevent-draft b/.config/neomutt/sendmail-checks.d/prevent-draft new file mode 100755 index 0000000..314dfd3 --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/prevent-draft @@ -0,0 +1,17 @@ +#!/bin/sh +# +# prevent-draft – prevent sending a message while an X-Draft header exists +# +# Copyright © 2010 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +draft_headers=$(sed -ne '1,/^$/p' "$1" | egrep -i '^(X-Draft:|(To|Cc):.*[-_]DRAFT)' || :) + +if [ -n "$draft_headers" ]; then + echo "$draft_headers" | egrep -iq '^X-Draft: (ok|no)' && exit 0 + echo >&2 "E: will not send this message while the X-Draft header or" + echo >&2 "E: a subject or receipient draft tag is present." + exit 1 +fi diff --git a/.config/neomutt/sendmail-checks.d/strip-offlineimap-header b/.config/neomutt/sendmail-checks.d/strip-offlineimap-header new file mode 100755 index 0000000..8fc5764 --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/strip-offlineimap-header @@ -0,0 +1,12 @@ +#!/bin/sh +# +# strip-offlineimap-header +# +# Ensure that sent messages do not include any X-OfflineIMAP-* headers. +# +# Copyright © 2010 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +sed -i -e /^X-OfflineIMAP-/Id "$1" diff --git a/.config/neomutt/sendmail-checks.d/strip-tickle-header b/.config/neomutt/sendmail-checks.d/strip-tickle-header new file mode 100755 index 0000000..35bd6fa --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/strip-tickle-header @@ -0,0 +1,12 @@ +#!/bin/sh +# +# strip-tickle-header +# +# Ensure that sent messages do not include any X-Tickle headers. +# +# Copyright © 2010 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +sed -i -e /^X-Tickle:/Id "$1" diff --git a/.config/neomutt/sendmail-checks.d/zzz_add-spool-bcc b/.config/neomutt/sendmail-checks.d/zzz_add-spool-bcc new file mode 100755 index 0000000..d085679 --- /dev/null +++ b/.config/neomutt/sendmail-checks.d/zzz_add-spool-bcc @@ -0,0 +1,23 @@ +#!/bin/sh +# +# zzz_add-spool-bcc — add a spool mailbox as bcc recipient (runs last) +# +# Write a copy of the temporary file to a spool Maildir. +# +# Copyright © 2010 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +SPOOL_MAILDIR=$HOME/mail/spool +INPUT="$1"; shift +DEST="$SPOOL_MAILDIR/cur/${INPUT##*/}:2,S" + +if ! cp -n "$INPUT" "$DEST"; then + echo >&1 "W: failed to spool message file '$1'." + TMPFILE=$(mktemp --tmpdir mutt-sendmail.XXXXXXXXXX.msg) + echo >&1 "W: leaving a copy in '$TMPFILE'…" +else + RECIPIENTS=$(for i in "$@"; do echo -n " $i,"; done) + sed -e "1iX-Sendmail-Recipients:${RECIPIENTS%,}" < "$INPUT" > "$DEST" +fi diff --git a/.config/neomutt/spam b/.config/neomutt/spam new file mode 100644 index 0000000..215654d --- /dev/null +++ b/.config/neomutt/spam @@ -0,0 +1,4 @@ +nospam * +spam "^X-Spam: (yes|disagree|unsure) \\(crm114:((sp|h)am/)?([-.0-9]+) SA:((sp|h)am/)?([-.0-9]+)\\)$" "%7|%4" + +# vim:ft=muttrc diff --git a/.config/neomutt/supersede-header b/.config/neomutt/supersede-header new file mode 100755 index 0000000..ab7444b --- /dev/null +++ b/.config/neomutt/supersede-header @@ -0,0 +1,75 @@ +#!/bin/sh +# +# edit-header - helper script to append/replace/remove headers with mutt +# +# Based on an idea by David Champion +# +# Copyright © 2008 martin f. krafft +# Released under the terms of the Artistic Licence 2.0 +# +set -eu + +if [ ! -x "$(command -v formail)" ]; then + echo E: formail not installed. >&2 + exit 1 +fi + +header="${1:-}" +if [ -z "$header" ]; then + echo "E: no header specified" >&2 + exit 1 +fi + +get_header_contents() +{ + local contents + printf "Enter ${1:-header} contents: " >/dev/tty + read contents &2 + exit 1 + ;; + +esac + +echo "set my_editor=\"\$editor\"" +echo "set my_filter=\"$editor\"" +echo -n "push '" +echo -n "set editor=\"\$my_filter\"" +echo -n "" +echo -n "set editor=\"\$my_editor\"" +echo -n "unset my_filter" +echo -n "unset my_editor" +echo "'" diff --git a/.config/neomutt/viewmailattachments b/.config/neomutt/viewmailattachments new file mode 100755 index 0000000..1a119ca --- /dev/null +++ b/.config/neomutt/viewmailattachments @@ -0,0 +1,381 @@ +#! /usr/bin/python3 + +# Source: https://raw.githubusercontent.com/akkana/scripts/master/viewmailattachments + +# Take an mbox HTML message (e.g. from mutt), split it +# and rewrite it so all of its attachments can be viewed in a browser +# (perhaps after being converted to HTML from DOC or whatever first). +# +# Can be run from within a mailer like mutt, or independently +# on a single message file. +# +# Grew out of a simpler script called viewhtmlmail. +# +# Copyright 2015 by Akkana Peck. Share and enjoy under the GPL v2 or later. +# Changes: +# Holger Klawitter 2014: create a secure temp file and avoid temp mbox + +# To use it from mutt, put the following lines in your .muttrc: +# macro index "~/bin/viewmailattachments\n" "View attachments in browser" +# macro pager "~/bin/viewmailattachments\n" "View attachments in browser" + +import os, sys +import re +import time +import shutil +import email, email.header, mimetypes +import tempfile +import subprocess +from bs4 import BeautifulSoup + +################################################ +# Some prefs: +USE_WVHTML_FOR_DOC = False +BROWSER_ARGS = [] +TMPDIR=os.path.join(os.getenv('TMPDIR'), 'volatile') + +# How many seconds do we need to wait for unoconv? +# It defaults to 6, but on a 64-bit machine that's not enough. +UNOCONV_STARTUP_TIME = "10" + +# Does the browser need a one-time argument for bringing up an initial window, +# like Firefox's -private-window -new-instance ? +BROWSER_FIRST_ARG = [] + +# What browser to use: +USE_QUICKBROWSE = False + +if USE_QUICKBROWSE: + BROWSER = "quickbrowse" + + # Browser argument to precede new tabs: + BROWSER_FIRST_ARGS = [] + BROWSER_ARGS = [ "--new-tab" ] + + # Will the browser block when first run until its window is closed? + # If so, we have to run it in the background. + BROWSER_BACKGROUND = False + + # Should we convert PDF to HTML? Depends on BROWSER: + # Firefox has a built-in PDF viewer, but quickbrowse doesn't. + CONVERT_PDF_TO_HTML = False + +else: # Firefox in private browsing mode + BROWSER = "firefox" + + # Not clear what to do here: Firefox has a built-in PDF viewer, + # but for some mime types it can't figure out that it should use it. + BROWSER_FIRST_ARGS = [ "-private-window" ] + BROWSER_ARGS = [ "-new-tab", "-private-window" ] + # Firefox doesn't run in the background. + BROWSER_BACKGROUND = True + + CONVERT_PDF_TO_HTML = False + +# End global prefs +################################################ + +# Temporary for debugging: +class mysubprocess: + @staticmethod + def call(arr): + print("\n\n================\n=== Calling: %s" % str(arr)) + subprocess.call(arr) + + @staticmethod + def call_bg(arr): + print("\n\n================\n=== Calling in background: %s" % str(arr)) + subprocess.Popen(arr, shell=False, + stdin=None, stdout=None, stderr=None) + +def view_message_attachments(fp, tmpdir): + '''View message attachments coming from the file-like object fp. + ''' + + msg = email.message_from_string(fp.read()) + + html_part = None + counter = 1 + subfiles = [] + subparts = [] + htmlfiles = [] + htmlparts = [] + + def tmp_file_name(part): + partfile=part.get_filename() + if partfile: + n, enc = email.header.decode_header(partfile)[0] + if n: + partfile = n.decode(enc) if enc else n + + # Applications should really sanitize the given filename so that an + # email message can't be used to overwrite important files. + # As a first step, warn about ../ + if partfile and '../' in partfile: + print("Eek! Possible security problem in filename %s" % partfile) + return None + + # Make a filename in the tmp dir: + if not partfile: + ext = mimetypes.guess_extension(part.get_content_type()) + if not ext: + # Use a generic bag-of-bits extension + ext = '.bin' + return tempfile.mkstemp(dir=tmpdir, suffix=ext, prefix='part-')[1] + else: + return os.path.join(tmpdir, partfile) + + def save_tmp_file(part): + '''Saves this part's payload to a tmp file, returning the new filename. + ''' + partfile = tmp_file_name(part) + + tmpfile = open(partfile, "wb") + tmpfile.write(part.get_payload(decode=True)) + tmpfile.close() + return partfile + + # Walk through the message a first, preliminary time + # to separate out any images that might be referred to by + # an HTML part. + for part in msg.walk(): + # walk() includes the top-level message + if part == msg: + # print " Skipping the top-level message" + continue + + if part.get_content_type() != "multipart/related": + continue + + # It's multipart. Walk the subtree looking for image children. + for child in part.walk(): + # print " ", child.get_content_type() + + # At least for now, only save images as parts of multipart. + if child.get_content_maintype() != "image": + continue + + filename = save_tmp_file(child) + # print " Saved to", filename + + # Rewrite image and other inline URLs in terms of content-id. + # Mailers may use Content-Id or Content-ID (or, presumably, + # other capitalizations). So we can't just look it up simply. + content_id = None + for k in list(child.keys()): + if k.lower() == 'content-id': + # Remove angle brackets, if present. + # child['Content-Id'] is unmutable: attempts to change it + # are just ignored. Copy it to a local mutable string. + content_id = child[k] + if content_id.startswith('<') and \ + content_id.endswith('>'): + content_id = content_id[1:-1] + + subfiles.append({ 'filename': filename, + 'Content-Id': content_id }) + subparts.append(child) + counter += 1 + fp = open(filename, 'wb') + fp.write(child.get_payload(decode=True)) + fp.close() + break # no need to look at other keys + + # if not content_id: + # print filename, "doesn't have a Content-Id, not saving" + # # print "keys:", child.keys() + + # print "Subfiles:" + # for sf in subfiles: + # print sf + + # Call up the browser window right away, + # so the user can see something is happening. + # Firefox, alas, has no way from the commandline of calling up + # a new private window with content, then replacing that content. + # So we'll create a file that refreshes, so that when content is ready, + # it can redirect to the first content page. + def write_to_index(outfile, msg, timeout_secs, redirect_url): + if not redirect_url: + redirect_url = "file://" + outfile + ofp = open(outfile, "w") + ofp.write(''' + + + + +





%s + +''' % (timeout_secs, redirect_url, msg)) + ofp.close() + + redirect_timeout = 3 + pleasewait_file = tmpdir + "/index.html" + write_to_index(pleasewait_file, "Please wait ...", redirect_timeout, None) + + cmd = [ BROWSER ] + if BROWSER_FIRST_ARGS: + cmd += BROWSER_FIRST_ARGS + + cmd.append("file://" + pleasewait_file) + print("Calling: %s" % ' '.join(cmd)) + if BROWSER_BACKGROUND: + mysubprocess.call_bg(cmd) + else: + mysubprocess.call(cmd) + + # "data:text/html,




Translating documents, please wait ..." + # Use JS if we can figure out how to close or replace + # the "please wait" tab once we have content to show. + # But for now, setTimeout() doesn't work at all + # in newly popped up private windows. + # "javascript:document.writeln('




Translating documents, please wait ...');setTimeout(function(){alert('hi');}, 500);" + # ]) + + # Now walk through looking for the real parts: + # HTML, doc and docx. + for part in msg.walk(): + + # part has, for example: + # items: [('Content-Type', 'image/jpeg'), + # ('Content-Transfer-Encoding', 'base64'), + # ('Content-ID', '<14.3631871432@web82503.mail.mud.yahoo.com>'), + # ('Content-Disposition', + # 'attachment; filename="ATT0001414.jpg"')] + # keys: ['Content-Type', 'Content-Transfer-Encoding', + # 'Content-ID', 'Content-Disposition'] + # values: ['image/jpeg', 'base64', + # '<14.3631871432@web82503.mail.mud.yahoo.com>', + # 'attachment; filename="ATT0001414.jpg"'] + + # multipart/* are just containers + #if part.get_content_maintype() == 'multipart': + if part.is_multipart() or part.get_content_type == 'message/rfc822': + continue + + if part.get_content_maintype() == "application": + partfile = save_tmp_file(part) + fileparts = os.path.splitext(partfile) + htmlfilename = fileparts[0] + ".html" + + if part.get_content_subtype() == "msword" and USE_WVHTML_FOR_DOC: + mysubprocess.call(["wvHtml", partfile, htmlfilename]) + htmlfiles.append(htmlfilename) + + elif part.get_content_subtype() == \ + "vnd.openxmlformats-officedocument.wordprocessingml.document" \ + or part.get_content_subtype() == "msword": + mysubprocess.call(["unoconv", "-f", "html", + "-T", UNOCONV_STARTUP_TIME, + "-o", htmlfilename, partfile]) + + htmlfilename = os.path.join(fileparts[0] + ".html") + htmlfiles.append(htmlfilename) + + # unoconv conversions from powerpoint to HTML drop all images. + # Try converting to PDF instead: + elif part.get_content_subtype() == "vnd.ms-powerpoint" \ + or part.get_content_subtype() == \ + "vnd.openxmlformats-officedocument.presentationml.presentation" : + pdffile = fileparts[0] + ".pdf" + mysubprocess.call(["unoconv", "-f", "pdf", + "-o", pdffile, partfile]) + htmlfiles.append(pdffile) + + elif part.get_content_subtype() == "pdf": + if CONVERT_PDF_TO_HTML: + mysubprocess.call(["pdftohtml", "-s", partfile]) + + # But pdftohtml is idiotic about output filename + # and won't let you override it: + htmlfiles.append(fileparts[0] + "-html.html") + else: + htmlfiles.append(partfile) + + elif part.get_content_maintype() == "text" and \ + part.get_content_subtype() == 'html': + + htmlfile = tmp_file_name(part) + + fp = open(htmlfile, 'wb') + htmlsrc = part.get_payload(decode=True) + + soup = BeautifulSoup(htmlsrc, "lxml") + + # Substitute filenames for CIDs: + for tag in soup.body.find_all("img", src=True): + if tag['src'].lower().startswith("cid:"): + for sf in subfiles: + if tag['src'][4:] == sf['Content-Id']: + tag['src'] = "file://" + sf['filename'] + # for sf in subfiles: + # htmlsrc = re.sub('cid: ?' + sf['Content-Id'], + # 'file://' + sf['filename'], + # htmlsrc, flags=re.IGNORECASE) + + # If it's HTML, we may need to add a meta charset tag. Sigh. + # If it's text/plain, there's nothing we can do to fix charset. + charset = part.get_charset() + if not charset: + charset = "UTF-8" + head = soup.find("head") + if not head: + head = soup.new_tag("head") + html = soup.find("html") + if html: + html.insert(0, head) + else: + soup.insert(0, head) + + if not head.findAll("meta", attrs={"http-equiv": "encoding"}) and \ + not head.findAll("meta", attrs={"http-equiv": "content-type"}): + meta = soup.new_tag("meta") + meta["content"] = charset + meta["http-equiv"] = "encoding" + head.insert(0, meta) + meta = soup.new_tag("meta") + meta["http-equiv"] = "content-type" + meta["content"] = "text/html; charset=%s" % charset + head.insert(0, meta) + + fp.write(soup.prettify().encode("utf-8", "xmlcharrefreplace")) + fp.close() + + htmlfiles.append(htmlfile) + elif part.get_content_maintype() == "image" and part not in subparts: + partfile = save_tmp_file(part) + htmlfiles.append(partfile) + + # Done processing attachments. Call the browser for everything. + if htmlfiles: + # For the first URL, just put a redirect in + write_to_index(pleasewait_file, + "Redirecting to file://" + htmlfiles[0], + 0, "file://" + htmlfiles[0]) + + for f in htmlfiles[1:]: + # If we don't wait for the new window to pop up before + # calling new-tab, bad things will happen: the document + # may load in a new tab in the old window and THEN pop up + # an unwanted third window. Go firefox. + # Not clear whether this is true for all browsers. + time.sleep(1) + if BROWSER_ARGS: + mysubprocess.call([BROWSER] + BROWSER_ARGS + ["file://" + f]) + else: + mysubprocess.call([BROWSER, "file://" + f]) + + # Wait a while to make sure the browser has loads the imgaes, then clean up. + time.sleep(6) + shutil.rmtree(tmpdir) + +if __name__ == '__main__': + tmpdir = tempfile.mkdtemp(dir=TMPDIR) + + if len(sys.argv) > 1: + for f in sys.argv[1:]: + fp = open(f) + view_message_attachments(fp, tmpdir) + fp.close() + else: + view_message_attachments(sys.stdin, tmpdir)