673 lines
12 KiB
Markdown
673 lines
12 KiB
Markdown
# Config file format
|
|
|
|
Cove's config file uses the [TOML](https://toml.io/) format.
|
|
|
|
Here is an example config that changes a few different options:
|
|
|
|
```toml
|
|
measure_widths = true
|
|
rooms_sort_order = "importance"
|
|
|
|
[euph.servers."euphoria.leet.nu".rooms]
|
|
welcome.autojoin = true
|
|
test.username = "badingle"
|
|
test.force_username = true
|
|
private.password = "foobar"
|
|
|
|
[keys]
|
|
general.abort = ["esc", "ctrl+c"]
|
|
general.exit = "ctrl+q"
|
|
tree.action.fold_tree = "f"
|
|
```
|
|
|
|
## Key bindings
|
|
|
|
Key bindings are specified as strings or lists of strings. Each string specifies
|
|
a main key and zero or more modifier keys. The modifier keys (if any) are listed
|
|
first, followed by the main key. They are separated by the `+` character and
|
|
**no** whitespace.
|
|
|
|
Examples of key bindings:
|
|
- `"ctrl+c"`
|
|
- `"X"` (not `"shift+x"`)
|
|
- `"space"` or `" "` (both space bar)
|
|
- `["g", "home"]`
|
|
- `["K", "ctrl+up"]`
|
|
- `["f1", "?"]`
|
|
- `"ctrl+alt+f3"`
|
|
- `["enter", "any+enter"]` (matches `enter` regardless of modifiers)
|
|
|
|
Available main keys:
|
|
- Any single character that can be typed
|
|
- `esc`, `enter`, `space`, `tab`, `backtab`
|
|
- `backspace`, `delete`, `insert`
|
|
- `left`, `right`, `up`, `down`
|
|
- `home`, `end`, `pageup`, `pagedown`
|
|
- `f1`, `f2`, ...
|
|
|
|
Available modifiers:
|
|
- `shift` (must not be used with single characters)
|
|
- `ctrl`
|
|
- `alt`
|
|
- `any` (matches as long as at least one modifier is pressed)
|
|
|
|
## Available options
|
|
|
|
### `data_dir`
|
|
|
|
**Required:** no
|
|
**Type:** path
|
|
**Default:** platform-dependent
|
|
|
|
The directory that cove stores its data in when not running in ephemeral
|
|
mode.
|
|
|
|
Relative paths are interpreted relative to the user's home directory.
|
|
|
|
See also the `--data-dir` command line option.
|
|
|
|
### `ephemeral`
|
|
|
|
**Required:** yes
|
|
**Type:** boolean
|
|
**Default:** `false`
|
|
|
|
Whether to start in ephemeral mode.
|
|
|
|
In ephemeral mode, cove doesn't store any data. It completely ignores
|
|
any options related to the data dir.
|
|
|
|
See also the `--ephemeral` command line option.
|
|
|
|
### `euph.servers.<domain>.rooms.<room>.autojoin`
|
|
|
|
**Required:** yes
|
|
**Type:** boolean
|
|
**Default:** `false`
|
|
|
|
Whether to automatically join this room on startup.
|
|
|
|
### `euph.servers.<domain>.rooms.<room>.force_username`
|
|
|
|
**Required:** yes
|
|
**Type:** boolean
|
|
**Default:** `false`
|
|
|
|
If `euph.rooms.<room>.username` is set, this will force cove to set the
|
|
username even if there is already a different username associated with
|
|
the current session.
|
|
|
|
### `euph.servers.<domain>.rooms.<room>.password`
|
|
|
|
**Required:** no
|
|
**Type:** string
|
|
|
|
If set, cove will try once to use this password to authenticate, should
|
|
the room be password-protected.
|
|
|
|
### `euph.servers.<domain>.rooms.<room>.username`
|
|
|
|
**Required:** no
|
|
**Type:** string
|
|
|
|
If set, cove will set this username upon joining if there is no username
|
|
associated with the current session.
|
|
|
|
### `keys.cursor.down`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["j", "down"]`
|
|
|
|
Move down.
|
|
|
|
### `keys.cursor.to_bottom`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["G", "end"]`
|
|
|
|
Move to bottom.
|
|
|
|
### `keys.cursor.to_top`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["g", "home"]`
|
|
|
|
Move to top.
|
|
|
|
### `keys.cursor.up`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["k", "up"]`
|
|
|
|
Move up.
|
|
|
|
### `keys.editor.action.backspace`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+h", "backspace"]`
|
|
|
|
Delete before cursor.
|
|
|
|
### `keys.editor.action.clear`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"ctrl+l"`
|
|
|
|
Clear editor contents.
|
|
|
|
### `keys.editor.action.delete`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+d", "delete"]`
|
|
|
|
Delete after cursor.
|
|
|
|
### `keys.editor.action.external`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+x", "alt+e"]`
|
|
|
|
Edit in external editor.
|
|
|
|
### `keys.editor.cursor.down`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"down"`
|
|
|
|
Move down.
|
|
|
|
### `keys.editor.cursor.end`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+e", "end"]`
|
|
|
|
Move to end of line.
|
|
|
|
### `keys.editor.cursor.left`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+b", "left"]`
|
|
|
|
Move left.
|
|
|
|
### `keys.editor.cursor.left_word`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["alt+b", "ctrl+left"]`
|
|
|
|
Move left a word.
|
|
|
|
### `keys.editor.cursor.right`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+f", "right"]`
|
|
|
|
Move right.
|
|
|
|
### `keys.editor.cursor.right_word`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["alt+f", "ctrl+right"]`
|
|
|
|
Move right a word.
|
|
|
|
### `keys.editor.cursor.start`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+a", "home"]`
|
|
|
|
Move to start of line.
|
|
|
|
### `keys.editor.cursor.up`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"up"`
|
|
|
|
Move up.
|
|
|
|
### `keys.general.abort`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"esc"`
|
|
|
|
Abort/close.
|
|
|
|
### `keys.general.confirm`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"enter"`
|
|
|
|
Confirm.
|
|
|
|
### `keys.general.exit`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"ctrl+c"`
|
|
|
|
Quit cove.
|
|
|
|
### `keys.general.focus`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"tab"`
|
|
|
|
Advance focus.
|
|
|
|
### `keys.general.help`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"f1"`
|
|
|
|
Show this help.
|
|
|
|
### `keys.general.log`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"f12"`
|
|
|
|
Show log.
|
|
|
|
### `keys.room.action.account`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"A"`
|
|
|
|
Manage account.
|
|
|
|
### `keys.room.action.authenticate`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"a"`
|
|
|
|
Authenticate.
|
|
|
|
### `keys.room.action.more_messages`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"m"`
|
|
|
|
Download more messages.
|
|
|
|
### `keys.room.action.nick`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"n"`
|
|
|
|
Change nick.
|
|
|
|
### `keys.rooms.action.change_sort_order`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"s"`
|
|
|
|
Change sort order.
|
|
|
|
### `keys.rooms.action.connect`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"c"`
|
|
|
|
Connect to selected room.
|
|
|
|
### `keys.rooms.action.connect_all`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"C"`
|
|
|
|
Connect to all rooms.
|
|
|
|
### `keys.rooms.action.connect_autojoin`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"a"`
|
|
|
|
Connect to all autojoin rooms.
|
|
|
|
### `keys.rooms.action.delete`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"X"`
|
|
|
|
Delete room.
|
|
|
|
### `keys.rooms.action.disconnect`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"d"`
|
|
|
|
Disconnect from selected room.
|
|
|
|
### `keys.rooms.action.disconnect_all`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"D"`
|
|
|
|
Disconnect from all rooms.
|
|
|
|
### `keys.rooms.action.disconnect_non_autojoin`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"A"`
|
|
|
|
Disconnect from all non-autojoin rooms.
|
|
|
|
### `keys.rooms.action.new`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"n"`
|
|
|
|
Connect to new room.
|
|
|
|
### `keys.scroll.center_cursor`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"z"`
|
|
|
|
Center cursor.
|
|
|
|
### `keys.scroll.down_full`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+f", "pagedown"]`
|
|
|
|
Scroll down a full screen.
|
|
|
|
### `keys.scroll.down_half`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"ctrl+d"`
|
|
|
|
Scroll down half a screen.
|
|
|
|
### `keys.scroll.down_line`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"ctrl+e"`
|
|
|
|
Scroll down one line.
|
|
|
|
### `keys.scroll.up_full`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["ctrl+b", "pageup"]`
|
|
|
|
Scroll up a full screen.
|
|
|
|
### `keys.scroll.up_half`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"ctrl+u"`
|
|
|
|
Scroll up half a screen.
|
|
|
|
### `keys.scroll.up_line`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"ctrl+y"`
|
|
|
|
Scroll up one line.
|
|
|
|
### `keys.tree.action.decrease_caesar`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"C"`
|
|
|
|
Decrease caesar cipher rotation.
|
|
|
|
### `keys.tree.action.fold_tree`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"space"`
|
|
|
|
Fold current message's subtree.
|
|
|
|
### `keys.tree.action.increase_caesar`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"c"`
|
|
|
|
Increase caesar cipher rotation.
|
|
|
|
### `keys.tree.action.inspect`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"i"`
|
|
|
|
Inspect selected element.
|
|
|
|
### `keys.tree.action.links`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"I"`
|
|
|
|
List links found in message.
|
|
|
|
### `keys.tree.action.mark_older_seen`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"ctrl+s"`
|
|
|
|
Mark all older messages as seen.
|
|
|
|
### `keys.tree.action.mark_visible_seen`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"S"`
|
|
|
|
Mark all visible messages as seen.
|
|
|
|
### `keys.tree.action.new_thread`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"t"`
|
|
|
|
Start a new thread.
|
|
|
|
### `keys.tree.action.reply`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"r"`
|
|
|
|
Reply to message, inline if possible.
|
|
|
|
### `keys.tree.action.reply_alternate`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"R"`
|
|
|
|
Reply opposite to normal reply.
|
|
|
|
### `keys.tree.action.toggle_seen`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"s"`
|
|
|
|
Toggle current message's seen status.
|
|
|
|
### `keys.tree.cursor.to_above_sibling`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["K", "ctrl+up"]`
|
|
|
|
Move to above sibling.
|
|
|
|
### `keys.tree.cursor.to_below_sibling`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["J", "ctrl+down"]`
|
|
|
|
Move to below sibling.
|
|
|
|
### `keys.tree.cursor.to_newer_message`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["l", "right"]`
|
|
|
|
Move to newer message.
|
|
|
|
### `keys.tree.cursor.to_newer_unseen_message`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["L", "ctrl+right"]`
|
|
|
|
Move to newer unseen message.
|
|
|
|
### `keys.tree.cursor.to_older_message`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["h", "left"]`
|
|
|
|
Move to older message.
|
|
|
|
### `keys.tree.cursor.to_older_unseen_message`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `["H", "ctrl+left"]`
|
|
|
|
Move to older unseen message.
|
|
|
|
### `keys.tree.cursor.to_parent`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"p"`
|
|
|
|
Move to parent.
|
|
|
|
### `keys.tree.cursor.to_root`
|
|
|
|
**Required:** yes
|
|
**Type:** key binding
|
|
**Default:** `"P"`
|
|
|
|
Move to root.
|
|
|
|
### `measure_widths`
|
|
|
|
**Required:** yes
|
|
**Type:** boolean
|
|
**Default:** `false`
|
|
|
|
Whether to measure the width of characters as displayed by the terminal
|
|
emulator instead of guessing the width.
|
|
|
|
Enabling this makes rendering a bit slower but more accurate. The screen
|
|
might also flash when encountering new characters (or, more accurately,
|
|
graphemes).
|
|
|
|
See also the `--measure-graphemes` command line option.
|
|
|
|
### `offline`
|
|
|
|
**Required:** yes
|
|
**Type:** boolean
|
|
**Default:** `false`
|
|
|
|
Whether to start in offline mode.
|
|
|
|
In offline mode, cove won't automatically join rooms marked via the
|
|
`autojoin` option on startup. You can still join those rooms manually by
|
|
pressing `a` in the rooms list.
|
|
|
|
See also the `--offline` command line option.
|
|
|
|
### `rooms_sort_order`
|
|
|
|
**Required:** yes
|
|
**Type:** string
|
|
**Values:** `"alphabet"`, `"importance"`
|
|
**Default:** `"alphabet"`
|
|
|
|
Initial sort order of rooms list.
|
|
|
|
`"alphabet"` sorts rooms in alphabetic order.
|
|
|
|
`"importance"` sorts rooms by the following criteria (in descending
|
|
order of priority):
|
|
|
|
1. connected rooms before unconnected rooms
|
|
2. rooms with unread messages before rooms without
|
|
3. alphabetic order
|
|
|
|
### `time_zone`
|
|
|
|
**Required:** no
|
|
**Type:** string
|
|
**Default:** `$TZ` or local system time zone
|
|
|
|
Time zone that chat timestamps should be displayed in.
|
|
|
|
This option is interpreted as a POSIX TZ string. It is described here in
|
|
further detail:
|
|
<https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html>
|
|
|
|
On a normal system, the string `"localtime"` as well as any value from
|
|
the "TZ identifier" column of the following wikipedia article should be
|
|
valid TZ strings:
|
|
<https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>
|
|
|
|
If the `TZ` environment variable exists, it overrides this option. If
|
|
neither exist, cove uses the system's local time zone.
|
|
|
|
**Warning:** On Windows, cove can't get the local time zone and uses UTC
|
|
instead. However, you can still specify a path to a tz data file or a
|
|
custom time zone string.
|