- Niri
Почему Gentoo
Пользуюсь Linux уже много лет, через многое, так сказать, прошёл. Начинал с простого: Ubuntu, Mint, Fedora, Antergos, потом перешёл к чему-то посложнее: Debian, Arch, ну и до экзотики доходил — Void, NixOS. В общем, перепробовал многое, но в итоге пришёл к Gentoo — и, надеюсь, надолго.
Главная причина в том, что Gentoo даёт мне ровно то, что я хочу: максимальный контроль над каждым аспектом системы. Я сам решаю, какие пакеты будут отвечать за то или иное, с какими параметрами и чем их собирать, а что и вовсе не попадёт в систему.
Portage для меня — один из самых понятных и надёжных пакетных менеджеров. Нравится, как он справляется с ошибками: разрешение зависимостей, информативные сообщения о конфликтах, понятные параметры. В отличие от арчевого pacman, где порой приходится гадать, что пошло не так, Portage всегда объяснит и предложит варианты решения. Он, конечно, довольно медленный по сравнению с другими, но, честно говоря, для меня важнее надёжность и понятность.
Ещё один козырь — стабильность при том, что Gentoo остаётся роллингом. Можно миксовать стабильную основу и свежие версии нужных пакетов через «package.accept_keywords».
Компиляция из исходников, конечно, занимает время, но то, что она даёт мне, перекрывает все недостатки. А когда привыкаешь к USE-флагам, уже сложно понять, как вообще можно настраивать систему без них.
Недостатки
- Компиляция — это всё же долго. Самые тяжёлые пакеты — LLVM, Clang, GCC и ядро — каждый собирается примерно по 1.5-2 часа. При этом ноутбук ощутимо греется, кулеры, конечно, иногда прям ревут. Если давно не обновляться, апдейт системы может затянуться на часы, а то и на весь день (но у меня привычка проверять обновления каждый день, поэтому они редко накапливаются).
- Место на диске. Distfiles у меня занимают ~20 ГБ плюс 17 ГБ кеш ccache (ограничен до 30 ГБ). Итого почти 40 ГБ только на сборочные файлы при 512 ГБ NVMe — ощутимо. Без регулярной чистки eclean цифры были бы больше.
- Пакеты иногда ломаются. Бывает, что отдельные пакеты отказываются собираться из-за агрессивных параметров в make.conf — чаще всего из-за кастомных LDFLAGS. В таких случаях спасает package.env — можно для проблемного пакета временно ослабить флаги, и он соберётся без проблем.
Тем не менее, для меня эти минусы несопоставимы с тем уровнем контроля, который даёт Gentoo.
Железо и оптимизации
- Ноутбук — Redmi Book Pro 14 2022
- Процессор AMD Ryzen 7 6800H
- Встроенная графика Radeon 680M
- 16 ГБ ОЗУ
- NVMe на 512 ГБ
- Экран — 14 дюймов, 2560x1600, 120 Гц
Gentoo собран полностью с помощью LLVM/Clang: компилятор Clang, линкер lld, compiler-rt вместо libgcc, libunwind, libcxx. В качестве ядра — вариант от cachyos.
Профиль системы: default/linux/amd64/23.0/llvm/systemd. Я бы смело перешёл на no-multilib, но злостный steam меня удерживает.
USE-флагами максимально возможно вычищены X, QT, GTK и всякий ненужный для меня мусор.
Ключевые параметры make.conf
- CFLAGS: -O2 -march=native -pipe.
- LDFLAGS — Полный LLVM-тулчейн:
-fuse-ld=lld — линкер от LLVM
-rtlib=compiler-rt / -unwindlib=libunwind — вместо libgcc
-Wl, —-as-needed — не тянуть лишние библиотеки
-Wl, —z,pack-relative-relocs — уменьшение размера бинарников
-Wl, —-icf=all — дедупликация идентичного кода на этапе линковки - Сборка: MAKEOPTS="-j14", EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=14" с PORTAGE_NICENESS="5" — система остаётся отзывчивой даже во время массивной компиляции.
- Кеширование: ccache ограничен 30 ГБ, сжатие через zstd.
Почему Niri
На 14-дюймовом экране ноутбука классические тайлинги вроде Sway или Hyprland теряют смысл — открывать больше двух окон одновременно неудобно. Niri со своим скроллящимся тайлингом решает это иначе: окна выстраиваются в бесконечную горизонтальную ленту, а переключаться между ними жестами на тачпаде — это пик удобства.
Режим Overview в Niri похож на гномовский: свайп четырьмя пальцами вверх — и видно всё, что открыто.
Также есть Alt + Tab — тоже очень удобно. Можно настроить его так, чтобы он показывал либо только окна текущего рабочего стола, либо окна только с одного экрана (если их, конечно, больше одного:), либо окна со всех рабочих пространств.
По стабильности и производительности конкретно у меня Niri ведёт себя лучше, чем Hyprland и Sway. Никаких артефактов, микрофризов или неожиданных падений, которые у меня были у других WM.
Конфиг у Niri не сложный, в формате .kdl, с понятным синтаксисом. Хотя у меня он не особо большой — около 200 строк, каких-то особых требований к окнам у меня нет, поэтому подробно расписывать по этому поводу мне нечего. Могу только подчеркнуть, что в Niri довольно удобно задавать правила сразу для нескольких окон:
window-rule {
match app-id="Throne"
match app-id="lightningview"
default-column-width { fixed 1200; }
default-window-height { fixed 800; }
open-floating true
}
Окружение и софт
- Панель — Waybar (Можно отдельно отметить кастомный модуль waybar-niri-workspaces-enhanced, который позволяет отображать, какие программы на каком рабочем столе открыты)
- Лаунчер — Fuzzel
- Уведомления — Mako
- Блокировка — Swaylock
- Idle-демон — Swayidle
- Обои — Swaybg
- Фото/Видео — LightningView
- Сеть — iwd + impala (TUI приложение для управления Wifi)
- Bluetooth — bluez + bluetui (TUI приложение для управления bluetooth)
- Терминал — Kitty
Шелл — Fish. Не хочу возиться с zsh: какие-то сверхфункции мне не нужны. Достаточно небольшой настройки внешнего вида (в Fish это реализовано очень просто через браузер) и подсказок при вводе.
Редактор — Zed. Ценю его за скорость и удобную работу с ИИ-агентами. В терминале для быстрого редактирования небольших файлов использую Helix.
Файловый менеджер
От GUI-файловых менеджеров отказался — Yazi хватает за глаза, да и в моём рабочем процессе они особо не нужны: большую часть потребностей закрывают cp, mv, rm и т.д. Yazi открываю разве что для предпросмотра фото и видео. Также настроил xdg-desktop-portal-termfilechooser: когда браузер или мессенджер просит выбрать файл, то для диалога выбора файлов открывается Yazi внутри Kitty. Тем более Yazi и Kitty в данный момент единственные, кто поддерживает полноценный drag and drop.
Системный монитор — Btop.
Браузер — Zen Browser с удобной реализацией вертикальных вкладок.
Мессенджеры: Materialgram (клиент Telegram) и Vesktop (клиент Discord).
Звук — PipeWire + WirePlumber. И wiremix (TUI приложение для управления звуком)
Для игр использую только Steam и Protonup-rs для управления разными версиями Proton. Нуууу… и если вдруг появится желание чуть-чуть поиграть в Minecraft, то использую Prism Launcher.
Каких-то сложных скриптов нет, у меня их всего два:
- Скрипт для Mako, который будет выводить уведомление, когда уровень заряда падает до 20% и 5%.
- Скрипт для Waybar на три строчки, чтобы я мог перезапускать его по сочетанию клавиш.
Для пакетов, отсутствующих в официальном репозитории, GURU и других сторонних оверлеях, создал собственный, хотя у меня там всего две программы: LightningView для фото и видео да overlay-manager — для более наглядного управления оверлеями.
Почему systemd
Не буду отрицать — привычки имеют место быть: почти все дистрибутивы, которыми я пользовался до Gentoo, были на systemd. Но дело не только в ней.
Весь мой пользовательский стек запускается через user-сервисы systemd: Waybar, Mako, Swaybg, PipeWire, WirePlumber. Можно было бы прописать их через spawn-at-startup в конфиге Niri или в .bashrc, но user-сервисы дают то, чего нет у этих способов: гарантированный порядок запуска, автоперезапуск при падении и прозрачный мониторинг.
Системные юниты работают без нареканий: scx_loader для sched_ext-планировщика, самописный zram-swap, iwd, bluetooth и т.д.
Systemd-boot — простой, минималистичный, из коробки и не надо ничего отдельно устанавливать.
С OpenRC был опыт на той же Gentoo — быстро упёрся в то, что часть программ не имели с ним нормальной интеграции. Приходилось писать init-скрипты руками. А ещё с OpenRC у меня почему-то постоянно падал iwd.
Кратенько про установку
По времени полная установка заняла около 10 часов — от загрузки live-образа до готового рабочего стола с Niri.
Разметка диска минималистичная: отдельный EFI-раздел и всё остальное пространство под корень. Без swap-раздела — вместо него zram.
Так как устанавливаю систему уже не в первый раз, то на этапе базовой настройки проблем не возникло. Единственная загвоздка случилась при переходе на профиль LLVM/Clang: GCC отказался пересобираться с полным набором LLVM-специфичных LDFLAGS — compiler-rt, libunwind, pack-relative-relocs и ICF оказались для него несовместимы. Решилось через package.env: создал отдельный конфиг /etc/portage/env/clang-for-gcc с урезанными LDFLAGS (-fuse-ld=lld, --as-needed, -O2, --hash-style=gnu) и привязал его к sys-devel/gcc. В остальном переход на LLVM-тулчейн по официальному гайду прошёл без сюрпризов — всё заработало с первой попытки.
Итог
Gentoo + Niri — это система, собранная под меня, мои хотелки и моё железо. Да, компиляция LLVM по два часа — не самая приятная плата, но уровень контроля перевешивает это полностью.
Niri со скроллящимся тайлингом — идеальный компаньон для меня и моего 14-дюймового ноутбука, где классические тайлинги теряют смысл.
Я уже настолько привык к Gentoo, что на других дистрибутивах чувствую себя неуютно: не хватает USE-флагов, не хватает контроля, не хватает Portage.
Что дальше? Жду, пока Steam окончательно перейдёт на 64-бит (по последним новостям это может случиться уже скоро), и сразу перееду на профиль no-multilib.










Комментарии
10:39
10:57
18:59
19:02
19:06
19:09
19:11
12:39
10:49
16:34
Раньше сам собирал все обновления, сторонник этого, сейчас на старом и более слабом ЦП, поэтому ставлю так. Вот что имею сказать: в повседневном использовании этого не заметно, самом примитивном точно. Но у меня есть техническая причина, чтоб смотреть на это так. То есть да, я по-прежнему сторонник локальной компиляции, хотя сейчас этим не занимаюсь, но лишь основных программ, наиболее тяжёлых пакетов, особенно с использоваием ЦП. Оправдано временем/нагрузкой на систему/железо это будет далеко не всегда.
Например, ядро Linux с новым патчем может прилететь в обновке через пару дней, а может через неделю. Пересобирать каждую новинку надоедает.
> Самые тяжёлые пакеты — LLVM, Clang
Эти LLVM/Clang и все сопуствующие пакеты у меня вообще прерывались с ошибкой ближе к концу, а собираются они ой как долго. С GCC проблем не было.
Ещё из плюсов, что не собираю пакеты, у меня теперь / < 5 ГБ.
https://ibb.co/TDWycDLs
> Без регулярной чистки eclean цифры были бы больше
При сборке того же ядра несколько ГБ мусора собирается, хорошо, если сборка будет успешной, а если нет, то всё заново, а после прерывания сборки кэш автоматически удаляется. И это не всё — остатки от сборки пакетов исчисляются десятками ГБ на SSD, я для этого раздел увеличивал, иначе ошибки нехватки места.
> Жду, пока Steam окончательно перейдёт на 64-бит
Аналогично. Хотел поставить, а там нужен Multilib. Но даже после его подключаения всё нужное не установилось, пришлось нужные пакеты доустанавливать отдельно. Столько гемора ради пакета, который меня всё равно не заработал по техническим причинам :(.
Мой конфиг
XBPS_CFLAGS="-O2 -pipe -march=native"
XBPS_CXXFLAGS="${XBPS_CFLAGS}"
XBPS_FFLAGS="${XBPS_CFLAGS}"
XBPS_LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack"
16:58
Хотя при таком способе придётся воздержаться от каких-либо агрессивных оптимизаций, потому что официальный binhost использует довольно консервативные флаги.
В принципе, никто не мешает миксовать: тяжёлые пакеты вроде LLVM, браузеров и т.д. брать из бинарников, а определённые мелкие пакеты собирать с нестандартными USE-флагами.
17:51
Может и заслужил, не буду утверждать...
18:48
18:51
18:54
18:56
19:00
19:08
> На 14-дюймовом экране ноутбука классические тайлинги вроде Sway или Hyprland теряют смысл — открывать больше двух окон одновременно неудобно. Niri со своим скроллящимся тайлингом решает это иначе: окна выстраиваются в бесконечную горизонтальную ленту
А вот тут неточность: в Hyprland есть разные режимы тайлинга, в том числе monocle: https://wiki.hypr.land/Configuring/Layouts/Monocle-Layout/
Как говорится - выбирай на вкус))
19:22
20:39
Минусы в дженту сей час на современном железе как то уже не минусы... за пару часов полное обновление через месяц...
20:42
По теме я слаб, в Calculate так и не разобрался в паре вопросов, но попадал там три раза на компиляцию минут на 30 и теперь предпочитаю более массовые дистрибутивы.
Ноут 14" всё же для мобильности, а не для компиляций, но это не препятствие, если есть интерес или даже страсть к gentoo.
21:09
Это чувство, когда система полностью подконтрольна тебе, без лишнего «мусора» (systemd-вей или openrc-вей — исключительно твой выбор), затягивает навсегда. Это не просто ОС, это конструктор, который ты затачиваешь лично под себя.
23:00
Основную сложность представляет установка терминальными командами, запросто чего-нибудь не установить, даже при наличии бинарников в репах. Отсуствие графического установщика, пусть и простенького tui скрипта, но подходящего для всех, создаёт мощный фильтр для отсеивания и делает систему не массовой.
На github есть скрипт для упрощения и сокращения операций начальных, устанавливает базовые пакеты, основу, но дальше всё равно ручками с настройкой make.conf и прочего, даже вроде без ручного монтирования разделов.
04:18