TL/DR: Just download Nerd Symbols Only Font and Config Kitty
If you haven't tried the kitty
terminal emulator, it's an awesome one. Even if I was still tortured to use Mac OS X, I think I would use Kitty of iTerm. You'll find that it's noticeably faster than gnome-terminal
or vscode
's built in terminal. (konsole is pretty snappy though)
Kitty has tons of features, however the process to discover and configure those features is a bit more complicated than other terminals that I've used.
For me, the most confusing aspect of kitty was understanding how to setup fonts. I never wanted to learn how kitty deals with fonts. I just wanted a kitty font config that works. If that's all you want, skip to kitty config.
First, Kitty requires that fonts have a fixed spacing
of 100
defined. To check if a font can be used by Kitty, and the exact name you should enter to configure it, you'll want to use:
kitty list-fonts
If you're looking for a good font to use, I suggest you take a look at the open source Fira Code
font, since it has nice ligatures for programming...
If you you have a budget to invest in a programming font, I think the MonoLisa font is even more attractive. To get a monospaced font to show up in Kitty if it's not showing up on it's own, you'll need to edit ~/.config/fontconfig/fonts.conf
and add a section to "scan" for the font "family" and set "spacing" for that family to 100.
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<match target="scan">
<test name="family">
<string>MonoLisa-Regular</string>
</test>
<edit name="spacing">
<int>100</int>
</edit>
</match>
</fontconfig>
Once you edit fontconfig/fonts.conf
you'll need to rebuild the font cache and restart kitty to see the new font.
sudo fc-cache -fr
If kitty list-fonts
still can't find the font that you're looking for, several steps possible steps to resolve are discussed on the kitty issue tracker.
Most terminals need you to setup "patched fonts" if you want to use "powerline" symbols... If you're looking to rice your command line, powerlevel10k, vim-devicons, and vim-airline can will use many of these "patched font" symbols.
If you want to use the "fontconfig" method for your whole configuration, you might be able to add something like the following ~/.config/fontconfig/fonts.conf
so that symbols from the Symbols Nerd Font will be preferred, but I was not able to get this method to work, so I went with the kitty symbol_map
method.
<alias>
<family>monospace</family>
<prefer>
<family>MonoLisa</family>
<family>Symbols Nerd Font</family>
<family>Noto Color Emoji</family>
<family>Noto Sans Symbols2</family>
</prefer>
</alias>
Yes, you list all of them them [symbol_map] and yes you can have multiple ones. However, I recommend against doing that, there is rarely a need for it, since nerd fonts will automatically be used if found in most cases.
kovidgoyal, author of kitty
For me though, "auto detection" of nerd fonts never worked. The most evident example was each time I would run:
vim ~/.vimrc
The stylized "V" from vim-devicons would show a very rarely used Chinese character...
The "quick and dirty" way to get every symbol you want to load is the use the patched Nerd fonts, for example the Fira_Code_vX.X.zip patched Nerd Fonts.
However, with Kitty, the preferred way to get each font to show up is actually NOT to use patched fonts, instead to use kitty's "symbol_map" function.
Map the specified unicode codepoints to a particular font. Useful if you need special rendering for some symbols, such as for Powerline. Avoids the need for patched fonts. Each unicode code point is specified in the form
symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbolsU+<code point in hexadecimal>
. You can specify multiple code points, separated by commas and ranges separated by hyphens.symbol_map
itself can be specified multiple times. Syntax is:
symbol_map codepoints Font Family Name
If you run kitty with, you'll get a list of each character code that's not found on the terminal you launched kitty from.
kitty --debug-font-fallback
For example, on the Right I'm using xterm to edit ~/.config/kitty/kitty.conf
and on the left is my kitty instance... Here you can see pretty clearly the "DejaVu Sans Mono" font is providing the U+2605 (★) and U+21b6 (↶)
I would prefer to get all of the Nerd Fonts from the Nerd Fonts package.
First, make sure you download the "Symbols Nerd Font" (symbols only) font package, you can find it at:
Once you have the Symbols-2048-em Nerd Font Complete.ttf
, copy it to ~/.local/share/fonts
and then run sudo fc-cache -fr
to reload the font cache.
Next, you'll want to add something like this to your kitty config:
font_family FiraCode
# or #
font_family MonoLisa
###########################################################
# Symbols Nerd Font complete symbol_map
# easily troubleshoot missing/incorrect characters with:
# kitty --debug-font-fallback
###########################################################
# "Nerd Fonts - Pomicons"
symbol_map U+E000-U+E00D Symbols Nerd Font
# "Nerd Fonts - Powerline"
symbol_map U+e0a0-U+e0a2,U+e0b0-U+e0b3 Symbols Nerd Font
# "Nerd Fonts - Powerline Extra"
symbol_map U+e0a3-U+e0a3,U+e0b4-U+e0c8,U+e0cc-U+e0d2,U+e0d4-U+e0d4 Symbols Nerd Font
# "Nerd Fonts - Symbols original"
symbol_map U+e5fa-U+e62b Symbols Nerd Font
# "Nerd Fonts - Devicons"
symbol_map U+e700-U+e7c5 Symbols Nerd Font
# "Nerd Fonts - Font awesome"
symbol_map U+f000-U+f2e0 Symbols Nerd Font
# "Nerd Fonts - Font awesome extension"
symbol_map U+e200-U+e2a9 Symbols Nerd Font
# "Nerd Fonts - Octicons"
symbol_map U+f400-U+f4a8,U+2665-U+2665,U+26A1-U+26A1,U+f27c-U+f27c Symbols Nerd Font
# "Nerd Fonts - Font Linux"
symbol_map U+F300-U+F313 Symbols Nerd Font
# Nerd Fonts - Font Power Symbols"
symbol_map U+23fb-U+23fe,U+2b58-U+2b58 Symbols Nerd Font
# "Nerd Fonts - Material Design Icons"
symbol_map U+f500-U+fd46 Symbols Nerd Font
# "Nerd Fonts - Weather Icons"
symbol_map U+e300-U+e3eb Symbols Nerd Font
# Misc Code Point Fixes
symbol_map U+21B5,U+25B8,U+2605,U+2630,U+2632,U+2714,U+E0A3,U+E615,U+E62B Symbols Nerd Font
The list of code point ranges above comes directly from the nerd-fonts test script, with the exception of the "Misc Code Point Fixes" that I added myself through trial and error with --debug-font-fallback
.
You can test that you've got all fonts configured properly by running the "test-fonts.sh" script provided by nerd-fonts.
https://github.com/ryanoasis/nerd-fonts/blob/master/bin/scripts/test-fonts.sh
Be sure to run kitty with kitty --debug-font-fallback
then run this script in your kitty window, and if you've set everything up correctly, you should not see any of the symbol missing or symbol fallback notices that were shown in the screenshot above. Once properly configured you'll get:
If you're experimenting with MonoLisa, here are some settings that I found looked great.
font_family MonoLisa
font_bold MonoLisa-Bold
italic_font MonoLisa-Light
adjust_baseline -4
font_size 14
Without the "adjust_baseline -4", the MonoLisa font was not aligned when I tried.
One last nugget of wisdom here, the "codepoints.net" site is the best unicode character lookup site I've ever seen. You can type the codepoint directly in the URL, and the layout is clean and free of ads.
https://codepoints.net/U+21B5
https://codepoints.net/U+E0A3
https://codepoints.net/U+E615
https://codepoints.net/U+E62B
Did you know there are Unicode codepoints for Egyptian Hieroglyphs?
Now you can put heiroglyphs in your terminal!"
# Egyptian Hieroglyphs are Back!
𓀀 𓀠𓀂 𓀃 𓀄 𓀅 𓀆 𓀇 𓀈 𓀉 𓀊 𓀋 𓀌 𓀠𓀎 𓀠𓀠𓀑
𓀒 𓀓 𓀔 𓀕 𓀖 𓀗 𓀘 𓀙 𓀚 𓀛 𓀜 𓀠𓀞 𓀟 𓀠𓀡 𓀢 𓀣
𓀤 𓀥 𓀦 𓀧 𓀨 𓀩 𓀪 𓀫 𓀬 𓀠𓀮 𓀯 𓀰 𓀱 𓀲 𓀳 𓀴 𓀵
𓀶 ð“€· 𓀸 ð“€¹ 𓀺 ð“€» ð“€¼ ð“€½ ð“€¾ 𓀿 ð“€ ð“ 𓂠𓃠𓄠𓅠𓆠ð“‡
𓈠𓉠𓊠𓋠𓌠ð“ ð“Ž ð“ ð“ 𓑠𓒠𓓠𓔠𓕠𓖠𓗠𓘠ð“™
𓚠𓛠𓜠ð“ ð“ž ð“Ÿ ð“ 𓡠𓢠𓣠𓤠𓥠𓦠𓧠𓨠𓩠𓪠ð“«
𓬠ð“ 𓮠𓯠𓰠𓱠𓲠𓳠𓴠𓵠𓶠𓷠𓸠𓹠𓺠𓻠𓼠ð“½
𓾠𓿠𓂀 ð“‚ ð“‚‚ 𓂃 ð“‚„ ð“‚… 𓂆 𓂇 𓂈 𓂉 ð“‚Š ð“‚‹ ð“‚Œ ð“‚ ð“‚Ž ð“‚
𓂠𓂑 𓂒 𓂓 𓂔 𓂕 𓂖 𓂗 𓂘 𓂙 𓂚 𓂛 𓂜 𓂠𓂞 𓂟 𓂠𓂡
𓂢 𓂣 𓂤 𓂥 𓂦 𓂧 𓂨 𓂩 𓂪 𓂫 𓂬 𓂠𓂮 𓂯 𓂰 𓂱 𓂲 𓂳
𓂴 𓂵 𓂶 𓂷 𓂸 𓂹 𓂺 𓂻 𓂼 𓂽 𓂾 𓂿 𓃀 𓃠𓃂 𓃃 𓃄 𓃅
𓃆 𓃇 𓃈 𓃉 𓃊 𓃋 𓃌 𓃠𓃎 𓃠𓃠𓃑 𓃒 𓃓 𓃔 𓃕 𓃖 𓃗
𓃘 𓃙 𓃚 𓃛 𓃜 𓃠𓃞 𓃟 𓃠𓃡 𓃢 𓃣 𓃤 𓃥 𓃦 𓃧 𓃨 𓃩
𓃪 𓃫 𓃬 𓃠𓃮 𓃯 𓃰 𓃱 𓃲 𓃳 𓃴 𓃵 𓃶 𓃷 𓃸 𓃹 𓃺 𓃻
𓃼 𓃽 𓃾 𓃿