Configuration

Config file: ~/.config/zurm/config.toml — created automatically on first launch with all defaults.

Hot-reload with Cmd+, — no restart needed.

Full Reference

[font]
family = "JetBrains Mono"    # font family name (informational)
size   = 15                   # font size in points
# file = "/path/to/Font.ttf" # custom TTF/OTF; overrides embedded JetBrains Mono
# fallbacks = [...]           # see Optional Fonts page

[window]
columns = 120    # initial terminal width in character columns
rows    = 35     # initial terminal height in character rows
padding = 4      # pixels inside each pane edge

[shell]
program = ""       # shell binary; empty = read from $SHELL, fallback /bin/zsh
args    = ["-l"]   # arguments passed to the shell

[scrollback]
lines = 10000   # scrollback buffer size per pane

[scroll]
wheel_lines_per_tick = 3   # lines scrolled per mouse wheel tick

[performance]
tps = 30   # Ebitengine tick rate (Update calls/sec); lower = less idle CPU

[input]
double_click_ms = 300     # max ms between clicks to register as double-click
cursor_blink    = false   # true = blinking cursor at 530 ms; false = steady

[tabs]
max_width_chars = 24      # maximum tab label width in character cells
new_tab_dir     = "cwd"   # "cwd" = inherit active tab's directory; "home" = $HOME

[tabs.hover]
enabled  = true    # show minimap popover when hovering a background tab
delay_ms = 300     # ms before popover appears
width    = 320     # popover width in logical pixels
height   = 200     # popover height in logical pixels

[panes]
divider_width_pixels = 1   # pixel width of the border between panes

[keyboard]
left_option_as_meta = true   # left Option sends ESC-prefix (word delete, etc.)
                              # right Option still composes macOS characters
repeat_delay_ms     = 500    # ms before key repeat starts
repeat_interval_ms  = 50     # ms between repeated key events (~20/sec)

[status_bar]
enabled              = true
show_cwd             = true    # current working directory
show_git             = true    # git branch name
show_clock           = false   # forces a redraw every second
show_process         = true    # foreground process name (polls every 1s)
show_commit          = true    # short commit hash next to branch name
show_dirty           = true    # modified (~N) and staged (+N) file counts
show_ahead_behind    = true    # commits ahead/behind upstream (N^ Nv)
branch_prefix        = ""      # set to " " with a Nerd Font
segment_separator    = " · "   # separator between status bar segments
separator_height_px  = 1       # height of top border line (0 = hidden)
padding_px           = 4       # top padding above text

[help]
enabled       = true    # all in-app help surfaces
context_menu  = true    # right-click opens context menu (set false for PTY apps that use right-click)
close_confirm = true    # ask before closing a tab or pane

[session]
enabled           = true    # save/restore session on quit/launch
restore_on_launch = true    # reopen tabs with last CWDs and titles
auto_save         = false   # automatically save session on quit

[file_explorer]
enabled   = true       # file explorer sidebar
side      = "left"     # "left" or "right"
width_pct = 35         # panel width as percent of screen width

[blocks]
enabled       = false       # OSC 133 command blocks; toggle at runtime with Cmd+B (requires shell hooks)
show_duration = true        # show elapsed execution time
border_width  = 3           # width in pixels of the left accent stripe
border_color  = "#1C1C2E"   # border color when exit status is unknown
success_color = "#34D399"   # border color for exit code 0
fail_color    = "#F87171"   # border color for non-zero exit codes
bg_color      = ""          # optional hex background tint (empty = none)
bg_alpha      = 0.0         # opacity of background tint (0.0-1.0)
max_history   = 0           # max command blocks per pane (0 = unlimited)

[bell]
style       = "visual"    # "visual" = screen flash; "none" = disabled
sound       = false        # play system beep sound
duration_ms = 100          # flash duration in ms
color       = "#F59E0B"   # hex color for the visual flash

[voice]
enabled    = false      # enable TTS commands
voice_id   = ""         # AVSpeechSynthesisVoice identifier; empty = system default
rate       = 0.5        # speech rate (0.0-1.0; 0.5 = normal)
pitch      = 1.0        # pitch multiplier (0.5-2.0; 1.0 = normal)
volume     = 1.0        # volume (0.0-1.0; 1.0 = full)
locale     = "en-US"    # speech recognition language
read_lines = 10         # lines to read on Cmd+Shift+U

[theme]
name = ""   # theme filename without .toml (e.g. "dark"); empty = no theme
            # themes live in ~/.config/zurm/themes/

[colors]
background = "#0F0F18"
foreground = "#E8E8F0"
cursor     = "#A855F7"
border     = "#1C1C2E"
separator  = "#555570"   # shared separator line color for tab bar and status bar

# 16-color ANSI palette
black          = "#555570"
red            = "#F87171"
green          = "#34D399"
yellow         = "#F59E0B"
blue           = "#7C3AED"
magenta        = "#C084FC"
cyan           = "#67E8F9"
white          = "#8888A8"
bright_black   = "#555570"
bright_red     = "#F87171"
bright_green   = "#34D399"
bright_yellow  = "#F59E0B"
bright_blue    = "#A855F7"
bright_magenta = "#C084FC"
bright_cyan    = "#67E8F9"
bright_white   = "#E8E8F0"

Shell Hooks

Command blocks (OSC 133) require shell hooks. Install via the command palette: Cmd+P then search “Install shell hooks”.

Themes

External TOML theme files live in ~/.config/zurm/themes/. Set [theme] name to the filename without .toml. A theme overrides any [colors] values it defines.

Keybindings

All keybindings are discoverable in-app via Cmd+/ (help overlay) or Cmd+P (command palette).