como descobrir quais pacotes estão instalados em todo o sistema no NixOS?

2

Existe um comando que pode ser usado para descobrir quais pacotes estão instalados em todo o sistema no NixOS?

Por exemplo, posso listar pacotes instalados para o meu usuário atual com nix-env -q . Eu não sei de nenhuma maneira de listar pacotes instalados em todo o sistema a partir de /etx/nixos/configuration.nix .

Existem duas instâncias separadas que eu gostaria de usar:

  1. Digamos que eu adicione um pacote a /etc/nixos/configuration.nix in environment.systemPackages , mas esqueci se já executei nixos-rebuild switch . Seria bom se houvesse um comando que eu pudesse executar para verificar se o pacote está no ambiente do sistema.

  2. Eu tenho programs.bash.enableCompletion definido como true em /etc/nixos/configuration.nix . Sem olhar a opção em nixpkgs , eu diria que esta opção configuraria o pacote bash-completion a ser instalado. Seria bom se houvesse um comando que eu pudesse executar para verificar se o pacote bash-completion estava realmente no ambiente do sistema.

por illabout 06.02.2018 / 00:46

3 respostas

3

Não há uma ferramenta específica para isso. Você pode gostar da opção system.copySystemConfiguration (consulte os documentos para "advertências").

Você obterá relativamente próximo com nix-store -q --references /run/current-system/sw - a lista de caminhos de armazenamento do nix contidos diretamente em systemPackages , mas observe que várias opções do NixOS podem incluir pacotes lá.

    
por 06.02.2018 / 19:26
1

Devido à abordagem que o NixOS toma na instalação de software, não existe um pacote que seja instalado todo o sistema . Não no mesmo sentido da maioria dos gerenciadores de pacotes, isto é.

No entanto, se você tratar um ambiente de usuário (também conhecido como. profile) como o equivalente a todo o sistema , poderá usar nix-store -q -R /nix/var/nix/profiles/system-${n}-link para listar as dependências de um determinado ambiente de usuário; onde ${n} é o número de geração do perfil. Por dependências, quero dizer, dependências diretas e indiretas.

Além disso, se você usar o argumento --tree em vez de -R , poderá obter uma árvore de dependência ASCII.

    
por 09.02.2018 / 23:03
0

Para o seu primeiro caso de uso, você pode usar:

nixos-rebuild dry-build

Este comando mostra o que seria construído e baixado. Se tudo o que você quer saber é se existem novos pacotes que devem ser construídos, você pode usar o comando acima.

Por favor, note que isto não lhe informará sobre pacotes que já estão construídos mas que não estão atualmente ativos. Ex. Se você adicionar o firefox ao seu configuration.nix , reconstruir, remover o firefox, reconstruir, adicionar o firefox e executar o acima, ele não mostrará nada porque não há nada novo para construir. O Nix mantém os pacotes antigos até a coleta de lixo.

Há também nixos-rebuild dry-activate , que cria o novo sistema, mas não faz alterações. Ele mostrará outras alterações, como se você desativasse / ativasse alguns serviços.

    
por 12.10.2018 / 19:00