Configuration#

Config Files#

toe reads config in this order (later values override earlier ones):

FilePurpose
$XDG_CONFIG_HOME/toe/config.tomlUser config
$XDG_CONFIG_HOME/toe/languages.tomlUser language config
.toe/config.tomlWorkspace config (trusted workspaces only)
.toe/languages.tomlWorkspace language config (trusted workspaces only)

$XDG_CONFIG_HOME defaults to ~/.config.

Open your user config directly: :config_open
Open workspace config: :config_open_workspace
Reload after editing: :config_reload

Workspace Trust#

Workspace-local config files (.toe/config.toml and .toe/languages.toml) are only loaded for trusted workspaces. Untrusted workspaces silently skip these files — only user config applies.

Trust the current workspace:

:workspace_trust

Remove trust:

:workspace_untrust

Trusted workspaces are stored in $DATA_DIR/trusted_workspaces (~/.local/share/toe/trusted_workspaces on Linux/macOS).

To bypass trust checks entirely and always load workspace config, set in your user config:

[editor]
insecure = true

Editor Options#

Options can be changed at runtime with :set <key> <value>, :get <key>, and :toggle <key> (for booleans).

Theme#

theme = "frappe"   # frappe | latte | macchiato | mocha

General#

OptionTypeDefaultDescription
editor.mousebooltrueEnable mouse support
editor.middle-click-pastebooltruePaste on middle-click
editor.insecureboolfalseDisable workspace trust checks
editor.editor-configbooltrueRespect .editorconfig files
editor.auto-sessionbooltrueSave/restore session automatically
editor.default-line-endingstring(system)lf, crlf, or native

Display#

OptionTypeDefaultDescription
editor.line-numberstring"absolute"absolute or relative
editor.cursorlineboolfalseHighlight cursor line
editor.cursorcolumnboolfalseHighlight cursor column
editor.text-widthint80Text width (used by rulers and reflow)
editor.rulersint[][]Column ruler positions, e.g. [80, 120]
editor.bufferlinestring"never"Show buffer tabs: never, always, multiple

Soft Wrap#

OptionTypeDefaultDescription
editor.soft-wrap.enableboolfalseEnable soft wrap
editor.soft-wrap.max-wrapint20Maximum visual indentation when wrapping
editor.soft-wrap.max-indent-retainint40Max indent levels to retain
editor.soft-wrap.wrap-indicatorstring"↪ "Continuation indicator
editor.soft-wrap.wrap-at-text-widthboolfalseWrap at text-width instead of window width

Whitespace and Indentation#

OptionTypeDefaultDescription
editor.whitespace.renderstring"none"none or all
editor.indent-guides.renderboolfalseShow indent guides
editor.indent-guides.characterstring"│"Guide character
editor.indent-guides.skip-levelsint0Indent levels to skip
editor.gutters.line-numbers.min-widthint3Minimum gutter width

Editing#

OptionTypeDefaultDescription
editor.auto-pairsbooltrueAuto-insert closing brackets and quotes
editor.continue-commentsbooltrueExtend comment tokens on new lines
editor.atomic-savebooltrueWrite via temp file to prevent partial writes
editor.insert-final-newlinebooltrueEnsure file ends with a newline
editor.trim-final-newlinesboolfalseRemove trailing blank lines on save
editor.trim-trailing-whitespaceboolfalseRemove trailing spaces on save

Auto-Save#

OptionTypeDefaultDescription
editor.auto-saveboolfalseSave when focus is lost (alias for auto-save.focus-lost)
editor.auto-save.focus-lostboolfalseSave when focus leaves the view
editor.auto-save.after-delay.enableboolfalseSave after idle delay
editor.auto-save.after-delay.timeoutint3000Idle delay in milliseconds
OptionTypeDefaultDescription
editor.search.smart-casebooltrueCase-insensitive unless pattern has uppercase
editor.search.wrap-aroundbooltrueWrap search at end of file

Scrolling#

OptionTypeDefaultDescription
editor.scrolloffint5Lines of context kept above/below cursor
editor.scroll-linesint3Lines moved per scroll step

Cursor Shape#

OptionTypeDefaultDescription
editor.cursor-shape.normalstring(terminal)block, bar, or underline
editor.cursor-shape.insertstring(terminal)Cursor shape in Insert mode
editor.cursor-shape.selectstring(terminal)Cursor shape in Select mode

Status Bar#

OptionTypeDefaultDescription
editor.statusline.separatorstring" "Separator between status items
editor.statusline.mode.normalstring"normal"Label for Normal mode
editor.statusline.mode.insertstring"insert"Label for Insert mode
editor.statusline.mode.selectstring"select"Label for Select mode

Pickers#

These options are TOML-only and cannot be changed at runtime with :set.

TOML keyTypeDefaultDescription
editor.buffer-picker.start-positionstring"top"top or previous
editor.file-explorer.hiddenboolfalseShow hidden files
editor.file-explorer.follow-symlinksboolfalseFollow symlinks
editor.file-explorer.parentsboolfalseInclude parent directories
editor.file-explorer.ignoreboolfalseRespect .ignore files
editor.file-explorer.git-ignoreboolfalseRespect .gitignore
editor.file-explorer.git-globalboolfalseRespect global gitignore
editor.file-explorer.git-excludeboolfalseRespect git exclude rules
editor.file-explorer.flatten-dirsbooltrueCollapse single-child directories

Shell#

[editor]
shell = ["sh", "-c"]   # default on Unix; ["cmd", "/C"] on Windows

Config Example#

theme = "mocha"

[editor]
cursorline = true
soft-wrap.enable = true
auto-session = true
rulers = [80, 120]

[editor.cursor-shape]
normal = "block"
insert = "bar"

Language Config#

See Language Servers for languages.toml configuration.