2017-10-21 129 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