カスタム依存関係を持つNixシェル

カスタム依存関係を持つNixシェル

shell.nix 今、私が作業しているプロジェクトの基本を書く方法を理解しました。私は次のようなものがあります:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
  nativeBuildInputs = with pkgs; [ 
    cmake
    boost
    eigen
  ];
}

ただし、このプロジェクトは他のパッケージclnにも依存しているため、gitリポジトリからソースコードをダウンロードし、いくつかの特別なフラグを使用してコンパイルする必要があります。このパッケージはautoconfいくつかのオプションを有効/無効にするだけです。私はこれを達成する方法がわかりませんshell.nix。以下は、さまざまなGoogle検索でまとめた現在の試みです。うまくいかず、問題を解決する方法(またはヘルプを検索する方法)がわかりません。

with import <nixpkgs> {};

stdenv.mkDerivation {    # this line causes an error
  name = "cln-m1";
  src = fetchurl {
    url = "https://www.ginac.de/CLN/cln-1.3.6.tar.bz2";
  };    # I also want to pass some flags to "configure" here
}

pkgs.mkShell {
  nativeBuildInputs = with pkgs; [ 
    cmake
    boost
    eigen
    cln-m1    # this is the customized package I want to add
  ];
}

stdenv.mkDerivation...このコードは、次の行でエラーが発生するため機能しません。

エラー:関数ではなくコレクションを呼び出そうとしています。

私はこの問題を修正し、スクリプトをビルドする前にいくつかのフラグをスクリプトに渡し、カスタムconfigureフラグclnclncln-m1をこのシェルの依存関係として使用できるようにしたいと思います。

ベストアンサー1

まあ、それは基本的な関数型プログラミングのようなものです。

with import <nixpkgs> {};
let
  cln-m1 = stdenv.mkDerivation {    # this line causes an error
    name = "cln-m1";
    src = fetchurl {
      url = "https://www.ginac.de/CLN/cln-1.3.6.tar.bz2";
    };    # I also want to pass some flags to "configure" here
  };

in pkgs.mkShell {
  nativeBuildInputs = with pkgs; [ 
    cmake
    boost
    eigen
    cln-m1    # this is the customized package I want to add
  ];
}

おすすめ記事