Symlink notifyd.py to osd_server.py for backward compatibility
[grml-scripts.git] / usr_bin / grml-mutt
1 #!/bin/sh
2 # Filename:      grml-mutt
3 # Purpose:       configuration script for mutt
4 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 ################################################################################
8
9 PATH=${PATH:-'/bin/:/sbin/:/usr/local/bin:/usr/bin:/usr/sbin'}
10 PN=$(basename "$0")
11
12 if [ -r /etc/grml/script-functions ] ; then
13    . /etc/grml/script-functions
14    check4progs dialog mutt || echo "Warning - mutt is not available. Continuing anyway.">&2
15 fi
16
17 writemuttrc() {
18 cat > $MUTTRC << EOF
19 # Filename:      .muttrc
20 # Purpose:       configuration for mailclient mutt, created by 'grml-mutt'
21 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
22 # Bug-Reports:   see http://grml.org/bugs/
23 # License:       This file is licensed under the GPL v2.
24 ################################################################################
25
26 # important variables - adjust them if necessary
27   set realname="$REALNAME"
28   set from="$MAILADDR"
29
30 # mailboxes
31   set pop_host="$POP3"
32 $POPDATA
33   mailboxes $IMAP
34 $IMAPDATA
35 # some default options:
36     set allow_8bit           # send data as it is.  no conversion.
37   unset arrow_cursor         #  Show current mail with an inverse bar.
38     set ascii_chars          # set: use ASCII characters to build the thread tree
39   unset autoedit             # call editor without prompting for To: and Subject:?
40     set auto_tag=yes         # the next operation applies to the tagged messages automatically
41   unset confirmappend        # set: prompt for confirmation on appending mail to folder
42     set confirmcreate        # set: prompt for confirmation on creation of folders
43     set copy                 # Always keep a copy of my mails!
44     set delete=ask-yes       # ask before deleting any messages
45     set edit_headers         # edit all headers lines in the editor
46     set editor=vim           # use Vim as the editor (Vi IMproved www.vim.org)
47     set folder=~/Mail        # directory with all mail folders
48   unset followup_to          # do not generate a Followup-To header
49 #    set force_name           # set: save outbound mail by username
50     set hidden_host          # do not use a hostname in the address - PROBLEMATIC!
51     set history=100          # number of input lines for prompts to remember
52     set include              # set: include mail as quoted text in replies
53   unset mark_old             # set: make distinction between New mail and Old mail.
54     set mime_forward=ask-yes # ask: attach message - or just quote it?
55   unset move                 # do not move read mails from mailbox to $mbox (was: "set hold")
56     set pager_context=1      # number of lines that overlap on paging
57 #   set pager_index_lines=0  # number of lines to see from the index
58     set pager_stop           # "next_page" won't jump to next message at end of messages
59     set postponed=+postponed # where save postponed messages?
60 #   set print_command="mp|lpr" # pipe message to "mp" for formattting - then on to "lpr"
61   unset prompt_after         # set: gives you a prompt when pager exits
62     set quit=ask-yes         # ask before exiting
63     set quote_regexp="^>"    # some people just use '>' - *sigh*
64     set read_inc=10          # '10': show count number for every tenth mail
65     set record=+outbox       # outbox / where to save outgoing mails
66     set recall=ask-yes       # do not prompt for recalling postponed mails with 'm'
67     set reply_to=ask-yes     # "reply":          set:  Use address in Reply-To?
68     set reverse_alias        # show the name of sender as set with my alias for him
69     set reverse_name         # reply as the user to whom the mail was sent to
70 #    set save_name            # set: save outbound mail to =username if it exists
71 #    set sendmail="/usr/bin/msmtp" # which sendmail program should be used?
72 #   set shell=zsh            # use the zsh for shell commands
73     set sort=threads         # sorting method - I definitely like "threads" best
74     set status_on_top        # set: present the status bar at top, ie before the index
75     set strict_threads       # set: use references: for threading only, ie do not
76                              # thread by subject or in-reply-to
77     set tilde                # show non-existant lines of text with a tilde at begin-of-line
78     set tmpdir="/tmp"        # directory where temporary files are to be placed
79     set to_chars="X+TCF"     # message flags: non-personal,personal,To:,Cc:,From:
80     set use_from             # 'set from=' requires a 'set use_from'!
81 #    set use_envelope_from   # when set, mutt will use $envelope_from_address as the envelope sender
82     set write_inc=10         # update number after each tenth read mail
83
84
85 # Options with a long value:
86 #   set alternates=...
87     set attribution="* %n <%a> [%(%y%m%d %H:%M)]:"              # how to cite the author
88     set reply_regexp="^((aw|antw.?|antwort|re|r e|r?f|sv):[ \t]*)*"
89
90 # Format Options
91     set forw_format="(forw) %s"
92     set index_format="%4C %Z %[!%y%m%d] %-17.17F (%3l) %s"
93     set pager_format="%S [%C/%T] %n (%l) %s"
94     set status_format="%v: %f (%s) [%M/%m] [N=%n,*=%t,new=%b]"
95
96 # Show the "text/plain" part *before* the "text/html" part:
97   alternative_order text/plain text/html
98   auto_view text/html
99
100 # KEY BINDINGS
101   bind index zt current-top
102   bind index zz current-middle
103   bind index zb current-bottom
104
105 # HEADER DISPLAY
106   ignore *
107   unignore from: date: subject: to: cc: reply-to:
108   unignore sender:
109   unignore priority: importance:
110   unignore organization organisation
111   unignore mail-followup-to:
112   unignore resent- x-resent
113 # unignore user-agent: x-agent: x-mailer: x-newsreader: x-mailing-list:
114 # unignore x-editor
115 # unignore message-id: newsgroups: posted-to: posted-and-mailed:
116 # unignore x-also-posted-to: x-newsgroups:
117 # unignore delivered-to x-envelope-to:
118 # unignore x-accept-language
119   unhdr_order *
120   hdr_order Sender: From From: Reply-To: Subject: Organization: Date: Message-Id: User-Agent: X-Editor: X-Mailer: X-Newsreader: X-Agent: To: Cc: Newsgroups: X-Resent Followup-To: Mail-Followup-To:
121 EOF
122 }
123
124 lightcolors() {
125 cat >> $MUTTRC << EOF
126
127 ## color setup
128
129 ## some misc stuff:
130   color normal     black      white
131   color error      red        white
132   color indicator  blue       green
133   color status     white      blue
134   color tree       blue       white
135   color hdrdefault red        white
136   color quoted     blue       white
137   color quoted1    green     white
138   color quoted2    magenta    white
139   color quoted3    cyan       white
140   color tilde      yellow     black
141   color signature  blue       white
142   color search     white      blue   # "search" - matches found with search within the internal pager.
143   color markers    red        black  # "markers" indicate a wrapped line when showing messages with looong lines.
144   color bold       green      black
145   color underline  yellow     black
146
147 ## index-colors:
148   uncolor index *
149
150 # mail from myself *and* to myself (TODO items):
151 #  color index black  brightyellow  '~p ~f prokop'
152
153 # Flagged Messages are important!
154   color index blue white ~N      # New
155   color index magenta default ~T # Tagged
156   color index blue black ~D      # Deleted Mails - use dark color as these are already "dealt with".
157   color index red default ~O     # old messages
158
159 # mail from important people (like myself ;-):
160 # color index white  red '~f prokop'
161
162 # Mails with no obvious addresses (empty To: and Cc: lines)
163    color index cyan white "! ~C ."
164
165 # "DONE mails" ie those I have already replied to.
166    color index blue white  '~Q'
167
168 # non-multipart mails which are tex/html almost always are spam:
169   color index brightmagenta white "~h 'Content-Type: text/html'"
170
171 # Sent to "Undisclosed Recipients":
172   color index white      magenta  '~C Undisclosed.*Recipients'
173
174 # When the Subject indicates a reply (with ":re" but without "Fwd"!)
175 # then there *must* be a reference to the previous message!
176 # So if there is neither an In-Reply-To nor a References line
177 # then it must have been sent with a crappy mailer....
178   color index yellow white "~s re: ! ~s fwd: ! ~x . ! ~h 'in-reply-to: '"
179
180 # No characters in body -> SPAM!
181   color index white white   "! ~b ."
182
183   color index brightred black ~F # Flagged
184
185 ## body-colors:
186
187 # highlight important keywords
188   color body  brightyellow black  "grml"
189
190 # URLs (General Internet addresses):
191   color body yellow red "(finger|ftp|http|news|telnet)://[^ >]*"
192   color body yellow red "<URL:[^ ]*>"
193 # web address without "http":
194   color body yellow red "www\\.[-.a-z0-9]+\\.[a-z][a-z][a-z]?([-_./~a-z0-9]+)?"
195
196 # HTTPS addresses:
197   color body yellow red "https://[^ >]*"
198
199 # FTP addresses:
200   color body yellow red "ftp://[^ ]*"
201
202 # HTTP addresses:
203   color body yellow red "[[:alnum:]][-+.#_[:alnum:]]*@[-+.[:alnum:]]*[[:alnum:]]"
204
205 # File names ("/path/file")
206 #  color body brightgreen white "\\~?\(/[-_.,a-zA-Z0-9{}äöüß]+\)+"
207   color body blue white "\\~?\(/[-_.,a-zA-Z0-9{}äöüß]+\)+"
208
209 # Path names ("/path/")
210   color body brightred   white "\(/[-_.a-zA-Z0-9]+\)+/"
211
212 # Variables  ("$HOME")
213   color body brightmagenta white "\\$[a-zA-Z][-_a-zA-Z]+"
214
215 # Attribution line:
216 # color body red white "^[*] .*:$"
217
218 ## abbreviations and "SCREAMING IN CAPS" in body:
219 # The following includes umlauts - but that's quite clunky.
220 # color body brightyellow  red "[A-ZÄÖÜ][-A-ZÄÖÜ]+[A-ZÄÖÜ][ .!?]?"
221
222 # "+USE_GNU_REGEX":
223 # When you use "+USE_GNU_REGEX" then you can also make use
224 # of "start of word" ("\<") and "end of word" ("\>"):
225   color body red  white    "\\<[-A-Z']{3,}\\>"
226
227 # *Emphasized*, /emphasized/, and _emphasized_ words:
228 # color body brightred      black   "[*/_]+ *[- &[:alnum:]]+ *[*/_]+"
229 # this would catch false positives of the kind _foo* and /bar_
230 # so we should choose matching pairs only:
231   color body brightred  white   "[*][-[:alnum:]]+[*]"
232   color body brightred  white     "/[-[:alnum:]]+/"
233   color body brightred  white     "_[-[:alnum:]]+_"
234
235 # Smileys:  :-)  ;-)  :-|  :-/  :-(
236   color body brightyellow white    "[;:]-[)/(|]"
237 # Grinning:  "grin" ([g]) and "big grin" ([bg]):
238   color body blue   red      "<[Gg]>"
239   color body blue   red      "<[Bb][Gg]>"
240
241 # Border Lines of length three or more.
242 # (Several Newsletters use border lines..)
243   color body green  white    "[-_=+~/\*]{3,}"
244
245 # Extensive use of exclamation and question marks:
246 # "!!!"  "???"
247   color body red    white    "[!?]{3,}"
248
249 # Percentages ("Save xx.x %!")
250   color body brightgreen white "[.0-9]+ ?%"
251
252 # Copyright (C) and Registered Trademark (r)
253   color body red white "[(][cr][)]"
254   color body red white "\\(c\\)"
255
256 # Year Numbers 1980-2002
257   color body blue white "19[89][0-9]"
258   color body blue white "200[012]"
259
260 # Phone Numbers:
261   color body blue white "1-[0-9]{3}[- ][-0-9]+ +ext.? [0-9]+"
262   color body blue white \
263 "(tele)?(cell|fax|fon|phone|tel)[.: ]+[+]?[- 0-9/()]{4,}[0-9]"
264
265 # RTFM!
266 # " man word"
267   color body white red "^ +[$]? *man \\w+"
268
269 # Lists
270 # bulleted list:
271 # * one
272 # * two
273 # * three
274 # dashed list:
275 # - one
276 # - two
277 # - three
278 # color body red          black "^ *[-*] +"
279 # this pattern yields many false positives as it
280 # spans lines for which there is no syntax language.
281 # this is easier with Vim's syntax coloring.
282   color body red white "^ *[-*] +"
283
284 # special IP host addresses:
285 # 192.x.x.x
286   color body white blue  "129.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
287   color body white blue  "193.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
288
289 # HTML tags
290   color body yellow       black "</?\w+>"
291
292 # Emphasis by interspersed spaces
293 # Example: E M P H A S I S
294   color body red white '\<\w( +\w\>)+'
295
296 # verbatim marks (#v+ till #v-)
297   color body yellow red  ^\#v[-+]
298
299   color attachment black white
300 EOF
301 }
302
303 dialog --stdout --title "$PN" --msgbox "Welcome to $PN!
304
305 This script will create a simple base
306 configuration for the mailclient mutt.
307
308 Report bugs, send wishes and feedback to the grml team:
309 http://www.grml.org/ - contact (at) grml.org
310 " 13 65
311
312 GETREALNAME=$(dialog --stdout --title "$PN" --inputbox "Your real name (eg 'John GRML User'):" 0 56) || exit 0
313 REALNAME=${GETREALNAME%/*}
314
315 GETMAILADDR=$(dialog --stdout --title "$PN" --inputbox "Your main mail address (eg 'joedoe@grml.org'):" 0 56) || exit 0
316 MAILADDR=${GETMAILADDR%/*}
317
318 askpop(){
319   GETPOPUSER=$(dialog --stdout --title "$PN" --inputbox "Enter username for POP3 account" 0 0)
320   POPUSER=${GETPOPUSER}
321
322   GETPOPPWD=$(dialog --stdout --title "$PN" --passwordbox "Enter password for POP3 account (typing hidden)" 0 0)
323   POPPWD=${GETPOPPWD}
324 }
325
326 ASKPOP=$(dialog --stdout --title "$PN" --yesno "Configure POP3?" 0 0)
327 retval=$?
328
329 case $retval in
330   0)
331      GETPOP3=$(dialog --stdout --title "$PN" --inputbox  "Your POP3 account (pop[s]://[user]@hostname[:port]):" 0 56 "pop://") || exit 0
332      POP3=${GETPOP3}
333      askpop && \
334 POPDATA="  set pop_user=\"$POPUSER\"
335   set pop_pass=\"$POPPWD\"
336 "
337      ;;
338 esac
339
340 askimap(){
341   GETIMAPUSER=$(dialog --stdout --title "$PN" --inputbox "Enter username for IMAP account" 0 0)
342   IMAPUSER=${GETIMAPUSER}
343
344   GETIMAPPWD=$(dialog --stdout --title "$PN" --passwordbox "Enter password for IMAP account (typing hidden)" 0 0)
345   IMAPPWD=${GETIMAPPWD}
346 }
347
348 ASKIMAP=$(dialog --stdout --title "$PN" --yesno "Configure IMAP?" 0 0)
349 retval=$?
350
351 case $retval in
352   0)
353      GETIMAP=$(dialog --stdout --title "$PN" --inputbox  "Your IMAP account (imap[s]://[user@]hostname[:port]/mailbox):" 0 65 "imap://") || exit 0
354      IMAP=${GETIMAP}
355      askimap && \
356 IMAPDATA="  set imap_user=\"$IMAPUSER\"
357   set imap_pass=\"$IMAPPWD\"
358 "
359      ;;
360 esac
361
362 GETCOLOR=$(dialog --stdout --title "$PN" \
363         --radiolist "Which color setup do you want to use?" 10 65 2 \
364           dark   "dark color setup (default)" on \
365           light  "light color setup" off)
366 retval=$?
367
368 case $retval in
369   0) COLOR=$GETCOLOR ;;
370   *) exit 1 ;;
371 esac
372
373 writecolors() {
374   if [ "$COLOR" = 'light' ] ; then
375     lightcolors
376   fi
377 }
378
379 GETMUTTRC=$(dialog --stdout --title "$PN" --inputbox "Choose a filename for this configuration:" 0 56 "$HOME/.muttrc") || exit 0
380 MUTTRC=${GETMUTTRC}
381
382 WRITEMUTTRC=$(dialog --stdout --title "$PN" --yesno "Write $MUTTRC?" 5 65)
383 retval=$?
384
385 case $retval in
386   0)
387     if [ -f "$MUTTRC" ] ; then
388       dialog --stdout --title "$PN" --yesno "$MUTTRC exists. Overwrite?" 5 65
389       retval=$?
390       case $retval in
391         0)
392           writemuttrc && writecolors && \
393           dialog --stdout --title "$PN" --msgbox "Writing $MUTTRC was successful." 7 65 || \
394           { dialog --stdout --title "$PN" --msgbox "Error $?: writing $MUTTRC failed." 7 65 ; exit 1 ; }
395           ;;
396       esac
397     else
398        writemuttrc && writecolors && \
399        dialog --stdout --title "$PN" --msgbox "Writing $MUTTRC was successfull." 7 65 || \
400        { dialog --stdout --title "$PN" --msgbox "Error $?: writing $MUTTRC failed." 7 65 ; exit 1 ; }
401     fi
402     ;;
403 esac
404
405 dialog --stdout --title "$PN" --msgbox "Thanks for using $PN!
406
407 More information on mutt:
408
409 Manuals: man 1 mutt
410          man 5 muttrc
411
412 Webpages:
413 www.mutt.org
414 wiki.mutt.org
415 www.spinnaker.de/mutt/
416 www.michael-prokop.at/mutt/
417
418 #######################################################
419
420 Report bugs, send wishes and feedback to the grml team:
421 http://www.grml.org/ - contact (at) grml.org
422 " 24 65
423
424 ## END OF FILE #################################################################