如何将环境变量传递到 nixos buildFHSUserEnv 中?

如何将环境变量传递到 nixos buildFHSUserEnv 中?

我有一个 Javascript 构建环境,最近我将构建命令(yarn在本例中为npm)包装在 FHS 环境中。这是必要的,因为对于此构建,yarn会删除几个与 NixOS 文件系统不兼容的二进制依赖项,因此将整个构建过程包装在 FHS 环境中是有益的。

然而,我们有一个环境变量,我需要能够将其传递给纱线以调整构建过程。我怎样才能在命令行中传递它?

我的纱线环境文件如下所示:

{ pkgs ? import <nixos> {}
, fetchurl ? pkgs.fetchurl
, nodejs ? pkgs.nodejs
, buildFHS ? pkgs.buildFHSUserEnv
, mkDerivation ? pkgs.stdenv.mkDerivation
}:
let
    version = "0.19.1";
    pkgUrl = "https://github.com/yarnpkg/yarn/releases/download/v${version}/yarn-v${version}.tar.gz";
    pkgSha = "751e1c0becbb2c3275f61d79ad8c4fc336e7c44c72d5296b5342a6f468526d7d";
in rec {
    yarn-env = mkDerivation {
        name = "yarn-env";

        src = fetchurl {
            url = pkgUrl;
            sha256 = pkgSha;
        };

        phases = [ "unpackPhase" "installPhase" ];

        installPhase = ''
            mkdir -p $out
            cp -r * $out
        '';

    };
    yarn = buildFHS {
        name = "yarn";
        targetPkgs = pkgs: [ nodejs
                             yarn-env
                             pkgs.git
                             pkgs.stack
                             pkgs.haskell.compiler.ghc802
                             pkgs.zlib
                             pkgs.ncurses5
                             pkgs.gmp
                             pkgs.neovim 
                             ];
        runScript = "yarn";
        profile="export DEPENDENCY_BRANCH=2310-nifty-unmerged-feature";
    };
}

因此,我将此文件包含在一个更大的文件中,shell.nix以便我可以使用yarn命令,并且我还有在构建和部署中使用的其他几个命令。

我希望能够在命令行上而不是在文件中指定该依赖分支yarn-env.nix

答案1

nix-shell和都支持通过和nix-build传递参数。将被评估为 nix 表达式,并将被视为字符串文字。 使用问题中提供的表达式,您可以使用它们来覆盖 的值,如下所示:--arg--argstr--arg--argstr
pkgs

nix-shell -A yarn --arg pkgs 'import /home/me/nixpkgs {}'

您可以向表示依赖分支的表达式添加另一个参数:

branch ? "2310-nifty-unmerged-feature"

并在表达式中引用它:

profile="export DEPENDENCY_BRANCH=${branch}";

然后可以使用以下任一方法在命令行中传递分支:

nix-shell --arg branch \"somebranch\"
nix-shell --argstr branch somebranch

有了这个,就应该以类似的方式调整外部表达式并使它们传播参数branch

nix-shell手册页有关于处理--arg和 的更多详细信息--argstr

相关内容