Global config

View as markdown

Two files under ~/.shelbi/ hold hub-wide settings that apply across every project on your machine, independent of any single project's config mode: config.yaml (UI preferences) and keys.yaml (keybindings). Both are optional: absent or partial files fall back to built-in defaults, never an error.

Home resolution

~/.shelbi/ is the default base. It can be relocated via --root, then $SHELBI_ROOT, then $SHELBI_HOME, before falling back to $HOME/.shelbi. Every path below joins a filename onto that base.

config.yaml

Per-user UI preferences. Distinct from shelbi.yaml (the per-project last_launched index) so a future shelbi config reset can wipe UI tweaks without touching hub bookkeeping. A missing file, or one that omits a block, resolves to defaults.

Path: ~/.shelbi/config.yaml

FieldTypeRequiredDefaultDescription
keymap.zen_togglechordnoalt-zChord that toggles Zen Mode on and off. The canonical place to set it is keys.yaml (defaults.global.zen_toggle).
editorstringno$EDITOR, else vimEditor the review interface's "Edit in <editor>" view launches in the review worktree. Hub-wide, so it follows you across projects. May be a bare command (hx) or one with flags (code --wait). Resolution order: this key, then $EDITOR, then vim.
# ~/.shelbi/config.yaml
keymap:
  zen_toggle: ctrl-g
editor: code --wait

The editor display label in the switcher is the program's basename with its first letter upper-cased — hx shows as Edit in Hx, code --wait as Edit in Code.

zen_toggle chords

The accepted values for the Zen toggle chord:

ValueKey
alt-zAlt+Z (default)
ctrl-backslashCtrl+\
ctrl-gCtrl+G
ctrl-shift-zCtrl+Shift+Z
nonedisabled — no chord toggles Zen Mode

keys.yaml

Overrides for the TUI keybindings. Built-in chords apply out of the box; this file layers on top of them, either globally (defaults) or per project (projects.<name>). Parse errors never fail the load. A mistyped entry is skipped and that action keeps its built-in chord.

Path: ~/.shelbi/keys.yaml

Shape

# ~/.shelbi/keys.yaml
defaults:                 # applies to every project
  <mode>:
    <action>: <chord | [chords] | null>
projects:                 # per-project overrides, keyed by project name
  <project-name>:
    <mode>:
      <action>: <chord | [chords] | null>

Bindings resolve in three layers, each overriding the last: built-in defaults → defaults.<mode>.<action>projects.<name>.<mode>.<action>.

BlockTypeRequiredDefaultDescription
defaultsmap of mode → action → chord(s)noOverrides applied to every project.
projectsmap of project name → (mode → action → chord(s))noOverrides scoped to one project; win over defaults.

Leaf values

The value under each action is untyped so one bad entry only affects itself:

FormMeaning
scalar string (alt-z)Bind the action to a single chord.
list ([k, up])Bind the action to several chords.
[] (empty list)Deliberately unbind the action.
nullNo override — fall through to the layer below.

Modes

The valid top-level keys under defaults and each projects.<name>:

global, sidebar, kanban, popover, review, activity, palette.

global bindings apply everywhere; the rest scope to their pane.

Actions

The action names accepted under each mode, with their built-in chords:

ModeActionBuilt-in
globalquitctrl-c
globalzen_togglealt-z
globalopen_palettectrl-p
sidebarnav_up / nav_downk,up / j,down
sidebaractivateenter,space
sidebarrefreshr
kanbannav_left / nav_righth,left / l,right
kanbannav_up / nav_downk,up / j,down
kanbanmove_card_left / move_card_rightH / L
kanbanreorder_up / reorder_downK,shift-up / J,shift-down
kanbanopen_popoverenter,space
kanbancycle_workflow_filtertab
popovercloseesc,enter,space,q
popoverscroll_up / scroll_downk,up / j,down
popoverpage_up / page_downpage-up,u / page-down,d
reviewnav_up / nav_downk,up / j,down
reviewscroll_body_up / scroll_body_downK / J
reviewactivateenter,space
activityscroll_up / scroll_downk,up / j,down
activityreset_filtera
activitytoggle_zen_filterz
activitytoggle_workspaces_filterw
palettecloseesc,ctrl-c,ctrl-p
paletteactivateenter
palettenav_up / nav_downup / down

Most modes also carry refresh (r) and scroll-navigation actions (page_up/page_down, scroll_home); the table lists the ones you're most likely to rebind.

# rebind the palette opener globally, and vim-swap kanban nav in one project
defaults:
  global:
    open_palette: ctrl-k
projects:
  myapp:
    kanban:
      move_card_left: [H, ctrl-h]

Sibling files

Two more files live under ~/.shelbi/ but are managed by Shelbi rather than hand-edited:

  • shelbi.yaml — hub-wide bookkeeping: a per-project last_launched index used by the project picker. Written when you launch a project.
  • events.log — the cross-project events log. Append-only state, not config.

See also