Skip to content

Instantly share code, notes, and snippets.

@shanzi
Last active August 21, 2026 08:00
Show Gist options
  • Select an option

  • Save shanzi/f47aa61e98d0108e1b2aee7eede4f580 to your computer and use it in GitHub Desktop.

Select an option

Save shanzi/f47aa61e98d0108e1b2aee7eede4f580 to your computer and use it in GitHub Desktop.
Herdr Config
# herdr config -- ~/.config/herdr/config.toml
# herdr 0.8.2, macOS + WezTerm. tmux-style keybindings, prefix = ctrl+s.
#
# Install: copy the block below to ~/.config/herdr/config.toml, then
# herdr config check && herdr server reload-config
#
# Notes for anyone reusing this:
# - keys.copy_mode is a real action in 0.8.2 but is missing from
# `herdr --default-config`; it validates fine.
# - Direct (prefix-free) bindings only work reliably as plain ctrl+letter.
# ctrl+alt+..., f7/f8, ctrl+shift+..., and ctrl+tab all failed to register
# in WezTerm on macOS -- shift/alt are lost on control characters.
# - prefix+prefix (ctrl+s ctrl+s) is reserved: it sends a literal ctrl+s.
onboarding = false
[ui.toast]
delivery = "terminal"
[ui]
agent_panel_sort = "spaces"
tab_bar_position = "bottom"
prompt_new_tab_name = false
# Keybindings mirroring ~/.config/tmux/tmux.conf
[keys]
prefix = "ctrl+s"
# tmux: bind C-a / a new-window
new_tab = "prefix+a"
# tmux: bind C-x kill-pane
close_pane = "prefix+ctrl+x"
# tmux: bind C-d detach
detach = "prefix+ctrl+d"
# tmux: bind C-s last-window (prefix+prefix is reserved in herdr, so this lands on prefix+tab;
# herdr has no last-tab action, so this is the back-and-forth pane toggle)
last_pane = "prefix+tab"
cycle_pane_next = "" # freed up for last_pane; prefix+shift+tab still cycles
# tmux: bind d split-window -h (left/right)
split_vertical = "prefix+d"
# tmux: bind D split-window -v (top/bottom)
split_horizontal = "prefix+shift+d"
# tmux: bind h/j/k/l select-pane
focus_pane_left = "prefix+h"
focus_pane_down = "prefix+j"
focus_pane_up = "prefix+k"
focus_pane_right = "prefix+l"
# tmux: bind c copy-mode -- prefix+c now sends ctrl+o to the pane (see keys.command
# below), so scrollback-in-$EDITOR moves back to herdr's default key
edit_scrollback = "prefix+e"
# tmux: . , [ ] resize-pane -- herdr resizes inside a mode, so hjkl/arrows there
resize_mode = "prefix+r"
# moved off prefix+shift+d, which split_horizontal now uses
close_workspace = "prefix+shift+q"
# quick fork: git worktree in its own workspace (default was prefix+shift+g)
new_worktree = "prefix+f"
open_worktree = "prefix+ctrl+f" # reopen an existing worktree
remove_worktree = "prefix+shift+f" # opens a confirmation prompt
# vi-style list movement inside navigate mode (prefix+g): j/k walk the sidebar,
# h/l step panes, shift+j/shift+k keep pane up/down reachable
navigate_workspace_up = "k"
navigate_workspace_down = "j"
navigate_pane_left = "h"
navigate_pane_right = "l"
navigate_pane_up = "shift+k"
navigate_pane_down = "shift+j"
# step through agent rows; ctrl+alt+j/k and f7/f8 did not work here -- wezterm sends
# alt as an esc prefix, and macos eats f7/f8 as media keys. ctrl+letter arrives as a
# single control byte, so it decodes reliably; herdr swallows it in every pane.
next_agent = "ctrl+y" # prefix-free: loops forward over all agents
previous_agent = "prefix+shift+k" # ctrl+shift+y and ctrl+tab both failed to register
# tmux: bind c copy-mode. herdr 0.8.2 ships a native vi copy mode (undocumented in
# --default-config, but keys.copy_mode validates): h/j/k/l w/b/e { } motions,
# / ? n/N search, v/space select, y/enter copy, q/esc exit.
copy_mode = "prefix+c"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment