Guidance for editing Ghostty terminal configuration files. You must use this skill when creating or modifying Ghostty config files.
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: ghostty-config
description: Guidance for editing Ghostty terminal configuration files. You must use this skill when creating or modifying Ghostty config files.
# allowed-tools: "Read,Edit,Write,Grep,Glob"
model: "inherit"
---
# Ghostty Configuration
Guidance for configuring the Ghostty terminal emulator. Ghostty uses text-based config files with sensible defaults and zero required configuration.
## Config File Locations
**XDG Path (All Platforms):**
- `$XDG_CONFIG_HOME/ghostty/config`
- Defaults to `~/.config/ghostty/config` if XDG_CONFIG_HOME undefined
**macOS Additional Path:**
- `~/Library/Application Support/com.mitchellh.ghostty/config`
- If both XDG and macOS paths exist, both are loaded with macOS path taking precedence
## Config Syntax
```
# Comments start with #
background = 282c34
foreground = ffffff
font-family = "JetBrains Mono"
keybind = ctrl+z=close_surface
font-family = # Empty value resets to default
```
**Rules:**
- Keys are **case-sensitive** (use lowercase)
- Whitespace around `=` is flexible
- Values can be quoted or unquoted
- Empty values reset to defaults
- Every config key works as CLI flag: `ghostty --background=282c34`
## Config Loading & Includes
Files processed sequentially - later entries override earlier ones.
```
# Include additional configs
config-file = themes/dark.conf
config-file = ?local.conf # ? prefix = optional (no error if missing)
```
**Critical:** `config-file` directives are processed at the file's end. Keys appearing after `config-file` won't override the included file's values.
## Runtime Reloading
- **Linux:** `ctrl+shift+,`
- **macOS:** `cmd+shift+,`
Some options cannot be reloaded at runtime. Some apply only to newly created terminals.
## CLI Commands
Ghostty provides CLI actions via `ghostty +<action>`. Use `ghostty +<action> --help` for action-specific help.
### Configuration Commands
| Command | Description |
|-----------------------------------------|----------------------------------------|
| `ghostty +show-config` | Show current effective configuration |
| `ghostty +show-config --default` | Show default configuration |
| `ghostty +show-config --default --docs` | Show defaults with documentation |
| `ghostty +validate-config` | Validate configuration file for errors |
| `ghostty +edit-config` | Open config file in default editor |
### Listing Commands
| Command | Description |
|------------------------------------|---------------------------------------|
| `ghostty +list-fonts` | List available fonts (fixed-width) |
| `ghostty +list-themes` | List available colour themes |
| `ghostty +list-keybinds` | Show current keybindings |
| `ghostty +list-keybinds --default` | Show default keybindings |
| `ghostty +list-colors` | List available colour names |
| `ghostty +list-actions` | List all available keybinding actions |
### Other Commands
| Command | Description |
|-------------------------|------------------------------|
| `ghostty +version` | Show version information |
| `ghostty +help` | Show help |
| `ghostty +show-face` | Show font face information |
| `ghostty +ssh-cache` | Manage SSH terminfo cache |
| `ghostty +crash-report` | Generate crash report |
| `ghostty +new-window` | Open new window (Linux only) |
| `ghostty +boo` | Easter egg |
### Launching with Options
Every config key works as a CLI flag:
```bash
ghostty --background=282c34 --font-size=14
ghostty -e top # Run command in terminal
```
**macOS Note:** The `ghostty` CLI is a helper tool. To launch the terminal use `open -na Ghostty.app` or `open -na Ghostty.app --args --font-size=14`.
## Keybinding Syntax
Format: `keybind = trigger=action`
### Triggers
**Modifiers:** `shift`, `ctrl`/`control`, `alt`/`opt`/`option`, `super`/`cmd`/`command`
```
keybind = ctrl+a=select_all
keybind = ctrl+shift+t=new_tab
keybind = super+backquote=toggle_quick_terminal
```
**Physical keys (W3C codes):** `KeyA`, `key_a`, `Digit1`, `BracketLeft`
- Physical keys have higher priority than unicode codepoints
- Use for non-US keyboard layouts
**Key sequences (leader keys):**
```
keybind = ctrl+a>n=new_window # Press ctrl+a, release, press n
keybind = ctrl+a>ctrl+n=new_window # Both with ctrl
```
Sequences wait indefinitely for next key.
### Prefixes
| Prefix | Effect |
|----------------|---------------------------------------------------------------------------------------|
| `global:` | System-wide (macOS: needs Accessibility permissions; Linux: needs XDG Desktop Portal) |
| `all:` | Apply to all terminal surfaces |
| `unconsumed:` | Don't consume input (passes through) |
| `performable:` | Only consume if action succeeds |
Combine prefixes: `global:unconsumed:ctrl+a=reload_config`
**Note:** Sequences cannot be used with `global:` or `all:` prefixes.
### Special Values
- `keybind = clear` - Remove ALL keybindings
- `keybind = ctrl+a=unbind` - Remove specific binding
- `keybind = ctrl+a=ignore` - Prevent processing by Ghostty and terminal
## Shell Integration
Auto-injection for: **bash**, **zsh**, **fish**, **elvish**
```
shell-integration = detect # Default - auto-detect shell
shell-integration = none # Disable auto-injection
shell-integration = fish # Force specific shell
```
### Shell Integration Features
```
shell-integration-features = cursor,sudo,title
shell-integration-features = no-cursor # Disable specific feature
```
| Feature | Description |
|----------------|-------------------------------|
| `cursor` | Blinking bar at prompt |
| `sudo` | Preserve terminfo with sudo |
| `title` | Set window title from shell |
| `ssh-env` | SSH environment compatibility |
| `ssh-terminfo` | Auto terminfo on remote hosts |
### What Shell Integration Enables
1. Smart close (no confirm when at prompt)
2. New terminals start in previous terminal's directory
3. Prompt resizing via redraw
4. Ctrl/Cmd+triple-click selects command output
5. `jump_to_prompt` keybinding works
6. Alt/Option+click repositions cursor at prompt
### Manual Setup (if auto-injection fails)
**Bash** (add to `~/.bashrc` at top):
```bash
if [ -n "${GHOSTTY_RESOURCES_DIR}" ]; then
builtin source "${GHOSTTY_RESOURCES_DIR}/shell-integration/bash/ghostty.bash"
fi
```
**Zsh:**
```zsh
source ${GHOSTTY_RESOURCES_DIR}/shell-integration/zsh/ghostty-integration
```
**Fish:**
```fish
source "$GHOSTTY_RESOURCES_DIR"/shell-integration/fish/vendor_conf.d/ghostty-shell-integration.fish
```
**macOS Note:** `/bin/bash` does NOT support automatic shell integration. Install Bash via Homebrew or manually source the script.
## Common Configuration Patterns
### Theme with Light/Dark Mode
```
theme = light:catppuccin-latte,dark:catppuccin-mocha
```
### Quick Terminal (Drop-down)
```
quick-terminal-position = top
quick-terminal-size = 50%
quick-terminal-autohide = true
keybind = global:super+backquote=toggle_quick_terminal
```
### Custom Colour Palette
```
palette = 0=#1d2021
palette = 1=#cc241d
# ... (0-255 supported)
```
### Font Configuration
```
font-family = "JetBrains Mono"
font-family-bold = "JetBrains Mono Bold"
font-size = 14
font-feature = -calt # Disable ligatures
font-feature = -liga
```
### Background Transparency
```
background-opacity = 0.9
background-blur = true # macOS, KDE Plasma only
```
## Platform-Specific Notes
**macOS Only:**
- `window-position-x/y`, `window-save-state`, `window-step-resize`
- `window-vsync`, `window-colorspace`
- `macos-titlebar-style`, `toggle_window_float_on_top`
- `font-thicken`, `font-thicken-strength`
- `toggle_visibility`, `undo`, `redo`, `check_for_updates`
- Global keybindings require Accessibility permissions
**Linux/GTK Only:**
- `window-title-font-family`, `window-subtitle`
- `window-titlebar-background/foreground` (requires `window-theme = ghostty`)
- `window-show-tab-bar`, `gtk-single-instance`
- `toggle_maximize`, `toggle_window_decorations`
- `toggle_tab_overview`, `toggle_command_palette`
- `prompt_surface_title`
**Linux Wayland Only:**
- `quick-terminal-keyboard-interactivity`
- `gtk-quick-terminal-layer`, `gtk-quick-terminal-namespace`
**FreeType (Linux) Only:**
- `freetype-load-flags`
## Reference Files
For complete option and keybinding references, load:
- **`references/options.md`** - All config options by category (font, colour, window, etc.)
- **`references/keybindings.md`** - All keybinding actions with parameters
Load these when you need specific option details, valid values, or keybinding action syntax.
No comments yet. Be the first to comment!