将运行时依赖项注入 nix 包

Inject runtime dependency into nix package

通过覆盖 buildInputs 向包添加运行时依赖项会导致包重建。有没有一种简单的方法可以在不重新编译的情况下将运行时依赖项注入包?

所以基本上将 package/bin 添加到 PATH 并将 package/lib 添加到 LD_LIBRARY_PATH

如果我理解正确的话,您想调整 Nix 安装的应用程序 运行 时使用的环境,而不是 [=26] 时使用的环境=]built,那么我知道的一个方法如下。通过使用它,您实际上创建了一个 包装脚本 ,它覆盖了 "default command"。因此,类似于创建例如一个自定义 ~/bin/vim 脚本,它将一些 options/env 覆盖添加到默认 vim 二进制文件,在脚本中使用 "hardcoded original path" 调用。

nixpkgs 中的一个示例是 vimutils.vimWithRC 如何使用自定义脚本覆盖 vim 命令。为了您自己的使用,您可以或多或少地编写如下内容:

with import <nixpkgs> {};

writeScriptBin "vim" ''
  #!/usr/bin/env bash
  export PATH=package/bin:$PATH   # whatever you like; I've added what you asked for
  export LD_LIBRARY_PATH=package/lib:$LD_LIBRARY_PATH
  ${vim}/bin/vim --my-options "$@"
'';

如果你把它放在 my-vim.nix 中,你应该可以安装它:

$ nix-env -e vim   # REMOVE NORMAL VIM. I think this should be done first to avoid conflict
$ nix-env -i -f my-vim.nix

希望它能正常工作,"override" 默认值 vim 适合您。

免责声明:抱歉,我实际上并没有以这种确切的形式对其进行测试。不幸的是,此刻手边没有 Nix 控制台。