Terminal Fonts Guide¶
Understanding why terminal emulators require monospace fonts and whether proportional fonts from your collection can be used.
The Core Requirement: Monospace Fonts¶
Terminal emulators are built on the assumption that every character occupies the same fixed width. This isn't a limitation - it's fundamental to how terminals work.
Why Terminals Need Monospace¶
Historical Context¶
Terminals evolved from physical teletypewriters and video display terminals (VDTs) where characters were:
- Fixed in grid positions
- One character per cell
- Physically unable to vary width
Modern terminal emulators inherit this design because:
- Decades of Unix software assume monospace
- Terminal protocols (ANSI/VT100) define positions by column/row
- Too much existing software depends on it
Technical Requirements¶
Grid-based positioning:
Every character must align to this grid. Applications position text by column number, not pixel position.
What Breaks with Proportional Fonts¶
Column alignment fails:
Monospace (works):
Column: 1 2 3 4 5 6 7 8
i s o l a t e d
Proportional (breaks):
i s o l a t e d
Column: 1 2 3 4 5 6 7 8 (doesn't match)
The 'i' is narrower than 'w', breaking column calculations.
Applications that break:
lscolumn outputtopand system monitorsvimandemacs(cursor positioning)tmuxand screen multiplexers- Any TUI application
- Tab-aligned data
- ASCII art
- Box-drawing characters
Can Any Terminal Use Proportional Fonts?¶
Rare Exceptions¶
A few specialized terminals attempt proportional font support:
mlterm:
- Experimental proportional font support
- Adjusts terminal grid dynamically
- Many applications still break
ConEmu (Windows):
- Can use proportional fonts
- Limited compatibility with terminal applications
Visual Studio Code integrated terminal:
- Can technically use proportional fonts
- Not recommended, breaks many tools
Why Even Modern Terminals Stay Monospace¶
Modern terminals like Ghostty, Alacritty, and kitty stick with monospace because:
- Compatibility with all terminal software
- Standard terminal protocols expect it
- Nerd Font icons work correctly
- TUI applications render properly
- No edge cases or broken layouts
Can You Use Fonts from new_fonts/?¶
Short answer: No, not for terminal use.
Why Not¶
Fonts in your new_fonts/ directory (1,595 fonts) are likely:
- Proportional fonts for graphic design
- Display fonts for headings
- Script or handwriting fonts
- Decorative fonts for specific uses
None of these are appropriate for terminals.
What Those Fonts Are For¶
Proportional sans-serif (Helvetica, Arial, Roboto):
- UI design
- Websites
- Documents
- Presentations
Proportional serif (Times, Georgia, Merriweather):
- Books
- Articles
- Long-form reading
- Print materials
Display fonts (Impact, Bebas, various decorative):
- Logos
- Headers
- Posters
- Branding
Script/Handwriting (Various cursive styles):
- Invitations
- Greeting cards
- Decorative text
Decorative/Novelty:
- Special projects
- Themed designs
- One-off graphics
Could Any Be Converted?¶
Theoretically: Some proportional fonts could be "converted" to monospace by adjusting character widths.
Practically:
- This is a complex font editing task
- Results usually look bad (too wide or too narrow)
- Existing monospace code fonts are already optimized
- Not worth the effort
What About Propo Nerd Fonts?¶
You might notice Nerd Font Propo variants exist. These are different.
Nerd Font Propo Characteristics¶
Semi-proportional:
- Regular characters have variable widths
- Icons maintain monospace width
- Still not suitable for terminal use
Intended for:
- GUI applications with icon support
- Documents needing Nerd Font icons
- Presentations
- Non-terminal contexts
Not for terminals because:
- Code alignment breaks
- Column-based tools fail
- TUI applications render incorrectly
Note: For comic-style fonts that work in both Ghostty and Kitty, use ComicMonoNF (xtevenx v1) or ComicShannsMono Nerd Font Mono. See Font Terminal Compatibility for details on why some fonts work in one terminal but not another.
Monospace Font Characteristics¶
Fixed Width¶
Every character has identical advance width:
Visual Compensation¶
Monospace fonts visually balance characters despite fixed width:
Narrow characters (i, l, 1):
- Add space around them
- Keep glyph width fixed
Wide characters (m, w, W):
- Condense slightly
- Stay within fixed width
Result: Readable text with perfect alignment
Design Trade-offs¶
Compared to proportional fonts:
- Less efficient use of space
- Can look "loose" or "tight"
- Optimized for code, not prose
- Prioritize clarity over aesthetics
Identifying Monospace Fonts¶
Check with fc-list¶
# List monospace fonts
fc-list :spacing=mono family
# Check if specific font is monospace
fc-list "FiraCode" | grep spacing
```text
### Visual Test
**Type this**:
iiiiiiiiii mmmmmmmmmm
**Monospace**: Both lines same length
**Proportional**: 'mmm' line much longer
### Font Naming Hints
**Usually monospace**:
- Contains "Mono" in name
- Contains "Code" in name
- "Console", "Terminal", "Typewriter"
- "Courier", "Menlo", "Monaco"
**Usually proportional**:
- "Sans", "Serif" without "Mono"
- "Text", "Display", "Book"
- Famous UI fonts (Helvetica, Arial, Roboto)
## Exceptions and Edge Cases
### Variable-Width Glyphs in Nerd Fonts
**Nerd Font (default variant)**:
- Regular characters: Monospace
- Icons: Can extend 1.5-2 cells visually
- Still works because "advance width" stays 1 cell
**This is different** from proportional fonts:
- Proportional: advance width varies
- Nerd Fonts: visual width varies, advance stays fixed
### Fonts Claiming to Be "Monospace" But Aren't
Some fonts say "Mono" but aren't truly monospace:
- May have variable-width diacritics
- Italic variants sometimes proportional
- Ligatures change effective width
**Test before trusting** the name.
## What You Can Do With new_fonts/
### Archive Them
**Realistic use cases**:
- Maybe 5-10 for graphic design projects
- Zero for terminal/coding
### Keep Select Fonts for Other Uses
**If you do graphic design**:
- Keep 20-30 carefully chosen fonts
- Archive the rest
- Organize by category
**If you don't do graphic design**:
- Archive everything
- Download specific fonts when needed
- Save 710MB of disk space
### Make Peace with Not Using Them
**Hard truth**:
- You've had 1,595 fonts
- Haven't used them in 40 years
- Won't start using them now
- They're clutter, not assets
**Better approach**:
1. Archive everything
2. When you need a font, search online
3. Download that specific font
4. Use it for that project
5. Don't hoard "just in case"
## Best Practices for Terminal Fonts
### Choose Proper Monospace
**Start with proven fonts**:
- FiraCode Nerd Font
- JetBrains Mono Nerd Font
- Hack Nerd Font
- Iosevka Nerd Font
- Source Code Pro Nerd Font
**All are**:
- True monospace
- Designed for code
- Have Nerd Font variants
- Well-tested in terminals
### Verify Monospace
**Before committing**:
```bash
# Check font spacing
fc-list "Font Name" | grep spacing
# Should show: spacing=100 (mono)
# Not: spacing=0 (proportional)
Test in Real Use¶
Don't judge by:
- How it looks in a preview
- How it looks in one line of text
Judge by:
- Real code files
- Running
ls -la - Opening
vimorneovim - Running
tmux - Actual terminal use for a week
Font Recommendations by Use Case¶
Pure Terminal Work¶
Priority: Perfect monospace, good distinction
- Hack Nerd Font Mono
- Source Code Pro Nerd Font
- JetBrains Mono Nerd Font Mono
Terminal + Ligatures¶
Priority: Ligatures + monospace
- FiraCode Nerd Font
- JetBrains Mono Nerd Font
- Cascadia Code Nerd Font
Maximum Code Density¶
Priority: Narrow, fits more code
- Iosevka Nerd Font Mono
- Iosevka Term Nerd Font
Comfortable Long Sessions¶
Priority: Readability, less eye strain
- JetBrains Mono Nerd Font
- Source Code Pro Nerd Font
- Meslo Nerd Font
Fun/Personality¶
Priority: Comic sans style, casual
- ComicShannsMono Nerd Font (original Comic Shanns v2 aesthetic)
- SeriousShanns Nerd Font Mono (modified for legibility: clearer a/o, l/1, Y/y)
- ComicMonoNF (xtevenx v1 - works in both Ghostty and Kitty)
Converting a Proportional Font (Don't Do This)¶
Theoretical process:
- Open font in FontForge
- Measure widest character
- Set all glyphs to that width
- Adjust spacing
- Save as new font
Why this is bad:
- Narrow characters too wide (i, l, 1)
- Wide characters too narrow (m, w, W)
- Looks awkward and unbalanced
- Defeats purpose of the original font
- Existing monospace fonts are better
Better approach:
- Use fonts designed for monospace
- Don't try to convert proportional fonts
Terminal Font Rendering¶
Antialiasing¶
What it is: Smoothing of font edges
Affects:
- How crisp text appears
- Readability at small sizes
Your Ghostty config shows:
This keeps fonts thin and crisp.
Ligatures¶
What they are: Multiple characters combined into one glyph
Examples:
=>becomes →!=becomes ≠===becomes ≡
Your config:
You have ligatures disabled. To enable:
Hinting¶
What it is: Instructions for rendering at small sizes
Affects:
- Clarity at 12-14pt sizes
- Pixel grid alignment
Modern fonts have good hinting. Trust them.
Summary¶
Can You Use new_fonts/ in Terminal?¶
No. They're proportional fonts for graphic design, not terminal use.
Why Not?¶
Terminals require monospace fonts for:
- Column alignment
- TUI applications
- Cursor positioning
- ASCII art
- Tab alignment
- Box-drawing characters
What Are Those Fonts For?¶
- Graphic design
- Web design
- Print materials
- Documents
- Presentations
Not for code or terminals.
What Should You Do?¶
- Archive new_fonts/ (see workflow guide)
- Use proper monospace Nerd Fonts for terminal
- If you need a decorative font, download it specifically
- Stop hoarding fonts you'll never use
What Fonts Work in Terminals?¶
Only monospace fonts, specifically:
- Font family name includes "Mono"
- Designed for code/terminal use
- Nerd Font patched variants
- Verified with
fc-listspacing=mono
Your code_fonts/ directory has proper fonts. Your new_fonts/ directory does not.
TL;DR: Terminals need monospace fonts due to their grid-based design. The 1,595 fonts in new_fonts/ are proportional fonts for graphic design and won't work in terminal emulators. Use the fonts in code_fonts/ - they're designed for this. Archive everything in new_fonts/ unless you actually do graphic design work.
Related Documentation¶
- Nerd Fonts Explained - Understanding Nerd Font variants
- Font Weights and Variants - When to use Bold, Italic, etc.
- Font Comparison - Compare fonts in your collection