Як знайти ім'я пакету Nix, щоб встановити його в config.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і ви побачите різні властивості пакета, включаючи шлях атрибутів як частину команди встановлення:

$ nix-env -iA nixos.pkgs.aspellDicts.en

Тепер ви можете помістити цей шлях атрибутів у /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 '*'файл (оскільки для повернення зазвичай потрібен певний час).


Майте на увазі, нікс-енв, здається, ігнорує речі, що знаходяться під 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.