Поставил тему для терминала - получил кашу из символов. Nerd Fonts решает это за пять минут.
Что происходит и почему
Темы для терминалов - oh-my-zsh, Starship, Powerlevel10k, конфиги для Neovim и tmux - активно используют иконки: стрелки ветвления Git, логотипы языков, индикаторы батареи, разделители секций. Эти символы живут в зонах Unicode, которые в обычных шрифтах пустые. Терминал честно рисует то, что находит: прямоугольник-заглушку.
Проблема не в теме и не в терминале. Проблема в шрифте. Он просто не знает, что должно быть в этих кодовых точках.
Nerd Fonts берёт популярные моноширинные шрифты и вшивает в них глифы из десятка иконочных наборов: Font Awesome, Material Design Icons, Octicons, Devicons, Powerline и ещё нескольких. Итого - больше 10 000 глифов в одном шрифте. После замены шрифта квадратики исчезают, и тема выглядит так, как задумал автор.
Для кого это нужно, а для кого нет
Нужно, если вы:
- настраиваете терминал под себя и используете темы с иконками
- работаете в Neovim, Vim с плагином VimDevIcons, или в любом TUI-приложении с иконками
- пишете скрипты, которые выводят статусные строки с символами
- используете Termux на Android и хотите нормальный вид в мобильном терминале
Не нужно, если вы открываете терминал раз в месяц запустить ping и вас устраивает стандартный шрифт. Nerd Fonts - инструмент для тех, кто проводит в терминале часы, а не минуты.
Что внутри: 67 готовых семейств
Проект не заставляет патчить шрифты самостоятельно - хотя такая возможность есть. В репозитории уже собраны 67 готовых семейств: Hack, JetBrains Mono, FiraCode, Cascadia Code, Iosevka, Meslo, Source Code Pro, Ubuntu Mono, Victor Mono и десятки других. Каждое семейство идёт в нескольких вариантах: обычный, жирный, курсив, моноширинный и пропорциональный глифы.
Удобно, что можно выбрать именно тот шрифт, к которому уже привык, и получить его патченную версию - без смены привычки, только с добавленными глифами.
Установка: выбери свой способ
Проект предлагает десять способов установки. Вот четыре самых практичных.
Linux - скрипт установки одного шрифта:
curl -fLo ~/.local/share/fonts/JetBrainsMonoNerdFont-Regular.ttf \
https://github.com/ryanoasis/nerd-fonts/raw/HEAD/patched-fonts/JetBrainsMono/Ligatures/Regular/JetBrainsMonoNLNerdFont-Regular.ttf
Эта команда скачивает один файл шрифта напрямую из репозитория и кладёт его в пользовательскую директорию шрифтов. После этого нужно обновить кэш шрифтов:
fc-cache -fv
fc-cache - утилита из пакета fontconfig, которая пересканирует директории шрифтов и делает новый шрифт видимым для приложений. Флаг -f принудительно обновляет кэш, -v показывает процесс.
macOS через Homebrew:
brew install font-jetbrains-mono-nerd-font
Homebrew Cask хранит патченные шрифты как отдельные пакеты. Замените jetbrains-mono на название нужного шрифта - список доступен в README проекта.
Windows через Scoop:
scoop bucket add nerd-fonts
scoop install JetBrainsMono-NF
Первая строка подключает репозиторий шрифтов к менеджеру пакетов Scoop. Вторая устанавливает конкретный шрифт. После установки шрифт появляется в системе автоматически.
Arch Linux:
sudo pacman -S ttf-jetbrains-mono-nerd
Патченные шрифты есть в официальном репозитории Extra - не нужен AUR, не нужны сторонние источники.
После установки откройте настройки терминала и смените шрифт на установленный. В названии будет «Nerd Font» или «NF» - по этому признаку легко найти.
Патчер: если нужного шрифта нет в списке
67 семейств - много, но не всё. Если вы используете корпоративный шрифт или редкую находку, которой нет в списке, проект предоставляет Font Patcher - скрипт на Python с использованием FontForge.
fontforge -script font-patcher YourFont.ttf --complete
--complete добавляет все доступные наборы глифов разом. Без этого флага по умолчанию добавляются только Seti-UI и Devicons - минимальный набор. Скрипт создаёт новый файл шрифта рядом с оригиналом, не затрагивая исходник.
Для работы нужен установленный FontForge - это отдельный open-source редактор шрифтов. На большинстве дистрибутивов он ставится через системный менеджер пакетов.
Подводные камни, о которых не пишут в README
Первый: не клонируйте репозиторий целиком. Там больше 60 семейств в нескольких вариантах каждое - размер репозитория измеряется гигабайтами. Скачивайте только нужные шрифты через curl или менеджер пакетов.
Второй: пути к файлам в ветке master нестабильны. Если вы автоматизируете установку скриптом, используйте ссылки из конкретного релиза, а не из HEAD. Разработчики честно предупреждают об этом в README - что само по себе редкость.
Третий: после смены шрифта в терминале перезапустите его полностью. Некоторые терминальные эмуляторы кэшируют метрики шрифта и показывают артефакты до перезапуска.
Четвёртый, и это спорный момент: Nerd Fonts использует зоны Unicode, которые формально зарезервированы для частного использования (Private Use Area). Это значит, что если вы откроете текст с такими символами в другом приложении без патченного шрифта - снова увидите квадратики. Это не баг проекта, это архитектурное решение, и оно работает ровно в той среде, для которой предназначено - в терминале с правильным шрифтом.
Что в итоге
62 000 звёзд на GitHub - это не случайность. Nerd Fonts закрывает конкретную проблему конкретным инструментом: берёшь шрифт, который уже знаешь, получаешь его с иконками. Никакой подписки, никакого аккаунта, никакого «скачайте наш лаунчер».
Проект существует с 2014 года, активно поддерживается и покрывает все основные платформы. Для разработчика, который проводит половину рабочего дня в терминале, это не украшение - это инфраструктура.
Единственное, что раздражает: отсутствие нормального поискового интерфейса прямо в терминале для поиска нужного глифа по имени. Cheat Sheet на сайте проекта решает это частично, но хотелось бы nf search arrow прямо в консоли.
А вы пользуетесь патченными шрифтами или держите терминал в спартанском виде без иконок - и считаете всё это лишней мишурой?
Источник: Nerd Fonts - GitHub
🔔 Подписывайтесь на КликХак - разбираем инструменты, которые реально используем, без пересказа пресс-релизов.