具有自定义依赖项的 Nix shell

具有自定义依赖项的 Nix shell

我现在了解如何编写shell.nix 我正在开发的项目的基本内容。我有这样的事情:

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

然而,这个项目还依赖于另一个包(例如,cln),我需要从 git 存储库下载源代码并使用一些特殊标志进行编译。该包使用autoconf,我只需要启用/禁用一些选项。我不知道如何实现这一目标shell.nix。以下是我目前的尝试,是我通过各种谷歌搜索拼凑而成的。它不起作用,我不知道如何修复它(或如何搜索帮助):

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...行产生错误:

错误:尝试调用不是函数而是集合的东西

我想修复这个问题,并能够在构建脚本之前将一些标志传递到脚本中configurecln 并使用自定义的cln( cln-m1) 作为此 shell 的依赖项。

答案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
  ];
}

相关内容