如何在NixOS上获得堆栈1.8.*
?通常,如何确保在NixOS上运行的stack
的版本与在非NixOS机器上与stack update --git
一起运行的版本等效?
答案 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
中有更多示例
现在,您可以使用正确版本的软件进行派生。如果您希望它是系统默认值,请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;
};
}