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

21

Suponha que eu procure um pacote para instalar usando nix-enva --queryoperação de:

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

Eu escrevo este nome de pacote no /etc/nixos/configuration.nixprincipal arquivo de configuração do NixOS :

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

No entanto, se eu executar sudo nixos-rebuild switch, o comando NixOS para atualizar a configuração e instalar todos os pacotes de todo o sistema especificados declarativamente , será abortado 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-envretorna e o nome que um deve especificar na environment.systemPackagesopção de configuração são diferentes, mas não entendo a lógica. Como instalo um pacote que encontrei nix-env?

Mirzhan Irkegulov
fonte

Respostas:

20

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

Todo pacote no Nix é especificado por uma expressão do Nix. Uma expressão Nix é algum texto, escrito na linguagem Nix, normalmente residindo em um arquivo com extensão .nix.

Toda expressão tem o chamado "nome simbólico", um nome legível por humanos que é impresso quando você usa nix-env. Veja a amostra da expressão Nix . O próprio Nix não usa esse nome simbólico em nenhum lugar internamente, por isso não importa se o seu pacote tem o nome 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 possui um caminho de atributo, que você pode usar na environment.systemPackagesopção de configuração para instalar em todo o sistema usando o gerenciamento declarativo de pacotes .

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

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

Você deve se sentir confortável nix-envem usar diariamente, portanto pratique a chamada nix-envcom --querye --installopções. No entanto, você também pode procurar pacotes e descobrir seus caminhos de atributos online na pesquisa de pacotes Nix . Digite aspell, clique em aspell-dict-ene 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
];

Atualize o sistema executando sudo nixos-rebuild switch.

Mirzhan Irkegulov
fonte
4
Infelizmente, a -Popção não funciona --installed, como pode ser visto com as nix-env -q --installed -P | grep terminusimpressões em terminus-fontvez de terminus_font. A solução alternativa é usar nix-env -qaP | grep terminus-font, mas isso significa que você não pode despejar facilmente a saída nix-env -q --installedno configuration.nix.
Suzanne Dupéron
4

Caso você esteja usando o NixOS for Data Science:

Módulos 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ê estiver procurando especialmente por pacotes / bibliotecas R

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

Como alternativa, você recebe pacotes ig npm com:

nix-env -qaPA 'nixos.nodePackages'

também existe um site para pesquisar por pacotes

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

Eu salvaria o resultado de nix-env -v -qaP '*'em um arquivo (como normalmente leva um tempo para retornar).


Tenha em mente que o nix-env parece ignorar as coisas abaixo haskellPackages(e possivelmente outras).


Atualmente, a pesquisa nix-env é bastante frustrante, pois leva mais de 5 segundos e depois volta com um error: regex error...

Chris Stryczynski
fonte
0

Adicional às opções do Mirzhans: você pode conferir /nix/storecomo grep -irw "programm-name" /nix/store. Mas isso pode ser um pouco confuso. Também em seu diretório pessoal, você pode verificar o diretório .local/sharede programas / aplicativos instalados.

saggzz
fonte