TL;DR
Do this first (15 minutes)
- Keep config tiny: theme + font + padding + scrollback + a few cmd/opt keybinds.
- Use Ghostty introspection:
ghostty +list-fonts,ghostty +list-themes,ghostty +show-config --default --docs. - Split your config using
config-file+ optional includes (?work.ghostty).
Don’t do this
- Don’t bind lots of Ctrl combos (tmux/vim/TUIs will suffer). Prefer ⌘/⌥.
- Don’t over-tune: Ghostty aims to be great with defaults; if something feels “necessary”, consider filing a discussion.
Principles (why this guide looks like this)
- Defaults-first. Ghostty explicitly encourages trying it with no config and only changing subjective preferences (theme/font). If you need non-subjective knobs, it might be a product default opportunity.
- tmux is the window manager. Let tmux own pane management and terminal app ergonomics; let Ghostty own macOS windowing, tabs, and fast splits when you’re not inside tmux.
- Claude Code = long output. Optimize for scrollback, readability, and quick “open new surface” patterns.
Config: file locations, syntax, reload
config.ghostty (and legacy config) from ~/Library/Application Support/com.mitchellh.ghostty/ and also supports the XDG path (~/.config/ghostty/). If multiple exist, later files override earlier ones.key = value. Keys are case-sensitive and typically lowercase. Values may be quoted or unquoted.config-file = … to include other config files; prefix with ? to make includes optional (great for machine/work overrides).Introspection commands (use these constantly)
ghostty +list-fonts ghostty +list-themes ghostty +show-config --default --docs
Treat these as your “safe API” for config exploration: they prevent typos and help you stay aligned with your installed version.
Keybindings (tmux/vim-safe defaults)
Guideline: avoid binding Ctrl combos that are commonly used by terminal apps and tmux. Prefer ⌘ and ⌥ on macOS.
Recommended Ghostty-level bindings
- New tab: ⌘+T
- Next/prev tab: ⌘+] / ⌘+[
- Split right / down: ⌘+D / ⌘+⇧+D
- Reload config: keep default ⌘+⇧+,
Let tmux own these
- Pane navigation/resizing
- Split semantics while inside a tmux session
- Copy mode + selection workflows
Reason: tmux gives consistent behavior across SSH, local shells, and different terminals.
Fonts & fallbacks (CJK/emoji/symbols)
Ghostty supports repeating font-family multiple times to build a fallback list. This is the clean way to handle mixed glyph coverage (e.g., English code + Chinese + symbols). Ghostty also documents emoji defaults (macOS uses Apple Color Emoji by default unless overridden).
Practical fallback chain (example)
font-family = "JetBrains Mono" font-family = "PingFang SC" # CJK fallback # Optional: if you want emoji to come from a specific font # font-family = "Apple Color Emoji"
Use ghostty +list-fonts to confirm the exact names installed on your machine.
Claude Code workflow tips
- Scrollback matters. Increase
scrollback-limitso long Claude outputs and diffs don’t get truncated. - One “scratch” surface. Keep one Ghostty tab/pane as a scratchpad for Claude Code, and do actual work inside tmux sessions (per repo).
- Fast context switching. Use tabs for “projects” and tmux windows for “tasks”.
Starter config (copy/paste)
Drop this into ~/Library/Application Support/com.mitchellh.ghostty/config.ghostty (or XDG). It’s conservative and tmux/vim-safe.
# ===== Ghostty: macOS + tmux + vim + Claude Code ===== # Theme & font theme = "TokyoNight" font-family = "JetBrains Mono" font-size = 14 # Readability window-padding-x = 10 window-padding-y = 10 window-padding-balance = true # Claude Code / logs (tune up/down) scrollback-limit = 20000000 # Tabs (macOS-friendly) keybind = cmd+t=new_tab keybind = cmd+]=next_tab keybind = cmd+[=previous_tab # Splits (useful outside tmux) keybind = cmd+d=new_split:right keybind = cmd+shift+d=new_split:down # Optional: config layering # config-file = ?work.ghostty # config-file = ?machine.ghostty
Common pitfalls
- Typos in theme/font names → always validate with
+list-themes/+list-fonts. - Too many Ctrl keybinds → breaks TUIs and tmux muscle memory.
- Expecting all settings to hot-reload → some options require a full app restart (the reference docs call these out).
References
- Ghostty Docs — Configuration overview: https://ghostty.org/docs/config
- Ghostty Docs — Option reference: https://ghostty.org/docs/config/reference
- Config inspiration / examples: https://michaelbommarito.com/wiki/programming/tools/ghostty-configuration/