Как найти имя пакета Nix для его установки в файле configuration.nix?


21

Предположим , что я искать пакет для установки с помощью nix-env«s --queryоперации:

$ nix-env -qa 'aspell.*en'
aspell-dict-en-7.1-0

Я записываю это имя пакета в /etc/nixos/configuration.nixосновной файл конфигурации NixOS :

environment.systemPackages = with pkgs; [
  aspell-dict-en
];

Тем не менее, если я запускаю sudo nixos-rebuild switchкоманду NixOS для обновления конфигурации и установки всех общесистемных пакетов, указанных декларативно , она прерывается с ошибкой:

error: undefined variable ‘aspell-dict-en’ at /etc/nixos/configuration.nix:44:5

Я знаю, что для многих пакетов, хотя и не для всех, nix-envвозвращаемое имя и имя, которое нужно указать в environment.systemPackagesпараметре конфигурации, отличаются, но я не понимаю логику. Как мне установить пакет, который я нашел через nix-env?

Ответы:


20

У сообщества 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.


4
К сожалению, -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.
Сюзанна Дюперон,

4

Если вы используете NixOS для Data Science:

Модули Python :

nix-env -qaP .\*pylint.\*

или

py_pkgs="nix_packages_py35.txt"
nix-env -qaP | grep -i python36 > ${py_pkgs}
grep pandas ${py_pkgs}

ИЛИ, если вы ищете специально для R пакетов / библиотек

nix-env -f "<nixpkgs>" -qaP -A rPackages .\*tidyverse.\*

в качестве альтернативы вы получаете пакеты ig npm с:

nix-env -qaPA 'nixos.nodePackages'

также есть сайт для поиска pkgs


1
nix-env -v -qaP '*' | grep "nvim"

Я хотел бы сохранить результат nix-env -v -qaP '*'в файл (как правило, требуется время, чтобы вернуться).


Имейте в виду, nix-env, кажется, игнорирует вещи под haskellPackages(и, возможно, другие).


Поиск по nix-env в настоящее время довольно неприятен, так как это займет 5+ секунд, а затем вернется с error: regex error...


0

Дополнительные к Миржану варианты: вы можете проверить /nix/storeкак grep -irw "programm-name" /nix/store. Но это может быть немного запутанным. Также в вашем домашнем каталоге вы можете проверить каталог на .local/shareналичие установленных программ / приложений.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.