Configuring Kitty
I pretty much live in a mix of vim, a terminal, and a web browser. At most of
my jobs, I’ve been given a Macbook, but at home, I use Linux (System76’s
excellent Pop!_OS for now). Recently, I’ve been
trying to simplify/unify my setup so things work mostly the same between the
two systems.
I’ve been using FiraCode as my monospaced font for a while, and needed a terminal emulator that supported ligatures. On MacOS, iTerm2 handled this, but the default GNOME terminal did not. kitty is a super fast terminal that works on both systems, so I gave that a try.
The speed was the first thing that blew me away. Despite having relatively
minimal configuration in vim, most terminals still took a noticeable amount of
time to even open an empty file. With kitty, it’s largely imperceptible. The
configuration is just a small file (or series of files) that are very well
documented and easy for me to understand.
I did run into one issue that took me a little bit of time to solve. I installed
FiraCode with the NerdFonts project. I’m not sure
if this is an issue with CoreText, fontconfig, how kitty uses either one,
or something else, but despite installing the same font files on both systems,
kitty recognized the font files with different names.
In kitty.conf, the main system font is declared with font_family.
# kitty.conf
font_family FiraCode Nerd Font Retina
...
As far as I’ve been able to ascertain, this doesn’t accept
multiple font names in line. In order to have a largely shared configuration, I
created two additional files, Linux.conf and Darwin.conf. These correspond to
the output of uname -S, since my original intention was to set a global
environment variable OS to the output of uname -S. Then, at the bottom of
kitty.conf, I would include the correct file conditionally based on the
content of that variable.
# kitty.conf
...
include ${OS}.conf
Each file (for now), only has one line.
# Linux.conf
font_family Fira Code Retina Nerd Font Complete Mono
# Darwin.conf
font_family FiraCode Nerd Font Retina
This seemed to work with only a few issues. On MacOS, the OS specific include
worked, in as much as kitty --debug-config would display the correct font,
but it wouldn’t actually get used. I’m not sure why. Setting the MacOS font name
with font_family in kitty.conf worked though. And the OS specific include
worked on Linux. I think kitty requires that whatever font_family is set to
when all of the configurations are loaded must exist. Otherwise, it seems to
fail to load it.