等同于在 `shell.nix` 中将 `-p zlib` 参数传递给 `nix-shell`
Equivalent of passing `-p zlib` argument to `nix-shell` in `shell.nix`
如果我在 nix-shell
下构建我的 Haskell 项目,它会给出关于缺少 zlib
.
的错误
如果我在 nix-shell 中使用 nix-shell -p zlib
构建项目,则项目会看到 zlib
并成功构建。
如何将 zlib
包添加到 shell.nix
文件,以便不再需要传递 -p zlib
?
注意:构建是使用 cabal v2-build
完成的
为了用堆栈构建我必须做 the following
我的 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
我通过使用 a haskell+nix tutorial 创建 GHC 环境来让它工作。下面是我的 release.nix
和 default.nix
是通过 cabal2nix . > default.nix
生成的:(注意 zlib
作为 haskell 包的一部分包含在 ghcWithPackages
呼叫)
let
config =
{
packageOverrides = pkgs:
{
haskellPackages = pkgs.haskellPackages.override
{
overrides = new: old:
{
interview = new.callPackage ./default.nix;
};
};
};
};
pkgs = import <nixpkgs> { inherit config; };
ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: with hpkgs;
[ cabal-install
interview
zlib
]
);
in
with pkgs;
mkShell
{ buildInputs = [ ghc ];
}
您想创建一个将这些作为依赖项的派生。有一个名为 runCommand
的简单构建器,它运行您提供的脚本。对于 shell.nix 构建器实际上不会被使用,它只是为了提供一个 shell,所以你可以给它一个空脚本:
with import <nixpkgs> { };
runCommand "my-shell" {
buildInputs = [ zlib ];
} ""
如果我在 nix-shell
下构建我的 Haskell 项目,它会给出关于缺少 zlib
.
如果我在 nix-shell 中使用 nix-shell -p zlib
构建项目,则项目会看到 zlib
并成功构建。
如何将 zlib
包添加到 shell.nix
文件,以便不再需要传递 -p zlib
?
注意:构建是使用 cabal v2-build
为了用堆栈构建我必须做 the following
我的 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
我通过使用 a haskell+nix tutorial 创建 GHC 环境来让它工作。下面是我的 release.nix
和 default.nix
是通过 cabal2nix . > default.nix
生成的:(注意 zlib
作为 haskell 包的一部分包含在 ghcWithPackages
呼叫)
let
config =
{
packageOverrides = pkgs:
{
haskellPackages = pkgs.haskellPackages.override
{
overrides = new: old:
{
interview = new.callPackage ./default.nix;
};
};
};
};
pkgs = import <nixpkgs> { inherit config; };
ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: with hpkgs;
[ cabal-install
interview
zlib
]
);
in
with pkgs;
mkShell
{ buildInputs = [ ghc ];
}
您想创建一个将这些作为依赖项的派生。有一个名为 runCommand
的简单构建器,它运行您提供的脚本。对于 shell.nix 构建器实际上不会被使用,它只是为了提供一个 shell,所以你可以给它一个空脚本:
with import <nixpkgs> { };
runCommand "my-shell" {
buildInputs = [ zlib ];
} ""