Achieving an action-oriented workflow in Linux

2018-08-23 @Technology

Workflow simplification and spartan interfaces have become a subject of passion for me. Lately, I spent unreasonable amounts of time analyzing my workflows and experimenting with alternate approaches to task execution.

By new ways, I really mean the ancient, deprecated ways, though used to great efficiency.

On the one hand, I became hopelessly bored with the traditional way of affairs: the same web browsing experience, the same information sources, the same email and calendar routine, the same note taking paradigm, the same data entry mechanisms; in summary, the same problem-solving approach, and consequently, the same distracting triggers.

On the other, I began to notice a pattern. My entire toolkit, as clever as I pretend it may appear, 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 components yielded to more stimuli, be it aesthetically consistent even with minimalist-oriented textural preferences.

In a series of Linux related write-ups this month, I’ve 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, littered with tabs, governed by the search-intelligent omnibar (the navigation bar at the top that doubles as search input).

I transitioned most of my (Chrome) web browsing to a console text-only web browser W3M, but ultimately employed a number of tactics to eliminate the habit of having the web browser constantly present:

  1. Open the W3M browser strictly in case of need, focusing on a single information source. Resort to Chrome when that mission critical page demands a fully featured browser.

    For any information-rich content, I export the page to PDF and close the browser. W3M, though minimalist and unappealing, still carries the potential to misguide attention.

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

  3. Time-box searches into one session: similar to time-boxing email interaction or social media access (for whom this is problematic).

    Rarely do I require ad-hoc searches to execute at the exact moment of impulse. In the course of writing, for instance, I’ve certainly no necessity to access related references at the precise moment.

  4. I configured W3M with shortcuts to export URLs of interest to an external text file or a respective jrnl tagged entry, rather than immediately open in a new tab and further deviate attention.

    Additionally, I wished to eliminate multiple tabs from the field of vision, be they rendered in Chrome or the text-based W3M.


Via 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 superb benefit to maintain focused attention: command line email sending. Indicate 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 the cases I can’t recall the recipient’s email, the neomutt alias file is quiet handy:

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

As long as this document maintains a list of aliased contacts or groups, I need not open the full mail client, nor even access the web to queue an outbound email.


After some deliberation, I eliminated the Google Calendar in its entirety, transitioning offline to calcurse, a console-based client providing both an ncurses-based and command-line interfaces.

Having first backed up the respective 10 years worth of ical formatted entries, I then imported only the recent entries into calcurse.

The command-line interface simplifies the viewing of only the necessary entries without deviating attention to the remaining calendar. Also, while the CLI interface doesn’t allow new appointments/event creation (this requires the interface), I devised a simple script to write the respective entry to the plain-text calendar file.

As an added bonus to the intuitive text-based storage format, the entire imported Google calendar history presented an entertaining and easily-readable/searchable timeline of the last 10-years of my life. The offline plain-text format really simplifies data processing and manipulation.

Note taking, task management

I previously managed volumes of notes and todo entries in heaps of plain-text files. The system seemed fairly simple and facilitated my needs.

The workflow, however, resulted in more of an interaction-based experience than action-oriented. In opening these text documents, I would encounter far more to glance than my immediate storage or retrieval needs warranted.

I desired a mechanism that

  1. I could immediately invoke instead of first accessing the proper document and be greeted by a flood of information
  2. solves my tagging/organizational requirements
  3. enables smart retrieval and filtering
  4. provides an offline and command-line interface, bearing in mind an action-oriented workflow.

jrnl addresses these challenges, as I’ve demonstrated in the linked write-up - the greatest strength being the tagging and filtering functions.

In the end, jrnl enables me to create/modify/retrieve respective entries without misguiding attention. The solution also caters to much of my note-taking, priority management, link organization, journaling, and even time-reporting needs.

Internet access restrictions

Much of the challenge stemmed from the basic luxury of consistent internet access. 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.

Even having transitioned much web-oriented activity offline, at times it helps to entirely disconnect. iptables filtering rules can partially address that need.

As an example, the following 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 "" --algo kmp -j TIMEWASTE
sudo iptables -I FORWARD -p tcp -m string --string "" --algo kmp -j TIMEWASTE

The above fails with certain dynamic DNS based sites (ie YouTube). Other strategies exist for this purpose that I haven’t explored.

The below iptables command, 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

Many Linux enthusiasts configure their window manager for extra glamour. This includes transparent terminal backgrounds, desktop rendered system stats, as well as myryads of docking or floating-bar application shortcuts.

I see most of this as nothing but attention grabbing decorum. A transparent terminal background does nothing more than impress. The easily visible system performance information steals attention. Is there need to continuously demonstrate CPU, memory, disk, or network usage, if you aren’t a system admin assigned precisely to the role?

With respect to clickable gadgets and icons, once you’ve adapted a terminal-oriented workflow, these likewise contribute to little.

I recommend a bare desktop with an opaque terminal as the right foundation for focus.


I focus on transitioning the problematic interactive areas of my workflow towards action-oriented. The approach emphasizes explicit execution of directives with minimal access to the necessities, in lieu of a full-scale interaction with an abundance of potentially attention-deviating distractors.

Some of the strategies I employed include:

  1. Web browser minimization with focus towards largely a text-based experience.
  2. The transition away from the web-browser ‘tab harvesting’.
  3. Email and calendar transition to CLI applications; focus on execution of the strictly pertinent operations over the exposure to the unessential.
  4. jrnl for action-based note/idea/journal storage and retrieval.
  5. Time-based internet access blockade.

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

Sources referenced

  1. jrnl
  2. calcurse

Questions, comments? Connect.