Привет. Тут я пытаюсь перевести на русский nixos and flakes book, попутно добавляя переводы информации, на которую ссылается автор. Work in progress, все дела. Понимающим английский предлагаю читать оригинал, остальным - добро пожаловать.
Введение в Nix и NixOS
Nix - это декларативный пакетный менеджер, используя который пользователь лишь описывает в конфигах желаемое состояние установленного софта, при этом ответственность за достижение и поддержание этого состояния лежит на пакетнике.
Простыми словами, "декларативность" означает, что для выполнения какого-либо действия пользователю достаточно указать желаемый результат. Скажем, если ему хочется заменить оконный менеджер i3 на sway, nix сделает примерно следующую работу за кадром: поставит новые (нужные для sway, но не i3) зависимости, удалит более не требующиеся зависимости i3, экспортирует нужные свае переменные окружения и т.п.
NixOS - дистрибутив Linux, "построенный поверх" пакетника nix. Последний используется здесь для описания состояния системы.
В общем и целом, состояние операционки включает установленный софт, его конфиги и просто кучу всевозможных бинарных и текстовых файлов, поэтому речь идет лишь о статичной его части. Динамическими же данными, вроде записей в БД, таким образом рулить не получится (никто ведь не хочет при каждом деплое сносить всю информацию, не указанную в конфиге?). Упомянутые "динамические" данные nix и nixos не трогают.
Однако если полностью забить на директорию /home
, где такие данные частенько обитают, развернуть идентичную предыдущей систему не выйдет, т.к. потеряются, например, пользовательские конфиги софта. К счастью, сообществом nix был разработан home-manager - проект, позволяющий описать их (и многое другое) средствами nix.
С учетом описанных фич nix-а странно было бы ожидать увидеть его использование только в домашней среде. Напротив, нередко под его управление передают управление средами разработки, системы сборки софта и образов контейнерных операционок, виртуалки и т.д. Для подобных задач в сообществе так же существуют свои инструменты, вроде NixOps от Nix project или deploy-rs за авторством компании serokell.