Pregunta:
Supongamos que busco un paquete para instalar usando la operación --query
nix-env
:
$ nix-env -qa 'aspell.*en'
aspell-dict-en-7.1-0
Escribo el nombre de este paquete en /etc/nixos/configuration.nix
, el 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 declarativamente , se cancela con un error:
error: undefined variable ‘aspell-dict-en’ at /etc/nixos/configuration.nix:44:5
Sé que para muchos paquetes, aunque no para todos, el nombre que devuelve nix-env
y el nombre que se debe especificar en environment.systemPackages
opción de configuración environment.systemPackages
son diferentes, pero no entiendo la lógica. ¿Cómo instalo un paquete que encontré a través de nix-env
?
Respuesta:
La comunidad NixOS tiene tres manuales, consúltelos siempre primero, si está atascado:
- Nix manual , para el administrador de paquetes
- Manual de NixOS , para el sistema operativo
- Manual de Nixpkgs , para la infraestructura de paquetes de Nix
Cada paquete en Nix se especifica mediante una expresión de Nix. Una expresión de Nix es un texto, escrito en lenguaje Nix, que normalmente 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 su paquete se llama 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 del atributo. Cada paquete tiene una ruta de atributo, que puede utilizar en environment.systemPackages
opción de configuración environment.systemPackages
para instalar en todo el sistema mediante la gestión declarativa de paquetes .
Para averiguar la ruta del atributo de su paquete, agregue otro indicador -P
a su consulta:
$ nix-env -qaP 'aspell.*en'
nixos.aspellDicts.en aspell-dict-en-7.1-0
Debería sentirse cómodo usando nix-env
a diario, así que practique llamar a nix-env
con las opciones --query
e --install
. Sin embargo, también puede buscar paquetes y encontrar sus rutas de atributos en línea en la búsqueda de paquetes de Nix . Escriba aspell
, haga clic en aspell-dict-en
y 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
.