从堆栈项目生成Nix包

Dam*_*les 8 haskell package-managers nix haskell-stack

我有一个可以构建和安装的软件应用程序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 {  # ...
  };
}
Run Code Online (Sandbox Code Playgroud)

看一下在线可用的资源,我找不到任何关于如何做到这一点的描述.我不知道这是否意味着stack并且nix不打算以这种方式使用.

我能找到的手册中的唯一的事情就是如何stack可以使用nix,并且stacknix转换工具.

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

wiz*_*zup 5

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

  1. 创建新hello项目stack new hello
  2. 添加以下行到stack.yaml

    nix:
      enable: true
      shell-file: default.nix
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创造default.nix

    with (import <nixpkgs> { });
    
    haskell.lib.buildStackProject {
      name = "hello";
      src = ./.;
    }
    
    Run Code Online (Sandbox Code Playgroud)

此时,我可以运行nix-build来构建项目,结果将是./result/bin/hello-exe

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


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

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