从堆栈项目生成Nix包

时间:2017-10-21 07:23:14

标签: haskell package-managers haskell-stack nix

我有一个可以使用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 {  # ...
  };
}

查看在线提供的资源,我找不到任何有关如何完成此操作的说明。我不知道这是否意味着stacknix不打算以这种方式使用。

我在手册中找到的唯一内容是how stack can use nixstack to nix转换工具。

我也愿意接受多平台包装的替代方案。

1 个答案:

答案 0 :(得分:4)

使用最近的merge,我可以使用以下步骤构建和安装一个简单的堆栈项目:

  1. 使用hello
  2. 创建新的stack new hello项目
  3. 将以下行添加到stack.yaml

    nix:
      enable: true
      shell-file: default.nix
    
  4. 创建default.nix

    with (import <nixpkgs> { });
    
    haskell.lib.buildStackProject {
      name = "hello";
      src = ./.;
    }
    
  5. 此时,我可以运行nix-build来构建项目,结果将在./result/bin/hello-exe

    如果我想安装,我会运行nix-env -i -f default.nix

    旁注:nix-build每次运行时都会下载堆栈的构建计划。

    我想在进行更改时逐步构建我的项目,所以我主要只是放入shell并在那里调用stack build