ОйТи
November 3, 2024

Hello, NixOS!

Собрался, наконец, с силами, поставил NixOS, настроил и более-менее разобрался с настройкой этого чуда (-юда). Для тех кто в танке не в теме: NixOS — линукс-дистрибутив, построенный на основе пакетного менеджера Nix.

Да, сгенерированная картика. Да, качество - говно. Но мне как-то пофиг, я две недели разбирался с NixOS и мне теперь положен отпуск.

Тут можно было бы и остановиться, но я не садист (хотя тут с какой стороны посмотреть, может лучше бы этим и ограничился 😁): Nix — кроссплатформенная система управления пакетами, использующая так называемую функциональную модель внедрения, в которой компоненты программного обеспечения установлено в каталоги, созданные через криптографические хеши, а зависимости от каждого компонента включены в каждый хеш, тем самым решается проблема «ада зависимостей» © Wikipedia.

Очень интересно, но ничего не понятно? Тогда своими словами попробую: Nix собирает систему не сваливая всё в одно файловое дерево как привычно в линуксе (да и в остальных операционках), здесь каждый пакет складируется в свою директорию, а рабочая система собирается из ссылок и переменных окружения. Другими словами, когда мы устанавливаем тот же bash в каком-нибудь Debian, мы скачиваем пакет, распаковываем его в корень, где все части раскидываются по общим директориям и потом просто через /bin/bash или просто bash запускаем программу. В Nix же пакет bash скачается в Store - хранилище пакетов, затем в PATH добавится новый путь до /bin/ внутри скачанного пакета и мы теперь можем запустить его просто вызвав bash.

Но это не единственное (и, наверное, не главное) значимое отличие от классических дистрибутивов, есть у Nix ещё одна особенность, за которую многие его и любят — тут не ставят программы и не настраивают систему, вместо этого описывают желаемое состояние системы и затем применяют это состояние к системе. Состояние описывается на одноимённом языке программирования Nix, который в целом достаточно простой, хоть и не скажу, что интуитивно понятный (есть местами не очевидные лично для меня места). Другими словами нам не нужно скачать программу X, установить её, настроить, нам нужно записать, что мы хотим систему, в которой есть программа X с определёнными настройками. Всё остальное за нас сделает Nix. И, казалось бы, какая разница — что там скачай, установи, настрой, что здесь — запиши всё это, запусти переконфигурацию. И да, для одной системы, которую раз в 10 лет переустанавливаешь — тут Nix даже проигрывает по многим аспектам. И так до тех пор, пока не понадобился второй компьютер со сходным набором программ и конфигурацией, или пока не сдох диск — данные, конечно, восстановим из бэкапов (ведь есть же бэкапы, правда?), а вот систему придётся настраивать с нуля. С Nix новая рабочая машина с идентичным окружением, набором программ и настройками будет готова к работе через 10-30 минут (в зависимости от опыта и конфигурации системы). Ну и бэкапы ещё развернуть, да.


Ну и в целом по впечатлениям по следам двух недель, с полным погружением, так сказать:

  • Долго не мог понять что такое и зачем эти flakes и home-manager. В итоге примерно понял, что
    • flakes — это не какой-то сторонний модуль, как показалось сначала, а фактически новая версия nix, но завёрнутая в experimental фичу и существующая параллельно старой. По сути это будущее nix, если, конечно, консенсус в сообществе будет достигнут.
    • home-manager — наоборот, внешний модуль. Если сам nix — про настройку системы, то HM — про настройку пользователя и его файлов. И в целом, насколько я понял, всё, что можно сделать HM — можно сделать и голым nix (а вот наоборот — фиг, одним HM не получится полностью настроить юзера). Ну и есть возможность обновлять конфигурацию пользовательскую (всё то, что доступно для HM) без рута. В целом профит неплохой, пользовательский конфиг меняться будет чаще и чем проще это будет делать — тем лучше.
  • С документацией дела обстоят чуть лучше, чем "не очень". Информации много, но часть устарела, часть опирается на классический формат nix, часть — на flake. Чужие примеры часто только ещё больше путают, т.к. все организуют свои конфиги по-своему. И тут выход только один — сесть один раз и разобраться в теории, перечитать доки, туториалы и основные статьи. И читать придётся на английском — в русскоязычном сегменте по Nix информации не так, чтобы очень много. Пара дней на изучение теории и практических упражнений всё становится намного проще и понятней и даже разная организация конфигов перестаёт ставить в тупик.
  • За две недели система показала себя очень стабильно. Ни разу не упало никакое из приложений, ничего не отвалилось. При том, что всё это время я активно пилил конфиг, обновлял систему, перенастраивал всё... С Nix сложно оказаться в ситуации, когда рабочая система вдруг стала нерабочей — всё, что запущено будет работать, что перестанет запускаться после очередного ковыряния в конфиге — откатывается за минуту. И уж не знаю в чём именно дело, но на моём десктопе за 5 лет побывало много дистрибутивов и на всех почти всегда были две бесячие проблемы: система могла зависнуть намертво при выходе из сна (или переходе в него) и иногда отваливался звук так, что только ребут помогал и иногда даже не один). Разные ядра, разные DE, разные дистрибутивы — эти проблемы были везде. В NixOS же за две недели не вылезло ни разу (раньше каждые 2-3 дня приходилось перезагружаться обязательно из-за тех багов), недельный аптайм на фоне активной работы и ковыряния в системе — я как-то уже отвык, что так бывает...
  • Наличие копии конфига в репозитории на NAS под столом, из которого я разверну точно такую же систему за считанные минуты — греет душу и дарит спокойствие. Хоть и раньше я не особо часто переустанавливал систему — раз в полтора-два года обычно, но вот рабочий ноут, который впаривает каждая компания, в которую я устраиваюсь, настраивать каждый раз задалбывает. Сейчас же я знаю, что в следующий раз, когда решу сменить место работы, мне не придётся ещё несколько часов потратить на то, чтобы привести очередной ноутбук в рабочее состояние. И это так же добавляет свои 5 копеек к моему дзену.

В целом впечатлений от системы значительно больше. И если поначалу было некоторое сомнение в том, что я смогу усидеть на этой системе дольше пары месяцев, то со временем сомнения развеялись. Сейчас, когда я стал понимать сам Nix значительно лучше, разобрался во многих непонятных аспектах, появились уже сомнения, что я вообще когда-нибудь поменяю NixOS на что-то другое.

И хотя сейчас уже мой конфиг уже даёт мне систему полностью готовую к работе, играм и серфингу в интернете, практически всё то же, что и было у меня на том же Арче, у меня уже есть несколько идей, что ещё можно докрутить, чтобы сделать свою систему ещё лучше. И, что самое главное, мне не нужно ни капли волноваться, что какая-то случайность заставит меня начать весь процесс настройки и вылизывания системы с нуля.