Nixos
如何將環境變數傳遞給 nixos buildFHSUserEnv?
我有一個 Javascript 建構環境,我最近將建構命令(
yarn
在這種情況下,而不是npm
)包裝在 FHS 環境中。這是必要的,因為對於此建構,yarn
會拉下幾個與 NixOS 文件系統不兼容的二進制依賴項,因此將整個建構過程包裝在 FHS 環境中是有益的。但是,我們有一個環境變數,我需要能夠將其傳遞給 yarn 以在我進行時調整建構過程。我怎樣才能在命令行上傳遞它?
我的紗線環境文件如下所示:
{ 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
文件中指定依賴分支。
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
。