aboutsummaryrefslogtreecommitdiff
path: root/posts/my-aerc-setup.md
diff options
context:
space:
mode:
Diffstat (limited to 'posts/my-aerc-setup.md')
-rw-r--r--posts/my-aerc-setup.md1021
1 files changed, 903 insertions, 118 deletions
diff --git a/posts/my-aerc-setup.md b/posts/my-aerc-setup.md
index b6c9fd0..e6ed198 100644
--- a/posts/my-aerc-setup.md
+++ b/posts/my-aerc-setup.md
@@ -1,118 +1,903 @@
-<!doctype html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Justine Smithies blog - No Title</title>
- <link rel="icon" href="public/favicon-32x32.png" type="image/png" sizes="32x32">
- <link href="https://justine.smithies.me.uk/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts">
- <style>
- body {
- font-family: sans-serif;
- margin: 0 auto;
- max-width: 48rem;
- line-height: 1.45;
- padding: 0.5rem 1.6rem;
- }
- a {
- color: #000000;
- font-weight: bold;
- }
- a:link {
- text-decoration: none;
- }
- a:hover {
- text-decoration: underline;
- }
- main {
- padding: 0 1.4rem;
- hyphens: auto;
- }
- code {
- border: 1px solid;
- padding: 0.1rem 0.3rem;
- tab-size: 4;
- }
- pre {
- border: 1px solid;
- }
- pre code {
- display: block;
- overflow-x: auto;
- padding: 0.3rem 0.6rem;
- }
- nav ul {
- margin: 0;
- padding: 0;
- display: flex;
- justify-content: center;
- }
- nav li {
- list-style: none;
- }
- nav li * {
- display: block;
- padding: 0 0.4rem;
- color: black;
- }
- nav li strong {
- padding-left: 1.5rem;
- padding-right: 1rem;
- }
- nav a {
- text-decoration: none;
- }
- nav a:hover {
-
- }
- header {
- border-bottom: 1px dashed grey;
- margin: 0rem 0;
- padding: 1rem 15px;
- text-align: center;
- }
- footer {
- border-top: 1px dashed grey;
- margin: 2rem 0;
- padding: 1rem 15px;
- text-align: center;
- color: #000000;
- }
- </style>
-</head>
-<body>
-<header>
-<nav>
- <ul>
- <li><img src="public/tux-1.png" alt="Tux" style="width:100px;height:100px;"></li>
- <li><h1>Justine Smithies blog</h1>Adventures of a Linux, BSD chick</li>
- </ul>
- <ul>
- <li><a href="index.html">Home</a></li>
- <li><a href="about.html">About</a></li>
- </ul>
-</nav>
-</header>
-<main>
-
-</main>
-<footer>
- <small>
- <span><a href="#">↑ Back to Top</a></span><br><br>
- Powered by <a href="https://www.freebsd.org/">FreeBSD</a><br>
- Built with <a href="https://git.smithies.me.uk/blarg">blarg</a> a mix of both <a
- href="https://github.com/karlb/karl.berlin/tree/master">blog.sh</a> and <b>barf</b>.
- The code for this site is licensed under <a
- href="https://git.smithies.me.uk/blarg/tree/LICENSE">MIT</a>. <br>
- Here's the blog's <a href="atom.xml">Atom feed</a>. <br><br>
- <img src="./public/fediverse.png" alt="Smithies SNAC Instance" width="16" height="16" style="vertical-align:middle;">
- <a rel="me" href="https://snac.smithies.me.uk/justine">Fediverse</a>
- <img src="./public/git.png" alt="Self Hosted" width="16" height="16" style="vertical-align:middle;">
- <a href="https://git.smithies.me.uk">Git</a>
- <img src="./public/email.png" alt="Email" width="16" height="16" style="vertical-align:middle;">
- <a href="mailto:justine@smithies.me.uk">Email</a><br>
- ©2022 - 2024 Justine Smithies
- </small>
-</footer>
-</body>
-</html>
+# My aerc setup
+
+Recently I was almost ready to look into installing and setting up [neomutt](https://github.com/neomutt/neomutt) when I randomly discovered [aerc](https://git.sr.ht/~rjarry/aerc) an email client for your terminal whilst browsing the www as you do. After reading up on it I soon realised that several of my online friends also used aerc having once used mutt / neomutt so decided to give it a go first and to be honest I really really love it! I'll try to document how I have set it up on my Arch system but please be warned it's still a **work in progress** and you may well give me a few pointers too.
+This is an offline setup that I have so I can read and write emails even when I'm offline and they will be queued for sending once I'm back online.
+
+**Please note that I use Gmail for my email at the moment so that's what I have configured but you could easily adapt this to suit if you follow the documentation for the various pieces of software**
+
+## First the packages I have installed to setup aerc
+
+### aerc:
+[aerc-git](https://aur.archlinux.org/packages/aerc-git)
+[dante](https://archlinux.org/packages/extra/x86_64/dante/)
+[w3m](https://archlinux.org/packages/extra/x86_64/w3m/)
+
+### SMTP:
+[msmtp-git](https://aur.archlinux.org/packages/msmtp-git)
+
+The scripts `msmtp-enqueue.sh`, `msmtp-runqueue.sh` and `msmtp-listqueue.sh` are located in `/usr/share/doc/msmtp/msmtpqueue/` and can be copied into your `~/.local/bin/` folder.
+
+### IMAP MailDir mailbox sync:
+[isync-git](https://aur.archlinux.org/packages/isync-git)
+
+### Passwords:
+[pass](https://archlinux.org/packages/extra/any/pass/)
+
+I use pass to securely store and retreive my passwords
+
+## Then the config files which are a WIP
+
+You will have to replace `your full name` and obviously your email address where I've used as an example `your@gmail.com`
+It is also noted that in the `accounts.conf` file below I use aerc to check and send anything in the mail queue every 5 minutes using the line `check-mail-cmd = mbsync -q gmail && msmtp-runqueue.sh`.
+Although I have thought that maybe I should reverse that so it sends first and then checks for new mail ?
+
+`~/.config/aerc/accounts.conf`
+
+```
+[gmail]
+source = maildir://~/.mail
+outgoing = msmtp-enqueue.sh --read-envelope-from
+default = INBOX
+folders-exclude = [Gmail]
+from = your full name <your@gmail.com>
+copy-to = gmail/[Gmail]/Sent Mail
+check-mail-cmd = mbsync -q gmail && msmtp-runqueue.sh
+check-mail = 5m
+check-mail-timeout = 10s
+```
+
+In the `aerc.conf` file below I have made a few changes for layout and especially the timestamp so that it's in a format suited to myself. I've also changed the theme to my favourite gruvbox which will more than likely get updated from time to time as I improve on my setup.
+
+`~/.config/aerc/aerc.conf`
+
+```
+#
+# aerc main configuration
+
+[general]
+#
+# Used as a default path for save operations if no other path is specified.
+# ~ is expanded to the current user home dir.
+#
+#default-save-path=
+
+# If set to "gpg", aerc will use system gpg binary and keystore for all crypto
+# operations. If set to "internal", the internal openpgp keyring will be used.
+# If set to "auto", the system gpg will be preferred unless the internal
+# keyring already exists, in which case the latter will be used.
+#
+# Default: auto
+#pgp-provider=auto
+
+# By default, the file permissions of accounts.conf must be restrictive and
+# only allow reading by the file owner (0600). Set this option to true to
+# ignore this permission check. Use this with care as it may expose your
+# credentials.
+#
+# Default: false
+#unsafe-accounts-conf=false
+
+# Output log messages to specified file. A path starting with ~/ is expanded to
+# the user home dir. When redirecting aerc's output to a file using > shell
+# redirection, this setting is ignored and log messages are printed to stdout.
+#
+log-file=~/aerc.log
+
+# Only log messages above the specified level to log-file. Supported levels
+# are: trace, debug, info, warn and error. When redirecting aerc's output to
+# a file using > shell redirection, this setting is ignored and the log level
+# is forced to trace.
+#
+# Default: info
+#log-level=info
+
+# Set the $TERM environment variable used for the embedded terminal.
+#
+# Default: xterm-256color
+#term=xterm-256color
+
+# Display OSC8 strings in the embedded terminal
+#
+# Default: false
+#enable-osc8=false
+
+[ui]
+#
+# Describes the format for each row in a mailbox view. This is a comma
+# separated list of column names with an optional align and width suffix. After
+# the column name, one of the '<' (left), ':' (center) or '>' (right) alignment
+# characters can be added (by default, left) followed by an optional width
+# specifier. The width is either an integer representing a fixed number of
+# characters, or a percentage between 1% and 99% representing a fraction of the
+# terminal width. It can also be one of the '*' (auto) or '=' (fit) special
+# width specifiers. Auto width columns will be equally attributed the remaining
+# terminal width. Fit width columns take the width of their contents. If no
+# width specifier is set, '*' is used by default.
+#
+# Default: date<20,name<17,flags>4,subject<*
+#index-columns=date<20,name<17,flags>4,subject<*
+
+#
+# Each name in index-columns must have a corresponding column-$name setting.
+# All column-$name settings accept golang text/template syntax. See
+# aerc-templates(7) for available template attributes and functions.
+#
+# Default settings
+#column-date={{.DateAutoFormat .Date.Local}}
+#column-name={{index (.From | names) 0}}
+#column-flags={{.Flags | join ""}}
+#column-subject={{.ThreadPrefix}}{{.Subject}}
+
+#
+# String separator inserted between columns. When the column width specifier is
+# an exact number of characters, the separator is added to it (i.e. the exact
+# width will be fully available for the column contents).
+#
+# Default: " "
+#column-separator=" "
+
+#
+# See time.Time#Format at https://godoc.org/time#Time.Format
+#
+# Default: 2006-01-02 03:04 PM (ISO 8601 + 12 hour time)
+#timestamp-format=2006-01-02 03:04 PM
+timestamp-format=Mon 2 Jan 15:04 2006
+#
+# Index-only time format for messages that were received/sent today.
+# If this is not specified, timestamp-format is used instead.
+#
+#this-day-time-format=
+
+#
+# Index-only time format for messages that were received/sent within the last
+# 7 days. If this is not specified, timestamp-format is used instead.
+#
+#this-week-time-format=
+
+#
+# Index-only time format for messages that were received/sent this year.
+# If this is not specified, timestamp-format is used instead.
+#
+#this-year-time-format=
+
+#
+# Width of the sidebar, including the border.
+#
+# Default: 20
+sidebar-width=30
+
+#
+# Message to display when viewing an empty folder.
+#
+# Default: (no messages)
+#empty-message=(no messages)
+
+# Message to display when no folders exists or are all filtered
+#
+# Default: (no folders)
+#empty-dirlist=(no folders)
+
+# Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel
+#
+# Default: false
+#mouse-enabled=false
+
+#
+# Ring the bell when new messages are received
+#
+# Default: true
+#new-message-bell=true
+
+#
+# Template to use for Account tab titles
+#
+# Default: {{.Account}}
+#tab-title-account={{.Account}}
+
+# Marker to show before a pinned tab's name.
+#
+# Default: `
+#pinned-tab-marker='`'
+
+# Template for the left side of the directory list.
+# See aerc-templates(7) for all available fields and functions.
+#
+# Default: {{.Folder}}
+#dirlist-left={{.Folder}}
+
+# Template for the right side of the directory list.
+# See aerc-templates(7) for all available fields and functions.
+#
+# Default: {{if .Unread}}{{humanReadable .Unread}}/{{end}}{{if .Exists}}{{humanReadable .Exists}}{{end}}
+#dirlist-right={{if .Unread}}{{humanReadable .Unread}}/{{end}}{{if .Exists}}{{humanReadable .Exists}}{{end}}
+
+# Delay after which the messages are actually listed when entering a directory.
+# This avoids loading messages when skipping over folders and makes the UI more
+# responsive. If you do not want that, set it to 0s.
+#
+# Default: 200ms
+#dirlist-delay=200ms
+
+# Display the directory list as a foldable tree that allows to collapse and
+# expand the folders.
+#
+# Default: false
+#dirlist-tree=false
+
+# If dirlist-tree is enabled, set level at which folders are collapsed by
+# default. Set to 0 to disable.
+#
+# Default: 0
+#dirlist-collapse=0
+
+# List of space-separated criteria to sort the messages by, see *sort*
+# command in *aerc*(1) for reference. Prefixing a criterion with "-r "
+# reverses that criterion.
+#
+# Example: "from -r date"
+#
+#sort=
+
+# Moves to next message when the current message is deleted
+#
+# Default: true
+#next-message-on-delete=true
+
+# Automatically set the "seen" flag when a message is opened in the message
+# viewer.
+#
+# Default: true
+#auto-mark-read=true
+
+# The directories where the stylesets are stored. It takes a colon-separated
+# list of directories. If this is unset or if a styleset cannot be found, the
+# following paths will be used as a fallback in that order:
+#
+# ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
+# ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
+# /usr/local/share/aerc/stylesets
+# /usr/share/aerc/stylesets
+#
+#stylesets-dirs=
+
+# Uncomment to use box-drawing characters for vertical and horizontal borders.
+#
+# Default: " "
+#border-char-vertical=" "
+#border-char-horizontal=" "
+
+# Sets the styleset to use for the aerc ui elements.
+#
+# Default: default
+styleset-name=gruvbox
+
+# Activates fuzzy search in commands and their arguments: the typed string is
+# searched in the command or option in any position, and need not be
+# consecutive characters in the command or option.
+#
+# Default: false
+#fuzzy-complete=false
+
+# How long to wait after the last input before auto-completion is triggered.
+#
+# Default: 250ms
+#completion-delay=250ms
+
+# The minimum required characters to allow auto-completion to be triggered after
+# completion-delay.
+#
+# Default: 1
+#completion-min-chars=1
+
+#
+# Global switch for completion popovers
+#
+# Default: true
+#completion-popovers=true
+
+# Uncomment to use UTF-8 symbols to indicate PGP status of messages
+#
+# Default: ASCII
+#icon-unencrypted=
+#icon-encrypted=✔
+#icon-signed=✔
+#icon-signed-encrypted=✔
+#icon-unknown=✘
+#icon-invalid=⚠
+
+# Reverses the order of the message list. By default, the message list is
+# ordered with the newest (highest UID) message on top. Reversing the order
+# will put the oldest (lowest UID) message on top. This can be useful in cases
+# where the backend does not support sorting.
+#
+# Default: false
+#reverse-msglist-order = false
+
+# Reverse display of the mesage threads. Default order is the the intial
+# message is on the top with all the replies being displayed below. The
+# reverse option will put the initial message at the bottom with the
+# replies on top.
+#
+# Default: false
+#reverse-thread-order=false
+
+# Sort the thread siblings according to the sort criteria for the messages. If
+# sort-thread-siblings is false, the thread siblings will be sorted based on
+# the message UID in ascending order. This option is only applicable for
+# client-side threading with a backend that enables sorting. Note that there's
+# a performance impact when sorting is activated.
+#
+# Default: false
+#sort-thread-siblings=false
+
+#[ui:account=foo]
+#
+# Enable a threaded view of messages. If this is not supported by the backend
+# (IMAP server or notmuch), threads will be built by the client.
+#
+# Default: false
+threading-enabled=true
+
+# Force client-side thread building
+#
+# Default: false
+#force-client-threads=false
+
+# Debounce client-side thread building
+#
+# Default: 50ms
+#client-threads-delay=50ms
+
+[statusline]
+#
+# Describes the format for the status line. This is a comma separated list of
+# column names with an optional align and width suffix. See [ui].index-columns
+# for more details. To completely mute the status line except for push
+# notifications, explicitly set status-columns to an empty string.
+#
+# Default: left<*,center:=,right>*
+#status-columns=left<*,center:=,right>*
+
+#
+# Each name in status-columns must have a corresponding column-$name setting.
+# All column-$name settings accept golang text/template syntax. See
+# aerc-templates(7) for available template attributes and functions.
+#
+# Default settings
+#column-left=[{{.Account}}] {{.StatusInfo}}
+#column-center={{.PendingKeys}}
+#column-right={{.TrayInfo}}
+
+#
+# String separator inserted between columns.
+# See [ui].column-separator for more details.
+#
+#column-separator=" "
+
+# Specifies the separator between grouped statusline elements.
+#
+# Default: " | "
+#separator=" | "
+
+# Defines the mode for displaying the status elements.
+# Options: text, icon
+#
+# Default: text
+#display-mode=text
+
+[viewer]
+#
+# Specifies the pager to use when displaying emails. Note that some filters
+# may add ANSI codes to add color to rendered emails, so you may want to use a
+# pager which supports ANSI codes.
+#
+# Default: less -R
+#pager=less -R
+pager=bat --plain --tabs 4 --paging always --color always
+
+#
+# If an email offers several versions (multipart), you can configure which
+# mimetype to prefer. For example, this can be used to prefer plaintext over
+# html emails.
+#
+# Default: text/plain,text/html
+alternatives=text/plain,text/html
+
+#
+# Default setting to determine whether to show full headers or only parsed
+# ones in message viewer.
+#
+# Default: false
+#show-headers=false
+
+#
+# Layout of headers when viewing a message. To display multiple headers in the
+# same row, separate them with a pipe, e.g. "From|To". Rows will be hidden if
+# none of their specified headers are present in the message.
+#
+# Default: From|To,Cc|Bcc,Date,Subject
+#header-layout=From|To,Cc|Bcc,Date,Subject
+
+# Whether to always show the mimetype of an email, even when it is just a single part
+#
+# Default: false
+#always-show-mime=false
+
+# Parses and extracts http links when viewing a message. Links can then be
+# accessed with the open-link command.
+#
+# Default: true
+parse-http-links=true
+
+[compose]
+#
+# Specifies the command to run the editor with. It will be shown in an embedded
+# terminal, though it may also launch a graphical window if the environment
+# supports it. Defaults to $EDITOR, or vi.
+#editor=
+
+#
+# Default header fields to display when composing a message. To display
+# multiple headers in the same row, separate them with a pipe, e.g. "To|From".
+#
+# Default: To|From,Subject
+#header-layout=To|From,Subject
+
+#
+# Specifies the command to be used to tab-complete email addresses. Any
+# occurrence of "%s" in the address-book-cmd will be replaced with what the
+# user has typed so far.
+#
+# The command must output the completions to standard output, one completion
+# per line. Each line must be tab-delimited, with an email address occurring as
+# the first field. Only the email address field is required. The second field,
+# if present, will be treated as the contact name. Additional fields are
+# ignored.
+#
+# This parameter can also be set per account in accounts.conf.
+#address-book-cmd=
+
+# Specifies the command to be used to select attachments. Any occurence of '%s'
+# in the file-picker-cmd will be replaced the argument <arg> to :attach -m
+# <arg>.
+#
+# The command must output the selected files to standard output, one file per
+# line.
+#file-picker-cmd=
+
+#
+# Allow to address yourself when replying
+#
+# Default: true
+#reply-to-self=true
+
+#
+# Warn before sending an email that matches the specified regexp but does not
+# have any attachments. Leave empty to disable this feature.
+#
+# Uses Go's regexp syntax, documented at https://golang.org/s/re2syntax. The
+# "(?im)" flags are set by default (case-insensitive and multi-line).
+#
+# Example:
+# no-attachment-warning=^[^>]*attach(ed|ment)
+#
+#no-attachment-warning=
+
+#
+# When set, aerc will generate "format=flowed" bodies with a content type of
+# "text/plain; format=flowed" as described in RFC3676. This format is easier to
+# handle for some mailing software, and generally just looks like ordinary
+# text. To actually make use of this format's features, you'll need support in
+# your editor.
+#
+#format-flowed=false
+
+[multipart-converters]
+#
+# Converters allow to generate multipart/alternative messages by converting the
+# main text/plain part into any other MIME type. Only exact MIME types are
+# accepted. The commands are invoked with sh -c and are expected to output
+# valid UTF-8 text.
+#
+# Example (obviously, this requires that you write your main text/plain body
+# using the markdown syntax):
+#text/html=pandoc -f markdown -t html --standalone
+
+[filters]
+#
+# Filters allow you to pipe an email body through a shell command to render
+# certain emails differently, e.g. highlighting them with ANSI escape codes.
+#
+# The commands are invoked with sh -c. The following folders are appended to
+# the system $PATH to allow referencing filters from their name only:
+#
+# ${XDG_CONFIG_HOME:-~/.config}/aerc/filters
+# ${XDG_DATA_HOME:-~/.local/share}/aerc/filters
+# $PREFIX/share/aerc/filters
+# /usr/share/aerc/filters
+#
+# The following variables are defined in the filter command environment:
+#
+# AERC_MIME_TYPE the part MIME type/subtype
+# AERC_FORMAT the part content type format= parameter
+# AERC_FILENAME the attachment filename (if any)
+# AERC_SUBJECT the message Subject header value
+# AERC_FROM the message From header value
+#
+# The first filter which matches the email's mimetype will be used, so order
+# them from most to least specific.
+#
+# You can also match on non-mimetypes, by prefixing with the header to match
+# against (non-case-sensitive) and a comma, e.g. subject,text will match a
+# subject which contains "text". Use header,~regex to match against a regex.
+#
+text/plain=colorize
+text/calendar=calendar
+message/delivery-status=colorize
+message/rfc822=colorize
+#text/html=pandoc -f html -t plain | colorize
+#text/html=html | colorize
+text/html=w3m -T text/html -cols $(tput cols) -dump -o display_image=false -o display_link_number=true
+#text/*=bat -fP --file-name="$AERC_FILENAME"
+#application/x-sh=bat -fP -l sh
+#image/*=catimg -w $(tput cols) -
+image/*=img2sixel
+#subject,~Git(hub|lab)=lolcat -f
+#from,thatguywhodoesnothardwraphismessages=wrap -w 100 | colorize
+
+# This special filter is only used to post-process email headers when
+# [viewer].show-headers=true
+# By default, headers are piped directly into the pager.
+#
+.headers=colorize
+
+[openers]
+#
+# Openers allow you to specify the command to use for the :open and :open-link
+# actions on a per-MIME-type basis. The :open-link URL scheme is used to
+# determine the MIME type as follows: x-scheme-handler/<scheme>.
+#
+# {} is expanded as the temporary filename to be opened. If it is not
+# encountered in the command, the temporary filename will be appened to the end
+# of the command.
+#
+# Like [filters], openers support basic shell globbing. The first opener which
+# matches the part's MIME type (or URL scheme handler MIME type) will be used,
+# so order them from most to least specific.
+#
+# Examples:
+# x-scheme-handler/irc=hexchat
+# x-scheme-handler/http*=firefox
+# text/html=surf -dfgms
+# text/plain=gvim {} +125
+# message/rfc822=thunderbird
+text/html=qutebrowser
+application/x-pdf=zathura
+application/pdf=zathura
+application/octet-stream=zathura
+image/*=imv
+image/png=imv
+image/jpg=imv
+video/*=mpv
+audio/*=mpv --no-video
+text/*=vim
+
+[hooks]
+#
+# Hooks are triggered whenever the associated event occurs.
+
+#
+# Executed when a new email arrives in the selected folder
+#mail-received=notify-send "New mail from $AERC_FROM_NAME" "$AERC_SUBJECT"
+
+#
+# Executed when aerc starts
+#aerc-startup=aerc :terminal calcurse && aerc :next-tab
+
+#
+# Executed when aerc shuts down.
+#aerc-shutdown=
+
+[templates]
+# Templates are used to populate email bodies automatically.
+#
+
+# The directories where the templates are stored. It takes a colon-separated
+# list of directories. If this is unset or if a template cannot be found, the
+# following paths will be used as a fallback in that order:
+#
+# ${XDG_CONFIG_HOME:-~/.config}/aerc/templates
+# ${XDG_DATA_HOME:-~/.local/share}/aerc/templates
+# /usr/local/share/aerc/templates
+# /usr/share/aerc/templates
+#
+#template-dirs=
+
+# The default template to be used for new messages.
+#
+# default: new_message
+#new-message=new_message
+
+# The default template to be used for quoted replies.
+#
+# default: quoted_reply
+#quoted-reply=quoted_reply
+
+# The default template to be used for forward as body.
+#
+# default: forward_as_body
+#forwards=forward_as_body
+```
+
+`~/.config/aerc/binds.conf`
+
+```
+# Binds are of the form <key sequence> = <command to run>
+# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
+# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
+<C-p> = :prev-tab<Enter>
+<C-n> = :next-tab<Enter>
+<C-t> = :term<Enter>
+? = :help keys<Enter>
+
+[messages]
+q = :quit<Enter>
+
+j = :next<Enter>
+<Down> = :next<Enter>
+<C-d> = :next 50%<Enter>
+<C-f> = :next 100%<Enter>
+<PgDn> = :next 100%<Enter>
+
+k = :prev<Enter>
+<Up> = :prev<Enter>
+<C-u> = :prev 50%<Enter>
+<C-b> = :prev 100%<Enter>
+<PgUp> = :prev 100%<Enter>
+g = :select 0<Enter>
+G = :select -1<Enter>
+
+J = :next-folder<Enter>
+K = :prev-folder<Enter>
+H = :collapse-folder<Enter>
+L = :expand-folder<Enter>
+
+v = :mark -t<Enter>
+V = :mark -v<Enter>
+
+T = :toggle-threads<Enter>
+
+<Enter> = :view<Enter>
+d = :prompt 'Really delete this message?' 'delete-message'<Enter>
+D = :delete<Enter>
+A = :archive flat<Enter>
+
+C = :compose<Enter>
+
+rr = :reply -a<Enter>
+rq = :reply -aq<Enter>
+Rr = :reply<Enter>
+Rq = :reply -q<Enter>
+
+c = :cf<space>
+$ = :term<space>
+! = :term<space>
+| = :pipe<space>
+
+/ = :search<space>
+\ = :filter<space>
+n = :next-result<Enter>
+N = :prev-result<Enter>
+<Esc> = :clear<Enter>
+
+[messages:folder=Drafts]
+<Enter> = :recall<Enter>
+
+[view]
+/ = :toggle-key-passthrough<Enter>/
+q = :close<Enter>
+O = :open<Enter>
+S = :save<space>
+| = :pipe<space>
+D = :delete<Enter>
+A = :archive flat<Enter>
+
+<C-l> = :open-link <space>
+
+f = :forward<Enter>
+rr = :reply -a<Enter>
+rq = :reply -aq<Enter>
+Rr = :reply<Enter>
+Rq = :reply -q<Enter>
+
+H = :toggle-headers<Enter>
+<C-k> = :prev-part<Enter>
+<C-j> = :next-part<Enter>
+J = :next<Enter>
+K = :prev<Enter>
+
+[view::passthrough]
+$noinherit = true
+$ex = <C-x>
+<Esc> = :toggle-key-passthrough<Enter>
+
+[compose]
+# Keybindings used when the embedded terminal is not selected in the compose
+# view
+$noinherit = true
+$ex = <C-x>
+<C-k> = :prev-field<Enter>
+<C-j> = :next-field<Enter>
+<A-p> = :switch-account -p<Enter>
+<A-n> = :switch-account -n<Enter>
+<tab> = :next-field<Enter>
+<backtab> = :prev-field<Enter>
+<C-p> = :prev-tab<Enter>
+<C-n> = :next-tab<Enter>
+
+[compose::editor]
+# Keybindings used when the embedded terminal is selected in the compose view
+$noinherit = true
+$ex = <C-x>
+<C-k> = :prev-field<Enter>
+<C-j> = :next-field<Enter>
+<C-p> = :prev-tab<Enter>
+<C-n> = :next-tab<Enter>
+
+[compose::review]
+# Keybindings used when reviewing a message to be sent
+y = :send<Enter>
+n = :abort<Enter>
+v = :preview<Enter>
+p = :postpone<Enter>
+q = :choose -o d discard abort -o p postpone postpone<Enter>
+e = :edit<Enter>
+a = :attach<space>
+d = :detach<space>
+
+[terminal]
+$noinherit = true
+$ex = <C-x>
+
+<C-p> = :prev-tab<Enter>
+<C-n> = :next-tab<Enter>
+
+[messages:account=gmail]
+d = :prompt 'Really move this message to the trash?' mv gmail/[Gmail]/Bin<Enter>
+D = :mv gmail/[Gmail]/Bin<Enter>
+
+[view:account=gmail]
+d = :prompt 'Really move this message to the trash?' mv gmail/[Gmail]/Bin<Enter>
+D = :mv gmail/[Gmail]/Bin<Enter>
+```
+
+`~/.config/aerc/stylesets/gruvbox`
+
+```
+# should work with any terminal colorscheme, but was designed for gruvbox
+# terminal colors are preferred, but hex is used for grayscale
+
+*.default=true
+
+# present in 'Send this email?' dialog
+title.fg=yellow
+title.bg=#303030
+title.bold=true
+
+# used in setup and in 'From:' etc
+header.bold=true
+header.fg=purple
+
+# decorative lines
+border.fg=blue
+
+# requires attention
+*error.bold=true
+*error.fg=red
+*error.blink=true
+*warning.fg=yellow
+*warning.blink=true
+*success.fg=green
+
+# statusline
+statusline_default.fg=gray
+statusline_*.bg=#303030
+
+# message list colors
+msglist_deleted.fg=gray
+msglist_unread.fg=#98971a
+msglist_unread.bold=true
+msglist_default.fg=#dedede
+msglist_marked.fg=yellow
+msglist_marked.reverse=true
+msglist_flagged.fg=white
+# msglist_flagged.bg=red
+msglist_flagged.bold=true
+
+# inbox etc
+dirlist_default.fg=#dedede
+dirlist_unread.fg=white
+dirlist_unread.bold=true
+
+# highlight selected item
+*.selected.bg=#303030
+*.selected.fg=#fabd2f
+*.selected.bold=true
+
+# primarily used in account setup
+selector_default.fg=gray
+selector_chooser.bold=true
+selector_focused.bg=green
+selector_focused.bold=true
+
+# command completion
+completion_default.bg=#303030
+completion_gutter.bg=#303030
+completion_pill.bg=aqua
+
+
+#dynamic
+*msglist_answered.fg = #21771f
+
+[viewer]
+header.fg=#d845c5
+header.bold=true
+signature.fg=3
+signature.dim=true
+diff_meta.fg=#ff0000
+diff_meta.bold=true
+diff_chunk.dim=true
+diff_add.fg=#00ff00
+diff_del.fg=#ff0000
+quote_1.fg=6
+quote_2.fg=7
+quote_3.fg=6
+quote_4.fg=7
+quote_3.dim=true
+quote_4.dim=true
+quote_x.fg=gray
+quote_x.dim=true
+```
+
+`~/.msmtprc`
+
+```
+IMAPStore gmail-remote
+Host imap.gmail.com
+AuthMechs LOGIN
+User youremail@gmail.com
+PassCmd "pass Email/your@gmail.com/app-password"
+TLSType IMAPS
+
+MaildirStore gmail-local
+Path ~/.mail/gmail/
+Inbox ~/.mail/gmail/INBOX
+Subfolders Verbatim
+
+Channel gmail
+Far :gmail-remote:
+Near :gmail-local:
+Expunge Both
+Create Both
+Remove Both
+Patterns * !"[Gmail]/All Mail" !"[Gmail]/Important" !"[Gmail]/Starred"
+SyncState *
+```
+
+`~/.msmtprc`
+
+```
+defaults
+tls on
+
+account gmail
+auth on
+host smtp.gmail.com
+port 587
+user your@gmail.com
+from your@gmail.com
+passwordeval "pass Email/your@gmail.com/app-password"
+
+account default: gmail
+```
+