summaryrefslogtreecommitdiffstats
path: root/.config/mutt/muttrc
blob: d716202088098b057964d86b64b3cbc8c4b076af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# vim: filetype=neomuttrc
############
#  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 <return> view-mailcap
bind attach l view-mailcap
bind editor <space> 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 <space> tag-entry
macro browser h '<change-dir><kill-line>..<enter>' "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 <Tab> complete-query

macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
macro index O "<shell-escape>mbsync -a<enter>" "run mbsync to sync all mail"
macro index \Cf "<enter-command>unset wait_key<enter><shell-escape>read -p 'Enter a search term to find with notmuch: ' 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 a "<limit>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 '<sync-mailbox><enter-command>source /home/yigit/.config/mutt/accounts/1-ceng_argor.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to yigit@ceng.metu.edu.tr"
macro index,pager i2 '<sync-mailbox><enter-command>source /home/yigit/.config/mutt/accounts/2-metu_argor.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to ysever@metu.edu.tr"
macro index,pager i3 '<sync-mailbox><enter-command>source /home/yigit/.config/mutt/accounts/3-ceng_stu.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to e2482057@ceng.metu.edu.tr"
macro index,pager i4 '<sync-mailbox><enter-command>source /home/yigit/.config/mutt/accounts/4-metu_stu.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to e248205@metu.edu.tr"
macro index,pager i5 '<sync-mailbox><enter-command>source /home/yigit/.config/mutt/accounts/5-xyz.muttrc<enter><change-folder>!<enter>;<check-stats>' "switch to yigit@yigitsever.com"

# to set vim autocommands
set tmpdir="/tmp/neomutt"

# character set for outgoing messages
set send_charset="utf-8"
# if the incoming mail haven't set anything it's probably something dumb.
set assumed_charset="cp1252"

set sort=threads
set sort_aux=reverse-last-date-received
set strict_threads

# Setting `autoedit` along with `edit_headers` makes Mutt immediately open Vim when
# composing a new message.  Common wisdom is to "write the introduction last".  Assuming
# this advice can be at all extended to writing email, it surely doesn't make sense to
# prompt for a subject line before allowing composition of a mail's body.
set autoedit
set edit_headers

# Also don't ask whether we want to recall a postponed message when hitting `m`.  We can
# use `R` (`recall-message`) to do that.
set recall=no

# update us with search/limit progress every nth message
set read_inc=100

# When in the pager (reading a message), still show a few lines of the index (list of messages) for context.
set pager_index_lines=10

# delete (purge/move) without prompt
# include the reply by default
# reply to, reply_to
set delete=yes
set include=yes
set reply_to=yes

# don't ask me to press keys after external command
set wait_key=no

# scroll one line up down between screen boundaries
set menu_scroll

# hide the line wrap + chars
unset markers

# From <https://wiki.archlinux.org/index.php/mutt#Speed_up_folders_switch>.
# Don't pause to show info messages (for example when opening
# another folder).
# See <https://dev.mutt.org/doc/manual.html#sleep-time>.
set sleep_time=0

# composition will never be aborted
set abort_nosubject=no
set abort_unmodified=no

# TODO: maybe check out <https://github.com/pimutils/mates.rs>.
set query_command="khard email --parsable '%s'"
# The editor menu is "command-line mode", i.e., what you when hitting colon.
# See <file:///usr/share/doc/neomutt/manual.html#editor-map>.
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
bind editor <Tab> complete-query

# Customize the status line at the bottom.
# The format string reduces the amount of information compared to the default and doesn't use hyphens for padding.
# See <http://www.mutt.org/doc/manual/#status-format>.
# 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="%2C %Z %?X?A& ? %[%e %b %y %R] %-15.15F %s (%-4.4c)"
set sidebar_format = "%D%?F? [%F]?%* %?N?%N/? %?S?%S?"

# See <file:///usr/share/doc/neomutt/manual.html#compose-format>).
# Also get rid of the hyphens again.
set compose_format=

# Customize the status line shown when reading a message (the status line for the pager).
# See <https://dev.mutt.org/doc/manual.html#pager-format>.
set pager_format="%s%*   %P"

macro index,pager \cb "<pipe-message> urlscan<Enter>" "call urlscan to extract URLs out of a message"
macro attach,compose \cb "<pipe-entry> urlscan<Enter>" "call urlscan to extract URLs out of a message"

set crypt_autosign = no
set crypt_opportunistic_encrypt = no
set pgp_self_encrypt = yes
set pgp_default_key  = 198466C2F5664940F73A1715B87B63C533C38A88

macro index,pager A \
  "<pipe-message>khard add-email<return>" \
  "add the sender email address to khard"

set sig_dashes = no
set sig_on_top = yes
set signature = "echo '~yigit\n'|"

# TODO: this is an exciting rabbit hole <27-11-20, yigit> #
# https://lwn.net/SubscriberLink/837960/f3bcafeaed37425d/
# score '~f pangin' +10
# score '~s ceng351' +20
# score "~s EDAS" 20
# color index color208 color234 "~n 10"
# color index black red  "~n 20"

############################
#  custom body highlights  #
############################
# highlight my name and other personally relevant strings
color body color172 default "((Y|y)igit)? (Sever)?"

############################
#  cusom index highlights  #
############################
# messages which mention my name in the body
color index_flags color172 color128 "~b \"(Y|y)igit\"

#############################################
#  deep learning-based junk mail detection  #
#############################################
color index_subject color239 default "EDAS"
color index_author color239 default "EDAS"
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"

# http://www.gnuterrypratchett.com/
my_hdr X-Clacks-Overhead: GNU Terry Pratchett