2017-10-21 132 views
4

我有一个软件应用程序,可以用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 { # ... 
    }; 
} 

看着网上提供的资源,我找不到任何描述如何做到这一点。我不知道这是否意味着stacknix不打算以这种方式使用。

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

我也开放给多平台包装的替代品。

+1

Nix手册有一个名为“如何使用堆栈构建Haskell项目”的章节https://nixos.org/nixpkgs/manual/#how-to-build-a-haskell-project-using-stack。使用'haskell.lib.buildStackProject'而不是'stdenv.mkDerivation'。 – MarcDefiant

回答

1

有了这个最近merge,我能够建立和使用以下步骤安装一个简单的堆项目:

  1. stack new hello
  2. 添加以下行stack.yaml

    nix: 
        enable: true 
        shell-file: default.nix 
    
  3. 创建新 hello项目
  4. 创建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

+0

关于如何使用最新'nix'(包括那些更改)的任何想法? –

+1

@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