Skip to content

The settings view

Open it with :settings or Shift+, (the < key); Esc leaves it. Tab / Shift+Tab move between its tabs, and the status line always names the keys that work right now. Every change is a surgical edit of the same config files, so you can mix the view and a text editor freely.

Accounts

Every configured account, one per row: its name, address and IMAP host, and for OAuth accounts the grant state. J / K select.

  • A adds an account.
  • E edits the selected one.
  • D removes it, after a confirmation that names the account (delete work? y/n).
  • Shift+J / Shift+K move it down or up the order.
  • O runs the OAuth sign-in for the selected account.
  • X revokes its stored grants, after a confirmation.

The order is [accounts] order in config.toml, used everywhere: sidebar, tab bar, gt cycling and unified queries. The account at the top is the primary, selected on startup and the sender of a fresh compose in the unified view (see configuration).

Removing an account deletes only its file under accounts/; its maildir stays in the store untouched, and putting the file back restores the account.

Adding and editing open a form, one row per field. Tab / Down and Shift+Tab / Up move between fields, Enter on the last field (or Ctrl+S from anywhere) saves, and Esc cancels.

The account type row at the top cycles IMAP, Microsoft 365 and Google with Left / Right (or Space), and the rows below follow the type:

  • IMAP shows the server rows (imap host, imap user, smtp host) and the password rows. With the type on IMAP, Ctrl+D autodiscovers: it looks the typed e-mail address up through Thunderbird-style autoconfig and fills the IMAP host and user and the SMTP host, leaving them editable; when nothing is found it says so and you fill them in.
  • Microsoft 365 and Google have fixed servers, so the form hides the server and password rows and shows an optional oauth client id instead (blank on a Microsoft account uses Thunderbird's registration). Microsoft adds a graph mode toggle; switching it on reveals an auth type toggle (delegated or app-only) and a tenant id field, and app-only adds a graph secret command row.

The full file shape behind these rows is under accounts.

When editing an existing account, an identities row replaces the add-form's from name and address: Enter opens a list of the account's [[identity]] blocks, where A adds one, E or Enter edits, and D removes (the last identity cannot be removed). The per-identity editor holds the from name and address, an optional PGP key, an auto-sign toggle, the signature and the comma-separated match patterns; the signature field is multi-line, so Enter inserts a newline there and Ctrl+S commits the identity.

Signing in

O on an OAuth account starts the provider's sign-in without leaving the client: the browser opens on the consent page and the interface stays responsive while you authorise (Esc cancels with nothing stored). A Microsoft sign-in falls back to the device-code flow when the local listener cannot bind, showing a URL and code in the status line. Completion stores the grants and reloads the daemon.

The browser's account picker is steered to the right identity: the account's own address pre-selects it, and a sign-in that comes back as a different account (a Microsoft browser session for another mailbox, say) is rejected with an error naming both addresses rather than silently storing the wrong account's grant.

Each OAuth account's row shows its grant state: ok with the minutes left on the access token, refresh due or needs sign-in, plus an app-only marker where Graph sending uses client credentials. The selected row spells out each grant's scope and expiry beneath the list, the same detail antiphon oauth status prints.

X removes the selected account's stored grants after a confirmation; the account itself is untouched and a fresh O signs it back in.

Two fields deserve a word:

  • Password: on macOS a password toggle picks the mode. In command mode you give a command that prints the password (pass show mail/personal, secret-tool lookup ...); in keychain mode you type the password into a masked field once and it is stored in the Keychain, with the matching lookup command written to the file, which is what the setup wizard offers too. Elsewhere the command is the only mode. Nothing secret is ever written into the file itself.
  • Name: renaming an account renames its file; the store folder keeps the account's name, so rename before the first sync if you care what the directory is called.

Essentials

The daily-driver settings, edited in place: J / K select a row, H / L (or Enter) change its value.

Row What it changes
theme the palette, previewed live as you cycle
sync interval (minutes) how often antiphond does a pass
idle IMAP IDLE push on each INBOX
accounts bar sidebar or tabs
reading pane below, right or off
composer embedded or suspend
list rows rows in the list when the pane is below
sidebar width columns, clamped 10 to 40
notify sound play a sound on new mail
notify speech speak new-mail notifications

Every row takes effect immediately. The rows the daemon reads (sync interval, idle, notify sound, notify speech) are pushed to a running antiphond as you change them, and the view says applied to the running daemon. Numeric rows step by one and stop at their bounds.

Folders

The third tab lists every discovered folder of every account, hidden ones included, with its sidebar alias where one is set. J / K select, and then:

  • Enter edits the alias inline (Enter saves, Esc abandons); an empty alias removes the mapping.
  • Shift+J / Shift+K move the folder down or up its account's sidebar order.
  • H hides the folder from the sidebar, or unhides it. A hidden folder stays synced and searchable, just unlisted.
  • U stops syncing the folder, or resumes it. An unsynced folder is not fetched at all.

A newly added Microsoft 365 account arrives with the mailbox's non-mail folders (calendars, contacts, conversation history, journal, RSS feeds, the outbox) already unsynced; they stay listed here, and U re-includes any you want (see accounts).

Changes show in the sidebar at once; on disk they are the account file's [folder_names] table, folder_order, folders_hidden and folders_unsynced lists, described under accounts.

Where it writes

Client settings land under [ui] and [sync] in config.toml; account details land in that account's file under accounts/. Each change is one atomic edit, and a local.toml override kept for one machine still wins afterwards, as configuration describes.