【问题标题】:Using stack 1.8.0 (the current `stack upgrade --git`) in NixOS?在 NixOS 中使用堆栈 1.8.0(当前的“堆栈升级 --git”)?
【发布时间】:2018-12-21 06:24:08
【问题描述】:

如何在 NixOS 上获得 Stack 1.8.*?一般来说,如何确保在 NixOS 上运行的 stack 版本与在非 NixOS 机器上运行 stack update --git 的版本等效?

【问题讨论】:

    标签: haskell haskell-stack nix nixos


    【解决方案1】:

    在 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;
      };
    }
    

    【讨论】:

    • 我成功生成了stack.nix,但我仍然不清楚如何通过包覆盖在我的configuration.nix 中链接到它(我阅读了您的链接)。能给个提示吗?
    • 这里是文档nixos.org/nixpkgs/manual/#sec-modify-via-packageOverrides。您需要覆盖堆栈属性: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 的问题,我遇到了同样的错误。我正在研究它
    • 哦,nixpkgs 的haskellPackages 中没有githash 包。所以我们有推导的问题。我会看看我能做什么。
    猜你喜欢
    • 2018-05-08
    • 2019-05-17
    • 2012-04-02
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2021-11-02
    相关资源
    最近更新 更多