5.8 KiB
Himalaya Configuration Reference
Configuration file location: ~/.config/himalaya/config.toml
Minimal IMAP + SMTP Setup
[accounts.default]
email = "user@example.com"
display-name = "Your Name"
default = true
# IMAP backend for reading emails
backend.type = "imap"
backend.host = "imap.example.com"
backend.port = 993
backend.encryption.type = "tls"
backend.login = "user@example.com"
backend.auth.type = "password"
backend.auth.raw = "your-password"
# SMTP backend for sending emails
message.send.backend.type = "smtp"
message.send.backend.host = "smtp.example.com"
message.send.backend.port = 587
message.send.backend.encryption.type = "start-tls"
message.send.backend.login = "user@example.com"
message.send.backend.auth.type = "password"
message.send.backend.auth.raw = "your-password"
# Folder aliases — required whenever server folder names differ
# from himalaya's canonical names. See "Folder Aliases" below.
folder.aliases.inbox = "INBOX"
folder.aliases.sent = "Sent"
folder.aliases.drafts = "Drafts"
folder.aliases.trash = "Trash"
Password Options
Raw password (testing only, not recommended)
backend.auth.raw = "your-password"
Password from command (recommended)
backend.auth.cmd = "pass show email/imap"
# backend.auth.cmd = "security find-generic-password -a user@example.com -s imap -w"
System keyring (requires keyring feature)
backend.auth.keyring = "imap-example"
Then run himalaya account configure <account> to store the password.
Gmail Configuration
[accounts.gmail]
email = "you@gmail.com"
display-name = "Your Name"
default = true
backend.type = "imap"
backend.host = "imap.gmail.com"
backend.port = 993
backend.encryption.type = "tls"
backend.login = "you@gmail.com"
backend.auth.type = "password"
backend.auth.cmd = "pass show google/app-password"
message.send.backend.type = "smtp"
message.send.backend.host = "smtp.gmail.com"
message.send.backend.port = 587
message.send.backend.encryption.type = "start-tls"
message.send.backend.login = "you@gmail.com"
message.send.backend.auth.type = "password"
message.send.backend.auth.cmd = "pass show google/app-password"
# Gmail folder mapping. Without these, save-to-Sent fails after
# SMTP delivery succeeds (Gmail's Sent folder is `[Gmail]/Sent Mail`,
# not `Sent`), and `himalaya message send` exits non-zero. Any
# caller that retries on that error will re-run SMTP — duplicate
# emails to recipients. Always include this block for Gmail.
folder.aliases.inbox = "INBOX"
folder.aliases.sent = "[Gmail]/Sent Mail"
folder.aliases.drafts = "[Gmail]/Drafts"
folder.aliases.trash = "[Gmail]/Trash"
Note: Gmail requires an App Password if 2FA is enabled.
iCloud Configuration
[accounts.icloud]
email = "you@icloud.com"
display-name = "Your Name"
backend.type = "imap"
backend.host = "imap.mail.me.com"
backend.port = 993
backend.encryption.type = "tls"
backend.login = "you@icloud.com"
backend.auth.type = "password"
backend.auth.cmd = "pass show icloud/app-password"
message.send.backend.type = "smtp"
message.send.backend.host = "smtp.mail.me.com"
message.send.backend.port = 587
message.send.backend.encryption.type = "start-tls"
message.send.backend.login = "you@icloud.com"
message.send.backend.auth.type = "password"
message.send.backend.auth.cmd = "pass show icloud/app-password"
Note: Generate an app-specific password at appleid.apple.com
Folder Aliases
Map himalaya's canonical folder names (inbox, sent, drafts,
trash) to whatever the server actually calls them. Use the
v1.2.0 folder.aliases.X syntax (plural, dotted keys, directly
under [accounts.NAME]):
[accounts.default]
# ... other account config ...
folder.aliases.inbox = "INBOX"
folder.aliases.sent = "Sent"
folder.aliases.drafts = "Drafts"
folder.aliases.trash = "Trash"
The equivalent TOML sub-section form also works in v1.2.0:
[accounts.default.folder.aliases]
inbox = "INBOX"
sent = "Sent"
drafts = "Drafts"
trash = "Trash"
Don't use the singular
aliasform. Pre-v1.2.0 docs showed[accounts.NAME.folder.alias](singular). v1.2.0 silently ignores that sub-section — TOML parses without error, but the alias resolver never reads it. Every lookup then falls through to the canonical name. On Gmail (wheresentis actually[Gmail]/Sent Mail) this means save-to-Sent fails after SMTP delivery succeeds, andhimalaya message sendexits non-zero. Any caller (agent, script, user) that retries on that error code will re-run the send — including SMTP — producing duplicate emails to recipients. Always usefolder.aliases.X(plural).
Multiple Accounts
[accounts.personal]
email = "personal@example.com"
default = true
# ... backend config ...
[accounts.work]
email = "work@company.com"
# ... backend config ...
Switch accounts with --account:
himalaya --account work envelope list
Notmuch Backend (local mail)
[accounts.local]
email = "user@example.com"
backend.type = "notmuch"
backend.db-path = "~/.mail/.notmuch"
OAuth2 Authentication (for providers that support it)
backend.auth.type = "oauth2"
backend.auth.client-id = "your-client-id"
backend.auth.client-secret.cmd = "pass show oauth/client-secret"
backend.auth.access-token.cmd = "pass show oauth/access-token"
backend.auth.refresh-token.cmd = "pass show oauth/refresh-token"
backend.auth.auth-url = "https://provider.com/oauth/authorize"
backend.auth.token-url = "https://provider.com/oauth/token"
Additional Options
Signature
[accounts.default]
signature = "Best regards,\nYour Name"
signature-delim = "-- \n"
Downloads directory
[accounts.default]
downloads-dir = "~/Downloads/himalaya"
Editor for composing
Set via environment variable:
export EDITOR="vim"