My iTerm2 Setup

The second post of this kind on this blog is my iTerm2 (opens in a new tab) setup.

What is iTerm2?

iTerm2 is an terminal emulator for macOS. It has a lot of features (opens in a new tab) that don't come with the standard macOS terminal. Some people prefer the plain bash terminal, but I am not one of them, as aren't many other folks.

So How Do I Customize My Terminal?

Most of this will work with the plain macOS terminal but whatever doesn't I will note that next to the item.

First Thing: Get zsh and Oh My Zsh

ZSH (opens in a new tab) or Z Shell is the most important part of my setup1. It's simple to install with Homebrew/brew (opens in a new tab) on macOS and apt or apt-get on Linux.

Next, comes the sweet stuff that makes this all run: oh-my-zsh (opens in a new tab). There are a lot of interesting plugins but I use just a fraction of them, which you place in your .zshrc profile:

plugins=(git dirhistory brew dircycle gitfast git-extras jsontools node npm osx repo sudo urltools web-search dirpersist history-substring-search last-working-dir safe-paste yarn zsh-completions)

Plugins extend the functionality of not only bash but git as well.

Zsh Aliases

Aliases are a hot topic in the dev community. Do you use them or don't you? This depends on your experience and personal preferences, in my opinion, so there is really no right or wrong answers.

Aliases allow you to type a few letters to initiate a command in your terminal. For instance, I have this to push to git: gp.

Some of my favorite aliases:

alias hero='git push heroku master'
alias takecare='tiny-care-terminal'
alias bsync='browser-sync start --server'
alias breload='browser-sync reload'
alias jopt='jpeg-recompress --accurate --quality medium --min 40'
alias popt='pngcrush -brute'
alias jekstw='bundle exec jekyll serve --host 0.0.0.0'
alias jeksth='bundle exec jekyll serve --port 4001 --host 0.0.0.0'
alias jeksd='bundle exec jekyll serve --port 4002 --host 0.0.0.0'
alias gitor='git remote add origin'
alias pushit='git push -u origin master'
alias ls='colorls --dark --sort-dirs --report -A --gs'
alias lc='colorls --tree --dark -A'

Zsh Themes

This is my favorite part of all this.

You can add a zsh theme by downloading it from the creator's repo or just find one in Robby Russell's repo.

The default theme is robbyrussell.zsh-theme but you can install pretty much anything you like. You install a theme in your .zshrc file as follows:

ZSH_THEME="robbyrussell"

Here is what I was working with a few days ago:

This is a theme that uses Powerline Patched Fonts (opens in a new tab) for the flag and iconography. This was my setup for a long time until I read Ali's post (opens in a new tab). That post turned me on to a theme I already tried but was so used to Cobalt2 for everything2 I decided to switch it back.

But taking a look at her setup inspired me to take the leap. And now I am working with this:

I also learned how to open different panes in one iTerm window reading that post. I have five panes open on my external monitor:

But I Didn't Stop There

I wanted to use other iconography than the default spaceship icons because for whatever reason I couldn't get them to work.

As I read the issues for spaceship, I found an issue (opens in a new tab) about changing the glyphs to Nerd Fonts (opens in a new tab). After reading You’re Missing Out on a Better Mac Terminal Experience (opens in a new tab) on Medium I figured out how to get them to work.

Using spaceship's customizations I ended up with the headphone and flash glyphs instead of my machine name for the terminal prefix.

Here are some of the customizations I made:

SPACESHIP_PROMPT_ADD_NEWLINE="true"
SPACESHIP_CHAR_SYMBOL="\uf0e7"
SPACESHIP_CHAR_PREFIX="\uf025 "
SPACESHIP_CHAR_SUFFIX=" "
SPACESHIP_CHAR_COLOR_SUCCESS=yellow
SPACESHIP_PROMPT_DEFAULT_PREFIX="$USER"
SPACESHIP_PROMPT_FIRST_PREFIX_SHOW="true"
SPACESHIP_USER_SHOW="true"
 
# NODE
SPACESHIP_NODE_PREFIX="node:("
SPACESHIP_NODE_SUFFIX=") "
SPACESHIP_NODE_SYMBOL="\uf898 "

In that article, it mentions colorls (opens in a new tab) which is a Ruby script that will let you add icons for folders, etc and change the colors of your ls command. After some fiddling, I got it to work:

Other Plugins

Zsh Syntax Highlighting

I use zsh-syntax-highlighting (opens in a new tab) to highlight directories and other commands in the terminal. You can customize the color of the highlights by looking at the highlighter docs (opens in a new tab).

Z - Jump Around

z (opens in a new tab) is a utility that allows you to jump to different directories by typing z and then the directory. You’ll have to cd around in directories for a bit to “train” it but once you do, it’s pretty easy to skip around in directories. It is a “frecent” tool: frequent and recent directories.

Exa: ls replacement

This command line utility is exa (opens in a new tab), which replaces ls with some nifty features is something I don't really use now that I have installed colorls. You can type exa and it will list the contents of your directory. You can get directory permissions, print each item on one line with the -1 flag, and other custom controls.

What Is Your Setup?

Want to share your setup? Send me a tweet (opens in a new tab).

Footnotes

  1. You can install other tools like Fish shell, but zsh is probably the most widely used, outside of bash itself.

  2. Slack, VSCode, Alfred...

© tiff