Achieving an action-oriented workflow in Linux

Workflow simplification and spartan interfaces have been subjects of much passion. Lately, I spent arguably unreasonable amount of time analyzing my entire workflow and experimenting with new ways of executing traditional tasks.

By new ways, I really mean ancient, deprecated ways in a sense, but used to great efficiency.

On one hand, I became hopelessly bored with the traditional way of affairs: the same web browsing experience, the same sources of information, the same email and calendar routine, the same note taking paradigm, the same data entry mechanisms, and in summary, the same approach to solving problems, or rather, finding ways to distract attention.

On the other hand, I began to notice a pattern. My entire toolkit, as clever as I pretend it may seem, revolved largely around interaction-based interfaces.

In spite of basing a large part of the workflow on minimalist console-based applications and plain text documents, the way I interacted with these pieces yielded the way to more stimuli, be it aesthetically consistent even with minimalist-oriented textural preferences.

In a series of Linux related posts this month I have hinted at the potential of transitioning some problematic workflow aspects to console-based counterparts, but lately carried out the experiments to further depth.

Web browsing

For years I operated with an open web browser floating in the background with tabs and a search-smart omnibar (the navigation bar at the top that doubles as a search input). I transitioned most of my (Chrome) web browsing to a console text-only web browser W3M, but ultimately, eliminated the habit of having the web browser constantly present, employing a number of tactics:

  1. Naturally, I started opening the W3M browser only in case of need, focusing on one source of information, resorting to Chrome only in case of difficulty in rendering a crucial page in W3M. For any information-rich content, I export the page to PDF and close the web browser. W3M, as minimalist and unappealing as it strives to be, still carries the potential to steal attention.

  2. Disable the omnibar search feature in Chrome for those occasions I must render a web page in the graphical web browser. I didn’t want instantaneous ad-hoc searches to be as instantaneous.

  3. Time-box searches into one session, similar to time-boxing email interaction or social media access (for whom this is problematic). I rarely need ad-hoc searches to execute at the exact moment of impulse. In the course of typing a post, for example, I certainly need not access related references at the precise moment.

  4. I configured W3M to export URLs of interest to an external text file as well as to a respective jrnl tagged entry, rather than immediately open them in a new tab and further deviate my attention. Additionally, I wished to eliminate multiple tabs from the field of vision, be they rendered in Chrome or a minimalist text-based W3M.


By a combination of neomutt and offlineimap, I eliminated the Gmail web-based client from my workflow, transitioning the email experience offline. In the process, I also took the opportunity to delete 10-years worth of email from the online client, backing up the respective offline mailbox.

Neomutt offers one additional benefit I consider revelational to maintaining attention focused. I can send email from the command prompt, indicating the recipient, subject, and body as parameters, without opening the full client and experiencing even a momentary glance at the mailbox:

neomutt -s <subject> <recepient> <<< <body>
# OR to compose the body via STDIN:
neomutt -s <subject> <recepient>

For those cases I cannot recall the recipient’s email address, the neomutt alias file format is sensational:

alias <alias1> <name> <email>
alias <alias2> <name> <email>
alias friends <alias1> <alias2> ... <alias_n>

As long as I maintain a list of aliased contacts or groups in this document, I need not open the full mail client and certainly need not access the web to send an email.


After some deliberation, I eliminated the Google Calendar in it’s entirety, first having exported the respective 10 years worth of ical formatted entries for backup.

I then transitioned the calendar offline to calcurse, another console-based client providing both an ncurses-based and a command-line interface.

I imported only the recently exported entries from the Google calendar into calcurs. The command-prompt interfaces makes it easy to view only the necessary entries (for the given day) without deviating attention to the remaining calendar. Also, while the command-prompt doesn’t allow adding new appointments/events (one must use the interface), I simulated this functionality by simply devising a macro to write the respective entry to the plain-text calendar document.

As an added bonus of this very simple and intuitive text-based format for storing calendars, having imported the entire Google calendar history, it presented an entertaining and easily-readable/searchable timeline of the last 10-years of my life. Having the data in plain-text format offline really makes data processing and manipulation incredibly straightforward.

Note taking, task management

I previously managed volumes of notes and todo entries in heaps of plain-text files. The system was fairly simple and facilitated my needs at the time. The workflow, however, resulted in more of an interaction based experience rather than action-based. In opening these text documents, I would find myself presented with a lot more information to glance than necessary for my immediate storage or retrieval needs.

I wanted a mechanism that 1) I could immediately execute instead of first accessing the proper document and observing an overflow of information, 2) would solve my tagging/organizational needs, 3) would provide smart retrieval and filtering functions and 4) provide an offline and command line interface, since, as with everything, I am aiming for an action-oriented workflow.

jrnl addressed these challenges, as I have demonstrated in the linked post. The strength lies in the tagging and filtering mechanism. In the end, I can create/modify/retrieve respective entries without distracting my attention with other data, and the solution caters to all my note-taking, priority management, link organizing, journal, and even time-reporting needs.

Internet access in general

A lot of the challenges I faced involved the basic luxury of having consistent access to the internet. In certain ways, I feel nostalgia towards the days of more expensive dial-up internet that inherently caused us to time-box our ad-hoc queries.

In what I already covered, I transitioned a lot of web-based functionality offline, eliminating extra distractions not conductive to productive work. However, at times it helps to entirely disconnect. iptables filtering rules can address some of these needs.

The following iptables entries aim to block access to a particular site.

# Add new chain for time-wasting sites
sudo iptables -N TIMEWASTE
sudo iptables -A TIMEWASTE -j REJECT

# Add one or more time-wasting sites to disable access via string matching
sudo iptables -I OUTPUT -p tcp -m string --string "<timewaste>.com" --algo kmp -j TIMEWASTE
sudo iptables -I FORWARD -p tcp -m string --string "<timewaste>.com" --algo kmp -j TIMEWASTE

The above doesn’t function with certain dynamic DNS based sites such as YouTube, for example. Other strategies exist for this purpose that I haven’t explored.

The iptables command below, on the other hand, blocks internet access entirely for the indicated time frame.

# Block internet access during the 00:00-12:00AM UTC time frame
iptables -I OUTPUT -p tcp -m time --timestart 00:00:00 --timestop
 12:00:00 -j REJECT

Window manager thrills and glamour

I had already sustained this principle for years, but I’ll include it here for completeness. Many Linux enthusiasts configure their window manager for extra glamour. This includes transparent terminal background, system performance information displayed in the background, and additional docking or floating-bar application shortcuts. I see all of these as nothing more than decorations to distract attention. A transparent terminal background does nothing more than impress. The easily visible system performance information steals attention. Is there any need to constantly demonstrate CPU, memory, disk, or network usage, unless you are a system admin assigned precisely to the task?

With respect to clickable gadgets and icons, once you have adapted a console-based workflow, these similarly contribute to little but distraction.

I find a completely bare desktop with a solid terminal the right foundation of focus.


I focused on transitioning the problematic interactive areas of my workflow towards action-oriented. This approach favors explicit execution of directives with access to minimally-necessary data, rather than full-scale interaction with an abundance of possibly attention-deviating stimuli. Some of the strategies I employed include:

  1. Web browser minimization with focus towards mostly a text-based browser experience and elimination of tab harvesting.
  2. Email and calendar transition to CLI applications with focus on execution of the strictly necessary operations rather than exposure to unnecessary content.
  3. jrnl for action-based note/idea/journal storage and retrieval.
  4. Entire internet access blockade.

I will continue to share more related strategies as I discover them.

Sources referenced

  1. jrnl
  2. calcurse