¿Cómo encontrar el nombre de un paquete Nix para instalarlo en configuration.nix?

21

Supongamos que busco un paquete para instalar usando nix-envla --queryoperación de:

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

Escribo este nombre de paquete en /etc/nixos/configuration.nixel archivo de configuración principal de NixOS :

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

Sin embargo, si ejecuto sudo nixos-rebuild switch, el comando NixOS para actualizar la configuración e instalar todos los paquetes de todo el sistema especificados por declarative , aborta con un error:

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

Sé que para muchos paquetes, aunque no todos, el nombre que se nix-envdevuelve y el nombre que se debe especificar en la environment.systemPackagesopción de configuración son diferentes, pero no entiendo la lógica. ¿Cómo instalo un paquete que encontré nix-env?

Mirzhan Irkegulov
fuente

Respuestas:

20

La comunidad NixOS tiene tres manuales, siempre consúltalos primero, si estás atascado:

Cada paquete en Nix se especifica mediante una expresión Nix. Una expresión Nix es un texto, escrito en lenguaje Nix, que generalmente reside en un archivo con extensión .nix.

Cada expresión tiene el llamado "nombre simbólico", un nombre legible por humanos que se imprime cuando se usa nix-env. Ver ejemplo de expresión de Nix . Nix en sí no usa este nombre simbólico en ninguna parte internamente, por lo que no importa si se nombra su paquete aspell-dict-en, es solo para su conveniencia humana.

Lo que realmente importa es la llamada "ruta de atributo". Entonces, su confusión es entre el nombre simbólico y la ruta de atributo. Cada paquete tiene una ruta de atributo, que puede usar en la environment.systemPackagesopción de configuración para instalar en todo el sistema mediante la administración de paquetes declarativos .

Para averiguar la ruta de atributo de su paquete, agregue otro indicador -Pa su consulta:

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

Debe sentirse cómodo con nix-envel uso diario, así que practique llamando nix-envcon --queryy --installopciones. Sin embargo, también puede buscar paquetes y descubrir sus rutas de atributos en línea en la búsqueda de paquetes de Nix . Escriba aspell, haga clic en aspell-dict-eny verá varias propiedades del paquete, incluida la ruta del atributo como parte del comando de instalación:

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

Ahora puede poner esta ruta de atributo en /etc/nixos/configuration.nix:

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

Luego actualice el sistema ejecutando sudo nixos-rebuild switch.

Mirzhan Irkegulov
fuente
44
Desafortunadamente, la -Popción no funciona --installed, como se puede ver con nix-env -q --installed -P | grep terminusqué impresiones en terminus-fontlugar de terminus_font. La solución consiste en el uso nix-env -qaP | grep terminus-font, sino que significa que no se puede volcar fácilmente la salida de nix-env -q --installedal configuration.nix.
Suzanne Dupéron
4

En caso de que esté utilizando NixOS para Data Science:

Módulos de 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 si está buscando especialmente paquetes / bibliotecas R

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

alternativamente, obtienes paquetes ig npm con:

nix-env -qaPA 'nixos.nodePackages'

También hay un sitio web para buscar pkgs

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

Guardaría el resultado nix-env -v -qaP '*'en un archivo (ya que generalmente demora un tiempo en regresar).


Tenga en cuenta que nix-env parece ignorar las cosas debajo haskellPackages(y posiblemente otras).


La búsqueda de nix-env es actualmente bastante frustrante ya que tomará más de 5 segundos y luego regresará con un error: regex error...

Chris Stryczynski
fuente
0

Adicional a las opciones de Mirzhans: puedes marcar /nix/storecomo grep -irw "programm-name" /nix/store. Pero esto podría ser un poco confuso. También en su directorio de inicio, puede consultar el directorio .local/sharede programas / aplicaciones instalados.

saggzz
fuente