From aebd2b0fcf950749b0f3a096aeedfc8b62b8c572 Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 3 Jul 2017 14:02:58 -0400 Subject: [PATCH] Big documentation changes, and more clarity with the email. --- .asoudrc | 27 ++++---- .config/Scripts/check.sh | 8 +++ .config/Scripts/inboxes | 2 + .config/Scripts/mailsyncloop.sh | 7 +- .config/mutt/email.md | 40 ++++++++++++ .config/mutt/luke_mutt_readme.md | 61 ------------------ .config/mutt/luke_mutt_readme_2.md | 27 -------- .config/mutt/mailcap | 0 .config/mutt/muttcol | 0 .config/mutt/muttrc | 3 - .config/mutt/personalrc | 23 +++++++ .config/ranger/luke_ranger_readme.pdf | Bin 21510 -> 0 bytes .../{luke_ranger_readme.md => ranger.md} | 2 + .msmtprc | 10 ++- .offlineimaprc | 10 +-- README.md | 7 +- 16 files changed, 116 insertions(+), 111 deletions(-) create mode 100755 .config/Scripts/check.sh create mode 100644 .config/Scripts/inboxes create mode 100644 .config/mutt/email.md delete mode 100644 .config/mutt/luke_mutt_readme.md delete mode 100644 .config/mutt/luke_mutt_readme_2.md mode change 100755 => 100644 .config/mutt/mailcap mode change 100755 => 100644 .config/mutt/muttcol mode change 100755 => 100644 .config/mutt/muttrc create mode 100644 .config/mutt/personalrc delete mode 100644 .config/ranger/luke_ranger_readme.pdf rename .config/ranger/{luke_ranger_readme.md => ranger.md} (95%) diff --git a/.asoudrc b/.asoudrc index 3d265408..36c4c044 100644 --- a/.asoudrc +++ b/.asoudrc @@ -1,13 +1,18 @@ -pcm.softvol { - type softvol - slave.pcm "cards.pcm.default" - control { - name "Software" - card 0 - } - max_db 20.0 -} pcm.!default { - type plug - slave.pcm "softvol" + type plug + slave.pcm "softvol" +} + +pcm.softvol { + type softvol + slave { + pcm "dmix" + } + control { + name "Pre-Amp" + card 0 + } + min_dB -5.0 + max_dB 26.0 + resolution 6 } diff --git a/.config/Scripts/check.sh b/.config/Scripts/check.sh new file mode 100755 index 00000000..9dcb8876 --- /dev/null +++ b/.config/Scripts/check.sh @@ -0,0 +1,8 @@ +#!/bin/bash +notification="i3 exec mpv ~/.config/Scripts/ding.opus" + +cd $(dirname $0) +while read entry + do + [ "$(ls -A $entry)" ] && echo "New mail found in $entry." && exec $notification && notmuch new || echo "No new mail found in $entry." + done < inboxes diff --git a/.config/Scripts/inboxes b/.config/Scripts/inboxes new file mode 100644 index 00000000..166acb3d --- /dev/null +++ b/.config/Scripts/inboxes @@ -0,0 +1,2 @@ +/home/USERNAME/.Mail/Gmail/INBOX/new/ +/home/USERNAME/.Mail/Personal/INBOX/new/ diff --git a/.config/Scripts/mailsyncloop.sh b/.config/Scripts/mailsyncloop.sh index 206461df..8d77a353 100755 --- a/.config/Scripts/mailsyncloop.sh +++ b/.config/Scripts/mailsyncloop.sh @@ -1,10 +1,15 @@ #!/bin/bash -offlineimap -o +cd $(dirname $0) +inboxes=$(cat inboxes) + +bash ~/.config/Scripts/check.sh while : do if [ -f $(pgrep offlineimap) ]; then offlineimap -o echo "OfflineIMAP sync complete." + bash check.sh + notmuch new else echo "OfflineIMAP already running." fi diff --git a/.config/mutt/email.md b/.config/mutt/email.md new file mode 100644 index 00000000..a7504fdc --- /dev/null +++ b/.config/mutt/email.md @@ -0,0 +1,40 @@ +# Luke's mutt/OfflineIMAP/msmtp/notmuch setup + +## My email setup gives you the following: + ++ A clean, fast and vim-like terminal interface to send and read email (mutt) ++ OfflineIMAP, which takes keep a copy of all of your mail offline, allowing you to read and ++ notmuch as an email indexer, which allows you to easily search email by content within mutt. ++ A looping script which continually uses OfflineIMAP to check mail, and if there is new mail, it will both notify you with a ding and then tell notmuch to quickly index the new mail for searching. + +All of these features are well synced together and require just a little setup. + +To use my email setup, be sure to have `neomutt`, `offlineimap`, `msmtp` `notmuch` and `notmuch-mutt` installed. + +Note that the notification sound will work on i3 by default. You can edit the notification command that runs in `.config/Scripts/check.sh`. + +## How to set it up. + +To use this setup, you have to add your email settings where required. + +There are several steps after which everything should work nicely. + ++ **First**, open `.offlineimaprc` and add your email account and server info (details are in that file. ++ To index your mail for quick searching, run `notmuch setup` and give your mail directory (`~/.Mail` by default in my configs) ++ Then you can go ahead and start syncing your email by running `offlineimap -o`. This will download your mail from all the accounts you use to `~/.Mail`. + + If you want to use my autosync loop script, make sure to check `.config/Scripts/inboxes` to ensure that your inboxes are there. ++ Next, add your email account info to `.msmtprc`. ++ And the same to `.config/mutt/personalrc` or `.config/mutt/gmailrc` or your own rc file. + + (mutt will try to load the `gmailrc` by default. You can change this in `.config/mutt/muttrc`.) + +## Updating + +As I said before, I have a loop script in `.config/Scripts/mailsyncloop.sh` which will run OfflineIMAPs every few minutes and will play a notification sound and run notmuch if new mail is found. + +I suggest running this scipt in a tty or tmux session, so you can check up on it if you really want. That's what I do. + +## Enjoy your email! + +If you're using my i3 config, you can run mutt with `mutt`. Explore the `muttrc` to see my bindings and add your own. + +If you're not using my i3 config, you may want to move `muttrc` to `~/.muttrc`, because I keep my `muttrc` in the `.config` directory to different reasons, but it will look only in `~` by default. diff --git a/.config/mutt/luke_mutt_readme.md b/.config/mutt/luke_mutt_readme.md deleted file mode 100644 index b805ca7b..00000000 --- a/.config/mutt/luke_mutt_readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# Luke's mutt readme - -mutt is a terminal email program. - -## Using my configs - -Move the muttrc file to ~/.muttrc to activate it by default. - -Make an rc file for your own email address. If you have a Gmail account, for example, modify the "gmailrc" file to your address. Make sure muttrc is sourcing the file you want. - -You should also have Neomutt installed for full compatibility. - -## Macros and shortcuts - -I've made some changes to the bindings to make mutt a little more vim-like. See them in muttrc for yourself. - -I've also employed gotbletu's shortcuts for changing accounts and moving from Inbox to Sent to Drafts etc. - -Note that the commands for movement to different boxes are in the individual email configs. This is because the folder structure of each account may differ. When mutt loads another email account, it also loades the new shortcuts. You may need to make changes for your email account. - -## Colors and themes - -My muttrc has my particular formats for email headers and date. - -You have a lot of freedom in how you can configure how mutt works. Here, I have a file "muttcol" which is originally someone else's theme (can't remember where I got it), but I've also made color changes in the muttrc. - -My config is made for Neomutt, which allows email headers to have different colors for different information. If you're not running Neomutt, you'll get errors when using my configs. To remove these errors delete the following lines from the muttrc: - -color index_author red default '.*' -color index_number blue default -color index_subject cyan default '.s' -color index_size green default - -## Aliases - -You can use aliases to avoid having to type out email addresses over and over. For example, if you have the following: - -alias luke luke@lukesmith.xyz - -whenever you type in "luke" as a recipient, it will automatically direct that you my email. You can also have aliases for groups of people, separated by a comma. - -alias best_friends billy@gmail.com, sally@gmail.com, amanda@gmail.com, chad@gmail.com - -so whenever you type in "best_friends," mutt will direct the mail to all four of these email addresses. - -## Passwords - -If you don't want mutt to ask for your password when logging on, set imap_pass to your password. - -imap_pass = muh_password - - -Same is true of smtp_pass if you want to send emails without a password. - -smtp = muh_password - -There are securer ways of storing your pass word, which you can research youself. I'm still figuring out an elegant solution that works for me. - -## To come... - -I'm still figuring out offlineIMAPs and some other little things to interface with mutt. I'll put up a new video when I'm totally successful. diff --git a/.config/mutt/luke_mutt_readme_2.md b/.config/mutt/luke_mutt_readme_2.md deleted file mode 100644 index c7e16e69..00000000 --- a/.config/mutt/luke_mutt_readme_2.md +++ /dev/null @@ -1,27 +0,0 @@ -# Luke's mutt readme, Part 2: Offline IMAPS - -Here was my goal: - -+ Have an extensible terminal based email client that can store all of my emails offline for access when I don't have internet. - -This is important, not just for general convenience, but because I don't have internet for most of the day. - -## OfflineIMAPS - -OfflineIMAPS keeps a local repo of your IMAP emails on your own machine. I've done the setup in this rice for you, you just have to fill in your account info. - -## Setup - -Look up your server info for your email provider. The details will be on their website. - -First go to `~/.offlineimaprc`. I have a template for a Gmail account there already. You can simply add your username and password in the required locations. You can add or replace the gmail account with any other kind of email account as well, just instead of `type = Gmail`, use `type = IMAP` in the remote repository. Note that each email account will have a general settings category, marked [Account NAME] and two sub repositories, one being the online repo and the other being a directory on your own machine, marked [Repository NAME-remote] and [Repository NAME-local]. To add new accounts mimic the syntax I have. - -Then either run `offlineimap -o` and if your information was entered correctly, OfflineIMAP will begin to download *all* of your email (which may take a while). - -Next add your account and (SMTP) server info to `~/.msmtp`. This will allow you to send emails. - -## How to keep synced - -Each time you run `offlineimap`, mail will be synced between the internet and your own machine. I don't have a systematized way to run this, but `~/.config/Scripts/mailsyncloop.sh` is aliased to `mailsync` and will updateOfflineIMAP every couple of minutes or so. There are smarter ways to do this, and if you develop one, feel free to tell me! - -[luke@lukesmith.xyz](mailto:luke@lukesmith.xyz) diff --git a/.config/mutt/mailcap b/.config/mutt/mailcap old mode 100755 new mode 100644 diff --git a/.config/mutt/muttcol b/.config/mutt/muttcol old mode 100755 new mode 100644 diff --git a/.config/mutt/muttrc b/.config/mutt/muttrc old mode 100755 new mode 100644 index 86b4a0b4..9f30f22b --- a/.config/mutt/muttrc +++ b/.config/mutt/muttrc @@ -1,4 +1,3 @@ -#source "gpg -dq ~/.ayylmao |" source ~/.config/mutt/gmailrc source ~/.config/mutt/muttcol source ~/.config/mutt/aliases @@ -11,8 +10,6 @@ set mail_check = "10" set mailcap_path = ~/.config/mutt/mailcap set date_format="%m/%d %I:%M" set index_format="%2C %Z %d %-15.15F %s (%-4.4c)" -#set status_format="mpv ~/.config/mutt/bump.wav" -#set wrap = 0 auto_view text/html alternative_order text/plain text/enriched text/html diff --git a/.config/mutt/personalrc b/.config/mutt/personalrc new file mode 100644 index 00000000..a372456d --- /dev/null +++ b/.config/mutt/personalrc @@ -0,0 +1,23 @@ +# vim: filetype=muttrc +set imap_user = "YOU@YOURDOMAIN.COM" +set smtp_url = "SMTPSERVERINFO:PORT" +set realname = "YOUR NAME" +set mbox_type = Maildir +set sendmail = "/usr/bin/msmtp -a personal" +set folder = "~/.Mail/Personal" +set spoolfile = +INBOX +set record = +INBOX.Sent +set postponed = +INBOX.Drafts +set header_cache = ~/.config/mutt/Personal/cache/headers +set message_cachedir = ~/.config/mutt/Personal/cache/bodies +set certificate_file = ~/.config/mutt/Personal/certificates +set ssl_starttls = yes +set ssl_force_tls = yes + +bind index g noop +bind index gg first-entry +macro index gi "=INBOX" "Go to inbox" +macro index gs "=INBOX.Sent" "Go to sent" +macro index gd "=INBOX.Drafts" "Go to drafts" +macro index gj "=INBOX.Junk" "Go to junk" +macro index gt "=INBOX.Trash" "Go to trash" diff --git a/.config/ranger/luke_ranger_readme.pdf b/.config/ranger/luke_ranger_readme.pdf deleted file mode 100644 index c9fc65330b4399dd443b85fba516cff232e4e91a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21510 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