У сообщества NixOS есть три руководства, всегда обращайтесь к ним в первую очередь, если вы застряли:
Каждый пакет в Nix определяется выражением Nix. Выражение Nix - это некоторый текст, написанный на языке Nix, обычно находящийся в файле с расширением .nix
.
Каждое выражение имеет так называемое «символическое имя», удобочитаемое имя, которое печатается при использовании nix-env
. Смотрите пример выражения Nix . Сам Nix нигде не использует это символическое имя, поэтому не имеет значения, назван ли ваш пакет aspell-dict-en
, это просто для вашего удобства, человека.
Что действительно имеет значение, так это так называемый «путь атрибута». Таким образом, ваша путаница происходит между символическим именем и путем атрибута. Каждый пакет имеет путь атрибута, который вы можете использовать в environment.systemPackages
параметре конфигурации для установки в масштабе всей системы с помощью декларативного управления пакетами .
Чтобы узнать путь к атрибуту вашего пакета, добавьте еще один флаг -P
в ваш запрос:
$ nix-env -qaP 'aspell.*en'
nixos.aspellDicts.en aspell-dict-en-7.1-0
Вы должны быть удобными , используя nix-env
на ежедневной основе, так что практика вызова nix-env
с --query
и --install
варианты. Однако вы также можете просматривать пакеты и узнавать их пути к атрибутам онлайн при поиске пакетов Nix . Введите aspell
, нажмите, aspell-dict-en
и вы увидите свойства различных пакетов, включая путь атрибута, как часть команды install:
$ nix-env -iA nixos.pkgs.aspellDicts.en
Теперь вы можете поместить этот атрибут path в /etc/nixos/configuration.nix
:
environment.systemPackages = with pkgs; [
aspellDicts.en
];
Затем обновите систему, запустив sudo nixos-rebuild switch
.
-P
опция не работает с--installed
, как видно, сnix-env -q --installed -P | grep terminus
какими отпечаткамиterminus-font
вместоterminus_font
. Обходной путь должен использоватьnix-env -qaP | grep terminus-font
, но это означает, что вы не можете легко вывести выводnix-env -q --installed
вconfiguration.nix
.