从堆栈项目生成Nix包
我有一个软件应用程序,可以用stack
构建和安装。我想为Linux和Mac提供一个二进制包。为此,我正在考虑nix
,因为除此之外,它可以用于Linux和Mac。这将为我节省维护两种包装类型的麻烦。从堆栈项目生成Nix包
阅读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
和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
。
关于如何使用最新'nix'(包括那些更改)的任何想法? –
@DamianNadales你可以使用'-I nixpkgs =/path/to/repo'标志和大多数'nix- *'命令。如果你不想克隆[nixpkgs](https://github.com/NixOS/nixpkgs),你可以像这个'nix-shell -I nixpkgs = https:// github一样使用github提供的快照url。 com/NixOS/nixpkgs/archive/master.tar.gz -p stack' – wizzup
Nix手册有一个名为“如何使用堆栈构建Haskell项目”的章节https://nixos.org/nixpkgs/manual/#how-to-build-a-haskell-project-using-stack。使用'haskell.lib.buildStackProject'而不是'stdenv.mkDerivation'。 – MarcDefiant