Introduction to Flakes
Флейки (flakes) - экспериментальная фича Nix-а, предоставляющая в первую очередь возможность следить за версиями внешних зависимостей никсовых выражений, что сильно повышает повторяемость, да и в целом юзабельность системы.
Однако проще объяснить на примере: предположим, пользователь разворачивает NixOS на двух машинах с промежутком в несколько дней. Без флейков возможна ситуация, когда за эти несколько дней какая-то часть софта в репозиториях обновляется, и системы уже нельзя назвать идентичными. Однако с ними "версии репозиториев" фиксируются в flake.lock
-файле и такой проблемы не происходит. Для знакомых с git, в упомянутом файле лежит информация о репозиториях (имя, хозяин, ревизия, хэши и т.п.), в которых хранятся nix expressions, которые собирают софт.
Кстати говоря, несмотря на то, что фича считается экспериментальной, ее использует едва ли не большая часть сообщества.[1]
Флейки и классический Nix
Из-за того, что фичи nix-command
и flakes
не стабилизированы, документация по ним лежит в разделе "нутакое". Классический же nix далеко не так удобен, поэтому на него в контексте предлагается забить и сразу перейти к использования nix-command
и flakes
.
После включения этих фич, следующие комманды перестают быть актуальными, так что их стоит игнорировать (и, возможно, они уйдут):
nix-channel
: штука, подобно классическим пакетникам использующая стабильные/нестабильные/тестовые каналы для менеджмента версий софта.- При использовании флейков нужные каналы прописываются в секции
inputs
файлаflake.nix
.
- При использовании флейков нужные каналы прописываются в секции
nix-env
: использует каналы (сконфиженные черзnix-channel
) для установки софта запустившего ее пользователя (в противовес системной установке). Установленный через нее софт автоматически не пишется в системный конфиг.- Заменен на
nix profile
, но и он идет в разрез с идеями повторяемости, соответственно не рекоммендуем к использованию.
- Заменен на
nix-shell
: создает шелл с доступом к какому-либо софту, что полезно, например, для разработки и тестирования.- Разделен на 3 команды,
nix develop
,nix shell
иnix run
. Разберем их в главе про Разработку.
- Разделен на 3 команды,
nix-build
: собирает пакет и закидывает результат сборки в/nix/store
, однако не записывает ничего в системный конфиг.- Заменен на
nix build
.
- Заменен на
nix-collect-garbage
: удаляет более не используемые объекты в/nix/store
.- Заменен на
nix store gc --debug
.
- Заменен на
- Ряд других не так часто встречающихся команд можно найти в статье Try to explain nix commands.
Примечание:
nix-env -qa
все еще может быть полезен, т.к. возвращает список всех установленных в систему пакетов.
When Will Flakes Be Stabilized?
I delved into some details regarding Flakes:
- [RFC 0136] A Plan to Stabilize Flakes and the New CLI Incrementally: A plan to incrementally stabilize Flakes and the new CLI, still a work in progress.
- Why Are Flakes Still Experimental? - NixOS Discourse: A post discussing why Flakes are still considered experimental.
- Flakes Are Such an Obviously Good Thing - Graham Christensen: An article emphasizing the advantages of Flakes while suggesting areas for improvement in its design and development process.
- Draft: 1-year Roadmap - NixOS Foundation: A roadmap provided by the NixOS Foundation, which includes plans regarding the stabilization of Flakes.
After reviewing these resources, it seems likely that Flakes will be stabilized within one or two years, possibly accompanied by some breaking changes.