8

我想通过 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,这是由相关程序提供的。

任何人都可以给我一个提示吗?我刚刚开始掌握语言。

4

1 回答 1

9

典型的 Nix 方式是在不修改用户的 shell 的情况下执行此操作,而是使用makeWrapperRC 文件来包装程序。这样,您的环境就不需要被只有一个程序需要的变量污染。

buildInputs = [ makeWrapper ];

postInstall = ''
  wrapProgram "$out/bin/my-program" --set CUSTOM_CONFIG_RC "$rcFile"
'';

不幸的是makeWrapper 仍然没有记录,但它被广泛使用;我建议在 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
于 2016-09-26T22:29:15.763 回答