如何在 NixOS 上获取 Stack 1.8.*
?一般来说,如何确保在 NixOS 上运行的 stack 版本与在非 NixOS 机器上使用 stack update --git 运行的版本等效?
最佳答案
在 Nix 中,如果您想要一个包的特定版本,您可以为其创建一个派生。
推导
要创建 Stack 的派生,您可以获得预构建的 Stack releases 之一使用 nix-prefetch-scripts
包和 stdenv.mkDerivation
,如图所示 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;
};
}
关于haskell - 在 NixOS 中使用堆栈 1.8.0 (当前 `stack upgrade --git` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315498/