Nice Terminal Typography

10 Nov 2023

Last updated: 25 Jan 2024

tutorialtypography

I put a lot of emphasis on how my workspace looks. I believe in beauty as a form of function. That’s why i usually spend a lot of time customizing the tools i use.

Here I showcase the two pieces that hold my setup together: the terminal and the typeface.

The terminal: Kitty

My current setup is composed of Kitty, a very simple terminal emulator, paired with Recursive.

Kitty terminal Screenshot

I know there are lots of options out there, like the macOS native terminal emulator or the very ubiquitous iTerm, as well as Warp.

While all those tools are great, only Kitty is able to address all the main features I need:

  1. Fast response for use with Neovim
  2. Support for font ligatures
  3. Great font tools and vast, clear documentation

iTerm is very slow to use with Neovim. It just does not keep up with the tool and drains a lot of battery when doing so. Warp is very fast and snappy, but to this date, it still does not support font ligatures.

Kitty has an incredible font rendering engine. Though the configuration is not as easy as in other terminals, as a Vim user you’ll feel at home, plus it’s quite well documented. This terminal allows you to change fonts per style. That is, you can choose a completely different font for bold and for normal, or for italics. It’s not really obvious why one would do that, but with fonts like Recursive, this is incredibly helpful.

On top of that, Kitty uses basically no battery, as it’s heavily optimized for laptop use. Quite crazy this is a completely free, open source project.

The font: Recursive

Recursive comes in two main flavours: Casual and Linear, and you can download both separately from the Google Fonts page.

Recursive

By downloading both, we can do something like this in our kitty.conf :

font_family        Recursive Monospace Medium
bold_font          Recursive Monospace Casual ExtraBold
italic_font        Recursive Monospace Casual Medium
bold_italic_font   Recursive Monospace Casual ExtraBold

We are telling kitty to use the linear “normal” one in normal text, but when text is bold, use the casual one. Same goes with the italics. This adds an incredibly tasty flavour to the code if your terminal allows for it.

Kitty Screenshot

Particularly within Neovim, I am using the Catppuccin theme which also enables italics in particular places, like function arguments. Notice how the selected text also becomes bold and fancy .

Kitty terminal Screenshot

We can also enable ligatures directly accessing OpenType features independently on each font we declared before:

font_features RecursiveMonospace-Medium +zero +dlig

This makes it so that the 0 character is slashed (+zero ) and the (D)iscretionary (Lig)atures +dlig are enabled in the medium weight of the linear font.

2024