documentation

Technical documentation: You can view the rustdoc generated documentation here

Quick start tutorial

Follow the installation instructions in the README.

Launch meli with no arguments, and you will be asked if you want to create a sample configuration.

The sample configuration (created by default in ~/.config/meli/config.toml) includes comments with the basic settings required for setting up accounts allowing you to copy and edit right away. See meli.conf(5) for the available configuration options.

The main screen when you launch meli is the INBOX of the first account you have configured.

  • With J / K you can select the next/previous folder. (To go to a specific one directly, press Space and type the command go n where n is the number of the folder)
  • With h / l you can select the next/previous account.
  • Use the arrow keys to browse entries in the e-mail list of a folder. (Along with Home / End / PgUp / PgDn)
  • Use Enter to open an entry and i to exit it.
  • Use m to start writing new e-mail. (or R to reply to the entry you’re currently viewing)
  • Use the arrow keys to edit each field of the e-mail.
  • Attachments can be added by pressing Space and typing the command add-attachment PATH where PATH is the filesystem path of the attachment file.
  • Edit the draft body at eny time by pressing e
  • Send your e-mail by pressing s
  • Discard or save your draft by pressing Space and typing the command close

At any time, you can press ? to show a list of all available actions and shortcuts, along with every possible setting and command that your version supports.

Press T to cycle between tabs or Alt + 1 … 9 to choose.

Press q to exit.


meli(1)

MELI(1) General Commands Manual MELI(1)

meli
Meli Mail User Agent. meli is the Greek word for honey

meli [--help | -h] [--version | -v] [--config path]
|
Show help message and exit.
|
Show version and exit.
path
Start meli with given configuration file.
[path]
Create configuration file in path if given, or at $XDG_CONFIG_HOME/meli/config.toml
[path]
Test a configuration file for syntax issues or missing options.
[page]
Print documentation page and exit (Piping to a pager is recommended.)
Print default theme keys and values in TOML syntax, to be used as a blueprint.
Print all loaded themes in TOML syntax.
View mail from input file.

TABLE OF CONTENTS

meli is a terminal mail client aiming for extensive and user-frendly configurability.
     ^^      .-=-=-=-.  ^^
 ^^        (`-=-=-=-=-`)         ^^
         (`-=-=-=-=-=-=-`)  ^^         ^^
   ^^   (`-=-=-=-=-=-=-=-`)   ^^
       ( `-=-=-=-(@)-=-=-` )      ^^
       (`-=-=-=-=-=-=-=-=-`)  ^^
       (`-=-=-=-=-=-=-=-=-`)          ^^
       (`-=-=-=-=-=-=-=-=-`)
^^     (`-=-=-=-=-=-=-=-=-`)  ^^
   ^^   (`-=-=-=-=-=-=-=-`)          ^^
         (`-=-=-=-=-=-=-`)  ^^
  ^^       (`-=-=-=-=-`)
            `-=-=-=-=-`          ^^

When launched for the first time, meli will search for its configuration directory, $XDG_CONFIG_HOME/meli/. If it doesn't exist, you will be asked if you want to create one and presented with a sample configuration file ($XDG_CONFIG_HOME/meli/config.toml) that includes the basic settings required for setting up accounts allowing you to copy and edit right away. See meli.conf(5) for the available configuration options.

At any time, you may press ? for a searchable list of all available actions and shortcuts, along with every possible setting and command that your version supports.

The main visual navigation tool, the left-side sidebar may be toggled with ` (shortcuts.listing: toggle_menu_visibility).

Each mailbox may be viewed in 4 modes: Plain views each mail individually, Threaded shows their thread relationship visually, Conversations collapses each thread of emails into a single entry, Compact shows one row per thread.

If you're using a light color palette in your terminal, you should set theme = light in the terminal section of your configuration. See meli-themes(5) for complete documentation on user themes.

Open attachments by typing their index in the attachments list and then a (shortcut open_attachment). meli will attempt to open text inside its pager, and other content via xdg-open. Press m (shortcut open_mailcap) instead to use the mailcap entry for the MIME type of the attachment, if any. See FILES for the location of the mailcap files and mailcap(5) for their syntax. You can save individual attachments with the COMMAND save-attachment INDEX path-to-file where INDEX is the attachment's index in the listing. If the zeroth index is provided, the entire message is saved. If the path provided is a directory, the message is saved as an eml file with its filename set to the messages message-id.

Each e-mail storage backend has a default search method assigned. IMAP uses the SEARCH command, notmuch uses libnotmuch and Maildir/mbox performs a slow linear search. It is advised to use a search backend on Maildir/mbox accounts. meli, if built with sqlite3, includes the ability to perform full text search on the following fields: From, To, Cc, Bcc, In-Reply-To, References, Subject and Date. The message body (in plain text human readable form) and the flags can also be queried. To enable sqlite3 indexing for an account set search_backend to sqlite3 in the configuration file and to create the sqlite3 index issue command index ACCOUNT_NAME.

To search in the message body type your keywords without any special formatting. To search in specific fields, prepend your search keyword with "field:" like so:

subject:helloooo or subject:"call for help" or "You remind me today of a small, Mexican chihuahua."

not ((from:unrealistic and (to:complex or not query )) or flags:seen,draft)

alladdresses:mailing@list.tld and cc:me@domain.tld

Boolean operators are or, and and not (alias: !) String keywords with spaces must be quoted. Quotes should always be escaped.

Important Notice about IMAP/JMAP

To prevent downloading all your messages from your IMAP/JMAP server, don't set search_backend to sqlite3. meli will relay your queries to the IMAP server. Expect a delay between query and response. Sqlite3 on the contrary at reasonable mailbox sizes should have a non noticable delay.

meli supports tagging in notmuch and IMAP/JMAP backends. Tags can be searched with the `tags:` or `flags:` prefix in a search query, and can be modified by tag add TAG and tag remove TAG (see meli.conf(5) TAGS, settings colors and ignore_tags for how to set tag colors and tag visiblity)

To create a new mail message, press m (shortcut new_mail) while viewing a mailbox. To reply to a mail, press R (shortcut reply). Both these actions open the mail composer view in a new tab.

  • Edit the header fields by selecting with the arrow keys and pressing enter to enter INSERT mode and Esc key to exit.
  • At any time you may press e (shortcut edit_mail) to launch your editor (see meli.conf(5) COMPOSING, setting editor_command for how to select which editor to launch).
  • Your editor can be used in meli's embed terminal emulator by setting embed to true in your composing settings.
  • When launched, your editor captures all input until it exits or stops.
  • To stop your editor and return to meli press Ctrl-z and to resume editing press the edit_mail command again (default e).

Attachments may be handled with the add-attachment, remove-attachment commands (see below).

Finally, pressing s (shortcut send_mail) will send your message according to your settings (see meli.conf(5) COMPOSING, setting send_mail). With no Draft or Sent mailbox, meli tries first saving mail in your INBOX and then at any other mailbox. On complete failure to save your draft or sent message it will be saved in your tmp directory instead and you will be notified of its location.

To save your draft without sending it, issue COMMAND close and select 'save as draft'.

To open a draft for further editing, select your draft in the mail listing and press edit_mail.

meli supports two kinds of contact backends:

  1. an internal format that gets saved under $XDG_DATA_HOME/meli/account_name/addressbook.
  2. vCard files (v3, v4) through the vcard_folder option in the account section. The path defined as vcard_folder can hold multiple vCards per file. They are loaded read only.

See meli.conf(5) ACCOUNTS for the complete account configuration values.

NORMAL
is the default mode
COMMAND
commands are issued in COMMAND mode, by default started with Space and exited with Esc key.
EMBED
is the mode of the embed terminal emulator
INSERT
captures all input as text input, and is exited with Esc key.

plain | threaded | compact | conversations
set the way mailboxes are displayed
conversations shows one entry per thread
compact shows one row per thread
threaded shows threads as a tree structure
plain shows one row per mail, regardless of threading
subject | date   asc | desc
sort mail listing
subject | date   asc | desc
sorts only the first level of replies.
n
where n is a mailbox prefixed with the n number in the side menu for the current account
don't issue notifications for thread under cursor in thread listing
STRING
search mailbox with STRING key. Escape exits search results
Set read status of message.
ACCOUNT MAILBOX_PATH
create mailbox with given path. Be careful with backends and separator sensitivity (eg IMAP)
ACCOUNT MAILBOX_PATH
subscribe to mailbox with given path
ACCOUNT MAILBOX_PATH
unsubscribe to mailbox with given path
ACCOUNT MAILBOX_PATH_SRC MAILBOX_PATH_DEST
rename mailbox
ACCOUNT MAILBOX_PATH
deletes mailbox in the mail backend. This action is unreversible.

EXECUTABLE ARGS
pipe pager contents to binary
post in list of viewed envelope
unsubscribe automatically from list of viewed envelope
open list archive with xdg-open

PATH
in composer, add PATH as an attachment
CMD ARGS
in composer, pipe CMD ARGS output into an attachment
INDEX
remove attachment with given index
toggle between signing and not signing this message. If the gpg invocation fails then the mail won't be sent. See meli.conf(5) PGP for PGP configuration.
saves a copy of the draft in the Draft folder

opens envelope view in new tab
closes closeable tabs
KEY=VALUE
set environment variable KEY to VALUE
KEY
print environment variable KEY

See meli.conf(5) SHORTCUTS for shortcuts and their default values.

meli exits with 0 on a successful run. Other exit statuses are:
1
catchall for general errors
101
process panic

Specifies the editor to use
Override the configuration file
When present (regardless of its value), prevents the addition of ANSI color. The configuration value use_color overrides this.

meli uses the following parts of the XDG standard:
defaults to ~/.config/
defaults to ~/.cache/

and appropriates the following locations:

$XDG_CONFIG_HOME/meli/
User configuration directory
$XDG_CONFIG_HOME/meli/config.toml
User configuration file, see meli.conf(5) for its syntax and values.
$XDG_CONFIG_HOME/meli/hooks/*
Reserved for event hooks.
$XDG_CONFIG_HOME/meli/plugins/*
Reserved for plugin files.
$XDG_CACHE_HOME/meli/*
Internal cached data used by meli.
$XDG_DATA_HOME/meli/*
Internal data used by meli.
$XDG_DATA_HOME/meli/meli.log
Operation log.
/tmp/meli/*
Temporary files generated by meli.

Mailcap entries are searched for in the following files, in this order:

  1. $XDG_CONFIG_HOME/meli/mailcap
  2. $XDG_CONFIG_HOME/.mailcap
  3. $HOME/.mailcap
  4. /etc/mailcap
  5. /usr/etc/mailcap
  6. /usr/local/etc/mailcap

meli.conf(5), meli-themes(5), xdg-open(1), mailcap(5)

XDG Standard ⟨https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html⟩, maildir ⟨https://cr.yp.to/proto/maildir.html⟩, IMAPv4rev1 RFC3501, The JSON Meta Application Protocol (JMAP) RFC8620, The JSON Meta Application Protocol (JMAP) for Mail RFC8621.

Copyright 2017-2019 Manos Pitsidianakis ⟨epilys@nessuent.xyz⟩ Released under the GPL, version 3 or greater. This software carries no warranty of any kind. (See COPYING for full copyright and warranty notices.)

⟨https://meli.delivery⟩

July 29, 2019 rendered by mandoc

meli.conf(5) [go back]

MELI.CONF(5) File Formats Manual MELI.CONF(5)

meli.conf
configuration file for the Meli Mail User Agent

$XDG_CONFIG_HOME/meli/config.toml

TABLE OF CONTENTS

Configuration for meli is written in TOML which has a few things to consider (quoting the spec):

  • TOML is case sensitive.
  • A TOML file must be a valid UTF-8 encoded Unicode document.
  • Whitespace means tab (0x09) or space (0x20).
  • Newline means LF (0x0A) or CRLF (0x0D 0x0A).

Refer to TOML documentation for valid TOML syntax.

Though not part of TOML syntax, meli.conf can have nested configuration files by using the following m4(1) include macro:

include("/path/to/file")

The top level sections of the config are:
  • accounts
  • shortcuts
  • notifications
  • pager
  • listing
  • composing
  • pgp
  • terminal
  • log

example configuration

# Setting up a Maildir account
[accounts.account-name]
root_mailbox = "/path/to/root/folder"
format = "Maildir"
index_style = "Compact"
identity="email@address.tld"
subscribed_mailboxes = ["folder", "folder/Sent"] # or [ "*", ] for all mailboxes
display_name = "Name"

# Set mailbox-specific settings
  [accounts.account-name.mailboxes]
  "INBOX" = { alias="Inbox" } #inline table
  "drafts" = { alias="Drafts" } #inline table
  [accounts.account-name.mailboxes."foobar-devel"] # or a regular table
    ignore = true # don't show notifications for this mailbox

# Setting up an mbox account
[accounts.mbox]
root_mailbox = "/var/mail/username"
format = "mbox"
index_style = "Compact"
identity="username@hostname.local"
composing.send_mail = { hostname = "localhost", port = 25, auth = { type = "none" }, security = { type = "none" } }

[pager]
filter = "COLUMNS=72 /usr/local/bin/pygmentize -l email"
html_filter = "w3m -I utf-8 -T text/html"

[notifications]
script = "notify-send"

[composing]
# required for sending e-mail
send_mail = 'msmtp --read-recipients --read-envelope-from'
#send_mail = { hostname = "smtp.mail.tld", port = 587, auth = { type = "auto", username = "user", password = { type = "command_eval", value = "gpg2 --no-tty -q -d ~/.passwords/user.gpg" } }, security = { type = "STARTTLS" } }
editor_command = 'vim +/^$'

[shortcuts]
[shortcuts.composing]
edit_mail = 'e'

[shortcuts.listing]
new_mail = 'm'
set_seen = 'n'

[terminal]
theme = "light"

Available options are listed below. Default values are shown in parentheses.

String
The backend-specific path of the root_mailbox, usually INBOX.
String [maildir mbox imap notmuch jmap]
The format of the mail backend.
[String,]
An array of mailbox paths to display in the UI. Paths are relative to the root mailbox (eg "INBOX/Sent", not "Sent"). The glob wildcard * can be used to match every mailbox name and path.
String
Your e-mail address that is inserted in the From: headers of outgoing mail.
String
Sets the way mailboxes are displayed.
conversations shows one entry per thread
compact shows one row per thread
threaded shows threads as a tree structure
plain shows one row per mail, regardless of threading
String
(optional) A name which can be combined with your address: "Name <email@address.tld>".
boolean
Attempt to not make any changes to this account. (false)
boolean
(optional) If true, do not monitor account for changes (you can use shortcut listing.refresh) (false)
String
(optional) command to execute when manually refreshing (shortcut listing.refresh) (None)
String
(optional) Choose which search backend to use. Available options are 'none' and 'sqlite3' (sqlite3)
String
(optional) Folder that contains .vcf files. They are parsed and imported read-only.
mailbox
(optional) Configuration for each mailbox. Its format is described below in mailboxes.

root_mailbox points to the directory which contains the .notmuch/ subdirectory. notmuch mailboxes are virtual, since they are defined by user-given notmuch queries. You must explicitly state the mailboxes you want in the mailboxes field and set the query property to each of them. Example:
[accounts.notmuch]
format = "notmuch"
...
  [accounts.notmuch.mailboxes]
  "INBOX" = {  query="tag:inbox", subscribe = true }
  "Drafts" = {  query="tag:draft", subscribe = true }
  "Sent" = {  query="from:username@server.tld from:username2@server.tld", subscribe = true }

IMAP specific options are:
String
example: “mail.example.tld”
String
Server username
String
Server password
String
(optional) Use instead of server_password
number
(optional) The port to connect to (143)
boolean
(optional) If port is 993 and use_starttls is unspecified, it becomes false by default. (true)
boolean
(optional) Do not validate TLS certificates. (false)
boolean
(optional) Use IDLE extension. (true)
boolean
(optional) Use COMPRESS=DEFLATE extension (if built with DEFLATE support). (true)

JMAP specific options
String
example: “mail.example.tld”
String
Server username
String
Server password
number
(optional) The port to connect to (443)
boolean
(optional) Do not validate TLS certificates. (false)

mbox specific options
String
(optional) Prefer specific mbox format reader for each message. Default is mboxcl2 format. If the preferred format fails, the message is retried with mboxrd and then if it fails again there's a recover attempt, which discards the invalid message. Valid values
  • auto
  • mboxo
  • mboxrd
  • mboxcl
  • mboxcl2
(auto)
To set multiple mailboxes, you have to explicitly state the mailboxes you want in the mailboxes field and set the path property to each of them. Example:
[accounts.mbox]
format = "mbox"
mailboxes."Python mailing list" = { path = "~/.mail/python.mbox", subscribe = true, autoload = true }

String
(optional) Show a different name for this mailbox in the UI
boolean
(optional) Load this mailbox on startup (true)
boolean
(optional) Watch this mailbox for updates (true)
boolean
(optional) Silently insert updates for this mailbox, if any (false)
boolean
(optional) special usage of this mailbox. Valid values are:
  • Normal (default)
  • Inbox
  • Archive
  • Drafts
  • Flagged
  • Junk
  • Sent
  • Trash
otherwise usage is inferred from the mailbox title. If for example your Sent folder is not named "Sent", you must explicitly set it.
boolean
(optional) Override global settings for this mailbox. Available sections to override are pager, notifications, shortcuts, composing and the account options identity and index_style. Example:
[accounts."imap.domain.tld".mailboxes."INBOX"]
  index_style = "plain"
  [accounts."imap.domain.tld".mailboxes."INBOX".pager]
    filter = ""

Composing specific options
String|SmtpServerConf
Command to pipe new mail to (exit code must be 0 for success) or settings for an SMTP server connection. See section SMTP Connections for its fields.
String
Command to launch editor. Can have arguments. Draft filename is given as the last argument. If it's missing, the environment variable $EDITOR is looked up.
boolean
(optional) Embed editor within meli. Editor must be xterm compliant. (false)
boolean
(optional) Set format=flowed [RFC3676] in text/plain attachments. (true)
hash table String[String]
Default header values used when creating a new draft.

Shortcuts can take the following values:
  • Backspace
  • Left
  • Right
  • Up
  • Down
  • Home
  • End
  • PageUp
  • PageDown
  • Delete
  • Insert
  • Enter
  • Tab
  • Esc
  • F1..F12
  • M-char
  • C-char
  • char
char is a single character string.

The headings before each list indicate the map key of the shortcut list. For example for the first list titled general the configuration is typed as follows:

[shortcuts.general]
next_tab = 'T'

and for compact-listing:

[shortcuts.compact-listing]
open_thread = "Enter"
exit_thread = 'i'

general

Enter COMMAND mode. (‘ ’)
Go to next tab. (T)
Go to the nth tab (cannot be redefined)

listing

Go to previous page. (PageUp)
Go to next page. (PageDown)
Go to previous mailbox. (K)
Go to next mailbox. (J)
Go to previous account. (l)
Go to next account. (h)
Start new mail draft in new tab (m)
Set thread as seen. (n)
Manually request a mailbox refresh. (F5)
Search within list of e-mails. (/)
Toggle visibility of side menu in mail list. (`)

compact-listing

Exit thread view (i)
Open thread. (Enter)
Select thread entry. (v)

pager

Scroll up pager. (k)
Scroll down pager. (j)
Go to previous pager page (PageUp)
Go to next pager pag (PageDown)

contact-list

Create new contact. (c)
Edit contact under cursor (e)
Mail contact under cursor (m)
Toggle visibility of side menu in mail list. (`)

composing

Deliver draft to mailer (s)
Edit mail. (e)

envelope-view

To select an attachment, type its index (you will see the typed result in the command buffer on the bottom right of the status line), then issue the corresponding command.

Select addresses from envelope to add to contacts. (c)
View raw envelope source in a pager. (M-r)
Reply to envelope. (R)
Open envelope in composer. (e)
Return to envelope if viewing raw source or attachment. (r)
Opens selected attachment with xdg-open (a)
Opens selected attachment according to its mailcap entry. See meli(1) FILES for the mailcap file locations. (m)
Go to url of given index (g)
Toggles url open mode. When active, it prepends an index next to each url that you can select by typing the index and open by issuing go_to_url (u)
Expand extra headers (References and others) (h)

thread-view

Reverse thread order. (r)
Toggle mail view visibility. (p)
Toggle thread view visibility. (t)
Collapse thread branches. (h)
Go to previous page. (PageUp)
Go to next page. (PageDown)

boolean
Enable freedesktop-spec notifications. (true)
String
(optional) Script to pass notifications to, with title as 1st arg and body as 2nd (none).
String
(optional) File that gets its size updated when new mail arrives. (none)
boolean
(optional) Play theme sound in notifications if possible. (false)
String
(optional) Play sound file in notifications if possible. (none)

boolean
(optional) Always show headers when scrolling. (true)
String
(optional) Pipe html attachments through this filter before display (none)
String
(optional) A command to pipe mail output through for viewing in pager. (none)
bool
(optional) Respect format=flowed (true)
bool
(optional) Split long lines that would overflow on the x axis. (true)
num
(optional) Minimum text width in columns. (80)
boolean
(optional) Choose `text/html` alternative if `text/plain` is empty in `multipart/alternative` attachments. (true)

String
(optional) Datetime formatting passed verbatim to strftime(3). (%Y-%m-%d %T)
Boolean
(optional) Show recent dates as `X {minutes,hours,days} ago`, up to 7 days. (true)
Query
(optional) Show only envelopes matching this query. (For query syntax see meli(1) QUERY ABNF SYNTAX) (None)

Example:

filter = "not flags:seen" # show only unseen messages

hash table String[Color]
(optional) Set UI colors for tags
Array String
(optional) Hide tags (not the tagged messages themselves)

Example:

[tags]
# valid inputs: #HHHHHH, #ABC -> #AABBCC, XTERM_NAME, 0-255 byte
colors = { signed="#Ff6600", replied="DeepSkyBlue4", draft="#f00", replied="8" }
[accounts.dummy]
...
  [accounts.dummy.mailboxes]
  # per mailbox override:
  "INBOX" = {  tags.ignore_tags=["inbox", ] }

boolean
Auto verify signed e-mail according to RFC3156 (true)
boolean
(optional) Always sign sent messages (false)
String
(optional) Key to be used when signing/encrypting (not functional yet) (none)
String
(optional) The gpg binary name or file location to use (gpg2)

String
(optional) Theme name to use. (dark)
boolean
(optional) If true, box drawing will be done with ascii characters. (false)
boolean
(optional) If false, no ANSI colors are used. (true)
String
(optional) Set window title in xterm compatible terminals An empty string means no window title is set. (meli)
hash table String[String[Attribute]]
Define UI themes. See meli-themes(5) for details.
[terminal]
theme = "themeB"

[terminal.themes.themeA]
"mail.view.body" = {fg = "HotPink3", bg = "LightSalmon1"}
...
[terminal.themes.themeB]
"mail.view.body" = {fg = "CadetBlue", bg = "White"}
...
[terminal.themes.themeC]
...

String
(optional) path of the log file ($XDG_DATA_HOME/meli/meli.log)
String
(optional) maximum level of messages to log. All levels less or equal to the maximum_level will be appended to the log file. Available levels are, in partial order:
  • OFF
  • FATAL
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • TRACE
This means that to turn logging off, set maximum_level to OFF. (INFO)

String
server hostname
Integer
server port
String
(optional) address to set as sender in SMTP transactions (none)
SmtpAuth
SMTP server authentication. See SmtpAuth subsection.
SmtpSecurity
(optional) gpg binary name or file location to use (see SmtpSecurity subsection)
SmtpExtensions
(optional) set support for SMTP extensions if they are advertised by the server (see SmtpExtensions subsection)

none | auto
 

For type "auto":

String
 
String|SmtpPassword
 
bool
(optional) require authentication in every case (true)

raw | command_evaluation
 
String
Either a raw password string, or command to execute.

Default security type is auto.
none | auto | starttls | tls
 
bool
Accept invalid SSL/TLS certificates (false)

bool
rfc2920 (true)
bool
rfc3030 (true)
bool
draft-hall-prdr-00 (true)
String
RFC3461 (FAILURE)

meli(1), meli-themes(5)

TOML Standard v.0.5.0 https://toml.io/en/v0.5.0

Copyright 2017-2019 Manos Pitsidianakis ⟨epilys@nessuent.xyz⟩ Released under the GPL, version 3 or greater. This software carries no warranty of any kind. (See COPYING for full copyright and warranty notices.)

⟨https://meli.delivery⟩

September 16, 2019 rendered by mandoc

meli-themes(5) [go back]

MELI-THEMES(5) File Formats Manual MELI-THEMES(5)

meli-themes
themes for the meli mail client

meli comes with two themes, dark (default) and light.

Custom themes are defined as lists of key-values in the configuration files:

  • $XDG_CONFIG_HOME/meli/config.toml
  • $XDG_CONFIG_HOME/meli/themes/*.toml

The application theme is defined in the configuration as follows:

[terminal]
theme = "dark"

TABLE OF CONTENTS

Themes for meli are described in the configuration language TOML, as they are key-value tables defined in the TERMINAL section of the configuration file. Each key defines the semantic location of the theme attribute within the application. For example, mail.listing.compact.* keys are settings for the compact mail listing style. A setting contains three fields: fg for foreground color, bg for background color, and attrs for text attribute.

"widget.key.label" = { fg = "Default", bg = "Default", attrs = "Default" }

Each field contains a value, which may be either a color/attribute, a link (key name) or a valid alias. An alias is a string starting with the "$" character and must be declared in advance in the color_aliases or attr_aliases fields of a theme. An alias' value can be any valid value, including links and other aliases, as long as they are valid. In the case of a link the setting's real value depends on the value of the referred key. This allows for defaults within a group of associated values. Cyclic references in a theme results in an error:

spooky theme contains a cycle: fg: mail.listing.compact.even -> mail.listing.compact.highlighted -> mail.listing.compact.odd -> mail.listing.compact.even

Two themes are included by default, `light` and `dark`.

Specific settings from already defined themes can be overwritten:
[terminal]
theme = "dark"

[terminal.themes.dark]
"mail.sidebar_highlighted_account" = { bg = "#ff4529" }
"mail.listing.attachment_flag" = { fg = "#ff4529" }
"mail.view.headers" = { fg = "30" }
"mail.view.body" = {fg = "HotPink3", bg = "LightSalmon1"}
# Linked value keys can be whatever key:
"mail.listing.compact.even_unseen" = { bg = "mail.sidebar_highlighted_account" }
# Linked color value keys can optionally refer to another field:
"mail.listing.compact.odd_unseen" = { bg = "mail.sidebar_highlighted_account.fg" }

# define new theme. Undefined settings will inherit from the default "dark" theme.
[terminal.themes."hunter2"]
color_aliases= { "Jebediah" = "#b4da55" }
"mail.listing.tag_default" = { fg = "$Jebediah" }
"mail.view.headers" = { fg = "White", bg = "Black" }

Custom themes can be included in your configuration files or be saved independently in your $XDG_CONFIG_HOME/meli/themes/ directory as TOML files. To start creating a theme right away, you can begin by editing the default theme keys and values:

meli --print-default-theme > ~/.config/meli/themes/new_theme.toml

new_theme.toml will now include all keys and values of the "dark" theme.

meli --print-loaded-themes

will print all loaded themes with the links resolved.

Case-sensitive.
  • "Default"
  • "Bold"
  • "Dim"
  • "Italics"
  • "Underline"
  • "Blink"
  • "Reverse"
  • "Hidden"
  • Any combo of the above separated by a bitwise XOR "|" eg "Dim | Italics"

Color values are of type String with the following valid contents:
  • "Default" is the terminal default. (Case-sensitive)
  • Hex triplet e.g. #FFFFFF for RGB colors. Three character shorthand is also valid, e.g. #09c → #0099cc (Case-insensitive)
  • 0-255 byte for 256 colors.
  • xterm(1) name but with some modifications (for a full table see COLOR NAMES addendum) (Case-sensitive)

To completely disable ANSI colors, there are two options:
  • Set the use_color option (section terminal) to false, which is true by default.
  • The NO_COLOR environmental variable, when present (regardless of its value), prevents the addition of ANSI color. When the configuration value use_color is explicitly set to true by the user, NO_COLOR is ignored.

In this mode, cursor locations (i.e., currently selected entries/items) will use the "reverse video" ANSI attribute to invert the terminal's default foreground/background colors.

  • theme_default
  • status.bar
  • status.notification
  • tab.focused
  • tab.unfocused
  • tab.bar
  • widgets.list.header
  • widgets.form.label
  • widgets.form.field
  • widgets.form.highlighted
  • widgets.options.highlighted
  • mail.sidebar
  • mail.sidebar_unread_count
  • mail.sidebar_index
  • mail.sidebar_highlighted
  • mail.sidebar_highlighted_unread_count
  • mail.sidebar_highlighted_index
  • mail.sidebar_highlighted_account
  • mail.sidebar_highlighted_account_unread_count
  • mail.sidebar_highlighted_account_index
  • mail.listing.compact.even
  • mail.listing.compact.odd
  • mail.listing.compact.even_unseen
  • mail.listing.compact.odd_unseen
  • mail.listing.compact.even_selected
  • mail.listing.compact.odd_selected
  • mail.listing.compact.even_highlighted
  • mail.listing.compact.odd_highlighted
  • mail.listing.plain.even
  • mail.listing.plain.odd
  • mail.listing.plain.even_unseen
  • mail.listing.plain.odd_unseen
  • mail.listing.plain.even_selected
  • mail.listing.plain.odd_selected
  • mail.listing.plain.even_highlighted
  • mail.listing.plain.odd_highlighted
  • mail.listing.conversations
  • mail.listing.conversations.subject
  • mail.listing.conversations.from
  • mail.listing.conversations.date
  • mail.listing.conversations.padding
  • mail.listing.conversations.unseen
  • mail.listing.conversations.unseen_padding
  • mail.listing.conversations.highlighted
  • mail.listing.conversations.selected
  • mail.view.headers
  • mail.view.body
  • mail.view.thread.indentation.a
  • mail.view.thread.indentation.b
  • mail.view.thread.indentation.c
  • mail.view.thread.indentation.d
  • mail.view.thread.indentation.e
  • mail.view.thread.indentation.f
  • mail.listing.attachment_flag
  • mail.listing.thread_snooze_flag
  • mail.listing.tag_default
  • pager.highlight_search
  • pager.highlight_search_current

name ↓ byte _ name byte ↓
Aqua 14 _ Black 0
Aquamarine1 122 _ Maroon 1
Aquamarine2 86 _ Green 2
Aquamarine3 79 _ Olive 3
Black 0 _ Navy 4
Blue 12 _ Purple1 5
Blue1 21 _ Teal 6
Blue2 19 _ Silver 7
Blue3 20 _ Grey 8
BlueViolet 57 _ Red 9
CadetBlue 72 _ Lime 10
CadetBlue1 73 _ Yellow 11
Chartreuse1 118 _ Blue 12
Chartreuse2 112 _ Fuchsia 13
Chartreuse3 82 _ Aqua 14
Chartreuse4 70 _ White 15
Chartreuse5 76 _ Grey0 16
Chartreuse6 64 _ NavyBlue 17
CornflowerBlue 69 _ DarkBlue 18
Cornsilk1 230 _ Blue2 19
Cyan1 51 _ Blue3 20
Cyan2 50 _ Blue1 21
Cyan3 43 _ DarkGreen 22
DarkBlue 18 _ DeepSkyBlue5 23
DarkCyan 36 _ DeepSkyBlue6 24
DarkGoldenrod 136 _ DeepSkyBlue7 25
DarkGreen 22 _ DodgerBlue3 26
DarkKhaki 143 _ DodgerBlue2 27
DarkMagenta 90 _ Green4 28
DarkMagenta1 91 _ SpringGreen6 29
name ↓ byte _ name byte ↓
DarkOliveGreen1 192 _ Turquoise4 30
DarkOliveGreen2 155 _ DeepSkyBlue3 31
DarkOliveGreen3 191 _ DeepSkyBlue4 32
DarkOliveGreen4 107 _ DodgerBlue1 33
DarkOliveGreen5 113 _ Green2 34
DarkOliveGreen6 149 _ SpringGreen4 35
DarkOrange 208 _ DarkCyan 36
DarkOrange2 130 _ LightSeaGreen 37
DarkOrange3 166 _ DeepSkyBlue2 38
DarkRed 52 _ DeepSkyBlue1 39
DarkRed2 88 _ Green3 40
DarkSeaGreen 108 _ SpringGreen5 41
DarkSeaGreen1 158 _ SpringGreen2 42
DarkSeaGreen2 193 _ Cyan3 43
DarkSeaGreen3 151 _ DarkTurquoise 44
DarkSeaGreen4 157 _ Turquoise2 45
DarkSeaGreen5 115 _ Green1 46
DarkSeaGreen6 150 _ SpringGreen3 47
DarkSeaGreen7 65 _ SpringGreen1 48
DarkSeaGreen8 71 _ MediumSpringGreen 49
DarkSlateGray1 123 _ Cyan2 50
DarkSlateGray2 87 _ Cyan1 51
DarkSlateGray3 116 _ DarkRed 52
DarkTurquoise 44 _ DeepPink8 53
DarkViolet 128 _ Purple4 54
DarkViolet1 92 _ Purple5 55
DeepPink1 199 _ Purple3 56
DeepPink2 197 _ BlueViolet 57
DeepPink3 198 _ Orange3 58
DeepPink4 125 _ Grey37 59
name ↓ byte _ name byte ↓
DeepPink6 162 _ MediumPurple6 60
DeepPink7 89 _ SlateBlue2 61
DeepPink8 53 _ SlateBlue3 62
DeepPink9 161 _ RoyalBlue1 63
DeepSkyBlue1 39 _ Chartreuse6 64
DeepSkyBlue2 38 _ DarkSeaGreen7 65
DeepSkyBlue3 31 _ PaleTurquoise4 66
DeepSkyBlue4 32 _ SteelBlue 67
DeepSkyBlue5 23 _ SteelBlue3 68
DeepSkyBlue6 24 _ CornflowerBlue 69
DeepSkyBlue7 25 _ Chartreuse4 70
DodgerBlue1 33 _ DarkSeaGreen8 71
DodgerBlue2 27 _ CadetBlue 72
DodgerBlue3 26 _ CadetBlue1 73
Fuchsia 13 _ SkyBlue3 74
Gold1 220 _ SteelBlue1 75
Gold2 142 _ Chartreuse5 76
Gold3 178 _ PaleGreen4 77
Green 2 _ SeaGreen4 78
Green1 46 _ Aquamarine3 79
Green2 34 _ MediumTurquoise 80
Green3 40 _ SteelBlue2 81
Green4 28 _ Chartreuse3 82
GreenYellow 154 _ SeaGreen3 83
Grey 8 _ SeaGreen1 84
Grey0 16 _ SeaGreen2 85
Grey100 231 _ Aquamarine2 86
Grey11 234 _ DarkSlateGray2 87
Grey15 235 _ DarkRed2 88
Grey19 236 _ DeepPink7 89
name ↓ byte _ name byte ↓
Grey23 237 _ DarkMagenta 90
Grey27 238 _ DarkMagenta1 91
Grey3 232 _ DarkViolet1 92
Grey30 239 _ Purple2 93
Grey35 240 _ Orange4 94
Grey37 59 _ LightPink3 95
Grey39 241 _ Plum4 96
Grey42 242 _ MediumPurple4 97
Grey46 243 _ MediumPurple5 98
Grey50 244 _ SlateBlue1 99
Grey53 102 _ Yellow4 100
Grey54 245 _ Wheat4 101
Grey58 246 _ Grey53 102
Grey62 247 _ LightSlateGrey 103
Grey63 139 _ MediumPurple 104
Grey66 248 _ LightSlateBlue 105
Grey69 145 _ Yellow5 106
Grey7 233 _ DarkOliveGreen4 107
Grey70 249 _ DarkSeaGreen 108
Grey74 250 _ LightSkyBlue2 109
Grey78 251 _ LightSkyBlue3 110
Grey82 252 _ SkyBlue2 111
Grey84 188 _ Chartreuse2 112
Grey85 253 _ DarkOliveGreen5 113
Grey89 254 _ PaleGreen3 114
Grey93 255 _ DarkSeaGreen5 115
Honeydew2 194 _ DarkSlateGray3 116
HotPink 205 _ SkyBlue1 117
HotPink1 206 _ Chartreuse1 118
HotPink2 169 _ LightGreen 119
name ↓ byte _ name byte ↓
HotPink3 132 _ LightGreen1 120
HotPink4 168 _ PaleGreen1 121
IndianRed 131 _ Aquamarine1 122
IndianRed1 167 _ DarkSlateGray1 123
IndianRed2 204 _ Red2 124
IndianRed3 203 _ DeepPink4 125
Khaki1 228 _ MediumVioletRed 126
Khaki3 185 _ Magenta4 127
LightCoral 210 _ DarkViolet 128
LightCyan2 195 _ Purple 129
LightCyan3 152 _ DarkOrange2 130
LightGoldenrod1 227 _ IndianRed 131
LightGoldenrod2 222 _ HotPink3 132
LightGoldenrod3 179 _ MediumOrchid3 133
LightGoldenrod4 221 _ MediumOrchid 134
LightGoldenrod5 186 _ MediumPurple2 135
LightGreen 119 _ DarkGoldenrod 136
LightGreen1 120 _ LightSalmon2 137
LightPink1 217 _ RosyBrown 138
LightPink2 174 _ Grey63 139
LightPink3 95 _ MediumPurple3 140
LightSalmon1 216 _ MediumPurple1 141
LightSalmon2 137 _ Gold2 142
LightSalmon3 173 _ DarkKhaki 143
LightSeaGreen 37 _ NavajoWhite3 144
LightSkyBlue1 153 _ Grey69 145
LightSkyBlue2 109 _ LightSteelBlue3 146
LightSkyBlue3 110 _ LightSteelBlue 147
LightSlateBlue 105 _ Yellow6 148
LightSlateGrey 103 _ DarkOliveGreen6 149
name ↓ byte _ name byte ↓
LightSteelBlue 147 _ DarkSeaGreen6 150
LightSteelBlue1 189 _ DarkSeaGreen3 151
LightSteelBlue3 146 _ LightCyan3 152
LightYellow3 187 _ LightSkyBlue1 153
Lime 10 _ GreenYellow 154
Magenta1 201 _ DarkOliveGreen2 155
Magenta2 165 _ PaleGreen2 156
Magenta3 200 _ DarkSeaGreen4 157
Magenta4 127 _ DarkSeaGreen1 158
Magenta5 163 _ PaleTurquoise1 159
Magenta6 164 _ Red3 160
Maroon 1 _ DeepPink9 161
MediumOrchid 134 _ DeepPink6 162
MediumOrchid1 171 _ Magenta5 163
MediumOrchid2 207 _ Magenta6 164
MediumOrchid3 133 _ Magenta2 165
MediumPurple 104 _ DarkOrange3 166
MediumPurple1 141 _ IndianRed1 167
MediumPurple2 135 _ HotPink4 168
MediumPurple3 140 _ HotPink2 169
MediumPurple4 97 _ Orchid 170
MediumPurple5 98 _ MediumOrchid1 171
MediumPurple6 60 _ Orange2 172
MediumSpringGreen 49 _ LightSalmon3 173
MediumTurquoise 80 _ LightPink2 174
MediumVioletRed 126 _ Pink3 175
MistyRose1 224 _ Plum3 176
MistyRose3 181 _ Violet 177
NavajoWhite1 223 _ Gold3 178
NavajoWhite3 144 _ LightGoldenrod3 179
name ↓ byte _ name byte ↓
Navy 4 _ Tan 180
NavyBlue 17 _ MistyRose3 181
Olive 3 _ Thistle3 182
Orange1 214 _ Plum2 183
Orange2 172 _ Yellow3 184
Orange3 58 _ Khaki3 185
Orange4 94 _ LightGoldenrod5 186
OrangeRed1 202 _ LightYellow3 187
Orchid 170 _ Grey84 188
Orchid1 213 _ LightSteelBlue1 189
Orchid2 212 _ Yellow2 190
PaleGreen1 121 _ DarkOliveGreen3 191
PaleGreen2 156 _ DarkOliveGreen1 192
PaleGreen3 114 _ DarkSeaGreen2 193
PaleGreen4 77 _ Honeydew2 194
PaleTurquoise1 159 _ LightCyan2 195
PaleTurquoise4 66 _ Red1 196
PaleVioletRed1 211 _ DeepPink2 197
Pink1 218 _ DeepPink3 198
Pink3 175 _ DeepPink1 199
Plum1 219 _ Magenta3 200
Plum2 183 _ Magenta1 201
Plum3 176 _ OrangeRed1 202
Plum4 96 _ IndianRed3 203
Purple 129 _ IndianRed2 204
Purple1 5 _ HotPink 205
Purple2 93 _ HotPink1 206
Purple3 56 _ MediumOrchid2 207
Purple4 54 _ DarkOrange 208
Purple5 55 _ Salmon1 209
name ↓ byte _ name byte ↓
Red 9 _ LightCoral 210
Red1 196 _ PaleVioletRed1 211
Red2 124 _ Orchid2 212
Red3 160 _ Orchid1 213
RosyBrown 138 _ Orange1 214
RoyalBlue1 63 _ SandyBrown 215
Salmon1 209 _ LightSalmon1 216
SandyBrown 215 _ LightPink1 217
SeaGreen1 84 _ Pink1 218
SeaGreen2 85 _ Plum1 219
SeaGreen3 83 _ Gold1 220
SeaGreen4 78 _ LightGoldenrod4 221
Silver 7 _ LightGoldenrod2 222
SkyBlue1 117 _ NavajoWhite1 223
SkyBlue2 111 _ MistyRose1 224
SkyBlue3 74 _ Thistle1 225
SlateBlue1 99 _ Yellow1 226
SlateBlue2 61 _ LightGoldenrod1 227
SlateBlue3 62 _ Khaki1 228
SpringGreen1 48 _ Wheat1 229
SpringGreen2 42 _ Cornsilk1 230
SpringGreen3 47 _ Grey100 231
SpringGreen4 35 _ Grey3 232
SpringGreen5 41 _ Grey7 233
SpringGreen6 29 _ Grey11 234
SteelBlue 67 _ Grey15 235
SteelBlue1 75 _ Grey19 236
SteelBlue2 81 _ Grey23 237
SteelBlue3 68 _ Grey27 238
Tan 180 _ Grey30 239
name ↓ byte _ name byte ↓
Teal 6 _ Grey35 240
Thistle1 225 _ Grey39 241
Thistle3 182 _ Grey42 242
Turquoise2 45 _ Grey46 243
Turquoise4 30 _ Grey50 244
Violet 177 _ Grey54 245
Wheat1 229 _ Grey58 246
Wheat4 101 _ Grey62 247
White 15 _ Grey66 248
Yellow 11 _ Grey70 249
Yellow1 226 _ Grey74 250
Yellow2 190 _ Grey78 251
Yellow3 184 _ Grey82 252
Yellow4 100 _ Grey85 253
Yellow5 106 _ Grey89 254
Yellow6 148 _ Grey93 255

meli(1), meli.conf(5)

TOML Standard v.0.5.0 https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.5.0.md

https://no-color.org/

Copyright 2017-2019 Manos Pitsidianakis ⟨epilys@nessuent.xyz⟩ Released under the GPL, version 3 or greater. This software carries no warranty of any kind. (See COPYING for full copyright and warranty notices.)

⟨https://meli.delivery⟩

January 23, 2020 rendered by mandoc

[go back]