Пакетный менеджер Nix без NixOS: воспроизводимые пакеты и окружения
Nix без NixOS работает как второй пакетный менеджер в любом дистрибутиве: всё ставится в /nix/store, разные версии живут рядом, а окружение проекта описывается одним файлом flake.nix. Ниже установка, команды нового CLI, пример окружения для разработки, очистка места и удаление.

Содержание
Зачем ставить Nix в обычный дистрибутив
Nix - это пакетный менеджер, а NixOS - дистрибутив, построенный вокруг него. Пакетный менеджер отлично работает и сам по себе: в Ubuntu, Debian, Fedora, Arch и даже в WSL2. Он не трогает apt или dnf и не лезет в /usr. Всё, что он ставит, лежит в каталоге /nix/store, причём каждая сборка в своей папке с хешем в имени, например /nix/store/abc123...-ripgrep-14.1.1.
Из этого вытекают его сильные стороны:
- Несколько версий рядом. Python 3.11 для одного проекта и 3.13 для другого без конфликтов и без pyenv.
- Воспроизводимость. Файл
flake.nixс файлом блокировки даёт коллеге ровно тот же набор инструментов той же версии. - Откат. Каждое изменение профиля создаёт новое поколение, к предыдущему можно вернуться одной командой.
- Попробовать без установки. Программа запускается во временной оболочке и исчезает из PATH, когда вы из неё выходите.
Цена - порог входа: свой язык описания пакетов, необычная структура каталогов и заметный расход места на диске. Для одной-двух программ проще взять Flatpak, для полноценной чужой системы внутри своей подойдёт Distrobox, о нём статья Distrobox: несколько Linux-сред в одной системе.
Установка Nix: многопользовательский режим
Официальный способ - скрипт с nixos.org. Многопользовательский режим с демоном nix-daemon рекомендуется для систем с systemd и sudo: сборки идут от отдельных служебных пользователей, а не от вас.
# многопользовательская установка, рекомендуется
curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh -s -- --daemon
# однопользовательская: без демона и без root после установки
curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install | sh -s -- --no-daemonСкрипт создаёт каталог /nix, группу nixbld со служебными пользователями, службу nix-daemon и прописывает переменные окружения в файлы оболочки. После установки откройте новый терминал и проверьте: nix --version. Если не любите выполнять скрипты из сети вслепую, сначала скачайте его командой curl -L https://nixos.org/nix/install -o nix-install.sh и прочитайте.
Особенности дистрибутивов
- Arch Linux. Nix есть в официальном репозитории:
sudo pacman -S nix, затемsudo systemctl enable --now nix-daemon.serviceи добавление себя в группу:sudo usermod -aG nix-users $USER. - Debian и Ubuntu. В репозиториях есть пакеты Nix, но версия часто отстаёт от актуальной. Для работы с flakes и новым CLI лучше официальный скрипт.
- Fedora. Официальная страница загрузки рекомендует многопользовательский режим на системах с выключенным SELinux. На Fedora с включённым SELinux проверяйте актуальные инструкции и сторонние установщики, которые заявляют его поддержку.
- Неизменяемые системы. На Silverblue и Kinoite корень доступен только для чтения, и каталог
/nixсоздаётся обходными путями. Подробнее о таких системах в обзоре Atomic Linux: Silverblue, Kinoite и неизменяемый рабочий стол.
Новый интерфейс nix и flakes
У Nix два набора команд. Классический: nix-env, nix-shell, nix-channel. Новый: единая команда nix с подкомандами и flakes для описания проектов. Новый интерфейс и flakes всё ещё помечены как экспериментальные, но ими пользуется большая часть сообщества, и почти вся свежая документация написана под них. Включите их в конфиге:
mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.confДля всех пользователей ту же строку добавляют в /etc/nix/nix.conf и перезапускают демон: sudo systemctl restart nix-daemon.
| Задача | Классические команды | Новый CLI |
|---|---|---|
| Найти пакет | nix-env -qaP ripgrep | nix search nixpkgs ripgrep |
| Установить в профиль | nix-env -iA nixpkgs.ripgrep | nix profile add nixpkgs#ripgrep |
| Список установленного | nix-env -q | nix profile list |
| Удалить | nix-env -e ripgrep | nix profile remove ripgrep |
| Обновить всё | nix-channel --update, затем nix-env -u | nix profile upgrade --all |
| Откатить профиль | nix-env --rollback | nix profile rollback |
| Временная оболочка | nix-shell -p ripgrep | nix shell nixpkgs#ripgrep |
В Nix 2.30 команду nix profile install переименовали в nix profile add, старое имя осталось как псевдоним. Не смешивайте в одном профиле nix-env и nix profile: после перехода на новый формат профиля старые команды перестают с ним работать.
Попробовать программу, не устанавливая её
Самая приятная возможность Nix для повседневной работы - временные оболочки. Нужен jq на пять минут, чтобы разобрать JSON? Не надо ставить его в систему:
# оболочка, в которой есть jq и httpie
nix shell nixpkgs#jq nixpkgs#httpie
# запустить программу один раз
nix run nixpkgs#cowsay -- "Привет из Nix"
# выйти из временной оболочки
exitПакеты при этом скачиваются в /nix/store и остаются там до сборки мусора, поэтому повторный запуск мгновенный. Если инструмент нужен постоянно, добавьте его в профиль через nix profile add, он появится в ~/.nix-profile/bin.
Окружение проекта в flake.nix
Главная причина, по которой разработчики ставят Nix: описать инструменты проекта в одном файле в корне репозитория. Простой flake.nix для проекта на Node.js и Python:
{
description = "Окружение проекта";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
outputs = { self, nixpkgs }:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in {
devShells.x86_64-linux.default = pkgs.mkShell {
packages = [ pkgs.nodejs_22 pkgs.python3 pkgs.git ];
};
};
}# войти в окружение проекта
nix develop
# обновить версии пакетов в flake.lock
nix flake updateПри первом запуске nix develop создаст flake.lock с точной ревизией nixpkgs. Закоммитьте его вместе с flake.nix, и у всей команды будут одинаковые версии. Учтите, что flakes видят только файлы, добавленные в git: новый flake.nix нужно хотя бы проиндексировать командой git add.
Поставьте direnv и nix-direnv и положите в корень проекта файл .envrc с одной строкой use flake. Тогда окружение будет включаться само при переходе в каталог проекта и выключаться при выходе из него, а nix-direnv закэширует его, чтобы не пересчитывать при каждом заходе.
Графические программы из Nix на чужом дистрибутиве
Консольные утилиты из Nix работают везде одинаково. С графическими сложнее. Программы, которым нужны OpenGL или Vulkan, ищут драйверы внутри /nix/store, а драйверы вашей системы лежат в /usr/lib. В итоге игра или 3D-редактор падают с ошибкой контекста или работают на программном рендеринге. Для таких случаев сообщество сделало обёртку nixGL, но надёжнее брать GPU-программы из репозитория дистрибутива или Flathub.
Ярлыки программ из профиля лежат в ~/.nix-profile/share/applications. Если меню их не видит, проверьте, что этот путь попал в переменную XDG_DATA_DIRS: обычно её дополняет скрипт профиля Nix при входе в систему, поэтому после установки нужно выйти из сеанса и войти снова. Сравнение способов установки программ есть в статье Как установить программу в Linux.
Обновление, сборка мусора и место на диске
Старые поколения профиля держат в хранилище все прежние версии пакетов, поэтому /nix/store растёт. Раз в месяц полезно чистить:
# сколько занимает хранилище
du -sh /nix/store
# удалить старые поколения и всё, на что больше никто не ссылается
nix-collect-garbage -d
sudo nix-collect-garbage -d # то же для системных профилей и root
# объединить одинаковые файлы жёсткими ссылками
nix store optimiseПосле -d откатиться на удалённые поколения уже нельзя. Если хотите оставить запас, используйте nix-collect-garbage --delete-older-than 30d. Другие способы освободить место описаны в статье Как освободить место на диске в Linux.
Следующий шаг для тех, кому понравилось, - Home Manager. Он описывает в Nix не только пакеты, но и конфиги пользователя: настройки оболочки, git, редактора. Это уже почти NixOS, но только для домашнего каталога.
Как полностью удалить Nix
Многопользовательская установка удаляется вручную, по шагам из руководства:
sudo systemctl stop nix-daemon.service
sudo systemctl disable nix-daemon.socket nix-daemon.service
sudo systemctl daemon-reload
sudo rm -rf /etc/nix /etc/profile.d/nix.sh /etc/tmpfiles.d/nix-daemon.conf /nix ~root/.nix-channels ~root/.nix-defexpr ~root/.nix-profile ~root/.cache/nix ~/.nix-channels ~/.nix-defexpr ~/.nix-profile ~/.cache/nix
for i in $(seq 1 32); do sudo userdel nixbld$i; done
sudo groupdel nixbldЗатем проверьте файлы /etc/bash.bashrc, /etc/bashrc, /etc/profile, /etc/zsh/zshrc и /etc/zshrc: установщик мог оставить там строки с подключением Nix, их нужно удалить. Если установщик делал резервные копии с суффиксом .backup-before-nix, верните их на место. Полная инструкция есть в официальном руководстве Nix.
Частые вопросы
Можно ли использовать Nix без NixOS?
Да. Nix ставится в Ubuntu, Debian, Fedora, Arch и WSL2 рядом с родным пакетным менеджером, хранит всё в /nix/store и не трогает системные пакеты.
Чем nix profile add отличается от nix profile install?
Это одна и та же команда. В Nix 2.30 её переименовали в nix profile add, а старое имя install оставили как псевдоним.
Нужно ли включать flakes?
Для современного CLI и описания окружений проектов да. Добавьте строку experimental-features = nix-command flakes в ~/.config/nix/nix.conf.
Почему /nix/store занимает так много места?
В хранилище остаются все версии пакетов из старых поколений профиля. Очистите их командой nix-collect-garbage --delete-older-than 30d или nix-collect-garbage -d и выполните nix store optimise.
Работают ли графические программы из Nix в Ubuntu?
Большинство обычных программ работает, но приложения с OpenGL и Vulkan могут не найти системные драйверы. Для них используют обёртку nixGL или ставят программу из репозитория дистрибутива.
Документация и источники
- Download Nix, NixOS, 2026
- Nix Reference Manual: Uninstalling Nix, NixOS / nix.dev, 2026
- Nix 2.30 release notes, NixOS / nix.dev, 2025
- Nix, ArchWiki, 2026
Читайте также
- Distrobox: несколько дистрибутивов Linux в одной системе
- Snap или Flatpak: какой формат приложений выбрать в 2026 году
- Atomic Linux в 2026 году: Silverblue, Kinoite и неизменяемый рабочий стол
- Как установить программу в Linux: все способы с примерами
- WSL2 в 2026 году: настраиваем Linux-среду для разработки в Windows
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.