Skip to content

Configuration Overview

Zonvie is configured with a single TOML file. Run zonvie --install to create a default one.

macOS / Linux:

  • ~/.config/zonvie/config.toml
  • or $XDG_CONFIG_HOME/zonvie/config.toml

Windows:

  • %APPDATA%\zonvie\config.toml
  • or %USERPROFILE%\.config\zonvie\config.toml

For a description of every key, see the per-section pages in the sidebar (starting with [neovim]).

[neovim]
path = "nvim"
wsl = false
wsl_distro = "Ubuntu"
ssh = false
ssh_host = "[email protected]"
ssh_port = 22
ssh_identity = "~/.ssh/id_rsa"
[font]
family = "JetBrains Mono"
size = 14
linespace = 2
[window]
blur = true
opacity = 0.85
blur_radius = 20
[scrollbar]
enabled = true
show_mode = "scroll" # "always", "hover", "scroll", or combinations like "hover,scroll"
opacity = 0.7
delay = 1.0
[cmdline]
external = true
[popup]
external = true
[messages]
external = true
msg_pos = { ext-float = "window", mini = "grid" } # display, window, or grid
# Where each class of message goes. These retarget the built-in routes, so
# most setups need nothing else.
view = "ext-float" # ordinary messages
view_error = "ext-float" # emsg, echoerr, lua_error, rpc_error
view_warn = "ext-float" # wmsg
view_history = "split" # :messages / :history
view_search = "mini" # search_count
# Optional rules for anything the settings above cannot express. They are
# prepended to the built-in routes, never a replacement: events you do not
# mention keep their defaults.
[[messages.routes]]
event = "msg_show"
min_height = 20 # long output is easier to read in a split
view = "split"
[[messages.routes]]
event = "msg_ruler"
skip = true # hide it outright
[tabline]
external = true
style = "titlebar" # "titlebar", "menu", or "sidebar"
sidebar_position = "left" # "left" or "right" (for sidebar style)
sidebar_width = 200 # 100-500 (for sidebar style)
agent_indicator = true # show AI-agent status icon on terminal tabs
agent_notification = true # OS notification when an AI agent finishes
[windows]
external = false # Each Neovim window as a separate OS window
[log]
enabled = false
path = "/tmp/zonvie.log"
[performance]
glyph_cache_ascii_size = 512
glyph_cache_non_ascii_size = 256
hl_cache_size = 2048
shape_cache_size = 4096
atlas_size = 2048
[input]
swap_colon_semicolon = false # swap the `:` and `;` keys (single keypresses only)
option_as_meta = "both" # "both", "none", "only_left", "only_right"
ime_disable_on_activate = false
ime_disable_on_modechange = false
ime_preedit_mode = "overlay" # "overlay" (floating overlay) or "inline" (inline virt_text)
[server]
single_instance = false # route `zonvie <file>` to a running instance (Windows only)
open_mode = "tab" # "tab" (new tab) or "current" (replace current window)
close_to_tray = false # close button hides to the notification area instead of quitting (Windows only)
[shaders]
enabled = false
post_process = "after_bloom" # only "after_bloom" is implemented today
preserve_alpha = false # true = keep window transparency/blur showing through the shader
# Drop-in compatible with Shadertoy / Ghostty GLSL shaders. Multiple
# entries form a chain: each shader's output feeds the next; the
# final pass writes to the swapchain. Paths MUST be absolute — they
# are opened verbatim, so launches from Finder / Explorer (whose
# CWD is set to the system root) won't find relative entries.
paths = [
# "/absolute/path/to/your/ghostty-shaders/starfield.glsl",
# "/absolute/path/to/your/ghostty-shaders/cursor_blaze.glsl",
]