Short answer: use Nix + direnv (nix-direnv) + flakes.
Result: when you cd into a project, your shell auto-loads the exact tools for that repo; when you delete the folder, its env stops existing and the packages get garbage-collected. No more “uhh which package manager did I use for this?”
Here’s the playbook—fast, opinionated, and minimal chaos.