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

# History

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).

# Today

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.

## Terminals

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.

### Settings

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)

# Resources

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

Command Line Power User Training

Fork dotfiles