在 Nix 中向现有包添加和安装运行时依赖项的最佳方法?

Best way to add and install runtime dependency to an existing package in Nix?

使用 nix-env -i <pkg> 在 Nix 中安装包并使用 source ~/.nix-profile/etc/profile.d/nix.sh 添加 Nix 环境会导致该包出现在通常需要的 $PATH 之上。

如果我想为已经存在的包安装和指定运行时依赖项(例如 pythonperl 解释器),但不希望该依赖项出现在其余包中,该怎么办?系统环境?

在我的例子中,我想将 perl 依赖项添加到 fzf package as it uses perl here。但出于兼容性原因,我不希望它出现在系统的其余部分。

我尝试用 packageOverrides 覆盖 fzf 但首先它似乎只适用于构建依赖项,其次没有参数指定 perl.

通常您会使用 wrapProgram 将可执行文件替换为在调用实际可执行文件之前修改 PATH 的脚本。

这种情况比较复杂,因为它不是一个独立的程序,而是一个要导入的脚本,所以不能使用包装器。在 postInstall 中,您可以使用 substituteInPlace,它看起来有点像

substituteInPlace $out/path-to-keybindings.zsh --replace '| perl ' '| ${pkgs.perl}/bin/perl '

这将修补脚本以通过其绝对存储路径引用 perl,而不修改环境。