Documentation

Configuration

Edit ~/.config/toowl/config.toml — every field is optional and hot-reloads.

Config lives at ~/.config/toowl/config.toml (or %APPDATA%\toowl\config.toml on Windows). toowl watches the file with a 150ms debounce and applies changes without restart. Saves are atomic (write temp + rename) so the watcher never sees a half-written file.

Minimal example

[appearance]
theme = "toowl_moonlight"
opacity = 0.88
font_size = 15.0
cursor_style = "block"

[scrollback]
capacity = 10000

[keybindings]
"ctrl+shift+q" = "quit"

[appearance]

KeyDefaultNotes
font_familyJetBrains MonoBundled with the binary on every platform, so the default looks identical everywhere. Override with any installed face name.
font_size14.0Logical point size; multiplied by display scale factor.
opacity1.0Window transparency. 0.850.92 is a sweet spot.
themetoowl_ink16 built-ins — see Themes for names.
cursor_stylebeamblock, underline, or beam.
cursor_blinktruePulse the cursor's opacity. Set false for a steady cursor. Also on First Light's Small comforts step and in Settings.
inactive_pane_dim0.50Dim factor for unfocused split panes. 1.0 = no dim, 0.85 subtle, 0.55 strong.
tab_bar_placementtoptop or left. Full layout behaviour — chrome, scrolling, previews, window drag, keys — is on Layouts. Toggle live with Ctrl+Alt+V (⌘⌥V on macOS) or Settings → Tab layout.
tab_bar_width220Thickness of the vertical tab bar in logical px, clamped to 140–400. Ignored when the bar is on top.
perch_sideautoauto, left or right. auto follows the tab bar — tabs on the left move the Perch right so the two never share a gutter.
tab_hover_previewtrueShow a live preview when hovering a background tab. Vertical layout parks the card to the right of the rail. Also in Settings.
screenshot_buttontrueShow the camera chip in the tab strip (captures the whole window to PNG). The screenshot keybinding still works when off.
screenshot_destinationbothfile, clipboard, or both.
screenshot_dir~/DesktopFolder for file/both captures. ~ expands; created on demand. Editable inline in Settings (focus the row, Enter to edit, Enter to save, Esc to cancel).
screenshot_soundtruePlay a shutter sound on capture. Set false for a silent shot.

[hints]

KeyDefaultNotes
enabledtrueOccasional one-line tips in the bottom-right about commands you have not used yet. At most three per session, minutes apart, and only while the terminal is quiet and that corner is empty — a hint never covers output or lands on top of a running command. Each one appears once ever, not once per launch, so they retire on their own. Click a hint or start typing to send it away early. The chord shown is read from your live keymap, so a rebind is reflected immediately. Set false to turn them off — the same switch as Settings → Hints.

[onboarding]

KeyDefaultNotes
completedfalseSet true once First Light has been offered — whether you walked to the end or pressed Esc. Set it back to false (or run Run setup again in Settings) to see the flow again.

[scrollback]

KeyDefaultNotes
capacity10000Off-screen rows retained. Mouse-wheel scrolls back into this buffer.

Tab groups

A tab group is a named, coloured band around a run of related tabs — collapse it and the whole run folds into one pill. Groups are not configured in config.toml; they're created from the running window and persist with the rest of your workspace state.

ActionLinuxmacOS
Group the current tabCtrl+Alt+G⌘⌥G
Ungroup the current tabCtrl+Alt+Shift+G⌘⌥⇧G
Collapse / expand the groupCtrl+Alt+Shift+C⌘⌥⇧C

Pressing the group chord on a tab that sits beside an existing group adds it to that group — this is how you build a group of more than one tab from the keyboard. Only a tab with no grouped neighbour starts a new group, and that is when the name and colour are chosen: the name comes from the tab's current title, the colour is the next one in the theme's group palette. Because the colour is stored as a palette index rather than a literal value, groups retint when you switch themes instead of clashing with the new one.

Membership is contiguous: a group is always one unbroken run of tabs, so it draws as a single band rather than a striped mess. Moving a tab into a group moves it next to that group's other tabs.

While a group is collapsed it shows a single pill, and tab switching treats it as one stop — Ctrl+Tab steps onto the group rather than through its hidden members, and arriving expands it. You never land on a tab you cannot see.

[paste]

Pasting into a terminal is the one place where clipboard content becomes an executed command. If a copied snippet ends in a newline, the shell runs it the instant it lands — no keypress, no chance to read it. toowl strips that trailing newline on pastes worth a second look, so the command sits on your prompt and waits for you to press Enter.

KeyDefaultNotes
strip_trailing_newline_on_dangeroustrueStrip the trailing newline when the paste matches dangerous_patterns.
strip_trailing_newline_on_multilinetrueSame scrub for any paste containing an embedded newline — i.e. one that would run several commands without confirmation.
dangerous_patternssee belowCase-sensitive substrings that flag a paste. Your entries are appended to the defaults, not a replacement for them.

The default pattern list:

[paste]
dangerous_patterns = [
  "sudo ", "rm -rf", "rm -fr", "curl ", "wget ",
  "| sh", "| bash", "chmod +x", "dd if=", ":(){:|:&};:",
]

This delays auto-execution; it does not block anything. The unstripped text still reaches the shell and Enter still runs it. It buys you the second needed to notice that what you pasted is not what you copied — which is the actual attack.

[recording]

Controls session recording — capturing the focused pane to an asciinema cast v2 .cast file.

KeyDefaultNotes
dir~/DesktopFolder for .cast files. ~ expands; created on demand. Set empty ("") to fall back to <data_dir>/toowl/recordings (e.g. ~/.local/share/toowl/recordings on Linux).

[search]

URLs for the right-click Web Search and Look Up actions on a text selection (also available in the command palette). {} is replaced with the URL-encoded selection.

KeyDefaultNotes
web_search_urlhttps://www.google.com/search?q={}Search-engine template for Web Search. Swap in DuckDuckGo, Kagi, etc.
dictionary_urlhttps://en.wiktionary.org/wiki/{}Web dictionary for Look Up on Linux/Windows. macOS ignores this and opens the native Dictionary.app (dict://).

[keybindings]

Combo strings use + separators. Modifiers: ctrl, shift, alt, super (also command, cmd, meta, opt). Special keys: enter, tab, escape, pageup, pagedown, home, end, f1f12, arrow keys.

Action names match the Action enum in snake_case — see the Keybindings page for defaults.

[plugins.<id>]

[plugins.claude]
enabled = true

[plugins.my-feather]
enabled = false

Toggle Feathers without restart. Interactive enable/disable in the settings UI is planned.

Workspace state

Tab layout and pane tree persist to ~/.config/toowl/state.json and restore on launch. Legacy config dirs are migrated automatically on first run.