2017-12-09 32 views
2

私はnix-buildと私のパッケージをビルドして取得するには、このdefault.nixを使用env生成nix-shellcabal2nixにパッケージを追加するには `env`を生成しましたか?

{ pkgs ? import <nixpkgs> {} }: 
with pkgs; 
with haskellPackages; 

let 
    myPackage = callPackage ./myPackage.nix {}; 
in 
    if lib.inNixShell then myPackage.env else myPackage 

myPackage.nixこれは、構築するための細かい作業cabal2nix . > myPackage.nix

{ mkDerivation, base, split, stdenv }: 
mkDerivation { 
    pname = "myPackage"; 
    version = "0.1.0.0"; 
    src = ./.; 
    isLibrary = false; 
    isExecutable = true; 
    executableHaskellDepends = [ base split ]; 
    license = stdenv.lib.licenses.bsd3; 
} 

を使用してますが、私はしばらくの間、開発ヘルパーツールを追加します私はそれに取り組んでいます。 myPackage.nixを編集したくありません。 myPackage.cabalを編集すると、cabal2nixを再実行したいです。

私はbuildInputsmkDerivationを使用しようとしましたが、動作していないようです。

let 
    myPackage = callPackage ./myPackage.nix {}; 
in 
    stdenv.mkDerivation { 
    name = myPackage.name; 

    buildInputs = [ myPackage hlint hasktags ]; 
} 

nix-build停止作業のほかに、それはまた、myPackageの実行可能ではなくmyPackageのENVなしシェルで私をドロップします。

ghcdefault.nixを使用するとmyPackageのenvに存在していますが、使用できません。

から生成されるenvにこれらのツールを追加するにはどうすればよいですか?

答えて

1

nix-shellコマンドは、プロジェクトのすべての依存関係を構築し、すべての環境変数をそれぞれの派生属性値とソース(bash$stdenv/setupに設定します。詳細については、the Nix manual about nix-shellを参照してください。

最後の例では、echo $buildInputsを実行すると、ビルドされたパッケージがビルド入力として表示されます。それは機能しますが、それはあなたが望むものではありません。

代わりに、Haskell固有の環境派生myPackage.envを再利用する必要があります。 nix-shellため、このダミー導出は、など、あなたの依存関係を発見するように設定されているGHC

pkgs.lib.overrideDerivation myPackage.env (old: { 
    buildInputs = old.buildInputs ++ [ pkgs.haskellPackages.hlint ]; 
}) 

迷惑なアドバイスを持っている;)私のプロジェクトで

を、私はこのためにshell.nixファイルを使用します。これにより、参照透過性を損なうlib.inNixShell値を避けることもできます。

あなたのプロジェクトがHaskell以上のパッケージで構成されている場合は、オーバーレイを作成することをお勧めします。それはあなたのプロジェクトをより一貫したものにするでしょう。オーバーレイの例えば

shell.nix

# This imports the project + overlay. The overlay takes care of 
# adding `myPackage` to `haskellPackages`, to make it available 
# throughout the project. 
[email protected]{...}: 
let pkgs = (import ../nix attrs); 

# Adapt myPackage.env 
in pkgs.lib.overrideDerivation pkgs.haskellPackages.myPackage.env (old: { 
    buildInputs = old.buildInputs ++ [ pkgs.haskellPackages.hlint ]; 
}) 

zimbatm's todomvc-nixを参照。

関連する問題