November 27, 2016
A customized development environment could be a huge productivity boost in the day to day work. In this post, I will share the tools and configurations I currently use.
Terminal: iTerm 2
I use iTerm 2 2 instead of the default terminal on mac. On linux, I used terminator.
iTerm 2 adds several features, the most important for me is the ability to have multiple panes and tabs.
Shell: Zsh
Zsh is a shell very similar to bash, but it adds a lot of cooler features:
-
a programmable autocompletion. You can navigate with the arrows keys the completion for example when browsing a directory
-
a super history substring search
brew install zsh
oh-my-zsh and Zgen to customize Zsh
Oh-my-zsh is probably the most well known set of plugins to enhance Zsh. It’s a super git repository of plugins, which you can enable to add aliases and parameters completion to your favorites tools. I have used it for 3 years and have now switched to Zgen to manage my plugins. Zgen loads the plugins faster than oh-my-zsh and more importantly can load plugins from various github repositories.
Here is my current list of plugins:
#from zsh
zgen oh-my-zsh
zgen oh-my-zsh plugins/autojump
zgen oh-my-zsh plugins/colored-man-pages
zgen oh-my-zsh plugins/docker
zgen oh-my-zsh plugins/docker-compose
zgen oh-my-zsh plugins/git
zgen oh-my-zsh plugins/golang
zgen oh-my-zsh plugins/sudo
#theme
zgen load bhilburn/powerlevel9k powerlevel9k
#extra plugins
zgen load djui/alias-tips
zgen load zsh-users/zsh-syntax-highlighting
zgen load zsh-users/zsh-history-substring-search
zgen load zsh-users/zsh-autosuggestions
autojump
autojump is a faster way to navigate the directories, to jump to a directory that contains “Foo” in its name:
j foo
Install it with homebrew and then just add the corresponding oh-my-zsh plugin to load it in your $PATH:
brew install autojump
djui/alias-tips
This Zsh plugin will suggest the corresponding shorter alias after you type a command. Very useful when used in combination with one of the the oh-my-zsh plugins which could add a lot of aliases.
dotfiles
I’ve started versioning my “dotfiles” configuration a few years ago. For this I use a git repository in my home: ~/dotfiles The repository structure follows the hierarchy to install in my home directory. For each file, a symbolic link is created in my home directory to point to the real file in my dotfile repository.
The install script replace the “_” character with a dot:
!/bin/bash
# adapted from https://github.com/skeeto/dotfiles/blob/master/install.sh
## Install each _-prefixed file or dir
find . -regex "./_.*" -type f -print0 | sort -z | while read -d $'\0' file
do
dotfile=${file/.\/_/.}
## Install directory first
if [ ! -e $(dirname ~/$dotfile) ]; then
echo "create directory: "
echo $(dirname ~/$dotfile)
mkdir -p -m 700 $(dirname ~/$dotfile)
fi
## Create a link to the repository version
echo Installing $dotfile
ln -fs $(pwd)/$file ~/$dotfile
chmod go-rwx $file
done
Dev tools:
The other tools I use every day, which would require a post on their own for each
IntelliJ
The best IDE! The refactoring tools are still impressive, and too often unknown.
Docker
I use Docker to test technologies, start and throw away tools for my projects, etc