First up a disclaimer, this is how I like to role. I enjoy it. I'm not saying you shouldn't use a mouse or I'll never use one again.
I spend a lot of time programming on my netbook development environment because I enjoy it. Without all the visual tooling I feel can focus on working with the machine, learning its many tongues and tricks. I've run ubuntu on it for about a year and have learned heaps about linux. There have been many languages, tools and skills I would not have otherwise been able to learn.
One thing I don't like about it is using the crappy mouse pad. It has long been a pain point, even doing trivial things. Recently I saw a tweet by @TheColonial listing some mostly unfamiliar names and adding themouseisdead hash tag. This was exciting, I had recently adopted vim and was loving it.
Last weekend I was a bit under the weather and not thinking clearly enough to write code. So I used to time to set-up and learn a few new tools. I put together a powerful, mouse-less development environment on my tiny netbook, which I think is pretty fun to use.
xmonad is a great window manager (~1000 lines of haskell) which seems to plug into most X systems. There are other ways of managing a windowed environment, I never new existed! It is all keyboard driven, it works out non- overlapping window layouts, you can move between multiple desktops and move windows between them.
Here are some typical tasks in a desktop with a few windows using xmonad:
Switch between window layouts, generated by haskell algorithms (mod- space).
Select between windows on screen (mod-tab).
Throw the selected window to another desktop (shift-mod-2).
Change to the desktop (mod-2).
On Ubuntu it installed with:
sudo apt-get install xmonad
Which installed its haskell dependencies and configured itself. It also added an xmonad session option on the login screen, I wanted to use this and keep the normal session intact.
When you start an xmonad session you are presented with a completely empty screen except for a background picture. You can start terminal session with some keys (mod-shift-enter), but a menu would be nice.
dmenu is a generic dynamic menu for X systems, it allows menu items to be selected efficiently with a keyboard.
It installed with:
sudo apt-get install dwm-tools
This adds another session to the login screen, now anything can be opened from the xmonad session by bringing up dmenu (mod-p) and typing the first few letters of the desired application.
I'm surprised and a little annoyed I didn't start using it sooner really, it is a very powerful text editor. I still fumble through it but feel I'm learning to increase my productivity and reduced my frustration working with code.
sudo apt-get install vim
Now vim is available from the terminal. The vim-tutor is the best place to start, then there is a large ecosystem of plugins.
Vimperator is a Firefox extension that provides command from the keyboard, with vim idioms. It provides deep control of firefox, a basic browsing scenario might work like:
You can open a page in a new tab
:tabopen theage.com.au
Then to open a link to a story in a new tab
shift-f
This adds unique two digit numbers to all links. Now any link can be opened by typing the digits or the link text.
To go to the new tab:
gt
Once read the tab can be deleted
d
Anything typed that doesn't start with "/" is a tweet (the -verify and -slowpost options can help with potential problems that might cause) The forward slash is used to invoke commands like "whois", "replies", "reply", "dm", "follow", "thread" etc. It's built on curl, so we need that first.
apt-get install curl
Then download the perl script from the website, make it executable and move it to the /usr/bin folder.
I like everything about this app down to the ascii art in the menus. The dude has some pretty cool stuff including a network of gopher servers.
Vimium is not as powerful as Vimperator, but provides some vim-like keyboard controls for Chrome. Easily installed as a chrome add-in.
I can now manage windows over multiple virtual desktops. Use a fast, effective menu to opening applications. Have extensive control of firefox and most importantly, can tweet about it with TTYtter. I am excited and looking forward to working with some code.
My set-up still isn't right yet though; I need a status bar and decent start script (the plain xmonad session just a blank canvas, an internet connection, battery power monitor and a clock would be useful). I'm going to try dzen for this.
And my keyboard skills on the special keys is way worse than than I'd like it to be. The best way to fix that is to keep my hands on the keyboard, right?
Finally thanks to all the people responsible for the OSS platform, languages and many tools. They are a pleasure to use.