Skip to content

Instantly share code, notes, and snippets.

@nicinabox
Last active January 26, 2018 20:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nicinabox/09b4ccf29d1952e741bd26d1cd1d9b39 to your computer and use it in GitHub Desktop.
Save nicinabox/09b4ccf29d1952e741bd26d1cd1d9b39 to your computer and use it in GitHub Desktop.

screen shot 2018-01-26 at 13 59 43

iTerm

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

zsh

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
  fi
}

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

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.

dotfiles

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