Previous All Posts Next

Nerd Fonts: Complete Install and Setup Guide (2026)

Posted: April 13, 2026 to Technology.

Nerd Fonts are patched developer fonts that bundle thousands of icons from Font Awesome, Devicons, Powerline, Material Design, and other popular icon sets directly into your monospace typeface. Instead of installing separate icon fonts and hoping your terminal, status bar, and editor all render them correctly, you install one font family and get icons, file-type glyphs, and Powerline symbols everywhere. This guide covers what Nerd Fonts are, which ones to pick, how to install them on every major platform, and how to configure your tools to use them.

At Petronella Technology Group, our engineering team works in terminals all day. Our workstations run NixOS with tiling Wayland compositors, Neovim, tmux, and custom status bars. Nerd Fonts are part of our standard workstation configuration because they eliminate the glyph-rendering headaches that waste time during setup. This guide reflects what we actually run in production.

What Are Nerd Fonts

Nerd Fonts is an open-source project that takes popular programming fonts and patches them with a large collection of icon glyphs. The project was created by Ryan McIntyre and currently patches over 50 font families. Each patched font contains more than 10,000 additional glyphs sourced from icon libraries that developers use daily: Font Awesome, Devicons (file-type icons for programming languages), Codicons (VS Code icons), Powerline and Powerline Extra symbols, Material Design Icons, Weather Icons, Octicons (GitHub icons), and several others.

The key insight behind Nerd Fonts is that modern developer tooling renders icons using Unicode code points in the Private Use Area (PUA). When your terminal, editor, or status bar wants to display a folder icon, a Git branch symbol, or a Python file-type glyph, it outputs a specific Unicode character. If your font has a glyph mapped to that code point, you see the icon. If not, you see a blank box or a question mark. Nerd Fonts ensures that all the common developer icon code points resolve to actual glyphs, so everything renders correctly without juggling multiple font fallback chains.

The project distributes fonts in multiple variants. The standard patched version includes all glyph sets. A "Mono" variant keeps strict monospace metrics (every glyph occupies exactly one cell width), which prevents icon characters from breaking terminal column alignment. A "Propo" variant allows proportional-width icons for GUI applications where strict monospace is not required. For terminal use, always choose the Mono variant.

Why Developers Need Nerd Fonts

If you use any of the following tools, you need a Nerd Font installed or you are seeing broken rendering right now:

  • Terminal file managers like lf, yazi, ranger, or nnn with icon plugins. These tools display file-type icons next to filenames, and those icons come from the Devicons glyph set in Nerd Fonts.
  • Shell prompts like Starship, Powerlevel10k (Zsh), or Oh My Posh. These use Powerline symbols for segment separators and Nerd Font icons for Git status, language versions, and system information.
  • Status bars like Waybar, Polybar, or i3status-rust. Workspace icons, volume indicators, Wi-Fi symbols, and battery gauges all rely on icon fonts.
  • Neovim with plugins like nvim-tree, neo-tree, telescope, lualine, barbar, or bufferline. The modern Neovim plugin ecosystem assumes you have a Nerd Font. Without one, your file explorer shows blank squares instead of folder and file icons.
  • tmux with status line customizations or plugins like tmux-powerline.
  • VS Code with the terminal or file icon themes that reference Nerd Font glyphs.

Beyond rendering icons, several Nerd Font families include programming ligatures. Ligatures combine multi-character sequences like !=, =>, ->, >=, and === into single typographic glyphs that are easier to read at a glance. FiraCode and JetBrains Mono are the most popular ligature-enabled Nerd Fonts. Ligatures are a preference, not a requirement, and can be disabled in any editor or terminal that supports them.

Top 10 Nerd Fonts Ranked

Every font on this list is available as a Nerd Font patched version. Rankings are based on GitHub stars, download counts, readability testing, and our team's daily usage.

1. JetBrainsMono Nerd Font

Created by JetBrains specifically for coding. It has tall x-height for readability at small sizes, 139 code ligatures, and clear distinction between similar characters (1, l, I and 0, O). This is what most of our team uses. It renders cleanly from 10pt to 16pt and looks sharp on both HiDPI and standard displays.

2. FiraCode Nerd Font

The font that popularized coding ligatures. FiraCode has the largest ligature set of any programming font and excellent glyph coverage. It is slightly wider than JetBrainsMono, which some developers prefer for reducing eye strain on ultrawide monitors. The Nerd Font version adds all icon glyphs while preserving FiraCode's ligatures.

3. CascadiaCode Nerd Font

Microsoft's default font for Windows Terminal. It includes ligatures, a cursive italic variant (Cascadia Code Italic), and a version without ligatures (Cascadia Mono). If you work across Windows and Linux and want consistency, CascadiaCode is a solid choice. The Nerd Font patched version is called "CaskaydiaCove Nerd Font" due to naming restrictions.

4. Hack Nerd Font

A clean, no-nonsense font with no ligatures. Hack prioritizes character differentiation and readability over stylistic features. It is a good default for anyone who finds ligatures distracting. Hack has been around since 2015 and is battle-tested across every major terminal and editor.

5. Iosevka Nerd Font

An extremely narrow font that fits more columns on screen. Iosevka is ideal for side-by-side panes in tmux or tiling window managers where horizontal space is limited. It is also the most customizable font on this list: you can build custom variants with specific character shapes, ligatures, and spacing from the Iosevka build system.

6. MesloLGS Nerd Font

The recommended font for Powerlevel10k. MesloLGS is based on Apple's Menlo font (itself derived from Bitstream Vera Sans Mono) and is specifically tuned for Powerline rendering. If you use Zsh with Powerlevel10k, this is the path of least resistance.

7. SourceCodePro Nerd Font

Adobe's open-source monospace font. Clean, professional, and widely deployed. SourceCodePro has no ligatures, which makes it predictable in every rendering context. A dependable choice for shared development environments where personal font preferences vary.

8. UbuntuMono Nerd Font

Canonical's monospace font. Distinctive rounded letterforms with excellent hinting for low-DPI displays. If you run Ubuntu and want your terminal font to match the system aesthetic, UbuntuMono Nerd Font adds icons without changing the look you are used to.

9. Inconsolata Nerd Font

One of the original programming fonts, designed by Raph Levien in 2006. Inconsolata has a compact design and clean curves. It influenced many of the fonts on this list. The Nerd Font version adds glyph coverage while maintaining Inconsolata's characteristic lightweight feel.

10. VictorMono Nerd Font

A semi-narrow font with clean ligatures and a distinctive cursive italic style. VictorMono's italics render comments and keywords in a flowing script that visually separates them from regular code. This is polarizing: some developers love the visual distinction, others find it distracting.

Installation: Linux, macOS, and Windows

Linux (Manual Install)

Download your chosen font from the Nerd Fonts downloads page or from the GitHub releases. Extract and install to your local font directory:

# Create font directory if it doesn't exist
mkdir -p ~/.local/share/fonts

# Download and extract (example: JetBrainsMono)
wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip JetBrainsMono.zip -d ~/.local/share/fonts/JetBrainsMono

# Rebuild font cache
fc-cache -fv

# Verify installation
fc-list | grep "JetBrainsMono"

Linux (Package Manager)

Many distributions package Nerd Fonts directly:

# Arch Linux (AUR)
yay -S ttf-jetbrains-mono-nerd
# Or install all Nerd Fonts
yay -S nerd-fonts-complete

# Fedora (COPR)
sudo dnf copr enable che/nerd-fonts
sudo dnf install nerd-fonts-jetbrains-mono

# Ubuntu/Debian (manual .deb or download)
# No official package — use the manual method above

macOS (Homebrew)

Homebrew's cask tap includes every Nerd Font family:

# Install a specific Nerd Font
brew install --cask font-jetbrains-mono-nerd-font
brew install --cask font-fira-code-nerd-font
brew install --cask font-hack-nerd-font

# Search for available Nerd Fonts
brew search nerd-font

Fonts install to ~/Library/Fonts/ and are immediately available to all applications. No cache rebuild is necessary on macOS.

Windows

Download the ZIP file from the Nerd Fonts releases page. Extract the archive, select all .ttf files, right-click, and choose "Install for all users" (requires admin). Alternatively, use the Windows Package Manager:

# Windows Package Manager (winget)
winget install JetBrains.JetBrainsMono.NerdFont

# Chocolatey
choco install nerd-fonts-jetbrainsmono

# Scoop
scoop bucket add nerd-fonts
scoop install JetBrainsMono-NF

After installing on Windows, restart your terminal application for the font to appear in the font selection menu.

NixOS Declarative Font Setup

NixOS handles fonts declaratively through configuration.nix or a Home Manager flake. This is the approach our team uses because it guarantees every workstation has identical font installations, and rebuilding a machine from scratch automatically includes fonts without manual downloads. For a deeper look at how we use NixOS for infrastructure, see our NixOS AI infrastructure guide.

# configuration.nix
{ pkgs, ... }:
{
  fonts.packages = with pkgs; [
    nerd-fonts.jetbrains-mono
    nerd-fonts.fira-code
    nerd-fonts.hack
    nerd-fonts.iosevka
    nerd-fonts.meslo-lg
  ];

  # Enable fontconfig for better font rendering
  fonts.fontconfig = {
    enable = true;
    defaultFonts = {
      monospace = [ "JetBrainsMono Nerd Font" ];
    };
  };
}

After editing your configuration, rebuild with sudo nixos-rebuild switch. The fonts are available immediately to all applications. This is one of the advantages of NixOS over imperative font installation: adding or removing a font is a one-line configuration change that can be version-controlled in Git and deployed across your entire fleet.

For Home Manager users managing per-user font configuration:

# home.nix
{ pkgs, ... }:
{
  home.packages = with pkgs; [
    nerd-fonts.jetbrains-mono
    nerd-fonts.fira-code
  ];

  fonts.fontconfig.enable = true;
}

Terminal Configuration

Installing a Nerd Font is half the job. You also need to tell your terminal emulator to use it. Here are the configuration snippets for the most popular terminals:

Alacritty

# ~/.config/alacritty/alacritty.toml
[font]
size = 13.0

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

[font.bold]
family = "JetBrainsMono Nerd Font"
style = "Bold"

[font.italic]
family = "JetBrainsMono Nerd Font"
style = "Italic"

Kitty

# ~/.config/kitty/kitty.conf
font_family      JetBrainsMono Nerd Font
bold_font        auto
italic_font      auto
bold_italic_font auto
font_size        13.0

Kitty also supports the symbol_map directive to pull specific Unicode ranges from different fonts, which is useful if you want a non-Nerd base font but need Nerd Font icons. However, using a pre-patched Nerd Font is simpler and avoids potential spacing issues.

WezTerm

-- ~/.config/wezterm/wezterm.lua
local wezterm = require 'wezterm'
local config = {}

config.font = wezterm.font('JetBrainsMono Nerd Font')
config.font_size = 13.0

return config

Windows Terminal

Open Settings (Ctrl+,), select your profile, go to Appearance, and set the Font face to "JetBrainsMono Nerd Font Mono". Alternatively, edit the JSON settings file:

{
    "profiles": {
        "defaults": {
            "font": {
                "face": "JetBrainsMono Nerd Font Mono",
                "size": 12
            }
        }
    }
}

iTerm2

Go to Preferences → Profiles → Text. Click "Change Font" and select your Nerd Font. iTerm2 also supports a separate "Non-ASCII Font" setting, which lets you use a standard font for text and a Nerd Font only for icon characters. For simplicity, we recommend setting both to the same Nerd Font.

GNOME Terminal / Tilix

Open Preferences, select your profile, check "Custom font", and pick the Nerd Font from the font chooser. Use the "Mono" variant to maintain proper terminal column alignment.

IDE and Editor Setup

VS Code

Open Settings (Ctrl+,), search for "Font Family", and add your Nerd Font to the beginning of the font list:

"editor.fontFamily": "'JetBrainsMono Nerd Font', 'Droid Sans Mono', monospace",
"editor.fontSize": 14,
"editor.fontLigatures": true,
"terminal.integrated.fontFamily": "'JetBrainsMono Nerd Font Mono'"

Note that the integrated terminal uses a separate font setting from the editor. If you only set the editor font, your terminal panel will still use the default font and show broken glyphs. Set terminal.integrated.fontFamily explicitly.

Neovim

For GUI Neovim clients (Neovide, nvim-qt), set the font in your init.lua:

-- init.lua
vim.o.guifont = "JetBrainsMono Nerd Font:h13"

For terminal Neovim, the font is controlled by your terminal emulator, not Neovim itself. Configure your terminal as shown above, and Neovim plugins that use Nerd Font icons (nvim-web-devicons, nvim-tree, telescope, lualine) will render correctly.

The nvim-web-devicons plugin provides file-type icon mappings that most Neovim UI plugins depend on. Install it as a dependency and icons appear automatically in file trees, tab lines, and status bars.

JetBrains IDEs (IntelliJ, PyCharm, WebStorm)

Go to Settings → Editor → Font. Set the font to "JetBrainsMono Nerd Font" and enable ligatures if desired. For the integrated terminal: Settings → Tools → Terminal → Font. JetBrains IDEs ship with JetBrains Mono by default, but the bundled version is not the Nerd Font patched version. You need to install the Nerd Font variant separately for icon glyph support.

Waybar, Starship, and Powerline Integration

Waybar

Waybar uses CSS for styling, including font selection. Set the font in your Waybar stylesheet:

/* ~/.config/waybar/style.css */
* {
    font-family: "JetBrainsMono Nerd Font";
    font-size: 14px;
}

#workspaces button {
    font-size: 16px;
}

You can reference Nerd Font icons directly in your Waybar config by pasting the icon character or using its Unicode code point. The Nerd Fonts Cheat Sheet is the essential reference for finding glyph names and their Unicode values. For example, to add a headphones icon to your audio module, find the icon on the cheat sheet, copy it, and paste it into your config:

// ~/.config/waybar/config.jsonc
"pulseaudio": {
    "format": "{icon} {volume}%",
    "format-icons": {
        "default": ["", "", ""]
    }
}

If you are running Waybar on a Wayland compositor like Hyprland or Niri, Nerd Fonts are effectively required for a functional status bar because all default Waybar configurations assume icon font support.

Starship Prompt

Starship is a cross-shell prompt written in Rust that uses Nerd Font icons by default. Its preset configurations assume a Nerd Font is installed. If you see broken characters in your Starship prompt, the fix is almost always "install a Nerd Font and set it as your terminal font."

# ~/.config/starship.toml
# Most settings work out of the box with a Nerd Font
[character]
success_symbol = "[](bold green)"
error_symbol = "[](bold red)"

[git_branch]
symbol = " "

[python]
symbol = " "

[rust]
symbol = " "

[nodejs]
symbol = " "

Starship also offers a plain-text preset (starship preset plain-text-symbols) for environments where Nerd Fonts are not available, such as remote SSH sessions to minimal servers.

Powerline / tmux

Powerline was the original reason patched fonts existed. The Powerline separator characters (U+E0B0 through U+E0B3) are included in every Nerd Font. For tmux with Powerline-style status bars:

# ~/.tmux.conf
set -g status-left "#[fg=black,bg=blue,bold]  #S #[fg=blue,bg=default,nobold]"
set -g status-right "#[fg=brightblack]#[fg=white,bg=brightblack]  %H:%M "

The arrow characters (, ) and icon glyphs (, ) in the snippet above are Nerd Font characters. If they render as boxes in your browser, that confirms the point: without a Nerd Font, they do not display.

How to Patch Your Own Font

If your preferred font is not in the Nerd Fonts collection, you can patch it yourself using the Nerd Fonts patcher. The patcher is a Python script that takes any TrueType or OpenType font and injects the Nerd Font glyph sets into it.

# Clone the patcher (you don't need the full repo)
git clone --depth 1 https://github.com/ryanoasis/nerd-fonts.git
cd nerd-fonts

# Patch a font with all glyph sets
./font-patcher /path/to/YourFont-Regular.ttf --complete

# Patch with specific glyph sets only
./font-patcher /path/to/YourFont-Regular.ttf --fontawesome --powerline --devicons

# Patch for strict monospace (recommended for terminals)
./font-patcher /path/to/YourFont-Regular.ttf --complete --mono

The patcher requires Python 3 and FontForge. On most Linux distributions, install FontForge from your package manager (sudo pacman -S fontforge or sudo apt install fontforge). The --complete flag includes all available glyph sets. The --mono flag forces all patched glyphs to monospace width, which prevents icon characters from disrupting terminal column alignment.

The patcher also runs as a Docker container if you do not want to install FontForge locally:

docker run --rm \
  -v /path/to/fonts:/in \
  -v /path/to/output:/out \
  nerdfonts/patcher --complete --mono

After patching, move the output font files to your font directory and rebuild the cache with fc-cache -fv.

Troubleshooting Common Issues

Icons Display as Empty Rectangles or Question Marks

This means your terminal is not using the Nerd Font. Verify the font is installed (fc-list | grep -i "nerd") and that your terminal configuration specifies the correct font family name. Font names are case-sensitive and must match exactly. Use fc-list output to get the precise name.

Icons Render But Are Misaligned or Overlap Text

You are likely using the non-Mono variant. Switch to the "Mono" version of your Nerd Font (e.g., "JetBrainsMono Nerd Font Mono" instead of "JetBrainsMono Nerd Font"). The Mono variant forces all icon glyphs to single-cell width, which maintains terminal column alignment.

Font Installed But Not Showing in Application Font Picker

Run fc-cache -fv to rebuild the font cache. On some distributions, you may also need to log out and back in. Flatpak and Snap applications may not see user-installed fonts in ~/.local/share/fonts/. For Flatpak apps, grant filesystem access: flatpak override --user --filesystem=~/.local/share/fonts.

Wrong Font Variant Selected

Nerd Fonts ship with multiple variants per family: Regular, Mono, and Propo. Some systems also distinguish between "Nerd Font" and "NF" naming. If icons break after updating, check whether the font family name changed. The Nerd Fonts v3.0 release renamed many fonts (e.g., "JetBrains Mono Nerd Font" became "JetBrainsMono Nerd Font" with no space). Update your configuration files to match the new names.

Ligatures Not Working

Not all terminals support ligatures. Alacritty does not support ligatures by design (the maintainers consider them a text shaping concern, not a terminal concern). Kitty, WezTerm, and iTerm2 all support ligatures. VS Code supports ligatures with "editor.fontLigatures": true. If ligatures are important to your workflow, choose a terminal that supports them.

SSH Sessions Show Broken Icons

The Nerd Font only needs to be installed on the machine running your terminal emulator, not on the remote server. If you SSH into a server and see broken glyphs, your local terminal is not using a Nerd Font, or the specific icon code point is not in your font version. Update your local Nerd Font to the latest release.

Frequently Asked Questions

Do I need to install Nerd Fonts on remote servers?

No. Fonts are rendered by your local terminal emulator. The remote server sends Unicode code points, and your local terminal looks up the glyph in your locally installed font. Install the Nerd Font on your workstation only.

What is the difference between Nerd Font, NF, and NF Mono?

"Nerd Font" and "NF" are equivalent naming conventions used across different versions. "Mono" variants force all glyphs to monospace width for terminal use. "Propo" variants allow proportional-width icons for GUI apps. For terminal use, always pick Mono.

Can I use Nerd Fonts commercially?

Nerd Fonts inherits the license of the base font. JetBrains Mono uses the OFL (SIL Open Font License), FiraCode uses OFL, Hack uses the MIT license. All of these allow commercial use. Check the license file in each font's download for specifics.

How often are Nerd Fonts updated?

The project releases updates several times per year, typically when upstream fonts release new versions or when new icon sets are added. Major version changes (like v2 to v3) can rename font families, so check release notes before upgrading to avoid breaking your configuration.

Will Nerd Fonts slow down my terminal?

No. The additional glyphs increase the font file size (a Nerd Font file is roughly 3-8 MB compared to 200-500 KB for the unpatched version), but font loading happens once at terminal startup. There is no measurable runtime performance impact because the terminal renders one glyph at a time regardless of how many glyphs the font contains.

Which Nerd Font should I pick if I cannot decide?

Start with JetBrainsMono Nerd Font. It has the best combination of readability at small sizes, ligature support, character differentiation, and community adoption. If it does not suit you, try FiraCode (wider, more ligatures) or Hack (no ligatures, maximum clarity).

Getting Your Terminal Set Up Right

The fastest path to working Nerd Fonts: install JetBrainsMono Nerd Font using your package manager or a direct download, set it as your terminal font, and restart. Everything from Starship to Neovim to Waybar will start rendering icons correctly. If you are on NixOS, add it to fonts.packages and rebuild. If you are on macOS, one Homebrew command handles it. The entire process takes under five minutes and eliminates an entire category of "why are there boxes in my terminal" debugging.

If you are configuring Linux workstations for development or AI and want professional assistance with tooling setup, desktop environment configuration, or infrastructure standardization, contact our team at (919) 348-4912 for a consultation.

About the Author: Craig Petronella is the CEO of Petronella Technology Group, a cybersecurity and IT infrastructure firm in Raleigh, NC. With CMMC-RP, CCNA, CWNE, and DFE certifications and over 30 years in IT, Craig's team runs NixOS workstations with Nerd Fonts, tiling Wayland compositors, and custom terminal configurations daily.

Related Guides

Need help implementing these strategies? Our cybersecurity experts can assess your environment and build a tailored plan.
Get Free Assessment

About the Author

Craig Petronella, CEO and Founder of Petronella Technology Group
CEO, Founder & AI Architect, Petronella Technology Group

Craig Petronella founded Petronella Technology Group in 2002 and has spent more than 30 years working at the intersection of cybersecurity, AI, compliance, and digital forensics. He holds the CMMC Registered Practitioner credential (RP-1372) issued by the Cyber AB, is an NC Licensed Digital Forensics Examiner (License #604180-DFE), and completed MIT Professional Education programs in AI, Blockchain, and Cybersecurity. Craig also holds CompTIA Security+, CCNA, and Hyperledger certifications.

He is an Amazon #1 Best-Selling Author of 15+ books on cybersecurity and compliance, host of the Encrypted Ambition podcast (95+ episodes on Apple Podcasts, Spotify, and Amazon), and a cybersecurity keynote speaker with 200+ engagements at conferences, law firms, and corporate boardrooms. Craig serves as Contributing Editor for Cybersecurity at NC Triangle Attorney at Law Magazine and is a guest lecturer at NCCU School of Law. He has served as a digital forensics expert witness in federal and state court cases involving cybercrime, cryptocurrency fraud, SIM-swap attacks, and data breaches.

Under his leadership, Petronella Technology Group has served 2,500+ clients, maintained a zero-breach record among compliant clients, earned a BBB A+ rating every year since 2003, and been featured as a cybersecurity authority on CBS, ABC, NBC, FOX, and WRAL. The company leverages SOC 2 Type II certified platforms and specializes in AI implementation, managed cybersecurity, CMMC/HIPAA/SOC 2 compliance, and digital forensics for businesses across the United States.

CMMC-RP NC Licensed DFE MIT Certified CompTIA Security+ Expert Witness 15+ Books
Related Service
Enterprise IT Solutions & AI Integration

From AI implementation to cloud infrastructure, PTG helps businesses deploy technology securely and at scale.

Explore AI & IT Services
Previous All Posts Next
Free cybersecurity consultation available Schedule Now