等效于将 `-p zlib` 参数传递给 `shell.nix` 中的 `nix-shell`

Răz*_*nda 5 haskell cabal-install nix nix-shell

如果我在nix-shell它下面构建我的 Haskell 项目,则会出现关于缺少zlib.

如果我使用 nix-shell 构建项目,nix-shell -p zlib则该项目zlib会成功查看并构建。

如何将zlib包添加到shell.nix文件以便-p zlib不再需要传递?

注意:构建是使用 cabal v2-build

为了使用堆栈构建,我必须执行以下操作

这是我shell.nix目前的定义方式:

{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:

let

  inherit (nixpkgs) pkgs;

  f = { mkDerivation, base, directory, stdenv, text, turtle, zlib }:
      mkDerivation {
        pname = "haskell-editor-setup";
        version = "0.1.0.0";
        src = ./.;
        isLibrary = false;
        isExecutable = true;
        executableHaskellDepends = [ base directory text turtle zlib ];
        description = "Terminal program that will set up Haskell environment with a target selected editor or IDE";
        license = stdenv.lib.licenses.gpl3;
      };

  haskellPackages = if compiler == "default"
                       then pkgs.haskellPackages
                       else pkgs.haskell.packages.${compiler};

  variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;

  drv = variant (haskellPackages.callPackage f {});

in

  if pkgs.lib.inNixShell then drv.env else drv
Run Code Online (Sandbox Code Playgroud)

Bri*_*nna 4

您想要创建一个将这些作为依赖项的派生。有一个名为的简单构建器runCommand,它运行您提供的脚本。对于 shell.nix,构建器实际上不会被使用,它仅用于提供 shell,因此您可以为其提供一个空脚本:

with import <nixpkgs> { };

runCommand "my-shell" {
  buildInputs = [ zlib ];
} ""
Run Code Online (Sandbox Code Playgroud)