Nix, NixOS, Home Manager & Flakes
Мир Nix часто кажется сложным, потому что он переворачивает привычный подход к Linux с ног на голову. Чтобы эта каша улеглась, представь себя не системным администратором, а архитектором, который заказывает здание по чертежам.
Nix (язык и менеджер пакетов) — «Язык чертежей»
В обычном Linux (Ubuntu, Arch) ты даешь команды: «установи это», «удали то». В Nix ты не даешь команд, ты описываешь результат того, что нужно.
- Язык Nix
- Это просто способ написать список желаемого и инструкций, как этого добиться.
- Менеджер пакетов
- Это робот, который читает список, идет на склад и приносит именно те версии программ, которые нужно. Они хранятся в «стерильных» папках в
/nix/store, поэтому разные версии одной программы всегда доступны и нет между ними конфликтов.
NixOS — «Конвейер по сборке системы»
Это дистрибутив Linux, который полностью построен на базе принципов Nix.
Его суть заключается в том, что вместо того, чтобы каждый раз годами настраивать систему вручную, можно написать один файл (configuration.nix), по которому эта система собирается.
Это как чертёж целого дома. Если нужно сменить цвет стен (настройки) или добавить комнату (программу), то правится только чертёж.
Затем нажимается кнопка выполнить, и NixOS пересобирает систему по новому чертежу. Если что-то сломалось, то в меню загрузки выбирается «предыдущая версия дома» и она загружается, как будто ничего и не случалось.
Home Manager — «Дизайнер интерьера»
Управлять личными настройками — конфигами программ, темами оформления, плагинами для оболочек (например, Zsh или Fish) и т.п. — можно вручную, однако удобнее это автоматизировать.
NixOS отвечает за фундамент и стены (ядро, драйверы, системные службы), но он не заходит в личную комнату (папку /home/user). Вот тут и приходит на помощь Home Manager, который тоже построен на принципах Nix.
Если NixOS строит здание, то Home Manager расставляет мебель и вешает шторы так, как тебе нравится.
Flakes (Снежинки) — «Фиксация, заморозка версий»
Раньше в мире Nix было сложно гарантировать, что один и тот же конфиг сработает одинаково на двух разных ПК через год. Так происходит из-за того, что Nix полагается на каналы обновлений (channels), которые постоянно меняются и имеют разные версии (это как устная договорённость).
Flakes добавляют файл flake.lock, который жёстко фиксирует версии всех инструментов (это как строгий бумажный контракт). В этом файле прописывается каждая версия каждой библиотеки. Пока сам пользователь не решит обновить Flake (переписать контракт), система не изменится ни на один байт. Это исключает ситуацию «вчера работало, а сегодня после обновления всё упало».
Обычный Nix-конфиг — это рецепт, в котором написано: «Возьмите муку, воду и дрожжи». Но через год мука может стать другого сорта, а дрожжи — мощнее, и хлеб получится другим.
Flakes — это рецепт, в котором указано: «Возьмите муку марки X из партии №101, воду из конкретного источника и дрожжи из пакетика весом ровно 7 грамм». Файл flake.lock буквально «замораживает» все ингредиенты во времени. Получается идентичный результат и сегодня, и через пять лет.
Как это работает вместе (Итоговая схема)
- Flake — это папка с проектом системы. В ней лежат все инструкции.
- Внутри вызывается NixOS, чтобы он настроил железо и систему.
- Там же подключается Home Manager, чтобы он настроил рабочую среду.
- Всё это написано на языке Nix.
Если пользователь решит переехать на другой ноутбук, он просто копирует свою папку с Flake, запускает одну команду, и через некоторое время у него появляется абсолютно идентичная копия его системы со всеми программами и иконками.
Представь, что ты настраиваешь своё рабочее место в мастерской.
Обычно ты просто помнишь, где что лежит. А Flakes — это мгновенное фото всей твоей мастерской, включая положение каждого винтика и марку каждого инструмента.
Имея это фото (код Flake), ты можешь воссоздать точно такую же мастерскую в пустом гараже на другом конце мира. Ты просто отдаёшь фото роботу, и он расставляет всё по своим местам, в соответствии с кадром.
