Skip to content

Instantly share code, notes, and snippets.

Last active January 26, 2018 20:03
What would you like to do?

screen shot 2018-01-26 at 13 59 43


I can't remember exactly why I started using this over the built in Terminal, but it's very customizable and feature rich.


Originally I switched to zsh to try something different from bash. Now I rely on features like hook functions and syntax highlighting.

I use oh-my-zsh with pure-prompt.

zsh hooks

One that I've come to rely on a lot is automatically sourcing a .env file in the current directory. This is for setting environment variables and secrets specific to a project and also keep them out of git.

function source_env() {
  if [[ -f .env ]]; then
    source .env

add-zsh-hook chpwd source_env

While in Austin I did a similar one for virtualenv. It looks for a .venv file including the name of the thing you want to work on and calls workon and deactivate automatically when you move in and out of directories that have that defined.


tmux does window and pane management within a single terminal window (it's a Terminal MUltipleXer). It takes some practice move around and get configured in a useful way, but it's incredibly powerful and has become absolutely essential in my workflow. Restoring a detached session has saved me many times after accidentally closing a terminal tab.


As you start to build up state with a bunch of config files it's helpful to have them in a place you can carry them around. I keep mine in git and symlink the source dotfiles to their respective places (home directory usually).

This way I can tweak gitconfig/tmux/vim/zshrc and have it available and up to date across machines.

git aliases

Some common ones I use daily or frequently:

	st = status
	ci = commit
	br = branch
	co = checkout
	cp = cherry-pick

Pretty logging:

	lg = log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr %an)%Creset' --abbrev-commit --date=relative

Logging with graph:

	lol = log --graph --decorate --pretty=oneline --abbrev-commit

Latest tag:

	latest-tag = describe --tags --abbrev=0

Logging after the latest tag (latest tag to HEAD)

	lg-latest = "!f() { \
		git log `git latest-tag`..HEAD --format='%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s' --date=relative; \
  }; f"

Cleanup locally merged branches

  br-clean = "!f() { \
    git branch --merged ${1-master} | grep -v " ${1-master}$" | xargs git branch -d; \
  }; f"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment