Lock flake input to selected revision

I pinned my nixpkgs in with nix registry. I would like to lock nixpks input of the flake for my git project to the same version I have already pinned. There is not such command like nix flake lock nixpkgs github:NixOS/nixpkgs/<sha here>. How can I pin/lock an input of my flake?

1 Like

If your flake omits the inputs.nixpkgs declaration (but specifies it in the arguments to outputs) then it will take it from your registry, so if your registry has a pinned definition then it’ll use that. The downside is this means it’s now dependent upon per-user/per-machine state, but I expect that to only matter when updating the input.

1 Like

That might be the workaround I am looking for.

The thing I am trying to avoid is that nix flake lock needs internet access to get the newest nixpkgs. For the sake of development I would like to lock it to the thing I have already in nix store.

When I apply the workaround the flake.nix is not complete. So I should revert the workaround before I push the commit. It gets needlessly complicated :(.

In your flake.nix, try something like

inputs = {
    nixpkgs.url = git://nixos/nixpkgs?ref=unstable&rev=e486d8d4
};
outputs = { self, nixpkgs } : {
     ...
};

There are many alternatives described in nix flake - Nix Reference Manual.

3 Likes