NixOS — декларативный, воспроизводимый Linux.
Вся система описывается в одном конфигурационном файле. Перенос на другую машину — один
git cloneи одна команда пересборки.
Идеология
NixOS ломает привычную модель «ставлю пакеты командой, правлю конфиги вручную». Вместо этого — декларативное описание в configuration.nix (или flake flake.nix). Хочешь nginx? Добавляешь services.nginx.enable = true;. Хочешь пользователя? users.users.alice.isNormalUser = true;. Система пересобирается командой nixos-rebuild switch — и всё.
Главное преимущество — воспроизводимость. Один и тот же конфиг даёт идентичную систему на любой машине. Нет дрифта, нет «работает у меня, но не у тебя».
Nix package manager
В основе — Nix — функциональный пакетный менеджер. Каждый пакет живёт в /nix/store/<hash>-<name> — изоляция по хэшу. Несколько версий одной библиотеки не конфликтуют. Откат системы к прошлому поколению — nixos-rebuild switch --rollback. Никакого apt upgrade, который сломал зависимости.
Flakes
Flakes — современный способ описывать конфигурацию и зависимости. Git-reproducible, lock-файл фиксирует версии. Пока экспериментальная фича, но de facto стандарт в сообществе.
Когда выбирать NixOS
- Нужна воспроизводимость — серверы, рабочие станции, CI.
- Хочешь декларативно управлять десятком машин (NixOS + flakes + deploy-rs/colmena).
- Готов учить DSL на языке Nix.
Минусы
Кривая обучения реальная. Nix-язык непривычен. Документация фрагментарная. Не все проприетарные пакеты есть в nixpkgs — придётся писать overlay или использовать nixpkgs.config.allowUnfree.
Переезд
Миграция с другой системы — не тривиальная. NixOS требует полностью переписать подход к управлению конфигами. Накатить сверху не получится.
Debian — противоположность NixOS: простая, императивная, предсказуемая. Выбирай по потребностям.