Fonts and Appearance
Kitty gives you fine-grained control over how text is rendered — from font family and size to ligatures, cursor shape, window padding, and background transparency.
Core Idea
Kitty uses the GPU for font rendering. The font atlas is stored in GPU memory, enabling fast glyph lookup, ligature shaping, and sub-pixel positioning for all visible characters.
Font Configuration
~/.config/kitty/kitty.conf
# Primary font
font_family JetBrains Mono
font_size 12.0
# Bold and italic variants (optional — kitty auto-selects if omitted)
bold_font JetBrains Mono Bold
italic_font JetBrains Mono Italic
bold_italic_font JetBrains Mono Bold Italic
# Fine-tuning
adjust_line_height 0
adjust_column_width 0
font_features JetBrains-Mono +liga +calt +ss01 +ss02 +ss03
tip
Use kitty --debug-fonts to verify which fonts kitty is loading and whether ligatures are active.
Font Rendering Pipeline
┌──────────┐ ┌──────────────┐ ┌────────────┐ ┌──────────┐
│ Font │ │ Font Atlas │ │ Glyph │ │ GPU │
│ File │ → │ (VRAM) │ → │ Shaper │ → │ Blitter │
│ .ttf │ │ │ │ (HarfBuzz)│ │ │
└──────────┘ └──────────────┘ └────────────┘ └────┬─────┘
▼
┌──────────────┐
│ Framebuffer │
│ → Screen │
└──────────────┘
Ligature Control
# disable ligatures entirely
disable_ligatures always
# disable in certain modes
disable_ligatures cursor # disable when cursor is on text
disable_ligatures never # always show ligatures (default)
| Value | Behavior |
|---|---|
never | Always render ligatures (default) |
always | Never render ligatures |
cursor | Disable ligatures when cursor is on the glyph |
Cursor Configuration
# shape: block, beam (I-beam), or underline
cursor_shape beam
# blink interval (seconds, 0 to disable)
cursor_blink_interval 0.5
# stop blinking after N seconds of inactivity
cursor_stop_blinking_after 15.0
# cursor color (empty = reverse of text color)
cursor #f5e0dc
cursor_text_color #1e1e2e
| Cursor Shape | Visual | Best for |
|---|---|---|
block | █ | Vi/Vim insert mode replacement |
beam | ⎸ | Standard text editor feel |
underline | ‗ | Terminal purists |
Window Padding and Margins
# padding inside the terminal area (left, top, right, bottom)
window_padding_width 4
# margin outside the terminal area (left, top, right, bottom)
window_margin_width 0
# single value applies to all sides, four values for each side
window_padding_width 2 4 2 4 # left top right bottom
Background Transparency
# opacity: 0.0 (fully transparent) to 1.0 (fully opaque)
background_opacity 0.95
# background blur (requires compositor like picom)
background_blur 8
# dimming intensity of inactive windows
inactive_text_alpha 0.75
warning
background_blur requires a compositor (picom, kwin, etc.) and may not work on all window managers. Test with your desktop environment first.
Tab Bar Customization
# tab bar style
tab_bar_style powerline
# tab bar edge: top or bottom
tab_bar_edge bottom
# tab separator
tab_separator " ┇ "
# active tab colors
active_tab_foreground #1e1e2e
active_tab_background #89b4fa
# inactive tab colors
inactive_tab_foreground #bac2de
inactive_tab_background #313244
| Tab Bar Style | Visual |
|---|---|
fade | Tabs fade to background color |
powerline | Unicode powerline separators |
slant | Slanted tab edges |
custom | Arrow-style separators |
hidden | No tab bar |
Common Pitfalls
| Pitfall | Symptom | Fix |
|---|---|---|
| Font name mismatch | Kitty falls back to monospace | Use kitty --debug-fonts to verify |
| Ligatures not showing | Font doesn't have ligatures | Check font with `fc-list |
| Transparency not working | Background is opaque | Ensure compositor is running (picom &) |
| Adjust values too high | Characters clipped | Use small increments (±1) for adjust_line_height |
| Cursor not blinking | cursor_blink_interval 0 | Set to a positive value like 0.5 |
Hands-On Practice
# create a test config
mkdir -p ~/.config/kitty
cat >> ~/.config/kitty/kitty.conf << 'EOF'
# Font settings
font_family JetBrains Mono
font_size 14.0
adjust_line_height 2
# Cursor
cursor_shape beam
cursor_blink_interval 0.5
# Padding
window_padding_width 6
# Transparency
background_opacity 0.92
EOF
# reload
kitty @ load-config
# debug fonts
kitty --debug-fonts 2>&1 | head -20