Spending a lot of time in front of the computer doing a specific job for a long time makes room for some workflow optimization. This includes selecting the tools you can be most productive, and configuring them for the job at hand. In the long run, not always the easy to learn tools are the winners, but the ones that can be personalized enough to seamlessly fit into the unique workflow.
In this post I’d like to present five free and open source tools that I found really useful for my software development job.
1. Zsh with Oh-My-Zsh
Some nice features are:
- Completion is much nicer than in bash, as it is presented by an interactive list that you can cycle through rather than a static text that got printed every time you press tab.
- Can expand paths on partial matches. For example work/tom<tab> can become my_work/apache-tomcat-8.0.23.
- Strong Git support: provides completion for Git commands and visual indicators on the prompt for the status of the Git repository located in the working directory.
- Customizable themes, supporting left and right prompts.
It can be used as a drop in replacement for bash, and it’s easy to start with; I really recommend trying this one out.
When I started using Linux, I used Midnight Commander’s built in functionality to view files in the terminal and various GUI based applications otherwise.
Midnight Commander’s view mode, mcview is easy to use and easy to learn, but Less has some advantages over it (and many other text viewer), so I use Less for general text viewing:
- By default it starts without mouse support, so it does not swallow mouse events and you can easily select text in the terminal and copy it. (Although this can be achieved in mc with the -d option.)
- Handles big files easily. The main reason I switched to Less was that when I have to check large log files, mcview doesn’t quite cut it when I needed to navigate around in it, for example check the end of the file. In Less it’s really fast, just press ‘G’ and press ‘g’ to go back to the beginning.
- Installed by default.
- Uses Vim like navigation, so it’s nicely fit into the convention of other tools. It’s easy to search and highlight results with the ‘/’, ‘?’, ‘n’ and ‘N’ keys, and navigate with ‘j’ and ‘k’. Of course, it supports arrow keys and PgDn/PgUp too.
- Many tools use it. For example, the man and the git diff tool both use Less to present the information, so you are already familiar with it.
Getting started with less is easy, because you know it and it’s already on your system.
I wrote some posts about Vim already so I’m going to cut this section short. It’s a great general-purpose text editor with lots of plugins and a great deal of customizability, that can aid anyone in various tasks from simple text editing through sysadmin work to programming.
There are a lot of really good alternatives to it like Kate, Gedit or, when it comes to programming, even a full-fledged IDE, but Vim provides a unique approach to be interacted with; that makes it a very interesting editor to learn.
Other than that I think it’s worth to note:
- There are many plugins.
- Most repetitive tasks can be automated or solved with ease.
- It can be operated from the terminal. It’s really handy that in normal mode it can be sent to the background with Ctrl+z.
- It’s designed to require really low amount of keystrokes to perform various operations or navigations that can be further combined, which makes it both efficient to use and feasible to work with even in a high-latency connection to a remote server.
It takes the time to learn to speak Vim, but it can be superior in the right hands.
xmonad is a tiling window manager written in Haskell. It makes the (usually right) assumption that you don’t want to place your windows manually. Various automatic layouts and easy to learn shortcuts provided by xmonad makes it natural to operate your desktop solely from the keyboard. It’s a really good addition for most terminal based activities and tools that oriented around the keyboard.
To highlight some of its important features:
- Minimalist and highly configurable. The default configuration contains almost no window decorations or toolbars, but it can be customized to a great extent.
- Keyboard oriented and user friendly.
- Tiling. You don’t have to manually arrange windows anymore.
- If you use your mouse, the window under the cursor automatically receives the focus.
It’s easy to install and get started with xmonad, but it requires some tweaking to customize it to your liking because many features are not easily accessible by default that you might accustomed in other environments. It’s so minimalist that I strongly recommend checking out the default shortcuts in the tour page before trying it, because by default it greets it’s users with an empty screen and nothing else.
Because it’s just a window manager, I use it with KDE software.
A great terminal application is essential to use command line applications. From the mayor desktop environments I always preferred KDE, so I mostly use Konsole, and I am really satisfied with it’s feature set:
- Search / highlight functionality. The highlight matches are refreshed real-time, so it’s really handy if you are tailing log files.
- Easy to select and copy chunks of text.
- Unlimited scrollback with an easy option to clear the buffer with Ctrl+Shift+k.
- Can be customized to hide most unnecessary details (tab bar, menu), provides many color themes by default.
It also provides tabs, but I don’t really use them, I find more convenient to open a fresh instance of it. The only thing I don’t like about it is that it can’t hide the scrollbar automatically when it’s not needed.
I am sure there are lots of good alternatives to Konsole, just make sure you use a terminal emulator that has the features you need.
Managing it all with a dotfiles repository
Every workflow is unique in some way, so it can be enhanced with personalized configuration for the used tools. But that introduces a new problem: you either have to manage the configuration somehow, or reproduce it every time manually.
If you choose to automate, a dotfiles Git repository is a really convenient way to keep your configuration in one place. The basic idea is that the configuration files reside in a Git repository and are symlinked to their correct location. There are even smart scripts to automate this job. I started out from Zach Holman’s dotfiles repo, but you can read more on the topic at Github.
These are the general tools I think worth using if you spend a lot of time working on a Linux machine. What’s your favourites?