从堆栈项目生成 Nix 包
Generating a Nix package from a stack project
我有一个可以使用 stack
构建和安装的软件应用程序。我也想为 Linux 和 Mac 提供一个二进制包。为此,我正在考虑 nix
,因为除其他外,它可以用于 Linux 和 Mac。这将使我免去维护两种包类型的麻烦。
阅读 nix
包的定义方式后,我希望基于 stack
的项目可以使用如下配置构建:
{ stdenv, fetchurl, stack }: # we need to depend on stack
stdenv.mkDerivation {
name = "some-haskell-package-0.1";
builder = ./builder.sh; # here we would call `stack install`
src = fetchurl { # ...
};
}
查看在线可用资源,我找不到任何有关如何完成此操作的说明。我不知道这是否意味着 stack
和 nix
不打算以这种方式使用。
我在手册中唯一能找到的是 how stack
can use nix
, and a stack
to nix
转换工具。
我也愿意接受多平台打包的替代方案。
通过最近的 merge,我能够使用以下步骤构建和安装一个简单的堆栈项目:
- 使用
stack new hello
创建新的 hello
项目
将以下行添加到 stack.yaml
nix:
enable: true
shell-file: default.nix
创建default.nix
with (import <nixpkgs> { });
haskell.lib.buildStackProject {
name = "hello";
src = ./.;
}
此时,我可以 运行 nix-build
构建项目,结果将在 ./result/bin/hello-exe
如果我要安装,我会运行nix-env -i -f default.nix
旁注:nix-build
每次 运行 都会下载堆栈的构建计划。
我想在进行更改的同时逐步构建我的项目,所以我主要只是放入 shell 并在那里调用 stack build
。
我有一个可以使用 stack
构建和安装的软件应用程序。我也想为 Linux 和 Mac 提供一个二进制包。为此,我正在考虑 nix
,因为除其他外,它可以用于 Linux 和 Mac。这将使我免去维护两种包类型的麻烦。
阅读 nix
包的定义方式后,我希望基于 stack
的项目可以使用如下配置构建:
{ stdenv, fetchurl, stack }: # we need to depend on stack
stdenv.mkDerivation {
name = "some-haskell-package-0.1";
builder = ./builder.sh; # here we would call `stack install`
src = fetchurl { # ...
};
}
查看在线可用资源,我找不到任何有关如何完成此操作的说明。我不知道这是否意味着 stack
和 nix
不打算以这种方式使用。
我在手册中唯一能找到的是 how stack
can use nix
, and a stack
to nix
转换工具。
我也愿意接受多平台打包的替代方案。
通过最近的 merge,我能够使用以下步骤构建和安装一个简单的堆栈项目:
- 使用
stack new hello
创建新的 将以下行添加到
stack.yaml
nix: enable: true shell-file: default.nix
创建
default.nix
with (import <nixpkgs> { }); haskell.lib.buildStackProject { name = "hello"; src = ./.; }
hello
项目
此时,我可以 运行 nix-build
构建项目,结果将在 ./result/bin/hello-exe
如果我要安装,我会运行nix-env -i -f default.nix
旁注:nix-build
每次 运行 都会下载堆栈的构建计划。
我想在进行更改的同时逐步构建我的项目,所以我主要只是放入 shell 并在那里调用 stack build
。