I code on an Ubuntu VM running on Windows. The Ubuntu VM is just for coding, I prefer to keep it small, which makes cloning and snapshots faster. Too many snapshots have caused problems for me. I delete the older ones, which again, is faster for smaller VM.

So, I started creating a minimal Python dev environment. First, I thought of using Emacs only. But I like PyCharm a lot, it ships with Emacs keymap. Between several terminal sessions, I needed at least two GUI apps: IDE & Chrome.

For terminal sessions, I started using tmux, which is great. PyCharm also has a terminal tab but you can’t switch to it and back to editor screen smoothly. It is not a first-class citizen like the editor window.

Enter xmonad, which helps you get rid of all the desktop items. It tiles windows occupying the whole screen. No dock, toolbar or OS menus. Now, I manage desktop with xmonad and terminal sessions with tmux. Here’s how I set it up on Ubuntu:

sudo apt-get install tmux
sudo apt-get install xmonad

Configure xmonad. The official docs are simple enough to get started. To launch PyCharm you’ll need wmname.

sudo apt-get install wmname

Now, log-off and select xmonad to log-in

After login you’ll be greeted with a blank screen. Fear not and open a terminal.
Start a tmux session:
tmux new -s session-name

tmux lets you launch multiple windows and panes. Perhaps, avoid tmux panes and create multiple session using xmonad windows, if needed. Also, xmonad allows you to configure tiling algorithms.

tmux command are followed by a prefix  (default is is Ctrl-b, configure if you want)

Open a new terminal window:
Ctrl-b C

Now, you can launch Pycharm using:
wmname LG3D && ./pycharm.sh

Create as many windows as you want. Once you’re done, use the xmonad to switch to your IDE.

The problem is getting used to different keybindings. You can easily configure keybindings as needed. Once you are habitual, you’ll stop using the mouse.

Links:

http://xmonad.org/documentation.html

https://tmux.github.io/

http://tools.suckless.org/wmname

xmonad and PyCharm