Перейти от пути магазина к производному в nix repl

Один из пакетов, который я пытаюсь отладить, спрятан внутри нескольких ссылок производных. Я нашел ссылку в одном из путей, но эту строку я не могу вытащить внутри nix repl. Есть ли способ перейти от пути к хранилищу nix (который еще не существует, потому что это деривация не работает) к объекту деривации nix?

nix-repl> de.dev.packages.hie-bios.pkgs  
"[{\"paths\":[\"/nix/store/f04qyvqaj6s6y5f5a7svpfppsq5wx2p6-haskell-ide-engine-ghc864-7541d1ec71\"],\"priority\":-864}]"

nix
person Reactormonk    schedule 21.11.2019    source источник


Ответы (1)


Похоже, ты не сможешь. Язык Nix позволяет вам получить доступ к контексту строки, но контекст строки не предназначен для воспроизведения производной, не говоря уже об исходном выражении, из которого возникла производная.

nix-repl> :p builtins.getContext "example string ${(import <nixpkgs> {}).hello.outPath}"  
{ "/nix/store/m2capxzda4ams4fi3awmriz7hfkdxyp9-hello-2.10.drv" = { outputs = [ "out" ]; }; }

Технически вы можете читать содержимое производных и анализировать ATerm внутри и т. Д., Но на самом деле это не поддерживается. Он не обрабатывает строковые контексты, вероятно, не позволит вам ничего построить и убьет вашу собаку. И даже в этом случае исходное выражение лица не возвращается.

nix-repl> :p builtins.readFile (builtins.head (builtins.attrNames (builtins.getContext "example string ${(import <nixpkgs> {}).hello.outPath}")))
"Derive([(\"out\",\"/nix/[...]

Вероятно, лучше всего решить вашу hie-bios проблему напрямую.

person Robert Hensing    schedule 21.11.2019