$linuxjunkies
>

Programming Ligatures and Nerd Fonts on Linux

Install JetBrains Mono and Fira Code Nerd Fonts on Linux, refresh fontconfig, and enable programming ligatures in Kitty, WezTerm, GNOME Terminal, and VS Code.

BeginnerUbuntuDebianFedoraArch7 min readUpdated June 7, 2026

Before you start

  • curl and unzip installed (sudo apt/dnf/pacman -S curl unzip)
  • A terminal emulator that supports custom fonts (Kitty, WezTerm, GNOME Terminal, or Konsole)
  • Basic familiarity with editing config files in your home directory

Programming ligatures turn multi-character sequences like ->, =>, and != into single, visually unified glyphs. Nerd Fonts patch popular coding typefaces with thousands of extra icons used by tools like Starship, Neovim plugins, and ls-color schemes. Together they make a terminal or editor feel genuinely polished rather than just functional. This guide covers installing JetBrains Mono and Fira Code (both in Nerd Fonts editions), registering them with the font system, and enabling ligatures in the most common Linux terminals and editors.

1. Download Nerd Fonts

The Nerd Fonts project ships pre-patched versions of popular typefaces. Each release is a ZIP containing .ttf or .otf files for every style weight. Pick your font family from the Nerd Fonts releases page or pull them directly from GitHub.

Download JetBrains Mono Nerd Font

mkdir -p ~/.local/share/fonts/NerdFonts
cd /tmp
curl -LO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip JetBrainsMono.zip -d ~/.local/share/fonts/NerdFonts/JetBrainsMono

Download Fira Code Nerd Font

curl -LO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraCode.zip
unzip FiraCode.zip -d ~/.local/share/fonts/NerdFonts/FiraCode

Installing under ~/.local/share/fonts/ makes the fonts available only to your user, which is fine for a personal workstation and requires no root access. For system-wide install, use /usr/local/share/fonts/ instead.

2. Refresh the Font Cache

After copying files, tell fontconfig to index them. Applications won't see new fonts until this runs.

fc-cache -fv ~/.local/share/fonts

Verify the fonts are registered:

fc-list | grep -i "JetBrainsMono"
fc-list | grep -i "FiraCode"

Output will list paths and style names — the exact lines vary by how many weights you installed. If nothing appears, double-check you unzipped to the correct directory.

3. Distro Package Managers (Alternative Route)

If you prefer managed packages and don't need the absolute latest Nerd Fonts release, several distros package them.

Debian / Ubuntu

sudo apt install fonts-jetbrains-mono
# Nerd Fonts patched version is not yet in official repos;
# use the manual method above or the nerd-fonts-jetbrains-mono AUR/PPA equivalent

Fedora / RHEL 9+

sudo dnf install jetbrains-mono-fonts-all

Note: the DNF package is the upstream font without Nerd Fonts patching. For the full icon set you still need the manual download above.

Arch Linux

sudo pacman -S ttf-jetbrains-mono-nerd ttf-firacode-nerd

Arch's nerd-fonts group in the official repos is the cleanest option — fully patched, updated regularly, and managed by pacman.

4. Configure Per Terminal

GNOME Terminal

GNOME Terminal supports ligatures natively since version 3.36 (Ubuntu 20.04+, Fedora 32+).

  1. Open Preferences → Profiles → your profile → Text.
  2. Disable Use the system fixed-width font.
  3. Click the font button and type JetBrainsMono Nerd Font.
  4. Choose a size (13–15 pt is comfortable at 1080p) and click Select.

Ligatures are active by default once the font is selected — no extra toggle needed.

Kitty

Kitty has excellent ligature and icon support and reads from ~/.config/kitty/kitty.conf.

font_family      JetBrainsMono Nerd Font Mono
bold_font        JetBrainsMono Nerd Font Mono Bold
italic_font      JetBrainsMono Nerd Font Mono Italic
bold_italic_font JetBrainsMono Nerd Font Mono Bold Italic
font_size        13.0

Reload with Ctrl+Shift+F5 or restart kitty. Ligatures are on by default; to disable them specifically:

disable_ligatures never   # options: never | cursor | always

Alacritty

Alacritty does not support ligatures by design (upstream decision as of 0.13). You get Nerd Font icons, but ligatures are silently skipped. If ligatures matter to you, use Kitty or WezTerm instead. Font config still goes in ~/.config/alacritty/alacritty.toml:

[font]
size = 13.0

[font.normal]
family = "JetBrainsMono Nerd Font Mono"
style  = "Regular"

WezTerm

WezTerm supports ligatures and is Wayland-native. In ~/.config/wezterm/wezterm.lua:

local wezterm = require 'wezterm'
return {
  font = wezterm.font('JetBrainsMono Nerd Font Mono'),
  font_size = 13.0,
  -- ligatures are enabled by default; to disable:
  -- harfbuzz_features = { 'calt=0', 'clig=0', 'liga=0' },
}

Konsole (KDE)

  1. Go to Settings → Edit Current Profile → Appearance.
  2. Click Choose Font, select JetBrainsMono Nerd Font Mono.
  3. Check Enable font ligatures at the bottom of the font dialog.

5. Configure in VS Code and Neovim

VS Code

Open Settings (JSON) with Ctrl+Shift+PPreferences: Open User Settings (JSON) and add:

"editor.fontFamily": "'JetBrainsMono Nerd Font Mono', 'Fira Code', monospace",
"editor.fontLigatures": true,
"editor.fontSize": 14

Neovim (with a GUI or Kitty/WezTerm)

Neovim itself doesn't control font rendering — the terminal or GUI wrapper does. If you use Neovide, add to your init.lua:

vim.opt.guifont = "JetBrainsMono Nerd Font Mono:h13"

In a standard terminal, just ensure your terminal is configured as above and Neovim will inherit it automatically.

6. Verify Ligatures and Icons

A quick visual test — paste this into your shell or a text file open in your editor:

echo "-> => != === >= <= || && ..."
# Should render as single unified glyphs if ligatures are working

For Nerd Font icons, run:

echo -e "\ue0b0 \uf179 \uf303 \ue749"

You should see four distinct icons (a powerline arrow, the Apple logo, the Arch logo, and the Neovim logo). If you see boxes or question marks, the font is not selected correctly in your terminal.

Troubleshooting

  • Icons show as boxes: You selected the non-Mono variant. Use the Nerd Font Mono variant for terminals; the wider Nerd Font variant is for GUI editors where double-width cells aren't a problem.
  • Font not appearing in picker: Run fc-cache -fv again, then log out and back in. Some apps (GNOME Terminal, Konsole) cache the font list at startup.
  • Ligatures not rendering despite correct font: Confirm your terminal supports them (Alacritty does not). In kitty, check disable_ligatures isn't set to always.
  • Wrong weight selected automatically: Some font pickers struggle with large families. Specify exact style names in config files (e.g., JetBrainsMono Nerd Font Mono Bold) rather than relying on a bold toggle.
  • Fira Code ligatures not working in VS Code: Make sure editor.fontLigatures is true, not the string "true" — JSON type matters.
tested on:Ubuntu 24.04Fedora 40Arch 2024.05Debian 12

Frequently asked questions

What is the difference between 'JetBrainsMono Nerd Font' and 'JetBrainsMono Nerd Font Mono'?
The Mono variant forces all Nerd Font icons to a single cell width, which is required for correct alignment in terminal emulators. The non-Mono variant uses double-width cells for some icons, which works better in GUI editors like VS Code but breaks terminal grid alignment.
Do I need Nerd Fonts just for ligatures, or is any font enough?
Ligatures alone only require a font with OpenType ligature tables, like the standard Fira Code or JetBrains Mono. You need Nerd Fonts specifically if you want the extra icons used by tools like Starship, lsd, or Neovim plugin status bars.
Why doesn't Alacritty support ligatures?
The Alacritty developers made an explicit design choice to omit ligature support, citing rendering complexity and performance. If ligatures are important to your workflow, Kitty or WezTerm are functionally equivalent and fully support them.
Will installing Nerd Fonts break my existing font fallback chains?
No. Installing additional fonts only adds to the available set; fontconfig fallback chains pick fonts by family name and coverage. Existing applications keep using whatever font they were already configured for.
How do I keep Nerd Fonts updated?
Arch users get updates via pacman. For manual installs, re-run the curl download commands when a new Nerd Fonts release is tagged on GitHub, re-unzip to the same directory, and run fc-cache -fv again. No application restart is needed for most terminals.

Related guides