colisão de nomes em expressões Nix de entrada com nix-env -f

6

Seguindo esta resposta anterior que me foi dada, comecei a seguir o canal nixpkgs-unstable com um git clone de este repositório: link

Meu clone está em ~/nixpkgs . Eu estou chamando nix-shell com a opção -I ~ e funciona bem. Para nix-env , a opção -I não existe, mas eu entendo que se deve usar a opção -f . Até agora (em duas máquinas diferentes) eu fiz exatamente isso (chamando nix-env com a opção -f ~ ) e funcionou bem.

Agora, estou em uma terceira máquina e tentei reproduzir o mesmo processo. Eu tentei instalar um pacote que está em nixpkgs-instável, mas não no meu canal do sistema nixos-16.09 com o comando nix-env -f ~ -iA nixpkgs.exercism , mas ele falha com a seguinte mensagem de erro:

warning: name collision in input Nix expressions, skipping ‘/home/theo/nixpkgs’
error: attribute ‘exercism’ in selection path ‘nixpkgs.exercism’ not found

A pesquisa por esta mensagem de erro deu-me este link mas não estou na situação descrita. Não estou seguindo nenhum canal como um usuário normal ( nix-channel --list resposta está vazia) e meu único canal de todo o sistema é chamado nixos (confirmado pelo fato de que .nix-defexpr/ contém apenas channels_root/ , que por sua vez contém binary-caches , manifest.nix e nixos ).

O que eu fiz de errado?

Para anotar: posso corrigir meu problema emitindo o comando nix-env -f ~/nixpkgs -iA exercism , mas eu ainda gostaria de entender por que minha primeira solução não funcionou (mesmo que tenha funcionado em outras duas máquinas).

    
por Zimm i48 23.12.2016 / 00:01

1 resposta

3

Olhando para a fonte , parece muito provavelmente você tem outro diretório nixpkgs em algum lugar em ~ .

nix-env pesquisa (recursivamente) todos os diretórios para default.nix adicionando o diretório pai como um atributo de nível superior.

Usar nix-env -f ~ parece ser uma má idéia - muito para pesquisar e chances para tais colisões. A menos que haja algo que esteja faltando, o symlinking ~/nixpkgs into ~/.nix-defexpr parece ser uma boa solução.

Não há nada errado em simplesmente usar nix-env -f nixpkgs -iA exercism . Nesse formato, nix vê um default.nix diretamente no argumento -f e usa isso como o atributo de nível superior definido.

Se você não encontrar outro diretório nixpkgs, eu tentarei usar a opção --show-trace .

    
por 26.12.2016 / 07:28

Tags