macOS ohmyzsh + tmux + vim + iTerm2 + Powerlevel9k = Badass terminal

A week or so ago a colleague turned me on to oh-my-zsh and I just went down the rabbit hole. I have always found the built-in Terminal in macOS (formerly OS X) to be bland and boring, but never really sat down to try to change it. I started using iTerm2 awhile ago, but again, never tried to “spice it up” so to speak. Now I did and I came up with this:

First off, make sure you’re using iTerm2, if you’re not already.

Next, we will have to install oh-my-zsh and tmux before setting up Powerlevel9k and your vim settings. There are a few caveats to getting everything setup neatly on Mac, so this post will go over that.


I used Homebrew to install tmux by simply typing the following:

If you don’t have brew installed, you can do so by typing:


You can follow the documentation on GitHub, or simply use the following command:

After the install completes, you will want to enable some plugins and set a theme in your .zshrc file.

The plugins I have enabled are as follows:

Note: I had to manually install the following:

– zsh-completions
– zsh-autosuggestions
– zsh-syntax-highlighting

Next, the theme I used is Powerlevel9k, which I will get to next. To set it in my .zshrc file I used:


Luckily, the install for Powerlevel9k is super simple for oh-my-zsh. Simply run the following command:

In most cases, you will need a powerline font. Powerline was a bitch to try to install on macOS with the new python packages, so I used tools that were inspired by it. The font I used is here; alternatively, you can install all powerline fonts by running:

You will need to set whichever font you want in your iTerm2 preferences. Note the font selected in my preferences:

Now that you have oh-my-zsh, tmux, and powerlevel9k installed, let’s get to configuring everything.


First, I selected the “Darkside” color preset for iTerm2 because it reminded me of Star Wars. You can get a bunch of presets for iTerm2 here.

My terminal was inspired by a bunch of different user’s screenshots, but two that stand out are Semartin’s and Sevenfoxes’, specifically because of the Spotify, wifi, and battery info. Rather than having the info show in my terminal, I opted to include it as part of my tmux configuration. In order to have tmux launch every time I opened iTerm2 (and thus, zsh), I needed to add the following to my .zshrc file:

My full zshrc file can be found here.

I ultimately took what I needed from their .tmux.conf configs and threw them into .sh scripts, which can be accessed here. My status line config for my .tmux.conf is as follows:

My full tmux.conf can be found here. Note: To get the with Spotify to work, you will have to install shpotify:

I also installed the tmux-current-pane-hostname plugin (bottom right corner) so it will auto populate with the hostname when I am connected to an ssh session, or disply my hostname when disconnected.


Last, but not least, Vim! I had a hell of a time configuring Vim at first because I was trying to set it up using Powerline. I used this post as a guide, but was unable to configure things the way I wanted. Regardless, I am including the link in case it’s helpful to you. I ended up choosing vim-airline because it’s lightweight and simple.

To start, I configured my .vimrc file to use Vundle.

Then, put this at the top of your .vimrc file:

Next, to install plugins type “vim +PluginInstall +qall” from command line or launch vim and run “:PluginInstall”

After you have Vundle setup, you can add these two plugins to your .vimrc and run your preferred command to install the plugins again:

This will install vim-airline and vim-airline-themes.

Now, to always show the statusline in Vim, you have to add:

I went with the wombat colorscheme for now. Also, I found a bunch of vimthemes here. For my vim-airline plugin, I went with the bubblegum theme.

Next, I wanted to install Nerdtree, but first I decided to install Pathogen to keep present and future installs simple:

I added the following to my .vimrc to enable pathogen:

Now I could install Nerdtree:

I added the following minor customizations, again, to my .vimrc to tell Nerdtree to startup with Vim every time, map the NerdTreeToggle to ‘Ctrl+n’, and have the cursor stay in the edit area by default on launch.

My complete .vimrc file can be accessed here.

Finally, my iTerm2 configuration, as well as every dotfile and .sh mentioned here, can be downloaded here.

Reminder: All of my posts are provided "AS IS", imply no warranties, and confer no rights or special privileges. Use of included postings, code samples and other works are subject to the terms specified at Microsoft. For more information, click here.

Comments 8

  • Good descriptive, informative, and instructional post. Loving how it is looking (especially got a chuckle out of the terminal title and noticed you’re on the ‘Rebel’ side 🙂

    If you are having trouble with fonts may I be so bold as to suggest patched fonts from: It has a myriad of install options including specifically for macOS (via Homebrew Fonts)

  • If you want tmux to match powerline9k and vim-airline, take a look at

  • hi Jessica
    I was able to get the powerlevel9k with Powerline fonts working. There seems to be a problem when I want enable the tmux integration. All the Powerline features as well as zsh autocompletions are lost when the tux session autostart. Things are perfectly fine when I comment the line

    I have cross verified the steps mentioned in this post except for the vim part.

    Did you face any issues while integrating tmux with iterm2?

    • Hi Nilesh,

      Are you using my dotfiles? What OS are you using? The more info you can offer, the better I can assist you. I actually am pushing a new blog post this week that will auto setup your Mac environment with everything I use in mine. You can checkout my new dotfiles auto install here: In the, you just run one line from your preferred terminal and you should have all my tools and customized dotfiles setup. The new update also supports a responsive tmux environment and includes helpful data such as packet loss and d/l and u/l speedtests. With this new update, you just need to tell iTerm2 to load preferences from a custom folder. In the folder box, you can type: ~/.itermcfg and then restart the application. Blog post coming soon.


  • I would highly recommend Vundle or Pathogen, but not both. They do the same thing. I find Pathogen a bit more simple, but also more manual as you have to clone things into you ~/.vim/bundle directory yourself. Pathogen is more batteries included, but it gave me troubles so I stuck with Pathogen.

    Otherwise, nice write up 🙂 Will be useful for people looking to start a Tmux + iTerm2 + Vim setup (the best set up).

    • Absolutely – I completely agree. I only include both because my install script is designed as a quick means to setup a user’s environment based on what works best for *them* and not necessarily you or I. I wanted a quick and easy way for others to get started, while simultaneously offering an option to use my config and dotfiles, too. Thanks for the feedback and compliment!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.