Теперь я пользователь NixOS. По крайней мере я её установил, разобрался, настроил под себя (на что ушло несколько дней) и вроде бы пока что нравится и можно привыкнуть. Но по сравнению с классическими дистрибутивами NixOS ощущается совсем иначе.

Если надоело каждый раз при установке операционной системы заново ставить программы и каждую по отдельности настраивать, то NixOS спешит на помощь. Ведь здесь это всё делается декларативно в специальном конфигурационном файле, и воспроизводимо на любом компьютере (если исключить взаимодействие с железом). Кроме того, предыдущие конфигурации сохраняются в отдельную опцию в меню загрузчика, чтобы легко откатиться в случае чего. Это намного лучше чем писать скрипты на баше или управлять дотфайлами. Но придётся потратить немало времени на изучение Nix. Зато этот пакетный менеджер доступен и для других дистрибутивов Linux, и для macOS.

Однако в этой системе кроется один большой подвох. Не просто так NixOS называется NixOS, а не Nix Linux. От линукса тут только ядро. Система не следует стандарту файловой иерархии (FHS). В /bin и /usr пусто, а на привычных местах полно символьных ссылок. Значит что большинство скриптов и бинарных файлов для Linux просто не будут запускаться на NixOS.

К счастью, в репозитории Nixpkgs уже подготовлено более 120 тысяч пакетов, что сравнимо с Arch Linux + AUR. И в отличие от AUR, Nikpkgs официальный, встроенный и безопасный. Также можно включить Flatpak и AppImages, последние нужно запускать в обёртке appimage-run.

Тем не менее есть вероятность наткнуться на программы, которых нет в Nikpkgs, и как их ставить не совсем ясно. Например, недавно я писал про XerahS, и хоть её нет даже в AUR, на гитхабе лежит бинарник для линукса, который прекрасно запускается на Arch Linux, но в NixOS так и не получилось запустить или собрать из исходного кода.

Но чуть более известные программы точно должны быть в Nixpkgs? А вот и нет! Хотел поставить Zen Browser, а его там не оказалось. В интернете нашёл репозиторий на гитхабе, в котором сказано как поставить — всего-навсего нужно добавить несколько строчек в flake.nix или home-manager... а что это вообще такое? В стандартном сетапе NixOS этого нет. И тут открывается ещё одна фишка Nix под названием Flakes. Ради неё пришлось изрядно помучиться: посмотреть несколько видео, поискать ответы на форуме и подсмотреть чужие конфигурации. Жаль что только в конце я наткнулся на хорошее руководство об этом.

Flakes действительно очень удобны и хорошо вписываются в концепцию системы, но они экспериментальны, ещё аж с 2020. Поэтому отключены по умолчанию, но всё равно пользуются большой популярностью. С их помощью решаются две проблемы: можно зафиксировать текущие коммиты репозиториев и добавить сторонние.

Самый важный сторонний репозиторий — Home Manager. Он позволяет управлять пользовательской средой. Теперь можно настраивать конфигурацию на уровне пользователя и использовать привычные дотфайлы. Однако некоторые программы всё ещё придётся настраивать на системном уровне.

Теперь установить Zen Browser не проблема. Кроме того, его можно так же декларативно настроить: указать параметры about:config, политики, закладки, пространства, поисковые системы, расширения. Вся эта куча настроек при первом и последующих запусках применяется, как же это удобно!

Дальше по такой же логике можно настроить KDE Plasma с помощью Plasma Manager, но тут уже не настолько всё хорошо. В плазме очень много настроек, но в этом менеджере многие отсутствуют, а мануал плохо задокументирован. В итоге всё равно приходится открывать настройки и ручками переключать галочки. Тем не менее это быстрее чем ставить всё с нуля.

В NixOS прекрасно поддерживаются флатпаки, но чтобы их устанавливать декларативно понадобится nix-flatpak. Флатпаки также удобно ставить и императивно через терминал, Discover или Bazaar.

Программы можно устанавливать и в рамках текущего сеанса оболочки. Для разработчиков это может быть удобно, чтобы для каждого проекта содержать свой набор зависимостей, который можно синхронизировать между другими разработчиками, и не захламлять систему.

Стабильный релиз NixOS выходит раз в полгода, но есть и unstable-ветка. В flake.lock зафиксированы хэши коммитов, и одной командой можно обновить их. Хотя unstable и соответствует ветке master, обновляется не каждый день.

Из-за дублирования версий пакетов система будет весить много. Можно настроить чистку мусора, но я что-то пока не заметил эффекта. Сначала освободил около 20 гигабайт, а после обновления всё закачалось заново и стало весить ещё больше.

Для Arch Linux существует большая хорошая ArchWiki, а для NixOS существуют аж целых две вики: официальная и неофициальная. Не понимаю чем они отличаются кроме движка, но содержимое в обеих такое себе. В целом хорошей документации по Nix мало.

Какой итог получается? Система полностью настраивается в конфигурационных файлах, которые можно делить на части, синхронизировать с другими компьютерами. Система воспроизводится и не ломается. Но ради этого стоит потратить немало времени на изучение не лучшей документации и составления своей конфигурации. В итоге всё равно какие-то программы не получится настроить через конфиг. Стоит ли тратить на это время? Наверное нет, если редко переустанавливаешь систему или только один компьютер. Но просто ради энтузиазма это интересный опыт. Продолжу использовать эту ОС, может быть в будущем дойду до установки как отдельный пакетный менеджер или на сервере.

Пока я копировал конфиги для NixOS из гайдов, случайно перешёл на ветку unstable. Я думал, что unstable будет похож на Arch Linux, в том плане что всегда свежие версии пакетов. А для меня это важно, потому что некоторые программы мне надо иметь на последних версиях. При каждом обновлении Arch Linux я очень редко сталкивался с проблемами, в основном только .0-версии KDE Plasma. Но в NixOS Unstable регулярно возникают проблемы с обновлениями. Название ветки как бы говорит за себя, но я к такому не был готов.

Всё, что я делаю, это только обновляю систему. Если в Arch Linux я сразу вижу обновляемые пакеты, то в NixOS я вижу только хэш коммита. То есть чтобы посмотреть какие программы обновились, мне надо лезть в историю git. Поэтому я почти никогда не знаю что именно обновилось. А если билд не удался, то команда выводит подробный stacktrace, в котором почти нет полезной информации.

Сажусь обновлять систему и вижу, что в stacktrace пишется что-то про Nvidia. Немного поискав в интернете, оказалось, что драйвер Nvidia не совместим с последней версией ядра (6.19). Пришлось в конфиге временно менять на 6.18. А вот mitmproxy починить не удавалось, приходилось ждать пока мейнтейнер пофиксит. Потом после каждой сборки начали сыпаться ошибки Home Manager, что его не удаётся запустить, но при этом всё вроде работает и собирается. И так происходит регулярно.

Но какие-то проблемы для меня до сих пор остаются загадкой. С какого-то момента некоторые программы (предположительно, на GTK) перестали видеть шрифт Noto Sans, и вместо текста в них теперь отображаются квадратики. Это до сих пор не исправилось, и мне приходится использовать шрифт Roboto. А при входе в сеанс (необязательно после обновления) могут пропасть иконки на панели Plasma, приходится удалять и добавлять заново. Ещё наблюдаю уведомления о крашах, которые ни на что не влияют.

По-хорошему на эти проблемы надо писать багрепорты. Но я не всегда знаю чем они вызваны, и я не собираюсь тратить кучу времени на отладку и написание развёрнутого репорта.

Кроме того, unstable не всегда содержит самые свежие версии программ. Некоторые до сих пор висят на устаревших версиях, и я не понимаю почему мейнтейнеры не обновят их. В AUR всё обновлялось почти сразу. Да и сама ветка unstable на несколько дней отстаёт от master, поэтому даже когда фикс вышел, надо ждать несколько дней.

В общем, скорее всего пересяду на стабильную ветку после релиза 26.05. Надо будет научиться ставить определённые программы из unstable. Вместо этого можно было бы просто пользоваться Flatpak, но не все пакеты оттуда можно поставить.

@kttrickster
У меня разные пакеты в конфиге из разных репозиториев. Что надо из unstable, а что не надо из stable. Попробуй так же

https://gitlab.com/my_dots/hyprnixos_dots

my_dots / HyprNixOS_dots · GitLab

GitLab.com

GitLab
@kttrickster У НиксОС плюсы есть?
@nestab Я писал выше. Я пока не переустанавливал систему, поэтому не особо раскрылись.