This is the stack/are the tools that keep me productive in my day to day programming experience on linux.
Well, first of all let me tell you, that this might not fit your needs , as I’m a full time java programmer so have OS choices open (still I won’t go to my java-related stuff here, to make infos general and possibly usable for non-java guys as well.).
Linux is my choice for quite some years already and this post won’t detail the reasons, rather will focus on tools/utilities that help me survive in this world.
Distro
Well, let’s start from the ground. I don’t have a clear winner here. In fact I run currently 3 different ones (didn’t count my router and phone here):
- Fedora - on my work laptop
- Xubuntu - on my home laptop
- Raspbian (Debian) - on my Raspberry Pi server
In fact the info present in this post won’t detail too much on the 3.rd one, as it’s a server that just runs. The only thing I need there is a ssh access and that’s pretty much it, so this post would be rather short for that one :)
The reasons for Fedora, and Ubuntu in my case are:
- stability (well, let’s say things don’t crash that often for me),
- packages for most of the SW I need available in repositories and
- the software packages are not at some archaic versions.
Window manager
Well, the nice thing is that most common window managers are available across all the popular distros. My choice here is Xfce.
Well, I don’t hate others, this just fits my needs best:
- no need for fancy effects for me as
- speed is rather my preference.
- still I need something that I would not fight with every day.
Project I’m keeping my eye on is: LXQt. Still waiting for a more stabilized release (0.8 was released recently, which says to be ready for production desktops, but I’d plan to give it a try with the next release as well as when I have some time to set it up).
Shell
I have 2 candidates here:
- bash and
- zsh.
bash I use for scripting. It’s been my choice for quite some time already and I don’t see a need for change any time soon. As I’m quite used to it and the most people/projects I share the scripts with are OK with that/have used it already.
zsh as my default shell. This is still the world I consider new to me (see my recent post on that).
Shell env sync
As I have multiple machines I’m working on, there are 2 essential projects in the area for me:
oh-my-zsh
Provides for my zsh:
- nicely/systematically structured plugin approach,
- autocompletition and
- all sorts of aliases.
To document my use case a bit here, these are the plugins I have present in my .zshrc
:
plugins=(git mvn glassfish yum colored-man vagrant z common-aliases gradle homeshick vim-interaction powerline tmuxinator tmux)
Please note: Some are not available officially, and in the time of writing are just present as pull request from me to the project. Namely:
Well, might sound like a self promotion, but feel free to check and provide feedback on these if you find them useful.
Homeshick
Lets me synchronize all my custom zsh plugins as well as .bashrc
files over git repository.
The only requirements are:
- git and bash on all the clients
- and the git repo accessible from all my clients.
In my case, there are things I don’t want to expose to public, but have no problem to have it hosted in some private git repo. So bitbucket is my choice, as I have there private git repo for free for the purpose.
Shell sessions bootstrapping
There are 2 important projects for me here:
- tmux and
- tmuxinator.
Tmux and tmuxinator enable me to have just one yaml formatted file for bootstrapping my terminals.
I preffer it to having multiple tabs open in some GUI terminal, as it:
- bootstraps all my shells daily in a same/reproducible way,
- provides me with the nice way on organizing these and
- navigation between these works with keyboard only => switching between different tasks becomes after some time of usage just a routine.
So no more searching in countless cards/windows for particular task.
Shell productivity
I don’t want to list all the linux utils I use, as I guess I’d make list too long and too boring (even for me to write). So let’s just name some, that I consider worth it:
- ack - powerful grep replacement (I might document in the separate blog post),
- notify-send and
- all sorts of aliases and zsh/bash functions, that would be too many to list here, moreover might be too specific and useless for others.
Notify-send
I blogged about notify-send already.
I use it for all the app-server (in my case Glassfish) lifecycle management operations (start/stop/restart domain) as well as deployment stuff.
As these:
- take quite some time to finish and
- might end up with errors,
I let it myself updated with notification having:
- exit code
- chunk of the last couple lines from the log file.
This is great, as I can work in parallel and it gets my attention, once the job is done.
Desktop app launcher
Without having an option for fast startup of my favourite programs I’d waste my time searching the icons or menus.
As Xfce doesn’t provide me with the powerful one, I use: Synapse.
File manager
Well, there are times when I play with files in the command line, but sometimes it just fits better to use some UI for the purpose.
My choice is Krusader. Well, the most stuff I need is available, namely:
- file/folder manipulation,
- file folder comparison and
- file/folder contents search.
The only thing that bothers me is the fact that development is rather stalled in the project.
Still, viable alternative might be: Double commander, which seem to be even cross-platform and can use the total commander plugins (which used to be my choice on windows for the purpose).
Editor
I tried to live with Gedit and for simple note-taking it might be a good choice, however as I like to play with ruby these days, I tried to find something that would help more in the area.
(G)Vim
After searching I came to conclusion, that (G)Vim is quite popular in the Linux world.
Well, it’s worth to mention vim joke here, which expresses the feelings of many on this editor: Infinite Vim monkey theorem (see Infinite monkey theorem for explanation).
Still, I’ve seen:
- many people favouring it,
- it’s the first editor I remember to have available once logging in to my school linux account (OK no real argument, just sentiment),
- it seemed to provide countless plugins for all sorts of stuff and
- it’s incredibly powerful, as far as I’ve seen and learning it might pay back.
So I decided cca 2 years back to uninstall the editors I’ve been used to and force myself to use (G)Vim.
Great source of information was for me: vimcasts, which helped me a lot in the area.
Well, I plan to document my .vimrc
setup in a separate post, as it could make this one way too long.
Files sync tool
Unison is my choice her. For more info on my use case, see this blog post.
Conclusion
Hope you find some inspiration here. And would be glad to hear from you guys about any I missed, but you could not live without.
Still, I can’t believe anyone read this far. As I guess I would not force myself to :).