My dev environment
I am the the classic linux user, that kind of guy who loves terminals, empty desktops, to install just the very few applications I daily need and so on. Who doesn’t like that feel when everything is finally setup and you say… Ok I’m done. Minimal ram consumption, minimal cpu usage… Oh god you are so satisfied.
But then you start to develop, Dammit I need so many tools, so many things, suddenly the technology we are playing with is so experimental that it can cause system inestability, my new system is going to fill up with things that are no needed at all for a common usage.
To solve that I use Vagrant. Vagrant provides a virtual machine ready to play with it in just few seconds. Then, you can install there all the needed stuff for your project. Vagrant provides easy shared folders and easy ways to provision your machine. You can use Cheff or Puppet, or make your own shell script. I prefer the last option because of the lack of dependency.
For instance, rigth now I am playing with Node, React, ES6/7, Hot reloading… So I have a github repo with a ubuntu trusty64 base box with 2 scripts. The first one is the provisioner, it its the one that installs all the system tools I’ll need. The second one is the big one. That will clone my dotfiles, will setup my configs, will get the last Nodejs version and will install it along the system, also it will install all my vim plugins and will leave the virtual machine ready for work in just 10 minutes, then you vagrant ssh and you are done. Oh wait, everything crashes.., no problem: vagrant halt and then vagrant up again. Oh no! the machine went totally unstable, this is unusable, a mess (this happens rarelly) no problem, vagrant destroy, and then vagrant up again executing the setup, and I will have again a clean system with my code and all the necessary stuff to continue.
And the host system keeps clean with the very minimal necessary things to use the computer as I do, so I can use all my non used ram to keep my web browser open with a bunch of tabs, or many proyects, each one in one different virtual machine, with their tools and independence.