Hi. Recently had a hard time getting going with overlays. Got some help in discord, thought I would share it back here.
Use case: Want latest version which isn’t in nixpkgs yet, or to version pin a pkg.
Example: In this case, it is a go based pkg - operator-sdk was at 1.18.1 and I want to install latest (1.22.0).
Context: using home-manager, I don’t use nix to manage any other aspect of system.
Inside ~/.config/nixpkgs/home.nix
:
{ config, pkgs, ... }:
{
nixpkgs.overlays = [
(final: prev: {
operator-sdk = prev.callPackage "${prev.path}/pkgs/development/tools/operator-sdk" {
buildGoModule = args: prev.buildGoModule (args // {
version = "1.22.0";
src = prev.fetchFromGitHub {
owner = "operator-framework";
repo = "operator-sdk";
rev = "v1.22.0";
sha256 = prev.lib.fakeHash;
};
vendorSha256 = prev.lib.fakeHash;
});
};
})
];
...
}
Notice in the sha fields, using fakeHash. So when you do this, run home-manager switch
and you will get an error about hash-mismatch. First error message gives sha256, run again and that will give you the vendorSha256.
There are probably a few variations on doing this, depending on the pkg. In this case the pkg is using buildGoModule. Here is another variation, to overlay asdf-vm.nix:
(final: prev: {
asdf-vm = prev.asdf-vm.overrideAttrs (_: {
version = "0.10.2";
src = prev.fetchFromGitHub {
owner = "asdf-vm";
repo = "asdf";
rev = "v0.10.2";
sha256 = prev.lib.fakeHash;
};
);
})
Thanks to everyone in the discord who helped while I fumbled my way to asking the right questions. Here is the meat of the discussion: Discord