TL;DR

If this is a first draft, I hope to make it less long-winded on an edit later.

The story on this awesome app I’m trying

I recently got really into a todo/productivity app called Taskwarrior. I tried a few apps, hoping to be able to find a workflow that was relatively seamless between phone and personal computer. A good browser app would have been a plus too, so that I could use it on any computer. I also had a strong preference that when I worked on my list on my personal computer, I could access my items with a lightweight tool, like a terminal or text editor, and not be forced to have yet another application open, or worse, hogging CPU and battery life. Also, I find these apps to be very slow and awkward, as you’re forced to click around with your mouse. So shame on them further for not giving you better options in how you interact with your list.

One option I had, was to continue using Org-mode, and that’s more or less what I was doing to an extent. However, I’ve never had a stupendous experience with the phone apps for org-mode.

But for some reason I revisited Taskwarrior, an app I had noticed some time ago. I think recently I had run into one of its android incantations, in my search for todo apps. And it seems to be working out great. I won’t say it’s for everyone, but for me, right now, it’s filling a spot perfectly.

The interface on the PC is primarily and first in the terminal. There are more interfaces than the initial one there, but this is just fine for me on first setup. And the fact that it’s a terminal app means I have very quick access to it. On the android, the version I like best is TaskWarriorC2, a very good selection of features there, and the awesome monospace text aesthetic. Unfortunately, I don’t have any workflow for it to work in a browser at any computer, but the terminal and phone use more than make up for this.

A very short tutorial

Let’s say you want to remember to take the trash out. Then you simply type in terminal, task add take out trash.

To review your list of todos, simply task, and you’ll see your list. (The default command being run there is task next.)

You’ll see the task has an ID, which in this case might simply be 1. So when you’re done, you simply do task 1 done.

A few more of the commands

The other features I really like at the moment, are tags for filtering (for example, task add do homework +school), and setting dates and times for items (for example, task add ask boss for raise due:Monday+7.5hrs). Also, there is a feature for recurrence (task add plank and abs due:today+6hrs recur:12hrs). The original author of the app has recently been working on making the recurrence feature even more awesome, which I’m very excited in that it will make this already awesome app even awesomer. However, he said estimated delivery time is n months. For now, I am content in not trying to do anything too complicated with the recurrence feature.

Urgency polynomial

Okay, another really cool feature I really must comment on, is Taskwarrior’s urgency feature. Taskwarrior uses a polynomial to represent the urgency of each task, that is, it applies a weight to various properties of a todo item, such as due date, date created, priority, tags, projects, etc. And so everytime you list your tasks, Taskwarrior will use this heuristic to sort in terms of this urgency polynomial.

Setup

Note: In an effort to avoid using sudo, I’ll assume that ~/opt/bin/ is on your PATH.

To install on Ubuntu 16.04, GNU/Linux, I had to make sure that some tools were installed, apt install git cmake g++ libgnutls-dev uuid-dev. (Not sure why I didn’t mention make there, but I have an obsession with listing those requirements in the order that error messages would have issue, so I won’t merge to list until I try an install on a new machine.)

git clone https://git.tasktools.org/scm/tm/task.git
cd task
cmake -DCMAKE_INSTALL_PREFIX=~/opt .
make install

Compare the following change below.

include /usr/local/share/doc/task/rc/light-256.theme
include ~/opt/share/doc/task/rc/light-256.theme

If you run into problems with make, you may not be able to simply rerun cmake after installing more packages, I sometimes had to run git clean -dfx to get a clean slate. (:nod: to resources on chat channels and webpages as I troubleshooted the install.)

To install on MacOS, try brew install cmake

The installation for Taskserver is almost exactly the same.

git clone https://git.tasktools.org/scm/tm/taskd.git
cd taskd
cmake -DCMAKE_INSTALL_PREFIX=~/opt .
make install

You can install the Taskserver on some machine you can host from, and this will allow you to sync your todo lists between devices. It takes a little effort, you’ll be making CA, certs, keys, as well as making a user and certs and keys for the user that you’ll have to copy to each device. I have a way to ssh into my Android phone to copy the cert and key securely.

One thing you’ll have to look out for, is using recurrence, two devices may create duplicates. The advice is to turn off recurrence on one of the devices, but I didn’t want one of the devices to be necessarily visited in order to keep recurring items coming, so I turned off recurrence on both my personal computer and my phone, and instead have a client running on the private server where taskd is running, and a cron job to run task and task sync every minute. Make sure the cron doesn’t fill the system mailbox with the output. (You may get a clue when shell reports you have mail.)

Note: At one point, I was puzzled when trying out some recurrence features, did not realize that this choice of configuration was creating some unexpected delays in recurrence effects, and realized I could toggle the recurrence feature on personal machine and server to get live and local effects while experimenting.

Time estimates

Taskwarrior allows users to make User Defined Attributes (UDA), described here, https://taskwarrior.org/docs/udas.html.

They mention there that some users request to have a property where you can define a time estimate on tasks, thus one might want to do a series of tasks all at once that are estimated to take less than five minutes. A little more on how one might configure this is described at https://taskwarrior.org/docs/terminology.html#uda.

There they describe that you can simply do

task config uda.estimate.label Estimate
task config uda.estimate.type duration

Then from there, you may now indicate time estimates like so

task add Paint the door due:eom estimate:4hours

Further you can have it contribute to the urgency polynomial, as described at the links above, but for now I’ll use it in a simple fashion just to indicate items that I expect would take less than five minutes to complete.

Then if you’d like a column to appear in the task next report, use task reports to see list of reports, use task show next to see the settings available, and note you want to modify the report.next.columns and report.next.labels.

task config report.next.labels ID,Active,Age,Deps,P,Project,Tag,Recur,S,Due,Until,Description,Urg,Est
task config report.next.columns id,start.age,entry.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency,estimate