I recently bought the new MacBook Pro and was setting up my usual workspace on it. Hence, thought of sharing my setup and the tools and utilities I use for productivity. Using right tools saves your time and boost productivity. It lets you focus on more important task — coding — than spending time in managing windows/applications.

Here’s the list of tools/utilities Iuse:

Window Manager — i3 (Linux)/ Amethyst (OSX)

(Linux)/ (OSX) Terminal — Iterm2

Shell — oh-my-zsh

Editor — vim

Window Manager

On my old laptop, I had setup xmonad which is fantastic, but it takes a lot of time to setup. But I found i3 to be beautiful as well as it is easy to setup and configure. Window managers like i3/xmonad or any other window manager tiles your windows appropriately making better use of space. Basically, window manager (wm) structures your workspace.

i3 window layout

If any new application is launched, wm will align it automatically, and then, with the help of shortcuts you can easily switch or toggle between layouts. For instance, while coding you can toggle the editor to go full screen while other times you can use layout as shown above.

The best part of window managers are workspaces. If you look at the screenshot above, at the bottom you will see 5 workspaces. You can have multiple workspaces for separate projects. I usually have 10 workspaces and I have mind-mapped each workspace for a specific purpose. For instance, the 1st workspace is for general usage file manager, itunes, 2nd workspace for chat applications (slack, hangouts), 3rd & 4th are for browsers, 5th is for calibre, notes and 6th-9th are used for different projects I work on. So once this is setup, its easy to move back and forth without even thinking.Hence, I found i3 good for linux and amethyst for osx.

Terminal (with tmux)

On osx, I used Iterm 2 and on linux I go with the default terminal. Working on several projects, we will immediately get lost between the services running on different terminals. So, I usually dedicate one terminal and editor for each workspace and use tmux sessions for running multiple applications/services related to that project. On each workspace I have an editor to code, terminal to push/pull the code, run services. Even on tmux sessions, I usually keep the first window for general purpose usage like code check in, second window for services like running serves, database connections & watchers and the third window for remote connection, if required.

tmux session

Shell

I am used to oh-my-zsh shell since my college days. I tried it then and I still love it. With zsh I get shortcuts for git and more than 200 plugins. It has lot of themes among which I use Bira for a reason, this theme’s prompt is divided in two lines, first line shows the current working directory and the prompt is given on the next line. So, if the current working director path goes too deep, I don’t have to enter commands on the right corner of my screen. Plus if any directory is version controlled, like git, it automatically detects and shows the current branch.

zsh shell

If you see the prompt, it tells you the current working directory and the current branch you are working on (the * indicates the repo is not clean, has some changes to be commit/discard). You can customise prompt to your needs. Checkout Steve Losh’s custom prompt.

Editor

Here comes my favorite part, the editor — vim. (Will post a separate blog on vim alone). Developers spend most of their time writing code and hence it’s better to have an editor that suits them which is properly configured. I tried out a lot of editors during my college days emacs, sublime, atom. I found that Vim suited me the best. Since then I have configured it for my requirements like linters for various languages I work on. I rarely touch mouse while writing code and that save my time. Here’s my vim configuration.

macvim

(I also wrote a small vim plugin toogle-bool)

CapsLock to Control

I have remapped the CapsLock key to an extra Control key, since its very easy for me to click it using the pinky finger. I overuse Control key in vim and tmux, so its better for the key to be near the home row than at the bottom. In osx you directly do that from keyboard settings, on linux you can use this wiki.

Mouse less Browsing

Since I am used to vim editor so its commands I found these pearls (actually suggested by a friend) — Vimium and VimFx. You can browse without touching your mouse/touchpad. Follow links, opening new tab, search you name it, it can be done using shortcuts (even scrolling). So these browser plugins save lot of time. Check out the following screenshot, when you install this plugin on your browser and press F you get characters on each link present on the page, just press that character to open that link.

vimium plugin

I maintain the configs for these tools on github — https://github.com/sagarrakshe/dotfiles.

This is just an introduction to tools, I will keep posting about each tool individually on how to use it effectively.