====== Building Mutt-KZ with GPGME support ====== ===== - Get the source from github ===== git clone git@github.com:karelzak/mutt-kz.git ===== - Dependencies ===== $ sudo yum install slang-devel openssl-devel cyrus-sasl-devel tokyocabinet-devel ===== - Compile ===== Configure, you'll need to resolve a bunch of dependencies $ ./prepare --with-slang --with-regex --with-sasl --with-sslĀ --enable-locales-fix --enable-pop --enable-imap --enable-smtp --enable-hcache --enable-hcache --enable-gpgme --enable-exact-address and make $ make ... $ ldd ./mutt linux-vdso.so.1 => (0x00007fffb8bfe000) libncursesw.so.5 => /lib64/libncursesw.so.5 (0x0000003d23800000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003d39200000) libssl.so.10 => /lib64/libssl.so.10 (0x00000031ce400000) libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00000031cd000000) libz.so.1 => /lib64/libz.so.1 (0x0000003d21c00000) libsasl2.so.3 => /lib64/libsasl2.so.3 (0x0000003d3d800000) libtokyocabinet.so.9 => /lib64/libtokyocabinet.so.9 (0x0000003d23400000) libgpgme.so.11 => /lib64/libgpgme.so.11 (0x0000003d26000000) libc.so.6 => /lib64/libc.so.6 (0x0000003d20c00000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003d21400000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00000031cdc00000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00000031cd400000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003d29c00000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00000031ce000000) libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003d23000000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003d33c00000) libbz2.so.1 => /lib64/libbz2.so.1 (0x0000003d2e400000) librt.so.1 => /lib64/librt.so.1 (0x0000003d22000000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003d21000000) libm.so.6 => /lib64/libm.so.6 (0x0000003d21800000) libassuan.so.0 => /lib64/libassuan.so.0 (0x0000003d4d200000) libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x0000003d38e00000) /lib64/ld-linux-x86-64.so.2 (0x0000003d20800000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00000031cd800000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x0000003d2a800000) libfreebl3.so => /lib64/libfreebl3.so (0x0000003d2e800000) libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003d22c00000) libpcre.so.1 => /lib64/libpcre.so.1 (0x0000003d22800000) Then copy mutt and pgpewrap into /opt (or another location). ===== - Configuration to use with GMAIL ===== ==== - ~/.muttrc ==== Edit and configure to your needs. The password to IMAP/SMTP must be stored in cleartext in **~/.mutt/gmail_password** . set realname = "Julien Vehent" set from = "Julien Vehent " set hostname = "mozilla.com" set use_from = yes set smtp_url = smtps://jvehent@mozilla.com@smtp.gmail.com:465 set imap_pass = `cat ~/.mutt/gmail_password` set smtp_pass = `cat ~/.mutt/gmail_password` set imap_user = "jvehent@mozilla.com" set ssl_force_tls = yes # set the header we always want to see set envelope_from = yes set reverse_name = yes ignore * unignore Date: From: To: Cc: Reply-To: Subject: Mail-Followup-To: hdr_order Date: From: To: Cc: Reply-To: Subject: Mail-Followup-To: set editor = "vim +13 -c 'set noautoindent' -c 'set wrap' -c 'set spell'" set edit_headers = no set include = yes set markers = no set fast_reply = yes set pager_index_lines = 10 set pager_context = 3 set meta_key = yes set menu_scroll set index_format = "%4C %Z %{%b %d %H:%M:%S} %-20.20L [%5c] %s" set alias_format = "%2n %t %-20.20a: %r" set attach_format = "%2n %D%I%u%t %T%f %d (%s) (%m/%M, %e, %C)" set compose_format = "Compose %h [Approx. msg size: %l, Atts: %a] %v %>-" set date_format = "!%a %e.%h'%y at %k:%M:%S %Z" set folder_format = "[%N] %d (%10s) %f" set message_format = "From: <%a>, Sub: %s" set pager_format = "%Z %C/%m %d (%F) %s (%c/%l) %|-" set pgp_entry_format= "%3n %t%f %4l/0x%k %-4a %2c %u %[%a %e.%h'%y at %k:%M:%S %Z]" set status_format = "_%r_ %h: %f, %l/%m (%P,%s) [ %?p?PP:%p ?%?t?Tag:%t ?%?d?DEL:%d ?]%?V?, %L/%M only = %V? < %?F?go:%F ?%?n?new:%n ?> %v" # # include color theme source ~/.mutt/colors-solarize # sidebar set sidebar_width = 32 set sidebar_visible = yes #set sidebar_shortpath = yes #set sidebar_sort = yes # alt-n, alt-p to select next, prev folder # alt-o to open selected folder bind index,pager \ep sidebar-prev bind index,pager \en sidebar-next bind index,pager \eo sidebar-open # some custom bindings bind index,pager \ej next-unread bind index backspace previous-page set folder = "imaps://jvehent@mozilla.com@imap.gmail.com" set spoolfile = "imaps://jvehent@mozilla.com@imap.gmail.com/INBOX" set mbox = +Inbox # Default mailbox. set spoolfile = "+INBOX" set record = "+INBOX" set postponed = "+Drafts" set nostrict_threads # Lets have some fuzzy threading. set sort = threads set sort_browser= reverse-date set sort_aux = last-date-received set beep_new set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" set postpone = ask-no # Ask about postponing. unset imap_passive set imap_check_subscribed set mail_check = 30 set imap_keepalive = 30 set timeout = 10 set net_inc = 5 set header_cache = "~/.mutt/imap-mozilla-cache" set message_cachedir= "~/.mutt/imap-mozilla-message" ## Safe deletion macros apply for all folders, EXCEPT the 'deleted' folder. ## "Y" is set to 'unsafe delete' (useful over slow imap links). ## Also note the slight difference between 'index' and 'pager' for thread ## delete. The "\ni" will cause mutt to briefly switch to pager mode and ## back to index, causing the thread to uncollapse. It's a trick but as ## a trick goes, it works really well (for me, at least) :) # source http://www.paganini.net/index.cgi/mutt/mutt01_safe_delete.html bind index y delete-message bind pager y delete-message folder-hook . 'macro index d =Trash\ny "Safe Delete"' folder-hook . 'macro pager d =Trash\ny "Safe Delete"' folder-hook . 'macro index \ed \ni=Trash\ny "Safe delete Thread"' folder-hook . 'macro pager \ed =Trash\ny "Safe delete Thread"' ## Really erase if we're using the 'deleted' mail folder. folder-hook 'deleted' 'macro index d "Delete Message"' folder-hook 'deleted' 'macro index \ed "Delete Thread"' folder-hook 'deleted' 'macro pager d "Delete Message"' folder-hook 'deleted' 'macro pager d "Delete Message"' # Move message to nightwatch folder folder-hook . 'macro index n =Nightwatch\ny "Move to Nightwatch"' folder-hook . 'macro pager n =Nightwatch\ny "Move to Nightwatch"' # Move message to nightwatch folder folder-hook . 'macro index o =OpSec\ny "Move to OpSec"' folder-hook . 'macro pager o =OpSec\ny "Move to OpSec"' # Move message to "everyone" folder folder-hook . 'macro index e =everyone\ny "Move to everyone"' folder-hook . 'macro pager e =everyone\ny "Move to everyone"' # Move message to infra folder folder-hook . 'macro index i =infra\ny "Move to infra"' folder-hook . 'macro pager i =infra\ny "Move to infra"' # Move message to mwos folder folder-hook . 'macro index w =mwos\ny "Move to mwos"' folder-hook . 'macro pager w =mwos\ny "Move to mwos"' # Move message to TLS folder folder-hook . 'macro index l =TLS\ny "Move to TLS"' folder-hook . 'macro pager l =TLS\ny "Move to TLS"' # Move message to infra/aws folder folder-hook . 'macro index a =infra/aws\ny "Move to infra aws"' folder-hook . 'macro pager a =infra/aws\ny "Move to infra aws"' # Move message to services folder folder-hook . 'macro index v =services\ny "Move to services"' # Auto view rules auto_view application/zip auto_view application/x-gzip auto_view application/x-gunzip auto_view application/pgp-signature auto_view application/pgp auto_view application/octet-stream auto_view application/x-zip-compressed auto_view application/x-arj-compressed auto_view application/x-tar-gz auto_view application/ms-tnef auto_view application/x-perl auto_view application/x-sh auto_view application/x-tcl auto_view application/x-delphi-source auto_view application/emacs-lisp auto_view application/msword auto_view text/x-patch #auto_view text/html auto_view text/x-vcard auto_view text/x-script.elisp auto_view text/x-lisp auto_view text/x-diff auto_view image/tiff # crypto set crypt_use_gpgme # specify the uid to use when encrypting/signing set pgp_sign_as = 0x3B763E8F set pgp_decode_command = "gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f" set pgp_verify_command = "gpg --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f" set pgp_decrypt_command = "gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f" set pgp_sign_command = "gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f" set pgp_clearsign_command = "gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f" set pgp_encrypt_only_command = "/opt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" set pgp_encrypt_sign_command = "/opt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" set pgp_import_command = "gpg --no-verbose --import %f" set pgp_export_command = "gpg --no-verbose --export --armor %r" set pgp_verify_key_command = "gpg --verbose --batch --fingerprint --check-sigs %r" set pgp_list_pubring_command = "gpg --no-verbose --batch --quiet --with-colons --list-keys %r" set pgp_list_secring_command = "gpg --no-verbose --batch --quiet --with-colons --list-secret-keys %r" set pgp_good_sign = "^gpg: Good signature from" set pgp_timeout = 3600 # automatically sign all outgoing messages set crypt_autosign = no # sign only replies to signed messages set crypt_replysign = yes # automatically encrypt outgoing messages set crypt_autoencrypt = no # encrypt only replies to signed messages set crypt_replyencrypt = no # encrypt and sign replies to encrypted messages set crypt_replysignencrypted = yes # automatically verify the sign of a message when opened set crypt_verify_sig = yes set pgp_auto_decode = yes # add a header to outbound mail with the location of my pgp key my_hdr X-PGP-Key: fp="E608 92BB 9BD8 9A69 F759 A1A0 A3D6 5217 3B76 3E8F"\; id="0x3B763E8F"\; get=\; ==== - Styles ==== ~/.mutt/colors-solarize # vim: filetype=muttrc # sidebar colors color sidebar_new yellow default color sidebar_flagged red default # # # make sure that you are using mutt linked against slang, not ncurses, or # suffer the consequences of weird color issues. use "mutt -v" to check this. # custom body highlights ----------------------------------------------- # highlight my name and other personally relevant strings #color body color136 color234 "(ethan|schoonover)" # custom index highlights ---------------------------------------------- # messages which mention my name in the body color index color136 color234 "~b \"(v|V)ehent\" !~N !~T !~F !~p !~P" color index white color230 "~b \"(v|V)ehent\" ~N !~T !~F !~p !~P" color index color136 color37 "~b \"(v|V)ehent\" ~T !~F !~p !~P" color index color136 red "~b \"(v|V)ehent\" ~F !~p !~P" ## messages which are in reference to my mails #color index J_magent color234 "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" !~N !~T !~F !~p !~P" #color index J_magent color230 "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~N !~T !~F !~p !~P" #color index J_magent color37 "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~T !~F !~p !~P" #color index J_magent color160 "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~F !~p !~P" # for background in 16 color terminal, valid background colors include: # base03, bg, black, any of the non brights # basic colors --------------------------------------------------------- color normal color241 color234 color error color160 color234 color tilde color235 color234 color message color37 color234 color markers color160 color254 color attachment color254 color234 color search color61 color234 #color status J_black J_status color status color241 color235 color indicator color234 color136 color tree color136 color234 # arrow in threads # basic monocolor screen mono bold bold mono underline underline mono indicator reverse mono error bold # index ---------------------------------------------------------------- #color index color160 color234 "~D(!~p|~p)" # deleted #color index color235 color234 ~F # flagged #color index color166 color234 ~= # duplicate messages #color index color240 color234 "~A!~N!~T!~p!~Q!~F!~D!~P" # the rest #color index J_base color234 "~A~N!~T!~p!~Q!~F!~D" # the rest, new color index color160 color234 "~A" # all messages color index color166 color234 "~E" # expired messages color index color33 color234 "~N" # new messages color index color33 color234 "~O" # old messages color index color61 color234 "~Q" # messages that have been replied to color index white color234 "~R" # read messages color index color33 color234 "~U" # unread messages color index color33 color234 "~U~$" # unread, unreferenced messages color index color241 color234 "~v" # messages part of a collapsed thread color index color241 color234 "~P" # messages from me color index color37 color234 "~p!~F" # messages to me color index color37 color234 "~N~p!~F" # new messages to me color index color37 color234 "~U~p!~F" # unread messages to me color index color240 color234 "~R~p!~F" # messages to me color index color160 color234 "~F" # flagged messages color index color160 color234 "~F~p" # flagged messages to me color index color160 color234 "~N~F" # new flagged messages color index color160 color234 "~N~F~p" # new flagged messages to me color index color160 color234 "~U~F~p" # new flagged messages to me color index color235 color160 "~D" # deleted messages color index color245 color234 "~v~(!~N)" # collapsed thread with no unread color index color136 color234 "~v~(~N)" # collapsed thread with some unread color index color64 color234 "~N~v~(~N)" # collapsed thread with unread parent # statusbg used to indicated flagged when foreground color shows other status # for collapsed thread color index color160 color235 "~v~(~F)!~N" # collapsed thread with flagged, no unread color index color136 color235 "~v~(~F~N)" # collapsed thread with some unread & flagged color index color64 color235 "~N~v~(~F~N)" # collapsed thread with unread parent & flagged color index color64 color235 "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged color index color37 color235 "~v~(~p)" # collapsed thread with unread parent, no unread inside, some to me directly color index color136 color160 "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial) #color index color136 color234 "~(~N)" # messages in threads with some unread #color index color64 color234 "~S" # superseded messages #color index color160 color234 "~T" # tagged messages #color index color166 color160 "~=" # duplicated messages # message headers ------------------------------------------------------ #color header color240 color234 "^" color hdrdefault color240 color234 color header color241 color234 "^(From)" color header color33 color234 "^(Subject)" # body ----------------------------------------------------------------- color quoted color33 color234 color quoted1 color37 color234 color quoted2 color136 color234 color quoted3 color160 color234 color quoted4 color166 color234 color signature color240 color234 color bold color235 color234 color underline color235 color234 color normal color244 color234 # color body color245 color234 "[;:][-o][)/(|]" # emoticons color body color245 color234 "[;:][)(|]" # emoticons color body color245 color234 "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\ |FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\ |IRL|RTFM|ROTFL|ROFL|YMMV)[*]?" color body color245 color234 "[ ][*][^*]*[*][ ]?" # more emoticon? color body color245 color234 "[ ]?[*][^*]*[*][ ]" # more emoticon? ## pgp color body color160 color234 "(BAD signature)" color body color37 color234 "(Good signature)" color body color234 color234 "^gpg: Good signature .*" color body color241 color234 "^gpg: " color body color241 color160 "^gpg: BAD signature from.*" mono body bold "^gpg: Good signature" mono body bold "^gpg: BAD signature from.*" # yes, an insance URL regex color body color160 color234 "([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<>\"]" # and a heavy handed email regex #color body J_magent color234 "((@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]),)*@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\.[0-9]?[0-9]?[0-9]\\]):)?[0-9a-z_.+%$-]+@(([0-9a-z-]+\\.)*[0-9a-z-]+\\.?|#[0-9]+|\\[[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\.[0-2]?[0-9]?[0-9]\\])" # Various smilies and the like #color body color230 color234 "<[Gg]>" # #color body color230 color234 "<[Bb][Gg]>" # #color body color136 color234 " [;:]-*[})>{(<|]" # :-) etc... # *bold* #color body color33 color234 "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)" #mono body bold "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)" # _underline_ #color body color33 color234 "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)" #mono body underline "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)" # /italic/ (Sometimes gets directory names) #color body color33 color234 "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)" #mono body underline "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)" # Border lines. #color body color33 color234 "( *[-+=#*~_]){6,}" #folder-hook . "color status J_black J_status " #folder-hook gmail/inbox "color status J_black color136 " #folder-hook gmail/important "color status J_black color136 "