PATH to Confusion

After installing the latest *env utility, I decided to stop and count how many of these things have accumulated in my shell.

  1. tfswitch for Terraform
  2. jenv for Java
  3. nvm for Node
  4. rvm for Ruby
  5. virtualenv for Python

Worse, each tool has a slightly different approach to the problem, so every time I switch projects I have to search the internet for instructions on how to use my own computer.

The which command is all but useless, because every command is a “shim” script in ~/.some directory.

When I open a new terminal tab, there’s a noticeable lag as Bash grinds through a mere 133 lines of ~/.bashrc

And all of this comes after a concerted effort to cull the things I wasn’t using.


  1. I have had success using nix-shell to address this problem:

    For each project, I have a default.nix file in the project root to specify what dependencies (at a specific version) are needed for the project to build, run, etc. I type “nix-shell –pure” from the project root and away we go with all the deps needed :-)

    Some references:
    – An example Clojure-y defaut.nix:

Comments are closed.