I use git submodules and just have nixpkgs as a submodule of my config. That way I can easily tweak nixpkgs code locally and create new PRs to push upstream.
Updating is then easy because it’s handled by git.
Actually I have 2 submodules for nixpkgs (one for stable and one for unstable).
Downside of this is that the original clone I quite slow, but subsequent updates are speedy.
I saw people pinning to a particular commit via hash too (and then you just have some helper that auto-updates that hash).
I never used channels which have this state outside of config which is not great.
I use git submodules and just have nixpkgs as a submodule of my config. That way I can easily tweak nixpkgs code locally and create new PRs to push upstream.
Updating is then easy because it’s handled by git.
Actually I have 2 submodules for nixpkgs (one for stable and one for unstable).
Downside of this is that the original clone I quite slow, but subsequent updates are speedy.
I saw people pinning to a particular commit via hash too (and then you just have some helper that auto-updates that hash).
I never used channels which have this state outside of config which is not great.