Or Guix, which has the advantage of a more pleasant language.
- discoverability is a problem in Nix
- Guix encourages or "shepherds" more discoverable functions, modules, and abstractions
Then the language could be a problem.
Scheme and/or Lisp is literally the worst language choice for this problem domain.
I will admit I find guix to be much more verbose than Nix.
For teams where GNU/Linux is the primary development OS, Guix seems like a great choice.
pin is what causes rot, not what solves it.
If you have a Dockerfile from 5 years ago...well good luck building it today.
Which has pretty nice support across IDEs. For example - https://code.visualstudio.com/docs/devcontainers/containers
I set this up for my last company where we had all sorts of “works on my machine issues” and a needlessly painful onboarding experience. Local development became streamlined with this tooling BUT pre-apple silicon macs couldn’t handle running Docker like this. Glacially slow. We had a python monorepo with a bunch of services within it.
I am curious whether nix is an alternative / improvement for this. Was going down the nix road at first but an infrastructure team member steered me toward devcontainers instead and I’ve been pretty happy since!
I have nixOS definitions that I can use to make a SD card image, overtake a running linux system via ssh, deploy to nixos via ssh, or deploy to a local system - all from one definition.
Nix is a better fit for this, and when you're using Nix you can also have Nix generated containers for deployment. I think you can also use a container with Nix in to provide the devcontainers interface to devs who don't have Nix installed locally, and have it in turn use Nix against your project's flake to set up its environment.