我想通过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
,这被相关程序所接受。
任何人都可以给我一个提示吗?我刚刚开始掌握这门语言。
答案 0 :(得分:6)
典型的Nix方法是在不修改用户shell的情况下执行此操作,而是使用makeWrapper
来包装使用RC文件的程序。这样,您的环境不需要被只有一个程序需要的变量污染。
buildInputs = [ makeWrapper ];
postInstall = ''
wrapProgram "$out/bin/my-program" --set CUSTOM_CONFIG_RC "$rcFile"
'';
不幸的是makeWrapper still isn't documented,但它被广泛使用;我推荐了examples in the nixpkgs repo的grepping。
如果您确实希望在您的环境中使用该变量,那么您的派生可以执行类似
的操作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