Himalaya

CLI email client supporting IMAP, SMTP, Maildir, and notmuch. Scriptable and composable — designed for use in scripts and with tools like fzf.

Install

# Nix
nix-env -iA nixpkgs.himalaya
 
# Cargo
cargo install himalaya

Config (~/.config/himalaya/config.toml)

[accounts.personal]
default = true
email = "me@example.com"
display-name = "Angelo"
 
backend.type = "imap"
backend.host = "imap.example.com"
backend.port = 993
backend.encryption.type = "tls"
backend.login = "me@example.com"
backend.passwd.type = "command"
backend.passwd.cmd = "pass show email/personal"
 
message.send.backend.type = "smtp"
message.send.backend.host = "smtp.example.com"
message.send.backend.port = 465
message.send.backend.encryption.type = "tls"
message.send.backend.login = "me@example.com"
message.send.backend.passwd.type = "command"
message.send.backend.passwd.cmd = "pass show email/personal"

Commands

himalaya list                     # list folders
himalaya envelope list            # list messages in INBOX
himalaya envelope list -f Sent    # specific folder
himalaya message read <id>        # read a message
himalaya message write            # compose (opens $EDITOR)
himalaya message reply <id>       # reply
himalaya message forward <id>     # forward
himalaya message move <id> Trash  # move to folder
himalaya message delete <id>      # delete
 
# Multiple accounts
himalaya -a work envelope list

Composing

Opens $EDITOR with a pre-filled template. Save and quit to send, or save as draft and quit without sending.

Scripting example

# List unread message subjects with fzf
himalaya envelope list --filter "not:seen" \
  | fzf --with-nth=2.. \
  | awk '{print $1}' \
  | xargs himalaya message read