From 22bafa21869fb47d8f6568a0e047c226926f20e0 Mon Sep 17 00:00:00 2001 From: Yigit Sever Date: Tue, 12 Oct 2021 01:01:01 +0300 Subject: mutt: free from the shackles --- .config/msmtp/config | 47 ++++++++ .config/mutt/accounts/1-ceng_argor.muttrc | 54 +++++++++ .config/mutt/accounts/2-metu_argor.muttrc | 48 ++++++++ .config/mutt/accounts/3-ceng_stu.muttrc | 51 +++++++++ .config/mutt/accounts/4-metu_stu.muttrc | 48 ++++++++ .config/mutt/accounts/5-xyz.muttrc | 53 +++++++++ .config/mutt/muttrc | 177 ++++++++++++++++++++++++++---- .local/bin/mailsync | 76 +++++++++++++ .local/bin/openfile | 10 ++ .mbsyncrc | 131 ++++++++++++++++++++++ 10 files changed, 673 insertions(+), 22 deletions(-) create mode 100644 .config/msmtp/config create mode 100644 .config/mutt/accounts/1-ceng_argor.muttrc create mode 100644 .config/mutt/accounts/2-metu_argor.muttrc create mode 100644 .config/mutt/accounts/3-ceng_stu.muttrc create mode 100644 .config/mutt/accounts/4-metu_stu.muttrc create mode 100644 .config/mutt/accounts/5-xyz.muttrc create mode 100755 .local/bin/mailsync create mode 100755 .local/bin/openfile create mode 100644 .mbsyncrc diff --git a/.config/msmtp/config b/.config/msmtp/config new file mode 100644 index 0000000..8b8e782 --- /dev/null +++ b/.config/msmtp/config @@ -0,0 +1,47 @@ +defaults +auth on +tls on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +logfile ~/.config/msmtp/msmtp.log + +account ceng_argor +host mailhost.ceng.metu.edu.tr +domain mailhost.ceng.metu.edu.tr +port 587 +from yigit@ceng.metu.edu.tr +user yigit +passwordeval "pass mutt-wizard-ceng_argor" +tls_starttls on +tls_certcheck off + +account metu_argor +host smtp.metu.edu.tr +port 465 +from ysever@metu.edu.tr +user ysever +passwordeval "pass mutt-wizard-metu_argor" +tls_starttls off + +account ceng_stu +host mailhost.ceng.metu.edu.tr +domain mailhost.ceng.metu.edu.tr +port 587 +from e2482057@ceng.metu.edu.tr +user e2482057 +passwordeval "pass mutt-wizard-ceng_stu" +tls_certcheck off + +account metu_stu +host smtp.metu.edu.tr +port 465 +from e248205@metu.edu.tr +user e248205 +passwordeval "pass mutt-wizard-metu_stu" +tls_starttls off + +account xyz +host mail.yigitsever.com +port 587 +from yigit@yigitsever.com +user yigit +passwordeval "pass mutt-wizard-xyz" diff --git a/.config/mutt/accounts/1-ceng_argor.muttrc b/.config/mutt/accounts/1-ceng_argor.muttrc new file mode 100644 index 0000000..1656992 --- /dev/null +++ b/.config/mutt/accounts/1-ceng_argor.muttrc @@ -0,0 +1,54 @@ +# vim: filetype=neomuttrc +# muttrc file for account ceng_argor +set realname = "Yigit Sever" +set from = "yigit@ceng.metu.edu.tr" +set sendmail = "msmtp -a ceng_argor" +alias me Yigit Sever +set folder = "/home/yigit/.local/share/mail/ceng_argor" +set header_cache = /home/yigit/.cache/mutt-wizard/ceng_argor/headers +set message_cachedir = /home/yigit/.cache/mutt-wizard/ceng_argor/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index o "mailsync -V ceng_argor" "run mbsync to sync ceng_argor" +unmailboxes * + +set spoolfile = "+INBOX" +set record = "+Sent" +set postponed = "+Drafts" +set trash = "+Trash" + +named-mailboxes " 📬 inbox" =INBOX +named-mailboxes " 📦 archive" "=Archive" +named-mailboxes " 📜 drafts" "=Drafts" +named-mailboxes " 🐦 sent" "=Sent" +named-mailboxes " 🚮 trash" "=Trash" +named-mailboxes " 📥 tray" "=Tray" + +macro index,pager gi "=INBOX" "go to inbox" # mw-autogenerated +macro index,pager Mi ";=INBOX" "move mail to inbox" # mw-autogenerated +macro index,pager Ci ";=INBOX" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "=Sent" "go to sent" # mw-autogenerated +macro index,pager Ms ";=Sent" "move mail to sent" # mw-autogenerated +macro index,pager Cs ";=Sent" "copy mail to sent" # mw-autogenerated +macro index,pager gd "=Drafts" "go to drafts" # mw-autogenerated +macro index,pager Md ";=Drafts" "move mail to drafts" # mw-autogenerated +macro index,pager Cd ";=Drafts" "copy mail to drafts" # mw-autogenerated +macro index,pager gt "=Trash" "go to trash" # mw-autogenerated +macro index,pager Mt ";=Trash" "move mail to trash" # mw-autogenerated +macro index,pager Ct ";=Trash" "copy mail to trash" # mw-autogenerated +macro index,pager gS "=spam" "go to spam" # mw-autogenerated +macro index,pager MS ";=spam" "move mail to spam" # mw-autogenerated +macro index,pager CS ";=spam" "copy mail to spam" # mw-autogenerated +macro index,pager ga "=Archive" "go to archive" # mw-autogenerated +macro index,pager Ma ";=Archive" "move mail to archive" # mw-autogenerated +macro index,pager Ca ";=Archive" "copy mail to archive" # mw-autogenerated +macro index,pager gy "=Tray" "go to tray" # mw-autogenerated +macro index,pager My ";=Tray" "move mail to tray" # mw-autogenerated +macro index,pager Cy ";=Tray" "copy mail to tray" # mw-autogenerated + +set status_format="Ceng ArGor: %f%?V?/%V? [%m%?M?, %M shown?%?n?, %n new?%?o?, %o old?%?d?, %d deleted?%?F?, %F flagged?%?t?, %t tagged?%?p?, %p postponed?] %> %P" diff --git a/.config/mutt/accounts/2-metu_argor.muttrc b/.config/mutt/accounts/2-metu_argor.muttrc new file mode 100644 index 0000000..cbbb53a --- /dev/null +++ b/.config/mutt/accounts/2-metu_argor.muttrc @@ -0,0 +1,48 @@ +# vim: filetype=neomuttrc +# muttrc file for account metu_argor +set realname = "Yigit Sever" +set from = "ysever@metu.edu.tr" +set sendmail = "msmtp -a metu_argor" +alias me Yigit Sever +set folder = "/home/yigit/.local/share/mail/metu_argor" +set header_cache = /home/yigit/.cache/mutt-wizard/metu_argor/headers +set message_cachedir = /home/yigit/.cache/mutt-wizard/metu_argor/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index o "mailsync -V metu_argor" "run mbsync to sync metu_argor" +unmailboxes * + +set spoolfile = "+INBOX" +set record = "+sent-mail" +set postponed = "+drafts" +set trash = "+Trash" + +named-mailboxes " 📬 inbox" =INBOX +named-mailboxes " 📦 archive" "=Archive" +named-mailboxes " 📜 drafts" "=drafts" +named-mailboxes " 🐦 sent" "=sent-mail" +named-mailboxes " 🚮 trash" "=Trash" +named-mailboxes " 📥 tray" "=Tray" + +macro index,pager gi "=INBOX" "go to inbox" # mw-autogenerated +macro index,pager Mi ";=INBOX" "move mail to inbox" # mw-autogenerated +macro index,pager Ci ";=INBOX" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "=sent-mail" "go to sent" # mw-autogenerated +macro index,pager Ms ";=sent-mail" "move mail to sent" # mw-autogenerated +macro index,pager Cs ";=sent-mail" "copy mail to sent" # mw-autogenerated +macro index,pager gd "=drafts" "go to drafts" # mw-autogenerated +macro index,pager Md ";=drafts" "move mail to drafts" # mw-autogenerated +macro index,pager Cd ";=drafts" "copy mail to drafts" # mw-autogenerated +macro index,pager gt "=Trash" "go to trash" # mw-autogenerated +macro index,pager Mt ";=Trash" "move mail to trash" # mw-autogenerated +macro index,pager Ct ";=Trash" "copy mail to trash" # mw-autogenerated +macro index,pager ga "=Archive" "go to archive" # mw-autogenerated +macro index,pager Ma ";=Archive" "move mail to archive" # mw-autogenerated +macro index,pager Ca ";=Archive" "copy mail to archive" # mw-autogenerated + +set status_format="METU ArGor: %f%?V?/%V? [%m%?M?, %M shown?%?n?, %n new?%?o?, %o old?%?d?, %d deleted?%?F?, %F flagged?%?t?, %t tagged?%?p?, %p postponed?] %> %P" diff --git a/.config/mutt/accounts/3-ceng_stu.muttrc b/.config/mutt/accounts/3-ceng_stu.muttrc new file mode 100644 index 0000000..5e7472c --- /dev/null +++ b/.config/mutt/accounts/3-ceng_stu.muttrc @@ -0,0 +1,51 @@ +# vim: filetype=neomuttrc +# muttrc file for account ceng_stu +set realname = "Yigit Sever" +set from = "e2482057@ceng.metu.edu.tr" +set sendmail = "msmtp -a ceng_stu" +alias me Yigit Sever +set folder = "/home/yigit/.local/share/mail/ceng_stu" +set header_cache = /home/yigit/.cache/mutt-wizard/ceng_stu/headers +set message_cachedir = /home/yigit/.cache/mutt-wizard/ceng_stu/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index o "mailsync -V ceng_stu" "run mbsync to sync ceng_stu" +unmailboxes * + +set spoolfile = "+INBOX" +set record = "+Sent" +set postponed = "+Drafts" +set trash = "+Trash" + +named-mailboxes " 📬 inbox" =INBOX +named-mailboxes " 📦 archive" "=Archive" +named-mailboxes " 📜 drafts" "=Drafts" +named-mailboxes " 🐦 sent" "=Sent" +named-mailboxes " 🚮 trash" "=Trash" +named-mailboxes " 📥 tray" "=Tray" + +macro index,pager gi "=INBOX" "go to inbox" # mw-autogenerated +macro index,pager Mi ";=INBOX" "move mail to inbox" # mw-autogenerated +macro index,pager Ci ";=INBOX" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "=Sent" "go to sent" # mw-autogenerated +macro index,pager Ms ";=Sent" "move mail to sent" # mw-autogenerated +macro index,pager Cs ";=Sent" "copy mail to sent" # mw-autogenerated +macro index,pager gd "=Drafts" "go to drafts" # mw-autogenerated +macro index,pager Md ";=Drafts" "move mail to drafts" # mw-autogenerated +macro index,pager Cd ";=Drafts" "copy mail to drafts" # mw-autogenerated +macro index,pager gt "=Trash" "go to trash" # mw-autogenerated +macro index,pager Mt ";=Trash" "move mail to trash" # mw-autogenerated +macro index,pager Ct ";=Trash" "copy mail to trash" # mw-autogenerated +macro index,pager gS "=spam" "go to spam" # mw-autogenerated +macro index,pager MS ";=spam" "move mail to spam" # mw-autogenerated +macro index,pager CS ";=spam" "copy mail to spam" # mw-autogenerated +macro index,pager ga "=Archive" "go to archive" # mw-autogenerated +macro index,pager Ma ";=Archive" "move mail to archive" # mw-autogenerated +macro index,pager Ca ";=Archive" "copy mail to archive" # mw-autogenerated + +set status_format="Ceng Student: %f%?V?/%V? [%m%?M?, %M shown?%?n?, %n new?%?o?, %o old?%?d?, %d deleted?%?F?, %F flagged?%?t?, %t tagged?%?p?, %p postponed?] %> %P" diff --git a/.config/mutt/accounts/4-metu_stu.muttrc b/.config/mutt/accounts/4-metu_stu.muttrc new file mode 100644 index 0000000..959586d --- /dev/null +++ b/.config/mutt/accounts/4-metu_stu.muttrc @@ -0,0 +1,48 @@ +# vim: filetype=neomuttrc +# muttrc file for account metu_stu +set realname = "Yigit Sever" +set from = "e248205@metu.edu.tr" +set sendmail = "msmtp -a metu_stu" +alias me Yigit Sever +set folder = "/home/yigit/.local/share/mail/metu_stu" +set header_cache = /home/yigit/.cache/mutt-wizard/metu_stu/headers +set message_cachedir = /home/yigit/.cache/mutt-wizard/metu_stu/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index o "mailsync -V metu_stu" "run mbsync to sync metu_stu" +unmailboxes * + +set spoolfile = "+INBOX" +set record = "+sent-mail" +set postponed = "+drafts" +set trash = "+Trash" + +named-mailboxes " 📬 inbox" =INBOX +named-mailboxes " 📦 archive" "=Archive" +named-mailboxes " 📜 drafts" "=drafts" +named-mailboxes " 🐦 sent" "=sent-mail" +named-mailboxes " 🚮 trash" "=Trash" +named-mailboxes " 📥 tray" "=Tray" + +macro index,pager gi "=INBOX" "go to inbox" # mw-autogenerated +macro index,pager Mi ";=INBOX" "move mail to inbox" # mw-autogenerated +macro index,pager Ci ";=INBOX" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "=sent-mail" "go to sent" # mw-autogenerated +macro index,pager Ms ";=sent-mail" "move mail to sent" # mw-autogenerated +macro index,pager Cs ";=sent-mail" "copy mail to sent" # mw-autogenerated +macro index,pager gd "=drafts" "go to drafts" # mw-autogenerated +macro index,pager Md ";=drafts" "move mail to drafts" # mw-autogenerated +macro index,pager Cd ";=drafts" "copy mail to drafts" # mw-autogenerated +macro index,pager gt "=Trash" "go to trash" # mw-autogenerated +macro index,pager Mt ";=Trash" "move mail to trash" # mw-autogenerated +macro index,pager Ct ";=Trash" "copy mail to trash" # mw-autogenerated +macro index,pager ga "=Archive" "go to archive" # mw-autogenerated +macro index,pager Ma ";=Archive" "move mail to archive" # mw-autogenerated +macro index,pager Ca ";=Archive" "copy mail to archive" # mw-autogenerated + +set status_format="METU Student: %f%?V?/%V? [%m%?M?, %M shown?%?n?, %n new?%?o?, %o old?%?d?, %d deleted?%?F?, %F flagged?%?t?, %t tagged?%?p?, %p postponed?] %> %P" diff --git a/.config/mutt/accounts/5-xyz.muttrc b/.config/mutt/accounts/5-xyz.muttrc new file mode 100644 index 0000000..f4b5432 --- /dev/null +++ b/.config/mutt/accounts/5-xyz.muttrc @@ -0,0 +1,53 @@ +# vim: filetype=neomuttrc +# muttrc file for account xyz +set realname = "yigit sever" +set from = "yigit@yigitsever.com" +set sendmail = "msmtp -a xyz" +alias me yigit sever +set folder = "/home/yigit/.local/share/mail/xyz" +set header_cache = /home/yigit/.cache/mutt-wizard/xyz/headers +set message_cachedir = /home/yigit/.cache/mutt-wizard/xyz/bodies +set mbox_type = Maildir + +bind index,pager gg noop +bind index,pager g noop +bind index,pager M noop +bind index,pager C noop +bind index gg first-entry +macro index o "mailsync -V xyz" "run mbsync to sync xyz" +unmailboxes * + +set spoolfile = "+INBOX" +set record = "+Sent" +set postponed = "+Drafts" +set trash = "+Trash" + +named-mailboxes " 📬 inbox" =INBOX +named-mailboxes " 📦 archive" "=Archive" +named-mailboxes " 📜 drafts" "=Drafts" +named-mailboxes " 🐦 sent" "=Sent" +named-mailboxes " 🚮 junk" "=Junk" +named-mailboxes " ----- lists ----- " "=." +named-mailboxes " 🔢 l/crypto" "=lists/crypto" +named-mailboxes " 📅 l/remind" "=lists/remind" + +macro index,pager gi "=INBOX" "go to inbox" # mw-autogenerated +macro index,pager Mi ";=INBOX" "move mail to inbox" # mw-autogenerated +macro index,pager Ci ";=INBOX" "copy mail to inbox" # mw-autogenerated +macro index,pager gs "=Sent" "go to sent" # mw-autogenerated +macro index,pager Ms ";=Sent" "move mail to sent" # mw-autogenerated +macro index,pager Cs ";=Sent" "copy mail to sent" # mw-autogenerated +macro index,pager gd "=Drafts" "go to drafts" # mw-autogenerated +macro index,pager Md ";=Drafts" "move mail to drafts" # mw-autogenerated +macro index,pager Cd ";=Drafts" "copy mail to drafts" # mw-autogenerated +macro index,pager gj "=Junk" "go to junk" # mw-autogenerated +macro index,pager Mj ";=Junk" "move mail to junk" # mw-autogenerated +macro index,pager Cj ";=Junk" "copy mail to junk" # mw-autogenerated +macro index,pager ga "=Archive" "go to archive" # mw-autogenerated +macro index,pager Ma ";=Archive" "move mail to archive" # mw-autogenerated +macro index,pager Ca ";=Archive" "copy mail to archive" # mw-autogenerated +macro index,pager gc "=crypto" "go to crypto" +macro index,pager Mc ";=crypto" "move mail to crypto" +macro index,pager Cc ";=crypto" "copy mail to crypto" + +set status_format="yigitsever.com: %f%?V?/%V? [%m%?M?, %M shown?%?n?, %n new?%?o?, %o old?%?d?, %d deleted?%?F?, %F flagged?%?t?, %t tagged?%?p?, %p postponed?] %> %P" diff --git a/.config/mutt/muttrc b/.config/mutt/muttrc index 6bb2b11..55762c0 100644 --- a/.config/mutt/muttrc +++ b/.config/mutt/muttrc @@ -1,15 +1,160 @@ # vim: filetype=neomuttrc -source /usr/local/share/mutt-wizard/mutt-wizard.muttrc # mw-autogenerated -source /home/yigit/.config/mutt/accounts/1-ceng_argor.muttrc # mw-autogenerated -macro index,pager i1 'source /home/yigit/.config/mutt/accounts/1-ceng_argor.muttrc!;' "switch to yigit@ceng.metu.edu.tr" # mw-autogenerated -macro index,pager i2 'source /home/yigit/.config/mutt/accounts/2-metu_argor.muttrc!;' "switch to ysever@metu.edu.tr" # mw-autogenerated -macro index,pager i3 'source /home/yigit/.config/mutt/accounts/3-ceng_stu.muttrc!;' "switch to e2482057@ceng.metu.edu.tr" # mw-autogenerated -macro index,pager i4 'source /home/yigit/.config/mutt/accounts/4-metu_stu.muttrc!;' "switch to e248205@metu.edu.tr" # mw-autogenerated -macro index,pager i5 'source /home/yigit/.config/mutt/accounts/5-xyz.muttrc!;' "switch to yigit@yigitsever.com" # mw-autogenerated +############ +# stolen # +############ +set mailcap_path = /home/yigit/.config/mutt/mailcap +set date_format="%y/%m/%d %I:%M%p" +set smtp_authenticators = 'gssapi:login' +set rfc2047_parameters = yes +set mark_old = no # Unread mail stay unread until read +set mime_forward = yes # attachments are forwarded with mail +set fast_reply # skip to compose when replying +set fcc_attach # save attachments with the body +set forward_format = "Fwd: %s" # format of subject when forwarding +set forward_quote # include message in forwards +set reverse_name # reply as whomever it was to +set mail_check=60 # to avoid lags using IMAP with some email providers (yahoo for example) +auto_view text/html # automatically show html (mailcap uses w3m) +auto_view application/pgp-encrypted +alternative_order text/plain text/enriched text/html +bind index,pager i noop +bind index,pager g noop +bind index \Cf noop + +# General rebindings +bind index j next-entry +bind index k previous-entry +bind attach view-mailcap +bind attach l view-mailcap +bind editor noop +bind index G last-entry +bind index gg first-entry +bind pager,attach h exit +bind pager j next-line +bind pager k previous-line +bind pager l view-attachments +bind index D delete-message +bind index U undelete-message +bind index L limit +bind index h noop +bind index l display-message +bind index,query tag-entry +macro browser h '..' "Go to parent folder" +bind index,pager H view-raw-message +bind browser l select-entry +bind pager,browser gg top-page +bind pager,browser G bottom-page +bind index,pager,browser d half-down +bind index,pager,browser u half-up +bind index,pager S sync-mailbox +bind index,pager R group-reply +bind index \031 previous-undeleted # Mouse wheel +bind index \005 next-undeleted # Mouse wheel +bind pager \031 previous-line # Mouse wheel +bind pager \005 next-line # Mouse wheel +bind editor complete-query + +macro index \Cr "T~UN." "mark all messages as read" +macro index O "mbsync -a" "run mbsync to sync all mail" +macro index \Cf "unset wait_keyread -p 'Enter a search term to find with notmuch: ' x; echo \$x >~/.cache/mutt_terms~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' \`\"" "show only messages matching a notmuch pattern" +macro index a "all\n" "show all messages (undo limit)" + +# Sidebar mappings +set sidebar_visible = yes +set sidebar_width = 20 +set sidebar_short_path = yes +set sidebar_next_new_wrap = yes +set mail_check_stats +bind index,pager \Ck sidebar-prev +bind index,pager \Cj sidebar-next +bind index,pager \Co sidebar-open +bind index,pager \Cp sidebar-prev-new +bind index,pager \Cn sidebar-next-new +bind index,pager B sidebar-toggle-visible + +# Default index colors: +color index yellow default '.*' +color index_author red default '.*' +color index_number blue default +color index_subject cyan default '.*' + +# New mail is boldened: +color index brightyellow black "~N" +color index_author brightred black "~N" +color index_subject brightcyan black "~N" + +# Tagged mail is highlighted: +color index brightyellow blue "~T" +color index_author brightred blue "~T" +color index_subject brightcyan blue "~T" + +# Other colors and aesthetic settings: +mono bold bold +mono underline underline +mono indicator reverse +mono error bold +color normal default default +color indicator brightblack white +color sidebar_highlight red default +color sidebar_divider brightblack black +color sidebar_flagged red black +color sidebar_new green black +color normal brightyellow default +color error red default +color tilde black default +color message cyan default +color markers red white +color attachment white default +color search brightmagenta default +color status brightyellow black +color hdrdefault brightgreen default +color quoted green default +color quoted1 blue default +color quoted2 cyan default +color quoted3 yellow default +color quoted4 red default +color quoted5 brightred default +color signature brightgreen default +color bold black default +color underline black default +color normal default default + +# Regex highlighting: +color header blue default ".*" +color header brightmagenta default "^(From)" +color header brightcyan default "^(Subject)" +color header brightwhite default "^(CC|BCC)" +color body brightred default "[\-\.+_a-zA-Z0-9]+@[\-\.a-zA-Z0-9]+" # Email addresses +color body brightblue default "(https?|ftp)://[\-\.,/%~_:?&=\#a-zA-Z0-9]+" # URL +color body green default "\`[^\`]*\`" # Green text between ` and ` +color body brightblue default "^# \.*" # Headings as bold blue +color body brightcyan default "^## \.*" # Subheadings as bold cyan +color body brightgreen default "^### \.*" # Subsubheadings as bold green +color body yellow default "^(\t| )*(-|\\*) \.*" # List items as yellow +color body brightcyan default "[;:][-o][)/(|]" # emoticons +color body brightcyan default "[;:][)(|]" # emoticons +color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon? +color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon? +color body red default "(BAD signature)" +color body cyan default "(Good signature)" +color body brightblack default "^gpg: Good signature .*" +color body brightyellow default "^gpg: " +color body brightyellow red "^gpg: BAD signature from.*" +mono body bold "^gpg: Good signature" +mono body bold "^gpg: BAD signature from.*" +color body red default "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]" bind generic z noop bind generic Z noop +source /home/yigit/.config/mutt/accounts/1-ceng_argor.muttrc +macro index,pager i1 'source /home/yigit/.config/mutt/accounts/1-ceng_argor.muttrc!;' "switch to yigit@ceng.metu.edu.tr" +macro index,pager i2 'source /home/yigit/.config/mutt/accounts/2-metu_argor.muttrc!;' "switch to ysever@metu.edu.tr" +macro index,pager i3 'source /home/yigit/.config/mutt/accounts/3-ceng_stu.muttrc!;' "switch to e2482057@ceng.metu.edu.tr" +macro index,pager i4 'source /home/yigit/.config/mutt/accounts/4-metu_stu.muttrc!;' "switch to e248205@metu.edu.tr" +macro index,pager i5 'source /home/yigit/.config/mutt/accounts/5-xyz.muttrc!;' "switch to yigit@yigitsever.com" + +# to set vim autocommands set tmpdir="/tmp/neomutt" # character set for outgoing messages @@ -64,20 +209,12 @@ set sleep_time=0 set abort_nosubject=no set abort_unmodified=no -# # Cache message headers here. This takes very little space and makes opening large folders much faster. -# # See header-caching -# # Big conf file does this for us, ~y -# set header_cache=~/.config/mutt/cache/headers/ - -# # Make things faster at the cost of a negligible amount of disk space. -# # See . -# # Big conf file does this for us -# set message_cachedir=~/.config/mutt/cache/ - # TODO: maybe check out . set query_command="khard email --parsable '%s'" # The editor menu is "command-line mode", i.e., what you when hitting colon. # See . +unset query_command +# TODO: and we are immediately unsetting it, dunno why <12-10-21, yigit> # # When a message contains both plain text and HTML, prefer viewing plain text. alternative_order text/plain text/html @@ -87,8 +224,8 @@ bind editor complete-query # The format string reduces the amount of information compared to the default and doesn't use hyphens for padding. # See . # set status_format="%f%?V?/%V? [%m%?M?, %M shown?%?n?, %n new?%?o?, %o old?%?d?, %d deleted?%?F?, %F flagged?%?t?, %t tagged?%?p?, %p postponed?] %> %P" -# set index_format="hi" set index_format="%2C %Z %?X?A& ? %[%e %b %y %R] %-15.15F %s (%-4.4c)" +set sidebar_format = "%D%?F? [%F]?%* %?N?%N/? %?S?%S?" # See ). # Also get rid of the hyphens again. @@ -106,8 +243,6 @@ set crypt_opportunistic_encrypt = no set pgp_self_encrypt = yes set pgp_default_key = 198466C2F5664940F73A1715B87B63C533C38A88 -unset query_command - macro index,pager A \ "khard add-email" \ "add the sender email address to khard" @@ -145,5 +280,3 @@ color index_flags color239 default "EDAS" color index_subject color239 default "~f @igi-global.com" color index_author color239 default "~f @igi-global.com" color index_flags color239 default "~f @igi-global.com" - -set sidebar_format = "%D%?F? [%F]?%* %?N?%N/? %?S?%S?" diff --git a/.local/bin/mailsync b/.local/bin/mailsync new file mode 100755 index 0000000..ae0801c --- /dev/null +++ b/.local/bin/mailsync @@ -0,0 +1,76 @@ +#!/bin/sh + +# Sync mail and give notification if there is new mail. + +# Run only if user logged in (prevent cron errors) +pgrep -u "${USER:=$LOGNAME}" >/dev/null || { echo "$USER not logged in; sync will not run."; exit ;} +# Run only if not already running in other instance +pgrep -x mbsync >/dev/null && { notify-send --app-name="mailsync" "mbsync is already running" "you should fix this" ; exit ;} + +if [[ -f "$HOME/.local/share/.dnd" ]]; then + echo "do not disturb is on" + exit +fi + +# Checks for internet connection and set notification script. +ping -q -c 1 1.1.1.1 > /dev/null || ping -q -c 1 1.0.0.1 > /dev/null || ping -q -c 1 example.org || { echo "No internet connection detected."; exit ;} +command -v notify-send >/dev/null || echo "Note that \`libnotify\` or \`libnotify-send\` should be installed for pop-up mail notifications with this script." + +# Required to display notifications if run as a cronjob: +export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus +export DISPLAY=:0.0 + +# For individual configurations: +[ -d "$HOME/.local/share/password-store" ] && export PASSWORD_STORE_DIR="$HOME/.local/share/password-store" + +# Settings are different for MacOS (Darwin) systems. +if [ "$(uname)" = "Darwin" ]; then + notify() { osascript -e "display notification \"$2 in $1\" with title \"You've got Mail\" subtitle \"Account: $account\"" && sleep 2 ;} + messageinfo() { osascript -e "display notification with title \"📧 $from\" subtitle \"$subject\"" ;} +else + notify() { notify-send --icon="mail_new" --app-name="excerpt" "\`$1\`" "📬 $2 new mail(s)" ;} + messageinfo() { notify-send --icon="mail-mark-unread" --app-name="mutt" "📧 $from" "$subject" ;} +fi + +# Check account for new mail. Notify if there is new content. +syncandnotify() { + acc="$(echo "$account" | sed "s/.*\///")" + if [ -z "$opts" ]; then mbsync "$acc"; else mbsync "$opts" "$acc"; fi + new=$(find "$HOME/.local/share/mail/$acc/INBOX/new/" "$HOME/.local/share/mail/$acc/Inbox/new/" "$HOME/.local/share/mail/$acc/inbox/new/" -type f -newer "$HOME/.config/mutt/.mailsynclastrun" 2> /dev/null) + newcount=$(echo "$new" | sed '/^\s*$/d' | wc -l) + if [ "$newcount" -gt "0" ]; then + notify "$acc" "$newcount" & + for file in $new; do + # Extract subject and sender from mail. + from=$(awk '/^From: / && ++n ==1,/^\<.*\>:/' "$file" | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | awk '{ $1=""; if (NF>=3)$NF=""; print $0 }' | sed 's/^[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//') + subject=$(awk '/^Subject: / && ++n == 1,/^\<.*\>: / && ++i == 2' "$file" | head -n 1 | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | sed 's/^Subject: //' | sed 's/^{[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//' | tr -d '\n') + messageinfo & + done + fi +} + +# Sync accounts passed as argument or all. +if [ "$#" -eq "0" ]; then + accounts="$(awk '/^Channel/ {print $2}' "$HOME/.mbsyncrc")" +else + for arg in "$@"; do + [ "${arg%${arg#?}}" = '-' ] && opts="${opts:+${opts} }${arg}" && shift 1 + done + accounts=$* +fi + +# ( kill -46 "$(pidof "${STATUSBAR:-dwmblocks}")" >/dev/null 2>&1 ) 2>/dev/null + +# Parallelize multiple accounts +for account in $accounts +do + syncandnotify & +done + +wait +# ( kill -46 "$(pidof "${STATUSBAR:-dwmblocks}")" >/dev/null 2>&1 ) 2>/dev/null + +notmuch new 2>/dev/null + +#Create a touch file that indicates the time of the last run of mailsync +touch "$HOME/.config/mutt/.mailsynclastrun" diff --git a/.local/bin/openfile b/.local/bin/openfile new file mode 100755 index 0000000..cf3c6c3 --- /dev/null +++ b/.local/bin/openfile @@ -0,0 +1,10 @@ +#!/bin/sh + +# Helps open a file with xdg-open from mutt in a external program without weird side effects. +tempdir="${XDG_CACHE_HOME:-$HOME/.cache}/mutt-wizard/files" +file="$tempdir/$(basename "$1")" +[ "$(uname)" = "Darwin" ] && opener="open" || opener="setsid -f xdg-open" +mkdir -p "$tempdir" +cp -f "$1" "$file" +$opener "$file" >/dev/null 2>&1 +find "${tempdir:?}" -mtime +1 -type f -delete diff --git a/.mbsyncrc b/.mbsyncrc new file mode 100644 index 0000000..703c2f0 --- /dev/null +++ b/.mbsyncrc @@ -0,0 +1,131 @@ +IMAPStore ceng_argor-remote +Host imap.ceng.metu.edu.tr +Port 993 +User yigit +PassCmd "pass mutt-wizard-ceng_argor" +AuthMechs LOGIN +SSLType IMAPS +CertificateFile /etc/ssl/certs/ca-certificates.crt + +MaildirStore ceng_argor-local +Subfolders Verbatim +Path ~/.local/share/mail/ceng_argor/ +Inbox ~/.local/share/mail/ceng_argor/INBOX +Flatten . + +Channel ceng_argor +Expunge Both +Far :ceng_argor-remote: +Near :ceng_argor-local: +Patterns * !"[Gmail]/All Mail" +Create Both +SyncState * +MaxMessages 0 +ExpireUnread no +# End profile + +IMAPStore metu_argor-remote +Host imap.metu.edu.tr +Port 993 +User ysever +PassCmd "pass mutt-wizard-metu_argor" +AuthMechs LOGIN +SSLType IMAPS +CertificateFile /etc/ssl/certs/ca-certificates.crt + +MaildirStore metu_argor-local +Subfolders Verbatim +Path ~/.local/share/mail/metu_argor/ +Inbox ~/.local/share/mail/metu_argor/INBOX +Flatten . + +Channel metu_argor +Expunge Both +Far :metu_argor-remote: +Near :metu_argor-local: +Patterns * !"[Gmail]/All Mail" +Create Both +SyncState * +MaxMessages 0 +ExpireUnread no +# End profile + +IMAPStore ceng_stu-remote +Host imap.ceng.metu.edu.tr +Port 993 +User e2482057 +PassCmd "pass mutt-wizard-ceng_stu" +AuthMechs LOGIN +SSLType IMAPS +CertificateFile /etc/ssl/certs/ca-certificates.crt + +MaildirStore ceng_stu-local +Subfolders Verbatim +Path ~/.local/share/mail/ceng_stu/ +Inbox ~/.local/share/mail/ceng_stu/INBOX +Flatten . + +Channel ceng_stu +Expunge Both +Far :ceng_stu-remote: +Near :ceng_stu-local: +Patterns * !"[Gmail]/All Mail" +Create Both +SyncState * +MaxMessages 0 +ExpireUnread no +# End profile + +IMAPStore metu_stu-remote +Host imap.metu.edu.tr +Port 993 +User e248205 +PassCmd "pass mutt-wizard-metu_stu" +AuthMechs LOGIN +SSLType IMAPS +CertificateFile /etc/ssl/certs/ca-certificates.crt + +MaildirStore metu_stu-local +Subfolders Verbatim +Path ~/.local/share/mail/metu_stu/ +Inbox ~/.local/share/mail/metu_stu/INBOX +Flatten . + +Channel metu_stu +Expunge Both +Far :metu_stu-remote: +Near :metu_stu-local: +Patterns * !"[Gmail]/All Mail" +Create Both +SyncState * +MaxMessages 0 +ExpireUnread no +# End profile + + +IMAPStore xyz-remote +Host mail.yigitsever.com +Port 993 +User yigit +PassCmd "pass mutt-wizard-xyz" +AuthMechs LOGIN +SSLType IMAPS +CertificateFile /etc/ssl/certs/ca-certificates.crt + +MaildirStore xyz-local +Subfolders Verbatim +Path ~/.local/share/mail/xyz/ +Inbox ~/.local/share/mail/xyz/INBOX + +Channel xyz +Expunge Both +Far :xyz-remote: +Near :xyz-local: +Remove Both +Patterns * !"[Gmail]/All Mail" +Create Both +SyncState * +MaxMessages 0 +ExpireUnread no +# End profile + -- cgit v1.2.3-70-g09d2