| @@ -1,39 +1,27 @@ | |||||
| .POSIX: | .POSIX: | ||||
| OS = $(shell uname -s) | |||||
| ifndef PREFIX | |||||
| PREFIX = /usr/local | |||||
| endif | |||||
| ifndef MANPREFIX | |||||
| MANPREFIX = $(PREFIX)/share/man | |||||
| endif | |||||
| PREFIX = /usr/local | |||||
| MANPREFIX = $(PREFIX)/share/man | |||||
| install: | install: | ||||
| mkdir -p $(DESTDIR)$(PREFIX)/bin | mkdir -p $(DESTDIR)$(PREFIX)/bin | ||||
| mkdir -p $(DESTDIR)$(PREFIX)/lib/mutt-wizard | mkdir -p $(DESTDIR)$(PREFIX)/lib/mutt-wizard | ||||
| cp -f bin/mw bin/mailsync $(DESTDIR)$(PREFIX)/bin/ | |||||
| cp -f lib/openfile $(DESTDIR)$(PREFIX)/lib/mutt-wizard | |||||
| chmod 755 $(DESTDIR)$(PREFIX)/bin/mw $(DESTDIR)$(PREFIX)/bin/mailsync $(DESTDIR)$(PREFIX)/lib/mutt-wizard/openfile | |||||
| mkdir -p $(DESTDIR)$(PREFIX)/share/mutt-wizard | mkdir -p $(DESTDIR)$(PREFIX)/share/mutt-wizard | ||||
| cp -f bin/mailsync $(DESTDIR)$(PREFIX)/bin | |||||
| cp -f lib/openfile $(DESTDIR)$(PREFIX)/lib/mutt-wizard | |||||
| chmod 755 $(DESTDIR)$(PREFIX)/share/mutt-wizard | chmod 755 $(DESTDIR)$(PREFIX)/share/mutt-wizard | ||||
| for shared in share/*; do \ | for shared in share/*; do \ | ||||
| cp -f $$shared $(DESTDIR)$(PREFIX)/share/mutt-wizard; \ | cp -f $$shared $(DESTDIR)$(PREFIX)/share/mutt-wizard; \ | ||||
| chmod 644 $(DESTDIR)$(PREFIX)/share/mutt-wizard/$$(basename $(notdir $$shared)); \ | chmod 644 $(DESTDIR)$(PREFIX)/share/mutt-wizard/$$(basename $(notdir $$shared)); \ | ||||
| done | done | ||||
| mkdir -p $(DESTDIR)$(MANPREFIX)/man1 | mkdir -p $(DESTDIR)$(MANPREFIX)/man1 | ||||
| cp -f mw.1 $(DESTDIR)$(MANPREFIX)/man1/mw.1 | |||||
| cp -f mailsync.1 $(DESTDIR)$(MANPREFIX)/man1/mailsync.1 | cp -f mailsync.1 $(DESTDIR)$(MANPREFIX)/man1/mailsync.1 | ||||
| sed 's:/usr/local:$(PREFIX):' < share/mutt-wizard.muttrc > $(DESTDIR)$(PREFIX)/share/mutt-wizard/mutt-wizard.muttrc | |||||
| sed 's:/usr/local:$(PREFIX):' < share/mailcap > $(DESTDIR)$(PREFIX)/share/mutt-wizard/mailcap | |||||
| sed 's:/usr/local:$(PREFIX):' < bin/mw > $(DESTDIR)$(PREFIX)/bin/mw | |||||
| sed 's:/usr/local:$(PREFIX):' < mw.1 > $(DESTDIR)$(MANPREFIX)/man1/mw.1 | |||||
| chmod 644 $(DESTDIR)$(MANPREFIX)/man1/mw.1 $(DESTDIR)$(MANPREFIX)/man1/mailsync.1 | chmod 644 $(DESTDIR)$(MANPREFIX)/man1/mw.1 $(DESTDIR)$(MANPREFIX)/man1/mailsync.1 | ||||
| if [ "$(PREFIX)" ]; then \ | |||||
| sed -iba 's:/usr/local:$(PREFIX):' $(DESTDIR)$(PREFIX)/share/mutt-wizard/mutt-wizard.muttrc; \ | |||||
| rm -f $(DESTDIR)$(PREFIX)/share/mutt-wizard/mutt-wizard.muttrcba; \ | |||||
| sed -iba 's:/usr/local:$(PREFIX):' $(DESTDIR)$(PREFIX)/bin/mw; \ | |||||
| rm -f $(DESTDIR)$(PREFIX)/bin/mwba; \ | |||||
| sed -iba 's:/usr/local:$(PREFIX):' $(DESTDIR)$(MANPREFIX)/man1/mw.1; \ | |||||
| rm -f $(DESTDIR)$(MANPREFIX)/man1/mw.1ba; \ | |||||
| sed -iba 's:/usr/local:$(PREFIX):' $(DESTDIR)$(PREFIX)/share/mutt-wizard/mailcap; \ | |||||
| rm -f $(DESTDIR)$(PREFIX)/share/mutt-wizard/mailcapba; \ | |||||
| fi | |||||
| chmod 755 $(DESTDIR)$(PREFIX)/bin/mw $(DESTDIR)$(PREFIX)/bin/mailsync $(DESTDIR)$(PREFIX)/lib/mutt-wizard/openfile | |||||
| mkdir -p $(DESTDIR)$(PREFIX)/share/zsh/site-functions/ | mkdir -p $(DESTDIR)$(PREFIX)/share/zsh/site-functions/ | ||||
| chmod 755 $(DESTDIR)$(PREFIX)/share/zsh/site-functions/ | chmod 755 $(DESTDIR)$(PREFIX)/share/zsh/site-functions/ | ||||
| cp -f completion/_mutt-wizard.zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_mutt-wizard.zsh | cp -f completion/_mutt-wizard.zsh $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_mutt-wizard.zsh | ||||
| @@ -209,6 +209,8 @@ To give you an example of the interface, here's an idea: | |||||
| applications requires turning off two-factor authentication and this will | applications requires turning off two-factor authentication and this will | ||||
| circumvent that. You might also need to manually "Enable IMAP" in the | circumvent that. You might also need to manually "Enable IMAP" in the | ||||
| settings. | settings. | ||||
| To create an App Password for your Google account, | |||||
| you can directly visit the [App Passwords](https://myaccount.google.com/apppasswords) page in your Google Account settings. | |||||
| - If you have a university email or enterprise-hosted email for work, there | - If you have a university email or enterprise-hosted email for work, there | ||||
| might be other hurdles or two-factor authentication you have to jump through. | might be other hurdles or two-factor authentication you have to jump through. | ||||
| Some, for example, will want you to create a separate IMAP password, etc. | Some, for example, will want you to create a separate IMAP password, etc. | ||||
| @@ -63,16 +63,17 @@ syncandnotify() { | |||||
| newcount=$(echo "$new" | sed '/^\s*$/d' | wc -l) | newcount=$(echo "$new" | sed '/^\s*$/d' | wc -l) | ||||
| case 1 in | case 1 in | ||||
| $((newcount > 5)) ) | $((newcount > 5)) ) | ||||
| echo "$newcount new mail for $2." >/dev/tty | |||||
| [ -z "$MAILSYNC_MUTE" ] && notify "New Mail!" "📬 $newcount new mail(s) in \`$2\` account." | |||||
| echo "$newcount new mails for $2." >/dev/tty | |||||
| [ -z "$MAILSYNC_MUTE" ] && notify "New Mail!" "📬 $newcount new mails in \`$2\` account." | |||||
| ;; | ;; | ||||
| $((newcount > 0)) ) | $((newcount > 0)) ) | ||||
| echo "$newcount new mail for $2." >/dev/tty | |||||
| echo "$newcount new mail(s) for $2." >/dev/tty | |||||
| [ -z "$MAILSYNC_MUTE" ] && | [ -z "$MAILSYNC_MUTE" ] && | ||||
| for file in $new; do | for file in $new; do | ||||
| # Extract and decode subject and sender from mail. | |||||
| subject="$(sed -n "/^Subject:/ s|Subject: *|| p" "$file" | | |||||
| perl -CS -MEncode -ne 'print decode("MIME-Header", $_)')" | |||||
| # Extract and decode subject and sender from mail. | |||||
| subject=$(awk '/^Subject: / && ++n == 1,/^.*: / && ++i == 2' "$file" | head -n-1 | | |||||
| perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | | |||||
| sed 's/^Subject: //' | tr -d '\n\t') | |||||
| from="$(sed -n "/^From:/ s|From: *|| p" "$file" | | from="$(sed -n "/^From:/ s|From: *|| p" "$file" | | ||||
| perl -CS -MEncode -ne 'print decode("MIME-Header", $_)')" | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)')" | ||||
| from="${from% *}" ; from="${from%\"}" ; from="${from#\"}" | from="${from% *}" ; from="${from%\"}" ; from="${from#\"}" | ||||
| @@ -173,11 +173,11 @@ askinfo() { | |||||
| [ -z "$passprefix" ] && passprefix="" | [ -z "$passprefix" ] && passprefix="" | ||||
| hostname="${fulladdr#*@}" | hostname="${fulladdr#*@}" | ||||
| login="${login:-$fulladdr}" | login="${login:-$fulladdr}" | ||||
| if [ -n "${password+x}" ]; then | |||||
| if [ -n "${password+x}" ] && [ ! -f "$PASSWORD_STORE_DIR/$passprefix$fulladdr.gpg" ]; then | |||||
| insertpass | insertpass | ||||
| else | |||||
| elif [ ! -f "$PASSWORD_STORE_DIR/$passprefix$fulladdr.gpg" ]; then | |||||
| getpass | getpass | ||||
| fi | |||||
| fi | |||||
| } | } | ||||
| insertpass() { | insertpass() { | ||||
| @@ -70,6 +70,7 @@ SMTP server port (assumed to be 465 if not specified) | |||||
| .TP | .TP | ||||
| .B -x | .B -x | ||||
| Account password. You will be prompted for the password interactively if this option is not given. | Account password. You will be prompted for the password interactively if this option is not given. | ||||
| .TP | |||||
| .B -P | .B -P | ||||
| Pass Prefix. The password will be stored using pass at <passprefix><email> | Pass Prefix. The password will be stored using pass at <passprefix><email> | ||||
| .SH OTHER OPTIONS | .SH OTHER OPTIONS | ||||
| @@ -117,6 +117,7 @@ freedom.nl,imap.freedom.nl,993,smtp.freedom.nl,465 | |||||
| freedom.xyz,imap.nixnet.email,143,smtp.nixnet.email,587 | freedom.xyz,imap.nixnet.email,143,smtp.nixnet.email,587 | ||||
| fsmpi.rwth-aachen.de,mail.fsmpi.rwth-aachen.de,993,mail.fsmpi.rwth-aachen.de,465 | fsmpi.rwth-aachen.de,mail.fsmpi.rwth-aachen.de,993,mail.fsmpi.rwth-aachen.de,465 | ||||
| fsu-jena,exchange.uni-jena.de,993,smtp.uni-jena.de,587 | fsu-jena,exchange.uni-jena.de,993,smtp.uni-jena.de,587 | ||||
| fz-juelich.de,imap.fz-juelich.de,993,mail.fz-juelich.de,587 | |||||
| gcc.edu,imap-mail.outlook.com,993,smtp-mail.outlook.com,587 | gcc.edu,imap-mail.outlook.com,993,smtp-mail.outlook.com,587 | ||||
| getbackinthe.kitchen,mail.cock.li,993,mail.cock.li,587 | getbackinthe.kitchen,mail.cock.li,993,mail.cock.li,587 | ||||
| ghalv.no,mail.ghalv.no,993,mail.ghalv.no,465 | ghalv.no,mail.ghalv.no,993,mail.ghalv.no,465 | ||||
| @@ -200,7 +201,7 @@ national.shitposting.agency,mail.cock.li,993,mail.cock.li,587 | |||||
| ncsu.edu,imap.gmail.com,993,smtp.gmail.com,587 | ncsu.edu,imap.gmail.com,993,smtp.gmail.com,587 | ||||
| netcourrier.com,mail.netcourrier.com,993,mail.netcourrier.com,465 | netcourrier.com,mail.netcourrier.com,993,mail.netcourrier.com,465 | ||||
| nigge.rs,mail.cock.li,993,mail.cock.li,587 | nigge.rs,mail.cock.li,993,mail.cock.li,587 | ||||
| niser.ac.in,imap.gmail.com,993,smtp.gmail.com,587 | |||||
| niser.ac.in,imap.gmail.com,993,smtp.gmail.com,465 | |||||
| nixnet.email,imap.nixnet.email,143,smtp.nixnet.email,587 | nixnet.email,imap.nixnet.email,143,smtp.nixnet.email,587 | ||||
| nixnet.xyz,imap.nixnet.email,143,smtp.nixnet.email,587 | nixnet.xyz,imap.nixnet.email,143,smtp.nixnet.email,587 | ||||
| nixnetmail.com,imap.nixnet.email,143,smtp.nixnet.email,587 | nixnetmail.com,imap.nixnet.email,143,smtp.nixnet.email,587 | ||||
| @@ -1,6 +1,6 @@ | |||||
| # vim: filetype=neomuttrc | # vim: filetype=neomuttrc | ||||
| # muttrc file for account $fulladdr | # muttrc file for account $fulladdr | ||||
| set realname = "$realname" | |||||
| set real_name = "$realname" | |||||
| set from = "$fulladdr" | set from = "$fulladdr" | ||||
| set sendmail = "msmtp -a $fulladdr" | set sendmail = "msmtp -a $fulladdr" | ||||
| alias me $realname <$fulladdr> | alias me $realname <$fulladdr> | ||||
| @@ -10,7 +10,7 @@ set message_cachedir = "$cachedir/$safename/bodies" | |||||
| set mbox_type = Maildir | set mbox_type = Maildir | ||||
| set hostname = "$hostname" | set hostname = "$hostname" | ||||
| source $muttshare/switch.muttrc | source $muttshare/switch.muttrc | ||||
| set spoolfile = "+INBOX" | |||||
| set spool_file = "+INBOX" | |||||
| set postponed = "+Drafts" | set postponed = "+Drafts" | ||||
| set trash = "+Trash" | set trash = "+Trash" | ||||
| set record = "+Sent" | set record = "+Sent" | ||||
| @@ -101,7 +101,7 @@ macro index \eh "<pipe-message>$prefix/libexec/gpg-wks-client --receive | msmtp | |||||
| macro index,pager a "<enter-command>set my_pipe_decode=\$pipe_decode pipe_decode<return><pipe-message>abook --add-email<return><enter-command>set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<return>" "add the sender address to abook" | macro index,pager a "<enter-command>set my_pipe_decode=\$pipe_decode pipe_decode<return><pipe-message>abook --add-email<return><enter-command>set pipe_decode=\$my_pipe_decode; unset my_pipe_decode<return>" "add the sender address to abook" | ||||
| macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read" | macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read" | ||||
| macro index O "<shell-escape>mailsync<enter>" "run mailsync to sync all mail" | macro index O "<shell-escape>mailsync<enter>" "run mailsync to sync all mail" | ||||
| macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>printf 'Enter a search term to find with notmuch: '; read x; echo \$x >~/.cache/mutt_terms<enter><limit>~i \"\`notmuch search --output=messages \$(cat ~/.cache/mutt_terms) | head -n 600 | perl -le '@a=<>;s/\^id:// for@a;$,=\"|\";print@a' | perl -le '@a=<>; chomp@a; s/\\+/\\\\+/ for@a;print@a' \`\"<enter>" "show only messages matching a notmuch pattern" | |||||
| macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>printf 'Enter a search term to find with notmuch: '; read x; echo \$x >\"\${XDG_CACHE_HOME:-\$HOME/.cache}/mutt_terms\"<enter><limit>~i \"\`notmuch search --output=messages \$(cat \"\${XDG_CACHE_HOME:-\$HOME/.cache}/mutt_terms\") | head -n 600 | perl -le '@a=<>;s/\^id:// for@a;$,=\"|\";print@a' | perl -le '@a=<>; chomp@a; s/\\+/\\\\+/g for@a; s/\\$/\\\\\\$/g for@a;print@a' \`\"<enter>" "show only messages matching a notmuch pattern" | |||||
| macro index A "<limit>all\n" "show all messages (undo limit)" | macro index A "<limit>all\n" "show all messages (undo limit)" | ||||
| # Sidebar mappings | # Sidebar mappings | ||||