Come trovare il nome di un pacchetto Nix per installarlo in configuration.nix?


21

Supponiamo che io cerchi un pacchetto da installare usando nix-envl' --queryoperazione:

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

Scrivo questo nome del pacchetto nel file di configurazione/etc/nixos/configuration.nix principale di NixOS :

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

Tuttavia, se sudo nixos-rebuild switcheseguo, il comando NixOS per aggiornare la configurazione e installare tutti i pacchetti a livello di sistema specificati in modo dichiarativo , si interrompe con un errore:

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

So che per molti pacchetti, sebbene non tutti, il nome che nix-envritorna e quello che si dovrebbe specificare environment.systemPackagesnell'opzione di configurazione sono diversi, ma non capisco la logica. Come installo un pacchetto che ho trovato nix-env?

Risposte:


20

La community di NixOS ha tre manuali, consultali sempre prima, se sei bloccato:

Ogni pacchetto su Nix è specificato da un'espressione Nix. Un'espressione Nix è un testo, scritto in linguaggio Nix, che in genere risiede in un file con estensione .nix.

Ogni espressione ha il cosiddetto "nome simbolico", un nome leggibile dall'uomo che viene stampato quando lo usi nix-env. Vedi l' espressione Nix di esempio . Nix stesso non usa questo nome simbolico ovunque internamente, quindi non importa se il tuo pacchetto è chiamato aspell-dict-en, è solo per tua comodità.

Ciò che conta davvero è il cosiddetto "percorso degli attributi". Quindi la tua confusione è tra nome simbolico e percorso degli attributi. Ogni pacchetto ha un percorso di attributo, che è possibile utilizzare environment.systemPackagesnell'opzione di configurazione per installare a livello di sistema utilizzando la gestione dichiarativa del pacchetto .

Per scoprire il percorso degli attributi del pacchetto, aggiungi un altro flag -Palla tua query:

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

Dovresti sentirti a tuo agio nell'utilizzare nix-envquotidianamente, quindi esercitati a chiamare nix-envcon --querye le --installopzioni. Tuttavia, puoi anche sfogliare i pacchetti e scoprire i loro percorsi di attributi online nella ricerca di pacchetti Nix . Digita aspell, fai clic su aspell-dict-ene vedrai le varie proprietà del pacchetto, incluso il percorso dell'attributo come parte del comando di installazione:

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

Ora puoi inserire questo percorso di attributo in /etc/nixos/configuration.nix:

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

Quindi aggiornare il sistema eseguendo sudo nixos-rebuild switch.


4
Sfortunatamente, l' -Popzione non funziona con --installed, come si può vedere con nix-env -q --installed -P | grep terminusquale stampa terminus-fontinvece di terminus_font. La soluzione alternativa è utilizzare nix-env -qaP | grep terminus-font, ma significa che non è possibile scaricare facilmente l'output di nix-env -q --installedin configuration.nix.
Suzanne Dupéron,

4

Nel caso in cui si utilizzi NixOS per Data Science:

Moduli Python :

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

o

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

O se stai cercando soprattutto pacchetti / librerie R

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

in alternativa ottieni pacchetti ig npm con:

nix-env -qaPA 'nixos.nodePackages'

c'è anche un sito Web per la ricerca di pkgs


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

Vorrei salvare il risultato nix-env -v -qaP '*'in un file (come di solito ci vuole un po 'per tornare).


Tenete presente che nix-env sembra ignorare le cose sotto haskellPackages(e forse altre).


La ricerca di nix-env è attualmente piuttosto frustrante poiché ci vorranno 5+ secondi e poi tornerà con un error: regex error...


0

Aggiuntivo alle opzioni di Mirzhans: puoi controllare /nix/storecome grep -irw "programm-name" /nix/store. Ma questo potrebbe essere un po 'confuso. Inoltre nella tua home directory puoi controllare la directory .local/shareper i programmi / app installati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.