【问题标题】:How can I override a package source in Nix?如何在 Nix 中覆盖包源?
【发布时间】:2021-05-04 08:14:34
【问题描述】:

所以我想用更新的 fork 替换我的 home-manager 配置中的 pkgs.picom。我该怎么做?

我有一种感觉是这样的:

let newPicom = pkgs.picom.override.src.url = "https://github.com/ibhagwan/picom";  
in 
services.picom.package = newPicom; 

但是知道 Nix 可能实际上是一些很长的咒语,self: super: 等等。

【问题讨论】:

    标签: nix


    【解决方案1】:

    叠加层

    let
      picom_overlay = (self: super: {
        picom = super.picom.overrideAttrs (prev: {
          version = "git";
          src = pkgs.fetchFromGitHub {
            owner = "yshui";
            repo = "picom";
            rev = "31e58712ec11b198340ae217d33a73d8ac73b7fe";
            sha256 = pkgs.lib.fakeSha256;
          };
        });
      });
    in
      nixpkgs.overlays = [ picom_overlay ];
    

    当然,sha256 应该替换为构建后输出错误中显示的相关哈希——在这种情况下:

    sha256 = "sha256-VBnIzisg/7Xetd/AWVHlnaWXlxX+wqeYTpstO6+T5cE=";
    

    picom-next

    请注意,还有一个 picom-next 包,因此您可以选择这样做:

    let
      picom_overlay = (self: super: {
        picom = super.picom.overrideAttrs (oldAttrs: rec {
          inherit (super.picom-next) pname version src;
        });
      });
    in
      nixpkgs.overlays = [ picom_overlay ];
    

    或者更简单的是@RobertHensing 的建议:

    services.picom.package = pkgs.picom-next;
    

    【讨论】:

      【解决方案2】:

      nixos.wikihas an example 覆盖包的源代码。

      您确实需要提供可重现的来源。 github repo url 是可变的,所以你需要指定版本。

      { pkgs, ... }:
      let newPicom = pkgs.picom.overrideAttrs (old: {
            version = "git"; # usually harmless to omit
            src = /* put your source here; typically a local path or
                     a fixed-output derivation produced by
                     `fetchFromGitHub`.
                     builtins.fetchGit is also an option. Doesn't run
                     in parallel but does fetch private sources. */;
          });
      in {
        services.picom.package = newPicom; 
      }
      

      【讨论】:

        猜你喜欢
        • 2019-04-15
        • 2019-10-18
        • 2020-07-28
        • 1970-01-01
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多