Jak znaleźć nazwę pakietu Nix, aby zainstalować go w pliku configuration.nix?


21

Załóżmy, że mam szukać pakietu instalacji przy użyciu nix-env„s--query operacji:

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

Piszę nazwę tego pakietu w /etc/nixos/configuration.nixgłównym pliku konfiguracyjnym NixOS :

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

Jednak jeśli uruchomię sudo nixos-rebuild switch, polecenie NixOS, aby zaktualizować konfigurację i zainstalować wszystkie pakiety systemowe określone przez deklaratywnie , przerywa z błędem:

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

Wiem, że dla wielu pakietów, choć nie wszystkie, nazwa, która nix-envpowraca i nazwa, którą należy podać w environment.systemPackagesopcji konfiguracji, są różne, ale nie rozumiem logiki. Jak zainstalować pakiet, który znalazłem nix-env?

Odpowiedzi:


20

Społeczność NixOS ma trzy podręczniki, zawsze skonsultuj je najpierw, jeśli utkniesz:

Każdy pakiet w Nix jest określony przez wyrażenie Nix. Wyrażenie Nix to jakiś tekst napisany w języku Nix, zwykle znajdujący się w pliku z rozszerzeniem .nix.

Każde wyrażenie ma tak zwaną „nazwę symboliczną”, czytelną dla człowieka nazwę, która jest drukowana podczas używania nix-env. Zobacz przykładowe wyrażenie Nix . Sam Nix nie używa tej symbolicznej nazwy nigdzie wewnętrznie, więc nie ma znaczenia, czy twój pakiet ma nazwęaspell-dict-en , tylko dla twojej ludzkiej wygody.

Liczy się tak zwana „ścieżka atrybutu”. Twoje zamieszanie dotyczy więc nazwy symbolicznej i ścieżki atrybutu. Każdy pakiet ma ścieżkę atrybutu, której można użyć w environment.systemPackagesopcji konfiguracji do zainstalowania całego systemu za pomocą deklaratywnego zarządzania pakietami .

Aby znaleźć ścieżkę atrybutu pakietu, dodaj kolejną flagę -Pdo zapytania:

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

Powinieneś być wygodne przy użyciu nix-envna co dzień, więc ćwiczyć dzwoniąc nix-envz --queryi --installopcje. Możesz jednak również przeglądać pakiety i wyszukiwać ich ścieżki atrybutów w trybie online podczas wyszukiwania pakietów Nix . Wpisz aspell, kliknij, aspell-dict-ena zobaczysz różne właściwości pakietu, w tym ścieżkę atrybutu jako część polecenia instalacji:

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

Teraz możesz umieścić tę ścieżkę atrybutu w /etc/nixos/configuration.nix:

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

Następnie zaktualizuj system, uruchamiając sudo nixos-rebuild switch.


4
Niestety ta -Popcja nie działa --installed, ponieważ można zobaczyć, z nix-env -q --installed -P | grep terminusktórymi wydrukami terminus-fontzamiast terminus_font. Obejściem jest użycie nix-env -qaP | grep terminus-font, ale oznacza to, że nie można łatwo zrzucić danych wyjściowych do nix-env -q --installedpliku configuration.nix.
Suzanne Dupéron

4

W przypadku korzystania z NixOS do Data Science:

Moduły Python :

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

lub

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

LUB jeśli szukasz szczególnie pakietów R / bibliotek

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

alternatywnie dostajesz pakiety ig npm z:

nix-env -qaPA 'nixos.nodePackages'

istnieje również strona internetowa do wyszukiwania pkgs


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

Zapisałbym wynik w nix-env -v -qaP '*'pliku (jak zwykle powrót zajmuje trochę czasu).


Pamiętaj, że nix-env wydaje się ignorować rzeczy pod haskellPackages(i prawdopodobnie inne).


Wyszukiwanie nix-env jest obecnie dość frustrujące, ponieważ zajmie to ponad 5 sekund, a następnie wróci z error: regex error...


0

Oprócz opcji Mirzhansa: możesz sprawdzić /nix/storejak grep -irw "programm-name" /nix/store. Ale może to być nieco mylące. Również w katalogu domowym możesz sprawdzić katalog pod .local/sharekątem zainstalowanych programów / aplikacji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.