【发布时间】:2018-12-21 06:24:08
【问题描述】:
如何在 NixOS 上获得 Stack 1.8.*?一般来说,如何确保在 NixOS 上运行的 stack 版本与在非 NixOS 机器上运行 stack update --git 的版本等效?
【问题讨论】:
标签: haskell haskell-stack nix nixos
如何在 NixOS 上获得 Stack 1.8.*?一般来说,如何确保在 NixOS 上运行的 stack 版本与在非 NixOS 机器上运行 stack update --git 的版本等效?
【问题讨论】:
标签: haskell haskell-stack nix nixos
在 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中有更多例子
现在您有了正确版本的软件的派生。如果您希望它成为系统默认设置,请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;
};
}
【讨论】:
stack.nix,但我仍然不清楚如何通过包覆盖在我的configuration.nix 中链接到它(我阅读了您的链接)。能给个提示吗?
stack = import /path/to/stack.nix {};。相对路径也应该起作用
error: 'f' at /home/george/.dotfiles/nixos/stack.nix:7:7 called without required argument 'githash', at /nix/store/a55hr4k99fdn5lxym8ba8545lndabwfk-nixos-18.03.132847.aec217852f2/nixos/pkgs/development/haskell-modules/make-package-set.nix:88:27 (use '--show-trace' to show detailed location information)
cabal2nix 的问题,我遇到了同样的错误。我正在研究它
haskellPackages 中没有githash 包。所以我们有推导的问题。我会看看我能做什么。