如何覆盖 Nix 中的包源?
How can I override a package source in Nix?
所以我想用更新的 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:
等等。
nixos.wiki
has an example 覆盖包源。
您确实需要提供可复制的来源。 github 存储库 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;
}
重叠
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;
所以我想用更新的 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:
等等。
nixos.wiki
has an example 覆盖包源。
您确实需要提供可复制的来源。 github 存储库 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;
}
重叠
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;