Configuration.nix dosyasına kurmak için bir Nix paketinin adı nasıl bulunur?


21

nix-env'S --queryişlemini kullanarak yüklemek için bir paket aradığımı varsayalım :

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

Bu paket adını /etc/nixos/configuration.nixNixOS'un ana yapılandırma dosyasına yazıyorum :

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

Yine de çalıştırırsam sudo nixos-rebuild switch, NixOS komutu yapılandırmayı güncellemek ve bildirimle belirtilen tüm sistem çapında paketleri yüklemek için bir hatayla iptal edilir:

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

Her ne kadar hepsi olmasa da birçok paket için, yapılandırma seçeneğinde nix-envbelirtilecek adın ve adın environment.systemPackagesfarklı olduğunu biliyorum, ancak mantığı anlamıyorum. Bulduğum bir paketi nasıl kurarım nix-env?

Yanıtlar:


20

NixOS topluluğunun üç el kitabı vardır, sıkışmışsanız her zaman önce onlara danışın:

Nix üzerindeki her paket bir Nix ifadesi ile belirtilir. Nix ifadesi, Nix dilinde yazılan ve genellikle uzantısı olan bir dosyada bulunan bir metindir .nix.

Her ifadede, kullandığınızda yazdırılabilen, insan tarafından okunabilen bir ad olan “sembolik ad” vardır nix-env. Örnek Nix ifadesine bakın . Nix'in kendisi bu sembolik ismi dahili olarak hiçbir yerde kullanmaz, bu nedenle paketinizin adlandırılması önemli değildir aspell-dict-en, sadece sizin, insanınızın rahatlığı için.

Asıl önemli olan “öznitelik yolu” dur. Yani karışıklığınız sembolik isim ile nitelik yolu arasında. Her paketin, bildirim paketinienvironment.systemPackages kullanarak sistem çapında yüklemek için yapılandırma seçeneğinde kullanabileceğiniz bir öznitelik yolu vardır .

Paketinizin öznitelik yolunu bulmak -Piçin sorgunuza başka bir bayrak ekleyin :

$ nix-env -qaP 'aspell.*en'
nixos.aspellDicts.en  aspell-dict-en-7.1-0

Günlük kullanımda rahat olmalısınız nix-env, bu nedenle çağrı nix-envyapmayı --queryve --installseçenekleri deneyin. Ancak Nix paketleri aramasında paketlere göz atabilir ve öznitelik yollarını çevrimiçi olarak öğrenebilirsiniz . Yazın aspell, tıklayın aspell-dict-enve install komutunun bir parçası olarak öznitelik yolu da dahil olmak üzere çeşitli paketin özelliklerini göreceksiniz:

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

Şimdi bu özellik yolunu içine koyabilirsiniz /etc/nixos/configuration.nix:

environment.systemPackages = with pkgs; [
  aspellDicts.en
];

Ardından çalıştırarak sistemi güncelleyin sudo nixos-rebuild switch.


4
Ne yazık ki, -Pseçenek hangi baskılar yerine --installedgörüldüğü gibi çalışmıyor . Geçici çözüm kullanmaktır , ancak bu, çıkışını kolayca içine dökemeyeceğiniz anlamına gelir . nix-env -q --installed -P | grep terminusterminus-fontterminus_fontnix-env -qaP | grep terminus-fontnix-env -q --installedconfiguration.nix
Suzanne Dupéron

4

Veri Bilimi için NixOS kullanıyorsanız:

Python modülleri:

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

veya

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

VEYA, özellikle R paketleri / kütüphaneleri arıyorsanız

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

alternatif olarak ig npm paketleri ile:

nix-env -qaPA 'nixos.nodePackages'

pkgs aramak için bir web sitesi de var


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

nix-env -v -qaP '*'(Genellikle geri dönmek için biraz zaman alır gibi) bir dosya sonucu kaydetmek istiyorum .


Unutmayın, nix-env haskellPackages(ve muhtemelen diğerleri) altındaki şeyleri görmezden geliyor gibi görünüyor .


nix-env arama şu anda oldukça sinir bozucu olduğu için 5+ saniye sürecek ve daha sonra bir error: regex error...


0

Ek Mirzhans seçeneklerine: Eğer kontrol edebilir /nix/storegibi grep -irw "programm-name" /nix/store. Ama bu biraz kafa karıştırıcı olabilir. Ayrıca ana dizininizde .local/shareyüklü programlar / uygulamalar için dizini kontrol edebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.