I was explaining my terminal configuration the other day to a colleague so decided to document what I have done.


I have been using Linux (Unix back in the day) for many years and for the last couple of years my primary work machine has been a Mac (Mac Air and Mac Book Pro).

Over the years the CLI has been an important part of my workflow, although more recently I have been spending more time in a terminal window (OSX & Linux) rather that ssh’ing to network devices. This has allowed me to customise the way I interact with it much more as well as making mt life easier.

To customise I updated a number of .profile files on the devices. In the beginning I had manually copied the configuration files not really having a central copy (just copy from what ever server I was last on). As a result I had inconsistent configurations across servers (although looking back they didn’t do too much - old blog post).


As my experience and usage has grown I have improved my profile configurations to improve my workflow. I have also started to use tools like git, this has allowed me to both save my configurations in a central location as well as use git in a more intelligent way (like having the prompt tell me branch information and it out of sync).

My current configuration can be found on my GitHub page here.


As mentioned these days the majority of my work is on my Mac (or a Linux server) so not surprisingly I don’t plan to explain how to do this via a Windows machine. However in the past to try and get a *nix feel to my Windows environment I used Cygwin. You might also find Oh My Cygwin useful.

One of the 1st things I worked out when got a Mac was I didn’t like the out of the box terminal and very quickly discovered iTerm2, you can read the additional features you get on your own.

Bash was my got to shell until a colleague introduced my to ZSH about a year ago. This has a number of benefits for developers over the bash shell.

After using Google to understand ZSH a bit more I came across Oh-My-ZSH that provides a ZSH framework. Its pretty easy to install and set as your default shell;

$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Its based on the hard work by over 800 contributors and also has some pretty cool plugins to extend the built in functionality.


The configuration specific to your ZSH is found in ~/.zshrc. The cool thing is that a tonne of themes exist which could be used (or you could even create your own). You set your theme in .zshrc under ZSH_THEME="random" (replace random with the one you want or leave random if you want to try a few).

The themes you have available to your environment is in ~./oh-my-zsh/themes, just make sure the one you want is located there.

The plugins can be set by adding them to plugins=(git node npm brew osx)


A number of resources that you might find useful on your own journey are;

Command Line Power User Training

Fork dotfiles