Skip to content

Instantly share code, notes, and snippets.

@victor-falcon
Last active July 22, 2026 16:55
Show Gist options
  • Select an option

  • Save victor-falcon/40838b25b721be48a7b828b676fd8c41 to your computer and use it in GitHub Desktop.

Select an option

Save victor-falcon/40838b25b721be48a7b828b676fd8c41 to your computer and use it in GitHub Desktop.
My herdr + ghostty terminal config
# ── Theme ─────────────────────────────────────────────────────────────
theme = dark:"zenwritten_dark",light:"zenwritten_light"
background-opacity = 0.9
background-blur = 24
# ── Font ──────────────────────────────────────────────────────────────
font-family = "Cascadia Code"
font-feature = ss01, ss02, ss03, ss19, ss20, calt, ss01
adjust-cell-height = 75%
font-size = 14
# ── Cursor ────────────────────────────────────────────────────────────
cursor-style = block
cursor-style-blink = true
cursor-invert-fg-bg = false
cursor-opacity = .9
# ── Window ────────────────────────────────────────────────────────────
macos-titlebar-style = hidden
macos-option-as-alt = false
macos-auto-secure-input = false
confirm-close-surface = true
window-decoration = auto
window-padding-x = 2
window-padding-y = 0
window-padding-balance = true
# ── Mouse ─────────────────────────────────────────────────────────────
mouse-hide-while-typing = true
# ── Shell integration ─────────────────────────────────────────────────
shell-integration = detect
# ── General ───────────────────────────────────────────────────────────
auto-update = download
auto-update-channel = stable
# ── Keybindings ───────────────────────────────────────────────────────
# Ghostty-native splits/tabs defaults in use (post-zellij):
# cmd+d split right · cmd+shift+d split down · cmd+t new tab
# cmd+w close pane · cmd+alt+w close tab · cmd+1..9 goto tab
# cmd+shift+enter zoom split · cmd+ctrl+arrows resize · cmd+ctrl+= equalize
# Option key: with macos-option-as-alt=false, Option composes accents and no
# longer emits Alt sequences. Unbind Option+arrows so they pass through to the
# shell for word nav, and forward alt+backspace -> backward-kill-word (ESC+DEL).
keybind = alt+left=unbind
keybind = alt+right=unbind
keybind = alt+backspace=text:\x1b\x7f
# Rename the current tab.
keybind = cmd+r=prompt_tab_title
# Switch herdr tabs with cmd+alt+←/→ (zellij muscle memory). Emits the
# Kitty-keyboard CSI-u sequence for ctrl+shift+h / ctrl+shift+l, which herdr
# maps to previous_tab / next_tab. Same text:->herdr trick as cmd+a below.
keybind = cmd+alt+left=text:\x1b[104;6u
keybind = cmd+alt+right=text:\x1b[108;6u
# Maximize (zoom) the focused split — zellij muscle memory.
keybind = cmd+shift+f=toggle_split_zoom
# Move focus between splits — Ctrl+hjkl/arrows, with the `performable:` flag.
# performable = Ghostty consumes the key ONLY if there's actually a Ghostty split
# to move to. At an edge — or inside herdr, where Ghostty sees a single surface —
# the key falls through to the running program, so herdr's vim-herdr-navigation
# plugin (or nvim directly) handles the hop. One binding, works in all three.
keybind = performable:ctrl+h=goto_split:left
keybind = performable:ctrl+j=goto_split:down
keybind = performable:ctrl+k=goto_split:up
keybind = performable:ctrl+l=goto_split:right
keybind = performable:ctrl+left=goto_split:left
keybind = performable:ctrl+down=goto_split:down
keybind = performable:ctrl+up=goto_split:up
keybind = performable:ctrl+right=goto_split:right
# Fixed 150% zoom (14 base × 1.5 = 21pt).
keybind = cmd+ctrl+0=set_font_size:21
# cmd+a emits the ctrl+b byte (\x02) = herdr's prefix (its default). Keeps the
# prefix on cmd+a without clashing with cmd+← (which sends \x01 = ctrl+a).
keybind = cmd+a=text:\x02
# Clear screen. clear_screen doesn't work under herdr (the TUI repaints over it),
# so send the `clear` command to the focused pane's shell. On cmd+k because
# ctrl+shift+l is taken by herdr's switch-tab.
keybind = cmd+k=text:clear\r
# shift+enter -> ESC+Enter: newline without submitting in TUIs/REPLs.
keybind = shift+enter=text:\x1b\r
# ── General ──────────────────────────────────────────────────────────
onboarding = false
# ── Appearance ───────────────────────────────────────────────────────
# >>> herdr-theme-sync managed >>>
# Rewritten by bin/herdr-theme-sync on macOS light/dark change. Edit palettes there.
[theme]
name = "catppuccin-latte"
[theme.custom]
panel_bg = "none"
surface0 = "#e2e2e2"
surface1 = "#d7d7d7"
surface_dim = "#e8e8e8"
overlay0 = "#6b6b6b"
overlay1 = "#565656"
text = "#353535"
subtext0 = "#474747"
red = "#a8334c"
green = "#4f6c31"
yellow = "#944927"
blue = "#286486"
mauve = "#88507d"
teal = "#3b8992"
peach = "#944927"
accent = "#4f6c31"
# <<< herdr-theme-sync managed <<<
# ── Interface ─────────────────────────────────────────────────────────
[ui]
prompt_new_tab_name = false
agent_panel_sort = "priority"
show_agent_labels_on_pane_borders = true
pane_gaps = false
copy_on_select = true
# Sidebar: which columns each row shows for agents and for spaces.
[ui.sidebar.agents]
row_gap = 0
rows = [
["state_icon", "workspace"],
["terminal_title_stripped"],
]
[ui.sidebar.spaces]
row_gap = 0
rows = [
["state_icon", "workspace", "branch", "git_status"],
]
# Toast notifications (off) and clipboard-copy toasts.
[ui.toast]
delivery = "off"
[ui.toast.clipboard]
enabled = false
position = "top-right"
[ui.sound]
enabled = false
# ── Keybindings ───────────────────────────────────────────────────────
[keys]
prefix = "ctrl+b"
previous_workspace = "ctrl+shift+k"
next_workspace = "ctrl+shift+j"
previous_tab = "ctrl+shift+h"
next_tab = "ctrl+shift+l"
# prefix+e enters copy mode; prefix+Shift+e edits scrollback in $EDITOR.
copy_mode = "prefix+e"
edit_scrollback = "prefix+shift+e"
previous_agent = "ctrl+shift+,"
next_agent = "ctrl+shift+."
# prefix+1..9 jumps to a tab. Workspaces/agents go direct (no prefix) below.
switch_tab = "prefix+1..9"
# prefix+n creates a new worktree (default prefix+shift+g is unintuitive).
new_worktree = "prefix+n"
# prefix+d removes the current worktree (opens a confirmation).
remove_worktree = "prefix+d"
# prefix+shift+d closes the current workspace.
close_workspace = "prefix+shift+d"
# Direct jumps without the prefix: ctrl+1..9 -> workspace, ctrl+shift+1..9 -> agent.
# Agents moved off alt: with macos-option-as-alt=false the Option key no longer
# reaches herdr as Alt, so alt+1..9 was dead. ctrl+shift is unaffected.
[keys.indexed]
workspaces = "ctrl"
agents = "ctrl+shift"
# Command bindings — floating popups (each closes when its program exits).
# prefix+ctrl+g opens lazygit.
[[keys.command]]
key = "prefix+ctrl+g"
type = "popup"
command = "lazygit"
width = "90%"
height = "85%"
description = "lazygit popup"
# prefix+shift+c opens a floating scratch shell.
[[keys.command]]
key = "prefix+shift+c"
type = "popup"
command = "zsh"
width = "90%"
height = "85%"
description = "floating shell popup"
# prefix+ctrl+r opens pet snippets in a popup. `pp` is a zsh alias
# (pet exec --color), so run it through interactive zsh to resolve it.
# ponytail: alias-only, breaks if you rename `pp`; hardcode `pet exec --color` if that matters.
[[keys.command]]
key = "prefix+ctrl+r"
type = "popup"
command = "pet exec --color"
width = "90%"
height = "85%"
description = "pet snippets popup"
# Command bindings — new tab.
# prefix+ctrl+v opens nvim in a fresh focused tab.
[[keys.command]]
key = "prefix+ctrl+v"
type = "shell"
command = "herdr pane run \"$(herdr tab create --focus --label nvim | jq -r .result.root_pane.pane_id)\" nvim"
description = "nvim in new tab"
# Command bindings — seamless Ctrl+hjkl navigation between herdr panes and nvim splits.
# Backed by the vim-herdr-navigation plugin (herdr plugin install
# paulbkim-dev/vim-herdr-navigation). navigate.sh forwards the key to nvim when
# the focused pane runs vim/nvim; otherwise it moves herdr pane focus.
[[keys.command]]
key = "ctrl+h"
type = "plugin_action"
command = "vim-herdr-navigation.left"
description = "navigate left (vim/herdr)"
[[keys.command]]
key = "ctrl+j"
type = "plugin_action"
command = "vim-herdr-navigation.down"
description = "navigate down (vim/herdr)"
[[keys.command]]
key = "ctrl+k"
type = "plugin_action"
command = "vim-herdr-navigation.up"
description = "navigate up (vim/herdr)"
[[keys.command]]
key = "ctrl+l"
type = "plugin_action"
command = "vim-herdr-navigation.right"
description = "navigate right (vim/herdr)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment