aerc-wizard

aerc and isync auto-configuration
git clone https://git.awy.one/aerc-wizard
Log | Files | Refs | README | LICENSE

commit 5470781a008d46c2b80b1d35093f152429d4a1ee
parent 413608ae7e0c76644757f88e2b3accd4f245a76c
Author: awy <awy@awy.one>
Date:   Tue, 23 Dec 2025 22:26:04 +0300

initial stuff

Diffstat:
Mbin/mailsync | 4++--
Mbin/mw | 43+++++++++++++++++++++----------------------
Ashare/aerc-base | 8++++++++
Ashare/aerc-temp | 6++++++
Dshare/mutt-temp | 19-------------------
Dshare/nord.muttrc | 37-------------------------------------
6 files changed, 37 insertions(+), 80 deletions(-)

diff --git a/bin/mailsync b/bin/mailsync @@ -32,7 +32,7 @@ export GPG_TTY="$(tty)" [ -n "$MBSYNCRC" ] && alias mbsync="mbsync -c $MBSYNCRC" || MBSYNCRC="$HOME/.mbsyncrc" [ -n "$MPOPRC" ] || MPOPRC="$HOME/.config/mpop/config" -lastrun="${XDG_CONFIG_HOME:-$HOME/.config}/mutt/.mailsynclastrun" +lastrun="${XDG_CONFIG_HOME:-$HOME/.config}/aerc/.mailsynclastrun" # Settings are different for MacOS (Darwin) systems. case "$(uname)" in @@ -44,7 +44,7 @@ case "$(uname)" in esac notify() { - notify-send --app-name="mutt-wizard" -- "$1" "$2" + notify-send --app-name="aerc-wizard" -- "$1" "$2" } ;; esac diff --git a/bin/mw b/bin/mw @@ -7,6 +7,8 @@ maildir="${XDG_DATA_HOME:-$HOME/.local/share}/mail" muttshare="$prefix/share/mutt-wizard" cachedir="${XDG_CACHE_HOME:-$HOME/.cache}/mutt-wizard" muttrc="${XDG_CONFIG_HOME:-$HOME/.config}/mutt/muttrc" +aercdir="${XDG_CONFIG_HOME:-$HOME/.config}/aerc" +accountsconf="$aercdir/accounts.conf" accdir="${XDG_CONFIG_HOME:-$HOME/.config}/mutt/accounts" msmtprc="${XDG_CONFIG_HOME:-$HOME/.config}/msmtp/config" msmtplog="${XDG_STATE_HOME:-$HOME/.local/state}/msmtp/msmtp.log" @@ -16,7 +18,8 @@ imapnotify="${XDG_CONFIG_HOME:-$HOME/.config}/imapnotify" mpoptemp="$muttshare/mpop-temp" mbsynctemp="$muttshare/mbsync-temp" mbsyncgmailtemp="$muttshare/mbsync-gmail-temp" -mutttemp="$muttshare/mutt-temp" +aerctemp="$muttshare/aerc-temp" +aercbase="$muttshare/aerc-base" msmtptemp="$muttshare/msmtp-temp" onlinetemp="$muttshare/online-temp" notmuchtemp="$muttshare/notmuch-temp" @@ -65,7 +68,7 @@ checkbasics() { } } -getaccounts() { accounts="$(find -L "$accdir" -type f 2>/dev/null | grep -o "\S*.muttrc" | sed "s|.*/\([0-9]-\)*||;s/\.muttrc$//" | nl)"; } +getaccounts() { accounts="$(sed -n 's/^\[\(.*\)\]/\1/p' "$accountsconf" | nl)"; } list() { getaccounts && [ -n "$accounts" ] && echo "$accounts" || exit 1; } @@ -97,14 +100,13 @@ prepimapnotify() { mkdir -p "$imapnotify" ; envsubst < "$imapnotifytemp" >> "$imapnotify/$fulladdr.conf" } -prepmutt() { - mkdir -p "${muttrc%/*}" "$accdir" - envsubst <"$mutttemp" >"$accdir/$fulladdr.muttrc" - [ ! -f "$muttrc" ] && echo "# vim: filetype=neomuttrc" >"$muttrc" - ! grep -q "^source.*mutt-wizard.muttrc" "$muttrc" && echo "source $muttshare/mutt-wizard.muttrc" >>"$muttrc" - ! grep "^source.*.muttrc" "$muttrc" | grep -qv "$muttshare/mutt-wizard.muttrc" && echo "source $accdir/$fulladdr.muttrc" >>"$muttrc" - echo "macro index,pager i$idnum '<sync-mailbox><enter-command>source $accdir/$fulladdr.muttrc<enter><change-folder>!<enter>;<check-stats>' \"switch to $fulladdr\"" >>"$muttrc" - neomutt -v | grep -q lmdb && ! grep -q "^set header_cache_backend.*lmdb" "$muttrc" && echo "set header_cache_backend = \"lmdb\"" >>"$muttrc" +prepaerc() { + mkdir -p "$aercdir" + aercuser="${fulladdr%@*}" + aercdomain="${fulladdr#*@}" + [ ! -f "$accountsconf" ] && envsubst <"$aercbase" >"$accountsconf" + ! grep -q "^multi-file-strategy" "$accountsconf" && envsubst <"$aercbase" >"$accountsconf" + envsubst <"$aerctemp" >>"$accountsconf" } getprofiles() { @@ -124,7 +126,7 @@ getprofiles() { ;; esac prepmsmtp - prepmutt + prepaerc prepnotmuch prepimapnotify } @@ -160,9 +162,11 @@ delete() { sed -ibu "/IMAPStore $fulladdr-remote$/,/# End profile/d" "$mbsyncrc" 2>/dev/null rm -f "$mbsyncrc"bu - rm -rf "${cachedir:?}/${fulladdr:?}" "$accdir/$fulladdr.muttrc" "$accdir/"[0-9]-"$fulladdr.muttrc" - sed -ibu "/\([0-9]-\)\?$fulladdr.muttrc/d" "$muttrc" 2>/dev/null - rm -f "$muttrc"bu + sed -i "/^\[$fulladdr\]/,/^\[/ { + /^\[$fulladdr\]/d + /^\[/b + d + }" "$accountsconf" 2>/dev/null sed -ibu "/account $fulladdr$/,/^\(\s*$\|account\)/d" "$msmtprc" 2>/dev/null rm -f "$msmtprc"bu sed -ibu "/account $fulladdr$/,/^\(\s*$\|account\)/d" "$mpoprc" 2>/dev/null @@ -234,13 +238,8 @@ getboxes() { mailboxes="$(echo "$info" | grep -v HasChildren | sed "s/.*\" //;s/\"//g" | tr -d '\r')" fi [ "$type" = "pop" ] && mailboxes="INBOX" - for x in $( - sed -n "/^macro.* i[0-9] / s/\(^macro.* i\| .*\)//gp " "$muttrc" 2>/dev/null | sort -u - echo 0 - ); do - idnum=$((idnum + 1)) - [ "$idnum" -eq "$x" ] || break - done + sed -n 's/^\[\(.*\)\]/\1/p' "$accountsconf" | wc -l + idnum=$((idnum + 1)) case "$fulladdr" in *@gmail.com) mailboxes=$(echo "$mailboxes" | sed -e 's#^\[Gmail\]/##' -e 's/^Sent Mail$/Sent/' -e 's/^Spam$/Junk/') @@ -253,7 +252,6 @@ getboxes() { } finalize() { - echo "$toappend" >>"$accdir/$fulladdr.muttrc" [ "$type" != "online" ] && echo "$mailboxes" | xargs -I {} mkdir -p "$maildir/$fulladdr/{}/cur" "$maildir/$fulladdr/{}/tmp" "$maildir/$fulladdr/{}/new" mkdir -p "$cachedir/$safename/bodies" echo "$fulladdr (account #$idnum) added successfully." @@ -326,6 +324,7 @@ EOF } reorder() { + # This looks so fucking hard to port. I need to think. tempfile="$(mktemp -u)" trap 'rm -f $tempfile' HUP INT QUIT TERM PWR EXIT echo "# Carefully reorder these accounts with the desired numbers in the first column. diff --git a/share/aerc-base b/share/aerc-base @@ -0,0 +1,8 @@ +multi-file-strategy = act-all +source = notmuch://$maildir +maildir-store = $maildir +check-mail-cmd = mailup +check-mail = 0 +default = INBOX +cache-headers = true +folders-sort = INBOX, Sent, Drafts, Junk, Trash diff --git a/share/aerc-temp b/share/aerc-temp @@ -0,0 +1,6 @@ +[$fulladdr] +outgoing = smtps://$aercuser%40$aercdomain@$smtp:$sport +maildir-account-path = $fulladdr +outgoing-cred-cmd = gopass $passprefix$fulladdr +from = $aercuser <$fulladdr> +copy-to = Sent diff --git a/share/mutt-temp b/share/mutt-temp @@ -1,19 +0,0 @@ -# vim: filetype=neomuttrc -# muttrc file for account $fulladdr -set real_name = "$realname" -set from = "$fulladdr" -set sendmail = "msmtp -a $fulladdr" -alias me $realname <$fulladdr> -set folder = "$folder" -set header_cache = "$cachedir/$safename/headers" -set message_cachedir = "$cachedir/$safename/bodies" -set mbox_type = Maildir -set hostname = "$hostname" -source $muttshare/switch.muttrc -set spool_file = "+INBOX" -set postponed = "+Drafts" -set trash = "+Trash" -set record = "+Sent" -$extra -macro index o "<shell-escape>mailsync $fulladdr<enter>" "sync $fulladdr" -named-mailboxes "📨inbox" +INBOX "✈️sent" +Sent "📝drafts" +Drafts "🚫junk" +Junk "🗑️trash" +Trash diff --git a/share/nord.muttrc b/share/nord.muttrc @@ -1,37 +0,0 @@ -# global - -color normal default default -color error brightred default -color status white blue -color message brightgreen default -color search yellow default -color attachment brightmagenta default -color signature cyan default - -# header -color header brightcyan default "^(From|To|Cc|Bcc|Reply-To)" -color header brightblue default "^Subject" -color header brightwhite default "^Date" - -# index (email list) -color index white default "~R" # Read -color index brightblue default "~N" # New -color index brightcyan default "~U" # Unread -color index yellow default "~F" # Flagged -color index magenta default "~T" # Tagged -color index_author blue default "~R" -color index_author brightblue default "~N" - -# quoted text in emails -color quoted blue default -color quoted1 cyan default -color quoted2 magenta default -color quoted3 brightmagenta default - -# tilde and markers -color tilde cyan default -color markers black cyan - -# links and emails in the body -color body brightblue default "https?://[^ \"\t\r\n]+" -color body magenta default "[^ ]+@[^ ]+"