我想通过 Nix 定义我的软件的 rc 文件。因此,我在
config.nix
中定义了一个新包,其中将包含一个配置文件:
{ pkgs, ... }:
{
packageOverrides = pkgs : with pkgs; {
custom-config = import ./custom-config {
inherit (pkgs) stdenv;
};
};
}
然后在 custom-config/default.nix 中内联定义该文件:
{ stdenv }:
stdenv.mkDerivation rec {
name = "custom-config";
stdenv.mkDerivation {
name = "CustomConfig";
src = builtins.toFile "customrc" ''
# content
'';
};
}
最后缺少的部分是:向用户默认 shell 添加特定的环境变量,例如
CUSTOM_CONFIG_RC
,相关程序会遵守该变量。
有人可以给我提示吗?我刚刚开始掌握这门语言。
典型的 Nix 方式是在不修改用户 shell 的情况下执行此操作,而是使用
makeWrapper
来包装使用 RC 文件的程序。这样您的环境就不会被只有一个程序需要的变量污染。
buildInputs = [ makeWrapper ];
postInstall = ''
wrapProgram "$out/bin/my-program" --set CUSTOM_CONFIG_RC "$rcFile"
'';
查看更多 在 Nixpkgs 存储库中使用
makeWrapper
的示例。
如果您确实希望该变量在您的环境中可用,您的推导可以执行类似的操作
postInstall = ''
mkdir -p $out/share
echo "export CUSTOM_CONFIG_RC=$rcFile" > $out/share/your-rc-setup-script.sh
'';
安装软件包后,最终将从
~/.nix-profile/share/your-rc-setup-script.sh
进行符号链接,然后在您的 .bashrc
中,您可以使用 加载它
source $HOME/.nix-profile/share/your-rc-setup-script.sh