diff --git a/020_mutt-khard.sh b/020_mutt-khard.sh index 217d895..b0e6ea7 100755 --- a/020_mutt-khard.sh +++ b/020_mutt-khard.sh @@ -11,7 +11,7 @@ apt-get install -y khard # or with: # 'cat template.yaml | khard new -a address_book' -NEOMUTTCONF=~/.config/mutt +NEOMUTTCONF=/etc/skel/.config/mutt cat >> ${NEOMUTTCONF}/muttrc <<'EOF' ## khard integration @@ -32,12 +32,12 @@ macro index,pager A \ EOF -mkdir -p ~/.contacts/family/ -mkdir -p ~/.contacts/friends/ -mkdir -p ~/.contacts/business/ +mkdir -p /etc/skel/.contacts/family/ +mkdir -p /etc/skel/.contacts/friends/ +mkdir -/etc/skel/.contacts/business/ # /usr/share/doc/khard/examples/khard/khard.conf.example -~/.config/khard/khard.conf <<'EOF' +/etc/skel/.config/khard/khard.conf <<'EOF' [addressbooks] [[family]] path = ~/.contacts/family/ diff --git a/020_mutt-notmuch-afew.sh b/020_mutt-notmuch-afew.sh index 1a8a003..5beace5 100755 --- a/020_mutt-notmuch-afew.sh +++ b/020_mutt-notmuch-afew.sh @@ -1,13 +1,17 @@ +#!/usr/bin/env bash + +## an initial tagging script for notmuch mail + #FIXME: NOT TESTED YET needs notmuch-mutt installed first #FIXME: add afew tagging: https://readthedocs.org/projects/afew/downloads/pdf/latest/ apt-get install -y afew # provides /usr/bin/afew -mkdir -p ~/.config/afew/ +mkdir -p /etc/skel/.config/afew/ # Put a list of filters into ~/.config/afew/config : -cat > ~/.config/afew/config <<'EOF' +cat > /etc/skel/.config/afew/config <<'EOF' # This is the default filter chain [SpamFilter] [KillThreadsFilter] @@ -26,7 +30,7 @@ sed -i '/\[new\]/{n;s/.*/tags=new\;/}' .notmuch-config # After running notmuch new, all new messages will be marked new. You can then do various tag post-processing by just acting on messages with that tag. -MAILDIR="$HOME/.local/share/mail" # set by mutt-wizard setup +MAILDIR="/etc/skel/.local/share/mail" # set by mutt-wizard setup # And create a post-new hook for notmuch. mkdir -p ${MAILDIR}/.notmuch/hooks @@ -70,7 +74,7 @@ EOF #--------------------------------------------------------------------- -cat > ~/.config/afew/afew.config-example <<'EOF' +cat > /etc/skel/.config/afew/afew.config-example <<'EOF' # global configuration [global] diff --git a/020_mutt-notmuch.sh b/020_mutt-notmuch.sh index 361c34e..f709042 100755 --- a/020_mutt-notmuch.sh +++ b/020_mutt-notmuch.sh @@ -8,8 +8,8 @@ apt-get install -y notmuch-mutt -NEOMUTTCONF="$HOME/config/mutt/" -MAILDIR="$HOME/.local/share/mail" # set by mutt-wizard setup +NEOMUTTCONF="/etc/skel/.config/mutt/" +MAILDIR='/etc/skel/.local/share/mail' # set by mutt-wizard setup cat >> ${NEOMUTTCONF}/muttrc <<'EOF' # notmuch diff --git a/020_mutt-wizard.sh b/020_mutt-wizard.sh index 6275ede..93aa781 100755 --- a/020_mutt-wizard.sh +++ b/020_mutt-wizard.sh @@ -1,4 +1,28 @@ -#!/usr/bin/bash +#!/usr/bin/env bash +set -e +# Some useful hints +# ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ +# • The critical mutt/neomutt files are in ’~/.config/mutt/’. +# • Put whatever global settings you want in ’muttrc’. mutt-wizard will add some +# lines to this file, which you shouldn't remove unless you know what you’re +# doing, but you can move them up/down over your personal config lines, if you +# need to. If you get binding conflict errors in mutt you might need to do this. +# • Each of the accounts that mutt-wizard generates will have custom settings set +# in a separate file in ’accounts/’. You can edit these freely if you want to +# tinker with settings specific to an account. +# • In ’/usr/share/mutt-wizard’ are several global config files, including mutt- +# wizard’s default settings. You can overwride this in your muttrc if you wish. +# • For Gmail accounts, remember also to enable third-party ("less secure") appli- +# cations before attempting installation. +# • Protonmail accounts will require you to set up "Protonmail Bridge" to access +# PM's IMAP and SMTP servers. Configure that before running mutt-wizard. +# • If you have a university email, or enterprise-hosted email for work, there +# might be other hurdles or two-factor authentication you have to jump through. +# Some, for example, will want you to create a separate IMAP password, etc. +# • If you use an email server whose mailboxes are not in English, mutt-wizard +# might not be able to guess which is which, so you may have to manually set +# your Inbox, Sent, Trash, Drafts, etc. in your mutt config file. Do this after +# running the wizard in accounts/NAME.muttrc. # isync @@ -11,63 +35,42 @@ # cronie (optional) – auto-sync mails - alt.: fcron # dunst (optional) – enable desktop notifications about new mail # fcron (optional) – auto-sync mails - alt.: cronie -# imagemagick (optional) – view images inside of the neomutt TUI # libnotify (optional) – enable desktop notifications about new mail # pam-gnupg (optional) – automatically unlock gpg keys at session login # urlview (optional) – list URLs found in mails to open them in a browser -# w3m (optional) – view HTML email and images inside of the neomutt TUI # elinks (optional) – view HTML email inside of the neomutt TUI # links (optional) – view HTML email inside of the neomutt TUI # lynx (optional) – view HTML email inside of the neomutt TUI +# w3m (optional) – view HTML email inside of the neomutt TUI +# w3m-img (optional) – view images inside of the neomutt TUI +# imagemagick (optional) – view images inside of the neomutt TUI -set -x +#set -x apt-get install -y git neomutt urlscan w3m w3m-img ripmime isync msmtp vdirsyncer pass mailsync libnotify-bin lynx urlview -echo 'alias mutt="neomutt "' >> ~/.zsh_aliases.d/002_neomutt.zsh - -BASE_USER=LukeSmithxyz -BASE_REPO=mutt-wizard -PROJECT=${BASE_USER}/${BASE_REPO} -PRERELEASE=false -# RELEASE=$(curl "https://api.github.com/repos/${PROJECT}/releases?per_page=5" | jq -r '.[0] | select( .prerelease = false ) |.tag_name') -# VERSION=$(echo "${RELEASE}" | cut -c 2- | cut -f1 -d"-") -VERSION=$( date +%Y-%m-%d_ )git - -BUILD_DIR=/var/tmp/build_mutt-wizard -mkdir -p ${BUILD_DIR} - -# make a containing directory -mkdir -p /var/tmp/${BASE_REPO}-"${RELEASE}" -cd /var/tmp/${BASE_REPO}-"${RELEASE}" || exit - -cat > ${BUILD_DIR}/description-pak << EOF -A system for automatically configuring mutt and isync with a simple interface and safe passwords -EOF - -## Files and directories to be created: -# $HOME/usr/local/share/mutt-wizard/mutt-wizard.muttrc -# $HOME/usr/local/share/mutt-wizard/mutt-wizard-colors.muttrc -# $HOME/.config/mutt/muttrc -# $HOME/.config/mutt/colorschemes/colors-gruvbox-shuber-extended.muttrc -# $HOME/.config/mutt/colorschemes/colors-gruvbox-shuber.muttrc -# $HOME/.config/mutt/accounts/1-example_profile.muttrc - -cat > ${BUILD_DIR}/checkinstall_it.sh << 'EOF' - -echo "ENTERING CHECKINSTALL" +echo 'alias mutt="neomutt "' >> $HOME/.zsh_aliases.d/002_neomutt.zsh +# Shared variables for the heredocs BASE_URL='https://api.github.com/repos' -BASE_USER='LukeSmithxyz' -BASE_REPO='mutt-wizard' -LICENSE_PAGE_URL="${BASE_URL}/${BASE_USER}/${BASE_REPO}"/license -RELEASES_URL="${BASE_URL}/${BASE_USER}/${BASE_REPO}"/releases +USER='LukeSmithxyz' +PROJECT='mutt-wizard' +LICENSE_PAGE_URL="https://raw.githubusercontent.com/${USER}/${PROJECT}/master/LICENSE" +#LICENSE=$(curl -s "${LICENSE_PAGE_URL}") +LICENSE=GPL +RELEASES_URL="${BASE_URL}/${USER}/${PROJECT}"/releases +PRERELEASE=false +## No releases so no api page other than license so use git repo # CONTENT=$(curl -s ${RELEASES_URL}/latest) # LATEST_URL=$(echo "${CONTENT}" | jq --raw-output '.assets[] | select(.browser_download_url | test("Linux-x86_64")) | .browser_download_url') - +LATEST_URL=https://github.com/${USER}/${PROJECT} echo "LATEST_URL: " "${LATEST_URL}" +#WORKDIR=$(mktemp -d -p $HOME/tmptmp -t mutt-wizard_build-XXXXXXX) || exit 1 +#trap "rm -rf '${WORKDIR}'" EXIT +WORKDIR="/var/tmp/mutt-wizard-workdir" + # RELEASE=$(echo "${CONTENT}" | jq --raw-output '.tag_name') # LICENSE_URL=$(curl "${LICENSE_PAGE_URL}" | jq --raw-output '.download_url') @@ -77,55 +80,265 @@ VERSION=$( date +%Y-%m-%d_ )git VERSION=1.0 RELEASE=git -# make a new temporary directory for this use -BASE_TMP_DIR=~/tmptmp/checkinstall_tmp -mkdir -p ${BASE_TMP_DIR} - -# do your work -checkinstall -y --fstrans \ - --pkgname=mutt-wizard \ - --pkgversion=${VERSION}\ - --pkgrelease=${RELEASE} \ - --pkgarch=amd64 \ - --pkggroup=admin \ - --pkglicense=LICENSE \ - --pkgsource=${LATEST_URL} \ - --maintainer=cyteen@ring-zero.co.uk \ - --requires=neomutt,isync,msmtp,pass \ - -D \ - bash ./install.sh -EOF - -cat > ./install.sh << 'FOE' - -BASE_URL='https://api.github.com/repos' -BASE_USER='LukeSmithxyz' -BASE_REPO='mutt-wizard' -# RELEASES_URL="${BASE_URL}/${BASE_USER}/${BASE_REPO}"/releases -# CONTENT=$(curl -s ${RELEASES_URL}/latest) -# LATEST_URL=$(echo "${CONTENT}" | jq --raw-output '.assets[] | select(.browser_download_url | test("Linux-x86_64")) | .browser_download_url') -LATEST_URL=https://github.com/LukeSmithxyz/mutt-wizard - -## Download and copy the latest version to /usr/local/bin and make executable -git clone ${LATEST_URL} /var/tmp/mutt-wizard -cd /var/tmp/mutt-wizard -make install - ## Create directories and configuration files # '$ mw add' and follow the prompts. +BUILD_DIR=/var/tmp/build_mutt-wizard MUTTWIZARDCONF="/usr/local/share/mutt-wizard" -MUTTDIR="$HOME/.config/mutt" +#MUTTDIR="$HOME/.config/mutt" +MUTTDIR="${BUILD_DIR}/skel/.config/mutt" +#MUTTDOCS="/usr/share/doc/mutt-wizard" +MUTTDOCS="${BUILD_DIR}/doc-pak" +EXAMPLES="${MUTTDOCS}/examples" ACCDIR="${MUTTDIR}/accounts" COLORSCHEMES="${MUTTDIR}/colorschemes" FONTS="${MUTTDIR}/fonts" +# email settings +PROFILE_NAME=example_profile +EMAIL=foobar@foo.bar +REAL_NAME="foo bar" + +## Checkinstall variables - see defaults in /etc/checkinstallrc +DOC_DIR=/usr/share/doc + +# make a new temporary directory for this use to avoid permission issues. +BASE_TMP_DIR=~/tmptmp/checkinstall_tmp +#------------------------------------------------------------------------------- + +wget -c -P ${MUTTDOCS} ${LICENSE_PAGE_URL} + +mkdir -p ${BUILD_DIR} + +# make a containing directory +mkdir -p /var/tmp/${PROJECT}-"${RELEASE}" +cd /var/tmp/${PROJECT}-"${RELEASE}" || exit + +#-------------------------------------------------------------------------------------- +## Create and populate the install scripts and documentation for checkinstall +cat > ${BUILD_DIR}/description-pak << EOF +mutt-wizard + +A system for automatically configuring mutt and isync with a simple interface and safe passwords +EOF + +# | preinstall-pak | Run BEFORE the package is INSTALLED | +cat > ${BUILD_DIR}/preinstall-pak << EOF +#!/usr/bin/env bash +EOF + +# | postinstall-pak | Run AFTER the package is INSTALLED | +cat > ${BUILD_DIR}/postinstall-pak << EOF +#!/usr/bin/env bash +set -e +set -x +# For every user in /home/ ... +for HOME_U in /home/*?; do + +# Obtain the username +USER=$( basename ${HOME_U} ) + +# In case the user is active (exists in /etc/shadow) ... +if [ $( grep -c "${USER}:.*:.*:.*:.*:.*:::" /etc/shadow ) == 1 ] \ +&& [ $( grep -c "${USER}:.*:.*:.*:.*:.*:/bin/.*sh" /etc/passwd ) == 1 ] \ +&& [ -d ${HOME_U}/.config ] \ +&& [ -d ${HOME_U} ]; then + +# Copies files a user has deleted that you want to put back again but does not update files that already exist. +getent passwd | + while IFS=: read username x uid gid gecos home shell + do + [[ "$username" == root || ! -d "$home" ]] && continue + tar -cf - -C /etc/skel/.config/mutt . | sudo -Hu "$username" tar --skip-old-files -xf - + done +fi +done +EOF + +# | preremove-pak | Run BEFORE the package is REMOVED | +cat > ${BUILD_DIR}/preremove-pak << EOF +#!/usr/bin/env bash +EOF + +# | postremove-pak | Run AFTER the package is REMOVED +cat > ${BUILD_DIR}/postremove-pak << EOF +#!/usr/bin/env bash +EOF + +## Make the doc-pak directory for README, INSTALL, COPYING, Changelog, TODO, CREDITS +mkdir -p ${BUILD_DIR}/doc-pak +#cp README INSTALL COPYING Changelog TODO CREDITS doc-pak + + +cat > ${BUILD_DIR}/doc-pak/README << 'EOF' +Some useful hints +¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ +• The critical mutt/neomutt files are in ’~/.config/mutt/’. +• Put whatever global settings you want in ’muttrc’. mutt-wizard will add some + lines to this file, which you shouldn't remove unless you know what you’re + doing, but you can move them up/down over your personal config lines, if you + need to. If you get binding conflict errors in mutt you might need to do this. +• Each of the accounts that mutt-wizard generates will have custom settings set + in a separate file in ’accounts/’. You can edit these freely if you want to + tinker with settings specific to an account. +• In ’/usr/share/mutt-wizard’ are several global config files, including mutt- + wizard’s default settings. You can overwride this in your muttrc if you wish. +• For Gmail accounts, remember also to enable third-party ("less secure") appli- + cations before attempting installation. +• Protonmail accounts will require you to set up "Protonmail Bridge" to access + PM's IMAP and SMTP servers. Configure that before running mutt-wizard. +• If you have a university email, or enterprise-hosted email for work, there + might be other hurdles or two-factor authentication you have to jump through. + Some, for example, will want you to create a separate IMAP password, etc. +• If you use an email server whose mailboxes are not in English, mutt-wizard + might not be able to guess which is which, so you may have to manually set + your Inbox, Sent, Trash, Drafts, etc. in your mutt config file. Do this after + running the wizard in accounts/NAME.muttrc. + +Help the project +¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ +• Try mutt-wizard out on weird machines and weird email addresses and report any + errors. +• Open a PR to add new server information into ’domains.csv’, so their users can + more easily use mutt-wizard. +• If nothing else, donate: https://paypal.me/LukeMSmith ! + +See Luke’s website: https://lukesmith.xyz/ - email him at: lukelukesmith.xyz + + --> mutt-wizard is free/libre software, licensed under the GPLv3 <-- +EOF + + +#-------------------------------------------------------------------------------------- + +## Files and directories to be created: +# /usr/local/share/mutt-wizard/mutt-wizard.muttrc +# /usr/local/share/mutt-wizard/mutt-wizard-colors.muttrc +# $HOME/.config/mutt/muttrc +# $HOME/.config/mutt/colorschemes/colors-gruvbox-shuber-extended.muttrc +# $HOME/.config/mutt/colorschemes/colors-gruvbox-shuber.muttrc +# $HOME/.config/mutt/accounts/1-example_profile.muttrc + +#-------------------------------------------------------------------------------------- +#--------------------------------------------------------------------------------------- + +cat > ${BUILD_DIR}/checkinstall_it.sh << FOE +set -e +#set -x + +echo "******************************" +echo "ENTERING CHECKINSTALL" +echo "******************************" + +echo "Making MUTTDIR: ${MUTTDIR} from ${PWD}" + +echo "Making MUTTDIR ${MUTTDIR}" +mkdir -p ${MUTTDIR} + +echo "Making COLORSCHEMES ${COLORSCHEMES}" mkdir -p ${COLORSCHEMES} -mkdir -p ${fonts} -mkdir -p ${ACCDIR} -git clone https://github.com/sheoak/neomutt-powerline-nerdfonts.git ${MUTTDIR}/powerline +#echo "Making ACCDIR ${ACCDIR}" +#mkdir -p ${ACCDIR} +echo "Making MUTTDOCS ${MUTTDOCS}" +mkdir -p ${MUTTDOCS} + +echo "Making FONTS ${FONTS}" +mkdir -p ${FONTS} + +mkdir -p ${EXAMPLES} +mkdir -p ${EXAMPLES}/colorschemes +mkdir -p ${EXAMPLES}/accounts +mkdir -p ${EXAMPLES}/fonts + + +## git clone https://github.com/sheoak/neomutt-powerline-nerdfonts.git + +cat <> ${EXAMPLES}/colorschemes/gruvbox-powerline.neomuttrc +# cancel theme colors +color index color223 color234 ~Q +color index color223 color234 ~P +color index color223 color234 ~T +color index color223 color234 ~O +color index color223 color234 ~F +color index color223 color234 ~N + +# add some nice custom coloring to the message list +# thanks to new neomutt features +# http://www.mutt.org/doc/manual/#patterns +# https://neomutt.org/feature/index-color +color index_subject color109 color234 "~P !~T !~D" +color index_author color109 color234 "~P !~T !~D" +color index_subject color243 color234 "~Q !~T !~D" +color index_author color243 color234 "~Q !~T !~D" +color index_subject brightcolor142 color234 "~N !~T !~D" +color index_author brightcolor142 color234 "~N !~T !~D" +color index_subject color142 color234 "~O !~T !~D" +color index_author color142 color234 "~O !~T !~D" +color index_subject color214 color234 "~F !~T !~D" +color index_author color214 color234 "~F !~T !~D" +color index_subject brightcolor214 color234 "~F ~N !~T !~D" +color index_author brightcolor214 color234 "~F ~N !~T !~D" +color index_subject color167 color234 "~= !~T !~D" +color index_author color167 color234 "~= !~T !~D" +color index_subject brightcolor109 color234 "~P ~N !~T !~D" +color index_author brightcolor109 color234 "~P ~N !~T !~D" +color index color234 color223 "~T" +color index color229 color124 "~D" + +EOF + + +cat <> ${EXAMPLES}/fonts/powerline.neomuttrc +# ---------------------------------------------------------------------------- +# Powerline / nerdfont +# This is a bit "hackish" due to neomutt limitations +# +# Author: Sheoak +# ---------------------------------------------------------------------------- +set index_format=" %zs %zc %zt %{!%d %b} . %-28.28L %?M?(%1M)& ? %?X?&·? %s" +set pager_format=" %n %zc  %T %s%*  %{!%d %b · %H:%M} %?X?  %X ? %P  " +set status_format = " %f%?r? %r?   %m %?n?  %n ?  %?d?  %d ?%?t?  %t ?%?F?  %F? %> %?p?  %p ?" +set vfolder_format = " %N %?n?%3n& ? %8m  · %f" +set attach_format = "%u%D  %T%-75.75d %?T?%& ? %5s · %m/%M" + +# no addressed to me, to me, group, cc, sent by me, mailing list +set to_chars="" +# unchanged mailbox, changed, read only, attach mode +set status_chars = " " +ifdef crypt_chars set crypt_chars = " " +set flag_chars = " " + +set hidden_tags = "unread,draft,flagged,passed,replied,attachment,signed,encrypted" +tag-transforms "replied" "↻ " \ + "encrytpted" "" \ + "signed" "" \ + "attachment" "" \ + +# The formats must start with 'G' and the entire sequence is case sensitive. +tag-formats "replied" "GR" \ + "encrypted" "GE" \ + "signed" "GS" \ + "attachment" "GA" \ + +color status white black +# powerline status bar hack +color status green black '' +color status yellow black '' +color status red black '' +color status brightblack blue '(.*)' 1 +color status blue black '.*()' 1 +color status black blue '\s* [0-9]+\s*' +color status blue black '().*$' 1 +color status yellow black '()\s*\s*[0-9]+\s*' 1 +color status black yellow '\s*\s*[0-9]+\s*' +color status blue yellow '() ([0-9]+%|all|end) \s*' 1 +color status black blue ' ([0-9]+%|all|end) \s*' +color status yellow black '()\s*' 1 +color status default black '' + +EOF wget -c -P ${COLORSCHEMES} https://raw.githubusercontent.com/neomutt/neomutt/master/contrib/colorschemes/neonwolf-256.neomuttrc wget -c -P ${COLORSCHEMES} https://raw.githubusercontent.com/neomutt/neomutt/master/contrib/colorschemes/zenburn.neomuttrc @@ -135,7 +348,10 @@ wget -c -P ${COLORSCHEMES} https://raw.githubusercontent.com/neomutt/neomutt/mas #wget -c -P ${COLORSCHEMES} https://git.sthu.org/?p=shutils.git;a=blob_plain;f=dotfiles/mutt/colors-gruvbox-shuber.muttrc;hb=master #wget -c -P ${COLORSCHEMES} https://git.sthu.org/?p=shutils.git;a=blob_plain;f=dotfiles/mutt/colors-gruvbox-shuber-extended.muttrc;hb=master -cat >${COLORSCHEMES}/colors-gruvbox-shuber-extended.muttrc <${COLORSCHEMES}/colors-gruvbox-shuber-extended.muttrc <> ${EXAMPLES}/colorschemes/colors-gruvbox-shuber-extended.muttrc color compose header color223 color234 color compose security_encrypt color175 color234 color compose security_sign color109 color234 @@ -143,7 +359,8 @@ color compose security_both color142 color234 color compose security_none color208 color234 EOF -cat >${COLORSCHEMES}/colors-gruvbox-shuber.muttrc <${COLORSCHEMES}/colors-gruvbox-shuber.muttrc <> ${EXAMPLES}/colorschemes/colors-gruvbox-shuber.muttrc # gruvbox dark (contrast dark): # bg0 = 234 @@ -227,239 +444,45 @@ color body color214 color234 "^gpg: signature verification suppressed" color body color214 color234 "^gpg: invalid node with packet of type" EOF -# split the existing mutt-wizard.muttrc into two to separate the colours from everything else so other colourschemes can be used. -cat > ${MUTTWIZARDCONF}/mutt-wizard.muttrc <<'EOF' -# vim: filetype=neomuttrc -# This file contains all of mutt-wizard's default settings. -# mutt-wizard will have this file sourced from your muttrc. -# In the interest of seamless updating, do not edit this file. -# If you want to override any settings, set those in your muttrc. -set mailcap_path = /usr/local/share/mutt-wizard/mailcap -set date_format="%y/%m/%d %I:%M%p" -set index_format="%2C %Z %?X?A& ? %D %-15.15F %s (%-4.4c)" -set sort = 'reverse-date' -set smtp_authenticators = 'gssapi:login' -set query_command = "abook --mutt-query '%s'" -set rfc2047_parameters = yes -set sleep_time = 0 # Pause 0 seconds for informational messages -set markers = no # Disables the `+` displayed at line wraps -set mark_old = no # Unread mail stay unread until read -set mime_forward = yes # attachments are forwarded with mail -set wait_key = no # mutt won't ask "press key to continue" -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 include # include message in replies -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 tag-entry -#bind browser h goto-parent -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,pager a "set my_pipe_decode=\$pipe_decode pipe_decodeabook --add-emailset pipe_decode=\$my_pipe_decode; unset my_pipe_decode" "add the sender address to abook" -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 -set sidebar_format = '%B%?F? [%F]?%* %?N?%N/? %?S?%S?' -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 -EOF - -cat > ${MUTTWIZARDCONF}/mutt-wizard-colors.muttrc <<'EOF' -# 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<>\"]" -EOF - -cat >> ${MUTTDIR}/muttrc <<'EOF' -source accounts/1-cyteen42.muttrc -source /usr/local/share/mutt-wizard/mutt-wizard.muttrc -#source /usr/local/share/mutt-wizard/mutt-wizard-colors.muttrc - -set editor = nvim -set sort = threads -set sort_aux = reverse-last-date-received -color progress white red - - -#source colorschemes/neonwolf-256.neomuttrc -#source colorschemes/zenburn.neomuttrc -#source colorschemes/vombatidae.neomuttrc -source colorschemes/solarized-dark-256.neomuttrc - -# for solarized: -# you must load solarized 16 colors theme BEFORE this -# you terminal 16 colors must be set to solarized theme -source powerline/powerline.neomuttrc -#source powerline/powerline-rounded.neomuttrc - -# for gruvbox: -source colorschemes/colors-gruvbox-shuber.muttrc - -# For neomutt uncomment this line: -source colorschemes/colors-gruvbox-shuber-extended.muttrc - - -# you must load gruvbox theme BEFORE this -# you terminal 16 colors must be set to gruvbox theme -#source powerline/colors/gruvbox-powerline.neomuttrc -#source powerline/powerline.neomuttrc - -EOF # auto-generated with mutt-wizard: 'mw add' and follow the instructions # mailboxes populated from the email account imap server so for a clean # account just put in the standard =Inbox =Drafts =Trash =Sent =Junk -PROFILE_NAME=example_profile -EMAIL=foobar@foo.bar -REAL_NAME="foo bar" -mkdir -p $ACCDIR/${PROFILE_NAME} +#mkdir -p $ACCDIR/${PROFILE_NAME} -cat > $ACCDIR/README < $ACCDIR/README < $ACCDIR/1-${PROFILE_NAME}.muttrc < -#set folder = "/home/${USER_NAME}/.local/share/mail/mutt" -#set header_cache = /home/${USER_NAME}/.cache/mutt-wizard/ -#set message_cachedir = /home/${USER_NAME}/.cache/mutt-wizard/ -#set mbox_type = Maildir #EOF -mkdir -p $ACCDIR/${PROFILE_NAME} -cat > $ACCDIR/${PROFILE_NAME}.muttrc <> ${MUTTDIR}/muttrc <<'EOF' +cat <> ${EXAMPLES}/muttrc +source /usr/local/share/mutt-wizard/mutt-wizard.muttrc + +set editor = nvim +set sort = threads +set sort_aux = reverse-last-date-received +color progress white red + +source colorschemes/solarized-dark-256.neomuttrc + +source fonts/powerline.neomuttrc + +EOF + + +#mkdir -p $ACCDIR/${PROFILE_NAME} + +## Since this is an example not a working profile it just gets copied to the examples. +cat > ${EXAMPLES}/accounts/1-${PROFILE_NAME}.muttrc <mailsync -V ${PROFILE_NAME}" "run mbsync to sync ${PROFILE_NAME}" -unmailboxes * - -set spoolfile = "+Inbox" -set record = "+Sent" -set postponed = "+Drafts" -set trash = "+Trash" -mailboxes "=Inbox =Drafts =Trash =Sent =Junk" -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 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 "=Archives.2013" "go to archive" # mw-autogenerated -macro index,pager Ma ";=Archives.2013" "move mail to archive" # mw-autogenerated -macro index,pager Ca ";=Archives.2013" "copy mail to archive" # mw-autogenerated EOF + +## Checkinstall variables - see defaults in /etc/checkinstallrc +DOC_DIR=/usr/share/doc + +# make a new temporary directory for this use to avoid permission issues. +BASE_TMP_DIR=~/tmptmp/checkinstall_tmp +mkdir -p '${BASE_TMP_DIR}' + +# do your work +checkinstall -y --fstrans \ + --pkgname=mutt-wizard \ + --pkgversion=${VERSION}\ + --pkgrelease=${RELEASE} \ + --pkgarch=amd64 \ + --pkggroup=admin \ + --pkglicense=LICENSE \ + --pkgsource=${LATEST_URL} \ + --maintainer=cyteen@ring-zero.co.uk \ + --requires=neomutt,isync,msmtp,pass \ + --recommends=abook,nomuch,lynx,libnotify-bin,urlview \ + --suggests=mailsync \ + -D \ + bash ${BUILD_DIR}/install.sh FOE -bash ./checkinstall_it.sh +echo "Writing install.sh to: ${BUILD_DIR}/install.sh" +cat > ${BUILD_DIR}/install.sh << FOE +#!/usr/bin/env bash +set -e +#set -x + + +## Download and copy the latest version to /usr/local/bin and make executable +echo "Creating temporary working directory ${WORKDIR}" +mkdir -p ${WORKDIR} +if [ -d "${WORKDIR}" ]; then + echo "WORKDIR: ${WORKDIR} exists." + if [ -d "${WORKDIR}"/mutt-wizard ]; then + echo "Removing exist mutt-wizard directory" + echo "ERROR:" + echo "This script cannot delete this directory you will need to 'rm -rf ${WORKDIR}/mutt-wizard' from a terminal.'" + exit 1 + #rm -rf ${WORKDIR}/mutt-wizard + fi + echo "Cloning new repo with:" + echo "git clone ${LATEST_URL} ${WORKDIR}" + #GIT_INDEX_FILE="${WORKDIR}/index" git clone ${LATEST_URL} ${WORKDIR} + git clone ${LATEST_URL} ${WORKDIR}/mutt-wizard + cd ${WORKDIR}/mutt-wizard + make install +fi + +## split the existing mutt-wizard.muttrc into two to separate the colours from everything else so other colourschemes can be used. + + if [ -f "${MUTTWIZARDCONF}"/mutt-wizard.muttrc ]; then + + cd ${MUTTWIZARDCONF} && \ + csplit --suppress-matched ${MUTTWIZARDCONF}/mutt-wizard.muttrc '/^\(# Default index colors:\).*/' && \ + if [ -f ${MUTTWIZARDCONF}/xx00 ]; then + echo "Moving csplit ${BUILD_DIR}/xx00 to ${MUTTWIZARDCONF}/mutt-wizard.muttrc" + mv ${MUTTWIZARDCONF}/xx00 ${MUTTWIZARDCONF}/mutt-wizard.muttrc | tee ${EXAMPLES}/mutt-wizard.muttrc + else + echo "ERROR: split file is missing." + fi + if [ -f ${MUTTWIZARDCONF}/xx01 ]; then + echo "Moving csplit ${BUILD_DIR}/xx01 to ${MUTTWIZARDCONF}/mutt-wizard-colors.muttrc" + mv ${MUTTWIZARDCONF}/xx01 ${MUTTWIZARDCONF}/mutt-wizard-colors.muttrc | tee ${EXAMPLES}/mutt-wizard-colors.muttrc + else + echo "ERROR: split file is missing." + fi + else + echo "${MUTTWIZARDCONF}/mutt-wizard.muttrc is missing." + fi + +## Copy the local contents of the skel directory to /etc/skel +if [ -d "${BUILD_DIR}"/skel ]; then + echo "Copying files to /etc/skel from ${BUILD_DIR}/skel" + cp -dr ${BUILD_DIR}/skel/.config/ /etc/skel/ +else + echo "Missing ${BUILD_DIR}/skel" +fi +FOE + +bash ${BUILD_DIR}/checkinstall_it.sh #mbsync ${PROFILE_NAME} + +dpkg -c /var/tmp/${PROJECT}-${RELEASE}/mutt-wizard_${VERSION}-${RELEASE}_amd64.deb + +#lsd --tree /usr/share/doc/mutt-wizard/ + +#lsd --tree /var/tmp/build_mutt-wizard/skel/.config/mutt + +#lsd --tree /etc/skel/.config/mutt