← writing

Writing

Twelve lines of Ghostty

2026-06-05 · 2 min

My Ghostty config is twelve lines. Most of what makes the terminal feel right, I let the OS handle.

A config is a list of disagreements with the defaults. Ghostty’s are good, so mine is short. Every line below is one I kept, and why.

Show the full config
~/.config/ghostty/config
theme = dark:Apple System Colors, light:Apple System Colors Light

title = " "
macos-titlebar-proxy-icon = hidden

font-size = 16
font-thicken = true

window-padding-x = 8
window-padding-y = 8
window-padding-balance = true

bell-features = no-title
shell-integration-features = no-cursor
mouse-hide-while-typing = true

term = xterm-256color

Letting the OS pick the colors

theme = dark:Apple System Colors, light:Apple System Colors Light

No Catppuccin, no Tokyo Night. The terminal borrows the OS palette and follows the system appearance: dark when macOS is dark, light when it’s light. Not a theme so much as the absence of one. It stops being decorated and goes back to being a window.

The titlebar, emptied out

title = " "
macos-titlebar-proxy-icon = hidden

The title is a single space, so Ghostty can’t fill it with the shell or the working directory. The proxy icon is gone too. Two lines, one job: no chrome above the content.

Font, thickened

font-size = 16
font-thicken = true

No font-family. Ghostty bundles JetBrains Mono, already the family I use in the editor, so the default is right. font-thicken pushes the glyphs a touch heavier, the way macOS smoothing used to. The one cosmetic line, and I’m keeping it.

Padding, even on all sides

window-padding-x = 8
window-padding-y = 8
window-padding-balance = true

Eight pixels on every edge. balance is the part that matters: without it the bottom and right run tight against the window, because the grid doesn’t divide evenly. Balancing evens all four sides.

Turning off the nudges

bell-features = no-title
shell-integration-features = no-cursor
mouse-hide-while-typing = true

Three refusals. no-title stops the bell from rewriting the title I just cleared. no-cursor keeps the shell’s hands off the cursor shape. mouse-hide-while-typing drops the pointer until I reach for it again.

One line for compatibility

term = xterm-256color

Ghostty’s own terminfo is better, but not every box I SSH into has heard of it. xterm-256color never starts an argument over a remote connection.

Why so little

Keybindings, splits, shaders: untouched, because the defaults haven’t gotten in my way. A line I add today is one I have to remember in a year. The config that ages best disagrees with the defaults as little as it can. When Ghostty ships a better one, I delete a line. That’s the best a config does.

GhosttyterminalmacOSdotfiles