A Vagrantfile or a Dockerfile are not enough. You need the actual images.
It's versions all the way down
Not sure I am a fan of having every git repo having a copy of everything over and over and over, for "ecological" reasons... But it's probably the best way to endure that your builds will work.
So now we don’t have to worry about them disappearing AND we don’t have to leave the network to get them... assuming we don’t screw up our server.
What we don't do yet is storing a pristine a VirtualBox image for another project. We should start doing that because sometimes building those images requires a surprising amount of work. Bitrot, etc.
You then get to decide to what extent you want to freeze your exact dependencies or leave them abstract to some degree.
I tend not to but generally consider myself on the fence about that one.
This way, I can override things if needed; and in particular I have continuous integration (Hydra) building both a "stable" (all fixed versions) and "unstable" (all latest versions).
This way I always have a known-good build I can use, but I can still spot impending breakages and bit-rot in CI.
In the case of nixpkgs I don't actually track the very latest commit, since it updates so often. Instead I just `git pull` into a fork every now and again.