Supposons que je recherche un colis à installer avec nix-env
's --query
Opération:
$ nix-env -qa 'aspell.*en'
aspell-dict-en-7.1-0
J'écris ce nom de package dans /etc/nixos/configuration.nix
, Nixos's Main Fichier de configuration :
environment.systemPackages = with pkgs; [
aspell-dict-en
];
Pourtant, si je cours Sudo nixos-rebuild switch
, Commande Nixos à Mettez à jour la configuration et installer tous les packages à l'échelle du système spécifiés par Précendotre , il abandonne avec une erreur:
error: undefined variable ‘aspell-dict-en’ at /etc/nixos/configuration.nix:44:5
Je sais que pour de nombreux packages, mais pas tout, le nom que nix-env
retourne et le nom que l'on devrait spécifier dans environment.systemPackages
L'option de configuration est différente, mais je ne comprends pas la logique. Comment installer un paquet que j'ai trouvé via nix-env
?
La communauté Nixos a trois manuels, les consultez toujours en premier, si vous êtes bloqué:
Chaque colis sur Nix est spécifié par une expression NIX. Une expression NIX est un texte écrit en langue Nix, résidant généralement dans un fichier avec une extension .nix
.
Chaque expression a le "nom symbolique", un nom lisible par l'homme imprimé, lorsque vous utilisez nix-env
. Voir Expos d'expression NIX . Nix elle-même n'utilise pas ce nom symbolique nulle part en interne, donc cela n'a pas d'importance si votre colis est nommé aspell-dict-en
, c'est juste pour votre, humain, commodité.
Ce qui compte réellement, c'est le soi-disant "chemin d'attribut". Votre confusion est donc entre le nom symbolique et le chemin d'attribut. Chaque paquet a un chemin d'attribut que vous pouvez utiliser dans environment.systemPackages
Option de configuration pour l'installation de systèmes à l'échelle du système Gestion des packages déclaratifs .
Pour connaître le chemin d'attribut de votre colis, ajoutez un autre drapeau -P
à votre requête:
$ nix-env -qaP 'aspell.*en'
nixos.aspellDicts.en aspell-dict-en-7.1-0
Vous devriez être à l'aise en utilisant nix-env
Au quotidien, pratiquez donc appelant nix-env
avec --query
et --install
options. Cependant, vous pouvez également naviguer sur les packages et trouver leur attribut chemins en ligne sur Nix Packages Search . Type aspell
, cliquez sur aspell-dict-en
Et vous verrez les propriétés de divers paquets, y compris le chemin d'attribut dans le cadre de la commande d'installation:
$ nix-env -iA nixos.pkgs.aspellDicts.en
Maintenant, vous pouvez mettre ce chemin d'attribut dans /etc/nixos/configuration.nix
:
environment.systemPackages = with pkgs; [
aspellDicts.en
];
Puis mettez à jour le système en exécutant Sudo nixos-rebuild switch
.
Si vous utilisez Nixos pour la science des données:
Python Modules:
nix-env -qaP .\*pylint.\*
ou
py_pkgs="nix_packages_py35.txt"
nix-env -qaP | grep -i python36 > ${py_pkgs}
grep pandas ${py_pkgs}
Ou si vous recherchez spécialement pour [~ # ~] r [~ # ~] Packages/bibliothèques
nix-env -f "<nixpkgs>" -qaP -A rPackages .\*tidyverse.\*
sinon, vous obtenez i.g. Packages NPM avec:
nix-env -qaPA 'nixos.nodePackages'
il existe également un site Web pour la recherche de PKGS
nix-env -v -qaP '*' | grep "nvim"
Je sauverais le résultat de nix-env -v -qaP '*'
dans un fichier (comme cela prend habituellement un certain temps).
Nix-env Semble d'ignorer les choses sous haskellPackages
(et éventuellement d'autres).
nix-env Recherche est actuellement assez frustrant car il prendra plus de 5 secondes, puis revenir avec un error: regex error
...
supplémentaire aux options de Mirzhans: Vous pouvez vérifier /nix/store
Comme grep -irw "programm-name" /nix/store
. Mais cela pourrait être un peu déroutant. Aussi dans votre annuaire de domicile, vous pouvez vérifier le répertoire .local/share
Pour les programmeurs/applications installées.