Como encontrar o nome de um pacote Nix para instalá-lo em configuration.nix?

15

Suponha que eu procure um pacote para instalar usando nix-env 's --query operação:

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

Eu escrevo este nome de pacote em /etc/nixos/configuration.nix , o principal arquivo de configuração :

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

No entanto, se eu executar sudo nixos-rebuild switch , o comando NixOS atualizará a configuração e instalar todos os pacotes do sistema especificados por declarativamente , ele aborta com um erro:

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

Eu sei que para muitos pacotes, embora não todos, o nome que nix-env retorna e o nome que um deve especificar na opção de configuração environment.systemPackages é diferente, mas eu não entendo a lógica. Como instalo um pacote que encontrei em nix-env ?

    
por Mirzhan Irkegulov 18.12.2015 / 18:37

2 respostas

15

A comunidade NixOS tem três manuais, sempre consulte-os primeiro, se estiver preso:

Cada pacote no Nix é especificado por uma expressão Nix. Uma expressão Nix é um texto escrito em linguagem Nix, geralmente residindo em um arquivo com extensão .nix .

Toda expressão tem o chamado "nome simbólico", um nome legível para humanos que é impresso quando você usa nix-env . Veja amostra da expressão Nix . Nix em si não usa este nome simbólico em qualquer lugar internamente, então não importa se o seu pacote é chamado aspell-dict-en , é apenas para sua conveniência, humana.

O que realmente importa é o chamado "caminho do atributo". Portanto, sua confusão está entre o nome simbólico e o caminho do atributo. Cada pacote tem um caminho de atributo, que você pode usar na opção de configuração environment.systemPackages para instalar em todo o sistema usando gerenciamento declarativo de pacotes .

Para descobrir o caminho do atributo do seu pacote, adicione outro -P à sua consulta:

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

Você deve se sentir confortável usando nix-env diariamente, portanto, pratique a chamada de nix-env com as opções --query e --install . No entanto, você também pode procurar pacotes e descobrir seus caminhos de atributos online em pesquisa de pacotes Nix . Digite aspell , clique em aspell-dict-en e você verá várias propriedades do pacote, incluindo o caminho do atributo como parte do comando de instalação:

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

Agora você pode colocar este caminho de atributo em /etc/nixos/configuration.nix :

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

Em seguida, atualize o sistema executando sudo nixos-rebuild switch .

    
por 18.12.2015 / 18:37
1

Caso você esteja usando o NixOS para Data Science:

Módulos do Python:

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

ou

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

OU se você está procurando especialmente por R pacotes / bibliotecas

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

alternativamente você obtém i.g. pacotes npm com:

nix-env -qaPA 'nixos.nodePackages'
    
por 10.06.2018 / 23:31

Tags