Skip to Content

Years ago, we had started a little tradition in the community of sharing “What’s in your bag“.


The idea was a chance to share various setups and tools that we used to “get it done” in our daily work lives. Now with so many years gone by I find myself a bit nostalgic for those days… OK primarily because my MacBook has recently bit the dust. We are talking re-imaged twice and now the only option is wait for a new one to arrive and start all over.

So while the process of starting over can be amazingly cathartic and is a perfect chance to delete, remove, prune, purge and otherwise optimize your digital world it can also be painstakingly tedious.

So I decided to take the opportunity to kind of document how I work and how I might be able to optimize the setup from one machine to the next without impacting the machine if at all possible or to at least minimize the impact and thus make migration or moving machines easier.

First off, I stopped doing all backups, with the whole Cloud and connected folders there is no real need for a “backup” per se. It also makes it easy to separate work and personal.

For my personal content and the fact I am an Apple user I use iCloud.

For work we use OneDrive from Microsoft.

These two services eliminates all of my “document” needs. For development I use GitHub, the paid service for unlimited private repos works great for me.


Now for applications? Well as an Apple user I have the App Store which gets me several apps, we have an internal tool for company related apps then the rest of course are tools that I use and many are often development related which means I need to keep track of a few websites (luckily Chrome let’s you sync bookmarks as does Safari).

Now that covers a broad range of what I need to do and be able to work on it. But it does not get into the actual setup of various development environments. Now in the past 3 years I piled a ton of stuff onto my machine and might (I can’t confirm or deny) have caused me some issues.

So I’ve been exploring some tools to give me a development environment setup without too much of an impact on my local machine. Enter the idea of containers….

I’ve been working with both. With Vagrant I’ve been able to spin up a VM and provision it with nvm and multiple versions of Node. Which has been very good for running through several tutorials and working on several projects without a problem. I even played around with browser based tools for dev work to see how that might work out.

# -*- mode: ruby -*-
# vi: set ft=ruby :
$rootScript = <<SCRIPT
sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales
sudo apt-get install -y git-core curl

$userScript = <<SCRIPT
  cd /home/vagrant
  mkdir /home/vagrant/sqlpaddb

  # Installing nvm
  wget -qO- | sh

  # This enables NVM without a logout/login
  export NVM_DIR="/home/vagrant/.nvm"
  [ -s "$NVM_DIR/" ] && . "$NVM_DIR/"  # This loads nvm

  echo "Installing: "
  echo "Application:  node.js"
  nvm install stable &> /dev/null
  nvm install 6.0.0
  nvm alias default 6.0.0
  npm install -g npm

  # Install Apache, PHP and Codiad
  sudo apt-get update && sudo apt-get upgrade
  sudo apt-get --assume-yes install apache2 php7.0 libapache2-mod-php7.0 
  sudo apt-get --assume-yes install php-zip php-mbstring
  # Clone Codiad into Apache root
  sudo rm -r /var/www/html
  sudo git clone /var/www/html/
  sudo touch /var/www/html/config.php
  sudo chown www-data:www-data -R /var/www/html/
  sudo chmod 777 /var/www/html/config.php
  sudo chmod -R 777 /var/www/html/data
  sudo chmod -R 777 /var/www/html/workspace
  sudo chmod -R 777 /var/www/html/plugins
  sudo chmod -R 777 /var/www/html/themes
  sudo git clone /var/www/html/plugins/Codiad-Beautify
  sudo git clone /var/www/html/plugins/Codiad-CodeGit
  sudo git clone /var/www/html/plugins/Codiad-Terminal

  # Install sqlpad
  npm install sqlpad -g
  echo "Restart Apache"
  sudo service apache2 restart
  sqlpad --dir /home/vagrant/sqlpaddb/ --port 3000 &> start.log & echo "SQL Pad started"

ENV["LC_ALL"] = "en_US.UTF-8"
Vagrant.configure("2") do |config| = "ubuntu/xenial64"
  config.vm.provision "shell", inline: $rootScript
  config.vm.provision "shell", inline: $userScript, privileged: false "forwarded_port", guest: 3000, host: 3000, host_ip: "" "forwarded_port", guest: 3010, host: 3010, host_ip: "" "forwarded_port", guest: 80, host: 80, host_ip: "" "private_network", ip: ""
  config.vm.provider "virtualbox" do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = "2048"

Another one I have gives me a full Eclipse environment with all the plugins installed and ready to go.

With Docker I am still working it out and seeing if I can do the same things (I have noticed a bit smaller footprint) but there are pros and cons of a full VM and a container.

I’m also not the only one looking at the differences and I think I may end up with both running.

With Docker you can even get a private registry for your containers.

Google Container Registry provides secure, private Docker image storage on Google Cloud Platform. The price for Multi-Regional buckets is about $0.026 per GB per month.

Amazon Elastic Container Registry (ECR) is a fully-managed container registry that makes it easy for developers to store, manage, and deploy Docker container images.

Storage is $0.10 per GB-month
First 1 GB / month $0.000 per GB
Up to 10 TB / month $0.090 per GB
All data transfer in $0.000 per GB

Which means you can get them setup and store them remotely if you like. For now though I have them in a Github repo that let’s me store the files that I use to build one and create it – for Vagrant I use Github as well to keep the setup files.

In the process of my work machine needed to be wiped and re-imaged (twice) I was able to test things for getting setup and working. Other than the document sync which takes awhile considering the amount of data, I was able to be working within about 20 mins and start development work in roughly 40 mins. Document sync depends on network connectivity and well that has taken me like 3 days so far to get all that sync’d – I may need to do more pruning in my documents.

So that’s my bag so far, what’s your setup? Care to share? #mydevsetup Crazy how mine has changed and how some things are the same since I shared my first setup.


To report this post you need to login first.


You must be Logged on to comment or reply to a post.

  1. Joachim Rees

    Hi Craig,

    thanks for sharing!

    I think it’s a bit too technical for me, so I only scanned your blog, but you caught my attention at

    First off, I stopped doing all backups,


     with the whole Cloud and connected folders there is no real need for a “backup” per se.

    So what do you do if the cloud (or the net) is gone?



    1. Craig Cmehil Post author

      I guess there I do the same thing if my external hard drives get knocked off the shelf by a cat (yes it did happen). It’s a calculated risk that I am taking. I am putting a lot of trust into 3 companies for all my content.


Leave a Reply