From 0cf946573ac7ccacb3a8bbc9f9d4525efab711d3 Mon Sep 17 00:00:00 2001 From: Jessica Frazelle Date: Thu, 4 Dec 2014 23:09:20 -0800 Subject: [PATCH] mutt; --- mutt/.muttrc | 66 ++++++++++ mutt/Dockerfile | 30 +++++ mutt/entrypoint.sh | 43 ++++++ mutt/mutt-colors-solarized-dark-16.muttrc | 151 ++++++++++++++++++++++ 4 files changed, 290 insertions(+) create mode 100644 mutt/.muttrc create mode 100644 mutt/Dockerfile create mode 100755 mutt/entrypoint.sh create mode 100644 mutt/mutt-colors-solarized-dark-16.muttrc diff --git a/mutt/.muttrc b/mutt/.muttrc new file mode 100644 index 0000000..c275912 --- /dev/null +++ b/mutt/.muttrc @@ -0,0 +1,66 @@ +# A basic .muttrc for use with Gmail + +# Change the following six lines to match your Gmail account details +set imap_user = "%GMAIL_LOGIN%" +set imap_pass = "%GMAIL_PASS%" # leave blank for prompt +set smtp_url = "smtps://$imap_user@smtp.gmail.com:465/" +set smtp_pass = "%GMAIL_PASS%" # will prompt if blank +set from = "%GMAIL_FROM%" +set realname = "%GMAIL_NAME%" + +# Change the following line to a different editor you prefer (and update the Dockerfile accordingly, of course). +set editor = "vim" + +# I like seeing some headers. :) +ignore * +unignore date subject x- user-agent posted-to content-type +unignore to cc bcc reply-to from +set edit_headers = yes +my_hdr X-Docker-Image: jess/mutt + +# TODO figure out how to use the sidebar more effectively :) +set sidebar_visible = no + +# Tianon keybindings and settings, because he's special. +bind pager previous-line +bind pager next-line +set resolve = no # uh, don't randomly take me to other messages when I do things + +# Basic config, you can leave this as is +set folder = "imaps://imap.gmail.com:993" +set spoolfile = "+INBOX" +set imap_check_subscribed +set hostname = gmail.com +set mail_check = 120 +set timeout = 300 +set imap_keepalive = 300 +set postponed = "+[Gmail]/Drafts" +set record = "" # gmail automatically handles saving sent emails +set header_cache=~/.mutt/cache/headers +set message_cachedir=~/.mutt/cache/bodies +set certificate_file=~/.mutt/certificates +set move = no +set include +set sort = 'threads' +set sort_aux = 'reverse-last-date-received' +set auto_tag = yes +ignore "Authentication-Results:" +ignore "DomainKey-Signature:" +ignore "DKIM-Signature:" +hdr_order Date From To Cc +alternative_order text/plain text/html * +auto_view text/html +bind editor complete-query +bind editor ^T complete +bind editor noop + +# Gmail-style keyboard shortcuts +macro index,pager y "unset trash\n " "Gmail archive message" +macro index,pager d "set trash=\"imaps://imap.googlemail.com/[GMail]/Bin\"\n " "Gmail delete message" +macro index,pager gi "=INBOX" "Go to inbox" +macro index,pager ga "=[Gmail]/All Mail" "Go to all mail" +macro index,pager gs "=[Gmail]/Starred" "Go to starred messages" +macro index,pager gd "=[Gmail]/Drafts" "Go to drafts" + +# colors +source /home/user/mutt-colors-solarized-dark-16.muttrc diff --git a/mutt/Dockerfile b/mutt/Dockerfile new file mode 100644 index 0000000..fd3df48 --- /dev/null +++ b/mutt/Dockerfile @@ -0,0 +1,30 @@ +FROM debian:jessie + +RUN groupadd -g 1000 user \ + && useradd --create-home -d /home/user -g user -u 1000 user + +RUN apt-get update && apt-get install -y \ + ca-certificates \ + git \ + lynx \ + mutt-patched \ + vim-nox \ + --no-install-recommends +ENV BROWSER lynx +ENV TERM xterm-256color + +ENV HOME /home/user +USER user + +RUN mkdir -p $HOME/.mutt/cache/headers $HOME/.mutt/cache/bodies \ + && touch $HOME/.mutt/certificates \ + && git clone https://github.com/jfrazelle/.vim.git $HOME/.vim \ + && git clone https://github.com/altercation/vim-colors-solarized $HOME/.vim/bundle/vim-colors-solarized \ + && cp $HOME/.vim/vimrc.txt $HOME/.vimrc + +ENV LANG C.UTF-8 + +COPY . $HOME/ + +ENTRYPOINT ["/home/user/entrypoint.sh"] +CMD ["mutt-patched"] diff --git a/mutt/entrypoint.sh b/mutt/entrypoint.sh new file mode 100755 index 0000000..cb7aee8 --- /dev/null +++ b/mutt/entrypoint.sh @@ -0,0 +1,43 @@ +#!/bin/bash +set -e + +if [[ ! "$GMAIL" ]]; then + echo >&2 'error: missing GMAIL environment variable' + echo >&2 ' try running again with -e GMAIL=your-email@gmail.com' + echo >&2 ' optionally, you can also specify -e GMAIL_FROM=email@your-domain.com' + echo >&2 ' and also -e GMAIL_NAME="Your Name"' + echo >&2 ' if not specified, both default to the value of GMAIL' + exit 1 +fi + +if [[ ! "$GMAIL_FROM" ]]; then + GMAIL_FROM="$GMAIL" +fi +if [[ ! "$GMAIL_NAME" ]]; then + GMAIL_NAME="$GMAIL_FROM" +fi + +sed -i "s/%GMAIL_LOGIN%/$GMAIL/g" "$HOME/.muttrc" +sed -i "s/%GMAIL_FROM%/$GMAIL_FROM/g" "$HOME/.muttrc" +sed -i "s/%GMAIL_NAME%/$GMAIL_NAME/g" "$HOME/.muttrc" +sed -i "s/%GMAIL_PASS%/$GMAIL_PASS/g" "$HOME/.muttrc" + +if [[ -d "$HOME/.gnupg" ]]; then + { + echo + echo 'source /usr/share/doc/mutt/examples/gpg.rc' + echo 'set pgp_use_gpg_agent = yes' + if [[ "$GPG_ID" ]]; then + echo "set pgp_sign_as = $GPG_ID" + fi + echo 'set crypt_replysign = yes' + echo 'set crypt_replysignencrypted = yes' + echo 'set crypt_verify_sig = yes' + } >> "$HOME/.muttrc" +fi + +if [[ -e "$HOME/.muttrc.local" ]]; then + echo "source $HOME/.muttrc.local" >> "$HOME/.muttrc" +fi + +exec "$@" diff --git a/mutt/mutt-colors-solarized-dark-16.muttrc b/mutt/mutt-colors-solarized-dark-16.muttrc new file mode 100644 index 0000000..e9d6def --- /dev/null +++ b/mutt/mutt-colors-solarized-dark-16.muttrc @@ -0,0 +1,151 @@ +# vim: filetype=muttrc + +# +# +# 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 yellow default "(ethan|schoonover)" +# custom index highlights ---------------------------------------------- +# messages which mention my name in the body +#color index yellow default "~b \"phil(_g|\!| gregory| gold)|pgregory\" !~N !~T !~F !~p !~P" +#color index J_cream brightwhite "~b \"phil(_g|\!| gregory| gold)|pgregory\" ~N !~T !~F !~p !~P" +#color index yellow cyan "~b \"phil(_g|\!| gregory| gold)|pgregory\" ~T !~F !~p !~P" +#color index yellow J_magent "~b \"phil(_g|\!| gregory| gold)|pgregory\" ~F !~p !~P" +## messages which are in reference to my mails +#color index J_magent default "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" !~N !~T !~F !~p !~P" +#color index J_magent brightwhite "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~N !~T !~F !~p !~P" +#color index J_magent cyan "~x \"(mithrandir|aragorn)\\.aperiodic\\.net|thorin\\.hillmgt\\.com\" ~T !~F !~p !~P" +#color index J_magent red "~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 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 J_black J_status +color status brightyellow black +color indicator brightblack yellow +color tree yellow default # arrow in threads + +# basic monocolor screen +mono bold bold +mono underline underline +mono indicator reverse +mono error bold + +# index ---------------------------------------------------------------- + +#color index red default "~D(!~p|~p)" # deleted +#color index black default ~F # flagged +#color index brightred default ~= # duplicate messages +#color index brightgreen default "~A!~N!~T!~p!~Q!~F!~D!~P" # the rest +#color index J_base default "~A~N!~T!~p!~Q!~F!~D" # the rest, new +color index red default "~A" # all messages +color index brightred default "~E" # expired messages +color index blue default "~N" # new messages +color index blue default "~O" # old messages +color index brightmagenta default "~Q" # messages that have been replied to +color index brightgreen default "~R" # read messages +color index blue default "~U" # unread messages +color index blue default "~U~$" # unread, unreferenced messages +color index brightyellow default "~v" # messages part of a collapsed thread +color index brightyellow default "~P" # messages from me +color index cyan default "~p!~F" # messages to me +color index cyan default "~N~p!~F" # new messages to me +color index cyan default "~U~p!~F" # unread messages to me +color index brightgreen default "~R~p!~F" # messages to me +color index red default "~F" # flagged messages +color index red default "~F~p" # flagged messages to me +color index red default "~N~F" # new flagged messages +color index red default "~N~F~p" # new flagged messages to me +color index red default "~U~F~p" # new flagged messages to me +color index black red "~D" # deleted messages +color index brightcyan default "~v~(!~N)" # collapsed thread with no unread +color index yellow default "~v~(~N)" # collapsed thread with some unread +color index green default "~N~v~(~N)" # collapsed thread with unread parent +# statusbg used to indicated flagged when foreground color shows other status +# for collapsed thread +color index red black "~v~(~F)!~N" # collapsed thread with flagged, no unread +color index yellow black "~v~(~F~N)" # collapsed thread with some unread & flagged +color index green black "~N~v~(~F~N)" # collapsed thread with unread parent & flagged +color index green black "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged +color index cyan black "~v~(~p)" # collapsed thread with unread parent, no unread inside, some to me directly +color index yellow red "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial) +#color index yellow default "~(~N)" # messages in threads with some unread +#color index green default "~S" # superseded messages +#color index red default "~T" # tagged messages +#color index brightred red "~=" # duplicated messages + +# message headers ------------------------------------------------------ + +#color header brightgreen default "^" +color hdrdefault brightgreen default +color header brightyellow default "^(From)" +color header blue default "^(Subject)" + +# body ----------------------------------------------------------------- + +color quoted blue default +color quoted1 cyan default +color quoted2 yellow default +color quoted3 red default +color quoted4 brightred default + +color signature brightgreen default +color bold black default +color underline black default +color normal default default +# +color body brightcyan default "[;:][-o][)/(|]" # emoticons +color body brightcyan default "[;:][)(|]" # emoticons +color body brightcyan default "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\ + |FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\ + |IRL|RTFM|ROTFL|ROFL|YMMV)[*]?" +color body brightcyan default "[ ][*][^*]*[*][ ]?" # more emoticon? +color body brightcyan default "[ ]?[*][^*]*[*][ ]" # more emoticon? + +## pgp + +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.*" + +# yes, an insance URL regex +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<>\"]" +# and a heavy handed email regex +#color body J_magent default "((@(([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 brightwhite default "<[Gg]>" # +#color body brightwhite default "<[Bb][Gg]>" # +#color body yellow default " [;:]-*[})>{(<|]" # :-) etc... +# *bold* +#color body blue default "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)" +#mono body bold "(^|[[:space:][:punct:]])\\*[^*]+\\*([[:space:][:punct:]]|$)" +# _underline_ +#color body blue default "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)" +#mono body underline "(^|[[:space:][:punct:]])_[^_]+_([[:space:][:punct:]]|$)" +# /italic/ (Sometimes gets directory names) +#color body blue default "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)" +#mono body underline "(^|[[:space:][:punct:]])/[^/]+/([[:space:][:punct:]]|$)" + +# Border lines. +#color body blue default "( *[-+=#*~_]){6,}" + +#folder-hook . "color status J_black J_status " +#folder-hook gmail/inbox "color status J_black yellow " +#folder-hook gmail/important "color status J_black yellow " +