Ghostty is a modern terminal emulator written in Zig that emphasizes native platform integration, blazing-fast performance, and stunning visual customization through GLSL shaders. It brings cutting-edge features while maintaining the speed of traditional terminals.
Why Ghostty?
Native Performance Written in Zig with Metal/Vulkan rendering for maximum speed
Custom Shaders GLSL shader support for cursor effects and visual customization
Modern Features Splits, tabs, and modern terminal protocols
Platform Native True native feel on macOS and Linux
Ghostty is currently in early access and rapidly evolving. The Gentleman.Dots configuration showcases its powerful shader system with 50+ custom cursor effects.
Installation
Install Ghostty
macOS
Linux (Build from Source)
Arch Linux
# Currently requires early access or building from source
brew install --cask ghostty
# Or from official releases
# Download from https://ghostty.org/
Install IosevkaTerm Nerd Font
# macOS
brew tap homebrew/cask-fonts
brew install font-iosevka-term-nerd-font
# Linux - Download from nerdfonts.com
Link Gentleman.Dots configuration
# Create config directory
mkdir -p ~/.config/ghostty
# Link the entire GentlemanGhostty directory
# This includes config, themes, and shaders
ln -sf ~/Gentleman.Dots/GentlemanGhostty/ * ~/.config/ghostty/
Launch Ghostty
Open Ghostty and enjoy your modern terminal with shader effects!
Configuration Breakdown
The Gentleman.Dots Ghostty config (GentlemanGhostty/config) is feature-rich and includes shader customization:
Custom Shader System
# Enable custom GLSL shader for cursor effects
custom-shader = shaders/cursor_smear_gentleman.glsl
This is the standout feature of the Ghostty config. The shader creates a smooth cursor trail effect as you type.
The GentlemanGhostty/shaders/ directory contains 50+ shader options! Change custom-shader to any of these:
cursor_blaze.glsl - Fiery cursor trail
cursor_frozen.glsl - Icy, crystalline effect
cursor_smear_rainbow.glsl - Rainbow gradient trail
crt.glsl - Retro CRT monitor effect
starfield.glsl - Space background
And many more!
Transparency & Blur
background-opacity = 0.95
background-blur-radius = 20
Ghostty’s blur implementation is particularly smooth:
95% opacity - Subtle transparency
20px blur radius - Soft, modern background blur
Platform-native - Uses Metal on macOS, Vulkan on Linux
Window Decoration
gtk-tabs-location = hidden
window-decoration = false
Creates a minimal, distraction-free interface:
Hidden tab bar (use splits instead)
No window decorations for maximum screen space
Color Palette
The config uses a custom color scheme (not standard Kanagawa):
# Background and foreground
background = 06080f # Deep blue-black
foreground = f3f6f9 # Soft white
# Cursor
cursor-color = e0c15a # Golden yellow
# Selection
selection-background = 263356 # Deep blue
selection-foreground = f3f6f9 # Soft white
This unique color scheme complements the shader effects, with the golden cursor (#e0c15a) standing out beautifully against the deep background.
Normal Colors (0-7)
palette = 0=#06080f # Black (background)
palette = 1=#cb7c94 # Red
palette = 2=#b7cc85 # Green
palette = 3=#ffe066 # Yellow
palette = 4=#7fb4ca # Blue
palette = 5=#ff8dd7 # Magenta
palette = 6=#7aa89f # Cyan
palette = 7=#f3f6f9 # White
Bright Colors (8-15)
palette = 8=#8a8fa3 # Bright black (gray)
palette = 9=#de8fa8 # Bright red
palette = 10=#d1e8a9 # Bright green
palette = 11=#fff7b1 # Bright yellow
palette = 12=#a3d4d5 # Bright blue
palette = 13=#ffaeea # Bright magenta
palette = 14=#7fb4ca # Bright cyan
palette = 15=#f3f6f9 # Bright white
Font Configuration
font-family = IosevkaTerm NF
font-size = 14
# font-size = 20 # Commented alternative for larger text
Window Sizing
window-padding-color = extend
window-step-resize = false
window-padding-balance = true
window-height = 100
window-width = 100
These settings create:
Full window coverage - 100% width and height
Balanced padding - Symmetric window padding
Extended padding color - Padding matches background
macOS Option Key Fix
# Make Option key work as Alt (left side only)
macos-option-as-alt = left
# Unbind conflicting shortcuts
keybind = alt+left=unbind
keybind = alt+right=unbind
The macos-option-as-alt = left setting enables Alt+f/Alt+b for word navigation in shells, but unbinds Alt+Arrow keys which macOS uses for word jumping in GUI apps.
Split Management
# Create splits
keybind = alt+v=new_split:right # Vertical split
keybind = alt+d=new_split:down # Horizontal split
# Navigate splits
keybind = alt+k=goto_split:up
keybind = alt+j=goto_split:down
keybind = alt+h=goto_split:left
keybind = alt+l=goto_split:right
# Resize splits
keybind = ctrl+shift+j=resize_split:up,10
keybind = ctrl+shift+k=resize_split:down,10
keybind = ctrl+shift+h=resize_split:left,10
keybind = ctrl+shift+l=resize_split:right,10
These Vim-style keybindings (hjkl) make split navigation feel natural for Vim/Neovim users. The config integrates seamlessly with the GentlemanNvim setup.
Special Keybindings
# Clear screen
keybind = cmd+k=clear_screen
# Write screen to file and paste path (for Neovim integration)
keybind = alt+s=write_screen_file:paste
# Shift+Enter sends proper escape sequence
keybind = shift+enter=text:\x1b\r
The alt+s binding is particularly clever:
Captures terminal screen content to a file
Pastes the file path
Useful for opening terminal output in Neovim: alt+s then prepend nvim
Shader Gallery
The Gentleman.Dots config includes 50+ GLSL shaders in GentlemanGhostty/shaders/:
Cursor Effects
Visual Effects
Backgrounds
Experimental
Cursor Trail Shaders
cursor_smear_gentleman.glsl - Default smooth trail (current config)
cursor_smear_fade.glsl - Fading trail effect
cursor_smear_glow.glsl - Glowing trail
cursor_smear_rainbow.glsl - Rainbow gradient trail
cursor_blaze.glsl - Fiery particle effect
cursor_blaze_tapered.glsl - Tapered flame effect
cursor_frozen.glsl - Icy, crystalline cursor
Example: custom-shader = shaders/cursor_smear_rainbow.glsl
Aesthetic Shaders
crt.glsl - Classic CRT monitor effect with scanlines
bettercrt.glsl - Improved CRT with better colors
bloom.glsl - Bloom/glow effect on text
retro-terminal.glsl - 80s terminal aesthetic
underwater.glsl - Underwater wavering effect
glitchy.glsl - Glitch art effects
Example: custom-shader = shaders/crt.glsl
Background Shaders
starfield.glsl - Animated starfield
starfield-colors.glsl - Colored stars
galaxy.glsl - Swirling galaxy background
fireworks.glsl - Animated fireworks
sparks.glsl - Particle sparks
just-snow.glsl - Falling snow effect
gradient-background.glsl - Animated gradient
Example: custom-shader = shaders/starfield.glsl
Advanced/Experimental
inside-the-matrix.glsl - Full Matrix effect
gears-and-belts.glsl - Mechanical steampunk
smoke-and-ghost.glsl - Ethereal smoke effects
manga_slash.glsl - Anime-style slash effects
party_sparks.glsl - Party mode!
Example: custom-shader = shaders/inside-the-matrix.glsl
Some experimental shaders may impact performance. Test before using in production work.
Key Features
Ghostty feels truly native:
macOS : Uses native Swift/Metal for window management and rendering
Linux : Integrates with GTK and uses Vulkan for rendering
Proper font rendering : Uses platform font APIs (CoreText on macOS)
Rendering Metal/Vulkan GPU acceleration
Ghostty rivals Alacritty for raw speed while offering more features.
Split & Tab Management
Built-in tiling with intuitive keybindings:
# Create splits
Alt+V # Split right
Alt+D # Split down
# Navigate
Alt+H/J/K/L # Vim-style navigation
# Resize
Ctrl+Shift+H/J/K/L # Resize splits
Shell Integration
Works perfectly with all Gentleman.Dots shells:
# Full compatibility with Zsh features
# oh-my-zsh, powerlevel10k, etc. all work
Working with Gentleman.Dots
With or Without Tmux
Ghostty’s native splits mean tmux is optional:
Option 1: Use Ghostty splits alone
# Ghostty's native splits with shaders work great
# Alt+V/Alt+D to create splits
# Alt+H/J/K/L to navigate
Option 2: Combine with tmux
# Use tmux for:
# - Session persistence
# - Remote sessions
# - Complex automation
tmux attach || tmux new
Ghostty’s shader effects work whether you use tmux or not, making it visually distinctive either way.
Neovim Integration
The alt+s keybinding creates a powerful Neovim workflow:
# Run a command with lots of output
npm run build
# Press Alt+S to capture output to file
# Then type:
nvim < cursor-is-here-with-pat h >
# Opens the output in Neovim for analysis
Customization Examples
Change Shader Effect
Try different cursor effects:
# Smooth trail (default)
custom-shader = shaders/cursor_smear_gentleman.glsl
# Rainbow trail
# custom-shader = shaders/cursor_smear_rainbow.glsl
# Fiery effect
# custom-shader = shaders/cursor_blaze.glsl
# CRT monitor
# custom-shader = shaders/crt.glsl
# No shader (maximum performance)
# custom-shader =
Adjust Transparency
# More transparent
background-opacity = 0.85
# Less transparent
# background-opacity = 0.98
# Fully opaque
# background-opacity = 1.0
Alternative Font Sizes
# Smaller (more content)
font-size = 12
# Default
# font-size = 14
# Larger (presentations)
# font-size = 20
Custom Color Schemes
The config includes the Catppuccin Mocha theme:
# Try the included Catppuccin theme
# Edit config to import it:
# In config file, add:
import = themes/catppuccin-mocha.conf
Advanced Features
Conditional Configuration
Ghostty supports conditional config based on OS:
# macOS-specific settings
[macos]
macos-option-as-alt = left
# Linux-specific settings
[linux]
gtk-titlebar = false
Configuration Reloading
Ghostty can reload config without restart:
# Edit config file, then:
# Send SIGUSR1 to reload
killall -SIGUSR1 ghostty
Multiple Configurations
Create different configs for different workflows:
# Create alternate config
cp ~/.config/ghostty/config ~/.config/ghostty/config-minimal
# Launch with specific config
ghostty --config ~/.config/ghostty/config-minimal
Complex shaders impact performance:
Lightweight
cursor_smear*.glsl
gradient-background.glsl
dither.glsl
Performance-Heavy
inside-the-matrix.glsl
gears-and-belts.glsl
galaxy.glsl
crt.glsl (with scanlines)
For maximum performance on battery: set custom-shader = (empty) to disable shaders entirely.
Reduce Blur
# Less blur = better performance
background-blur-radius = 10
# No blur (fastest)
# background-blur-radius = 0
Troubleshooting
Shader Not Working
Check shader path
Ensure the shader file exists: ls ~/.config/ghostty/shaders/cursor_smear_gentleman.glsl
Verify shader syntax
Ghostty logs shader errors. Check logs:
Try simpler shader
Test with a minimal shader: custom-shader = shaders/negative.glsl
Font Issues
Ghostty is strict about font names. Use exact PostScript name:
# Find exact font name
fc-list | grep -i iosevka
# Use exact name in config
font-family = IosevkaTerm NF
Split Navigation Not Working
# Ensure keybindings aren't conflicting
# Check if another app is capturing Alt+H/J/K/L
# Try alternative bindings in config:
keybind = ctrl+alt+k=goto_split:up
keybind = ctrl+alt+j=goto_split:down
keybind = ctrl+alt+h=goto_split:left
keybind = ctrl+alt+l=goto_split:right
Comparison
Feature Ghostty Alacritty WezTerm Kitty Speed ⚡⚡⚡ ⚡⚡⚡ ⚡⚡ ⚡⚡ Shaders ✅ GLSL ❌ ❌ ✅ Limited Splits ✅ Native ❌ ✅ Native ✅ Layouts Memory ~20MB ~15MB ~50MB ~30MB Native Feel ⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐ Config Language Conf TOML Lua Conf Maturity 🆕 Early ✅ Stable ✅ Stable ✅ Stable
Next Steps
Explore Shaders Try different visual effects
Shell Configuration Set up Zsh, Fish, or Nushell
Neovim Setup Complete your development environment
Compare Terminals See all terminal options
Resources