Meu pacote está instalado com umconfiguration.nix
{ config, pkgs, lib, ... }:
{
environment.systemPackages = with pkgs; [
my-package
];
}
Como posso consultar o caminho my-package
no armazenamento nix?
Estou procurando algo tão simples quanto which my_executable
, mas para pacotes na loja nix.
Exemplo de uso
$ my_search my-package [--store /path/to/nix/store]
/path/to/nix/store/qpmg2piws75wmy1619ryh0dhwi9638ni-my_package-1.5.6
Notas:
- Ele tem que me dar o caminho para a geração e/ou derivação atualmente em uso
- Não deveria exigir uma conexão com a internet, nem deveria tentar construir nada. my_package pode exigir acordo com licenças específicas e precisa permitir pacotes não livres que podem atrapalhar a reconstrução. Exemplo: o pacote
segger-jlink-headless
- Se o pacote foi instalado pelo root (por exemplo no NixOS), posso ter um comando que não exija privilégios de root? Posso sempre fornecer o caminho,
/nix/store/
se necessário. which my_package_executable
não funciona se um pacote não contiver um executável no PATH.
Outras referências:
Como encontrar a versão correta de um pacote instalado em /nix/store
https://nixos.wiki/wiki/Cheatsheet
A resposta do Discourse parece desatualizada (não está funcionando para mim): https://discourse.nixos.org/t/how-to-get-a-package-path-in-nix-store-which-not-containing-a-bin-dir/4653/5 :
No meu caso, nix eval
os erros aparecem quando fornecidos com o pacote que instalei (veja a etapa de instalação acima)
$ nix eval nixpkgs.my-package.outPath
error: getting status of '/home/<user>/nixpkgs.my-package.outPath': No such file or directory
Para fins de concretude, digamos que o pacote em que você está interessado é
emacs
. Para obter o caminho do emacs fornecido pelo nixpkgs atualmente listado na suaNIX_PATH
variável de ambiente, execute isto:Isso imprime o caminho de armazenamento Nix dessa derivação, sem construir nada. Note que algumas derivações têm múltiplos caminhos de saída, e isso não leva isso em conta.
Não sei exatamente o que você quer dizer com "atualmente em uso". Como eu disse acima, esse comando olha sua
NIX_PATH
variável de ambiente para descobrir o queimport <nixpkgs>
significa. Mas dependendo de como você está configurando e mantendo seu sistema, pode não ser necessariamente o mesmo nixpkgs que foi usado para construir sua configuração atual do sistema.