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




