在NixOS中使用堆栈1.8.0(当前的堆栈升级--git)?

时间:2018-07-12 22:53:07

标签: haskell haskell-stack nix nixos

如何在NixOS上获得堆栈1.8.*?通常,如何确保在NixOS上运行的stack的版本与在非NixOS机器上与stack update --git一起运行的版本等效?

1 个答案:

答案 0 :(得分:2)

在Nix中,如果要使用特定版本的软件包,请为其创建派生版本。

推导

要创建Stack的派生,您可以使用nix-prefetch-scripts包和stdenv.mkDerivation(如Stack releases所示)获得其中一种here

Stack 1.8似乎尚未发布,因此您需要从源代码构建它。一种实现方法是cabal2nix

cabal2nix --shell 'https://github.com/commercialhaskell/stack.git' > stack.nix

manual

中有更多示例

nixpkgs

现在,您可以使用正确版本的软件进行派生。如果您希望它是系统默认值,请override your Nixpkgs

以下是docs中的示例:

{
  packageOverrides = pkgs: rec {
    stack = ./path/to/stack.nix {};
  };
}

更新

我们发现cabal2nix产生的推导不适用于堆栈,因为haskellPackages缺少某些依赖项。

在这里,我创建了gist,其结果是在堆栈存储库上运行stackage2nix的(略有适应)结果。 default.nix的结果不是单个派生,而是构建堆栈所需的一组软件包。因此,系统的替代应如下所示:

{
  packageOverrides = pkgs: rec {
    stack = (import ./default.nix {}).stack;
  };
}