Workflow imporovement with Open Source tools - part 1


I want to start a series of articles to describe how I improve my workflow with geeky Open Source applications. I will concentrate on terminal applications that I try to use in my GTD process.


Solarized gnome-terminal

If you already don’t know what solarized color scheme is then please take a look at this page. To install solarized colorscheme in gnome-terminal simply follow instruction from this git repository.

Mutt again

During last days I spent a lot of time to tweak my mutt configuration. Here I will give you few hints about things that I learned.

Solarized mutt

To enable solarized colorscheme in mutt simply download one of scheme files from github. If you installed dark scheme for your gnome-terminal then I suggest mutt-colors-solarized-dark-16.muttrc. Copy this file for example to $HOME/.mutt and source it in muttrc file:

source $HOME/.mutt/mutt-colors-solarized-dark-16.muttrc

Width of From column

Usually from field in today’s emails is longer than 19 characters. If this happens mutt by default will not display whole string. To change this behavior you can manipulate

index_format variable. I set mine to 30: {% raw %} set index_format="%4C %Z %{%b %d} %-30.30L (%4l) %s" {% endraw %}

Finally I gave up sidebar for using latest code without annoying tls_socket_read error. Switching between IMAP folders is not so bad, you can quickly display all folders by c<Tab><Tab> or simply y

Offline imap

This is probably best program to synchronize your emails with local storage. It also has feature that allow synchronization between different IMAP servers but I’m not using it. Few things are crucial when using offlineimap:

  • probably easiest way to keep passwords secret is using python hooks for gnome-keyring, detailed description how to integrate it with offlineimap is here. Debian name of gnome-python2-gnomekeyring is different: python-gnomekeyring.
  • Use meaningful localfolders because you will use it in mutt configuration

Typical configuration of $HOME/.offlineimaprc:

enabled = yes
filename = ~/.mutt/muttrc.mailboxes
header = "mailboxes "
peritem = "+%(accountname)s/%(foldername)s"
sep = " "
footer = "n"

metadata = ~/.offlineimap
maxsyncaccounts = 5
maxconnections = 2
accounts = account1, account2
status_backend = sqlite
pythonfile = ~/.mutt/

[Account account1]
autorefresh = 3
localrepository = acc1_local
remoterepository = acc1_remote

[Repository acc1_local]
type = Maildir
localfolders = ~/.mail/account1

[Repository acc2_remote]
type = Gmail
remoteusereval = get_username("account1")
remotepasseval = get_password("account1")
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

[Account account2]
autorefresh = 3
localrepository = acc2_local
remoterepository = acc2_remote

[Repository acc2_local]
type = Maildir
localfolders = ~/.mail/account2

[Repository acc2_remote]
type = Gmail
remoteusereval = get_username("account2")
remotepasseval = get_password("account2")
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

What this means by section:

  • [mbnames] - automatically create mailboxes folders according to your configuration on IMAP server
  • [general] - most important things here are self explanatory accounts variable and max{syncaccounts,connections}, first said how many accounts should be synchronized and second how many simultaneous connections should be used
  • [Account *] - contain sync refresh time in minutes (autorefresh) and link to local and remote repository definitions (localrepository and remoterepository)
  • [Repository *] - for local folder and its type and for remote gnome-keyring configuration

Multiple account configuration

To simplify multiple accounts configuration I added two things:

  • separated account files configuration - in my case placed in $HOME/.mutt/accounts

    set postponed = set spoolfile = set record = set from = ‘’ set realname = ‘My Name’ set smtp_url = smtps:// set smtp_pass = $my_pass set signature = “~/.mutt/signature.example”

  • folder hooks for particular account - it cause automatic loading of configurations when folder was changed (in $HOME/muttrc):

    folder-hook ‘’ ‘source $HOME/.mutt/accounts/account1’

Separate mailing list file

I keep my mailing list configuration file separated and source it in my $HOME/.muttrc. I’m not mailing list advanced user, so right now I have manually created IMAP folders and Gmail filters to move mails from mailing list to this folders. On the mutt side I use subscribe command to indicate that particular mail id is a mailing list.

Personal informations

Some informations in my configuration files shouldn’t be available for all. I mean my email account configuration, my todo list, passwords and things like that. To store this informations I use additional private git repository and use it as a submodule for my workspace configuration. I wrote post about keeping configuration using git here and here.

Taskwarrior and vit

I really like taskwarrior as a GTD tool but I was tired of writing everything every time I wanted to change sth. I found vit. Vit is a vi-like interface to task list generated by taskwarrior it works really great. Mostly it is written in perl and there is no official repository for its code base but latest version is from April 2013. I use lot of project: and +flag to update my TODO list. I prefer long filter.

My taskwarrior projects and flags

I have few ongoing projects like blog, productivity and ideas. In addition I use few flags like ideas, finish, enhancement, fix or bug. So when I connect project and flag I get few categories like:

  • blog ideas for new articles ideas
  • blog finish for articles that should be finished ASAP
  • blog bug/fix for articles that have to be changed for some reason
  • productivity bug/fix for productivity tools configuration improvements
  • productivity ideas for new improvements


I think this is enough for first post from this series. Hope it was helpful. If yes then please share, if no then comment what I should improve. Thanks for reading.

Piotr Król
Founder and Embedded Systems Consultant at 3mdeb as well as freelance CTO of Vitro Technology and CEO of LPN Plant. Passionate about building firmware that enables advanced hardware features in modern products. Dedicated to customers that treat embedded software security and upgradeability as forethought. Open source firmware evangelist interested in platform security and trusted computing. In favor of fixed price projects with a clear definition of success.