nixos buildFHSUserEnv에 환경 변수를 전달하는 방법은 무엇입니까?

nixos buildFHSUserEnv에 환경 변수를 전달하는 방법은 무엇입니까?

저는 Javascript 빌드 환경을 가지고 있으며 최근 FHS 환경에서 빌드 명령( yarn이 경우 )을 래핑했습니다. 이 빌드에서는 NixOS 파일 시스템과 호환되지 않는 여러 바이너리 종속성이 제거되므로 FHS 환경에서 전체 빌드 프로세스를 래핑하는 것이 유리하기 npm때문에 이것이 필요합니다 .yarn

그러나 빌드 프로세스를 조정하기 위해 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.nixYarn 명령을 사용할 수 있게 했고, 빌드 및 배포에 사용하는 몇 가지 다른 명령도 있습니다.

파일이 아닌 명령줄에서 해당 종속성 분기를 지정할 수 있기를 원합니다 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.

관련 정보