A follow-up to my original Taskwarrior, Teuxdeux style post.

For no other reason than it helped me procrastinate on a number of quite urgent tasks, I decided to change how I used Taskwarrior, but still keeping the Teuxdeux feel; visual calendar based task management is still a winner for me and as much as a love/live-in the command line, I reckon that if I had owned a smart phone during this time I'd still be using Teuxdeux.

For well over a year I'd been dividing up each day into the morning, afternoon and evening, which when you are using calendar based todo management anyway, makes perfect sense. It also provided a natural visual separation of work-related tasks and home-related tasks since, during the week anyway, all home related stuff was scheduled in the evening.

The downside, though, was lack of - to use completely the wrong word - "prioritisation".

I decided to try Jay Shirley's "Need, should, want" approach to categorise tasks in a vein attempt to focus me on want needs to be done each day (too much), what I should do (I don't even know) and as a constant miserable reminder that I am, actually, an automaton because the only things I want to do each day are eat and sleep and it's difficult enough to achieve enough of those, let alone anything more adventurous.

Anyway... I added a uda called cat with values of need, should, want, removed all the dummy _am_, _pm_, _evening_ separators, which helped a lot as I could reduce my recurrence limit from daily to weekly. I have more than this in my ~/.taskrc, but this is the current basis of my Teuxdeux style implementation:

#Date format
dateformat.report=a b D, Y
#UDAs
uda.cat.type=string
uda.cat.values=need,should,want
#Custom report - Teuxdeux
report.teuxdeux.description=TeuxDeux style
report.teuxdeux.sort=due+/,cat-,description+
report.teuxdeux.filter=(status:completed or status:pending) and -BLOCKED
report.teuxdeux.columns=id,cat,due,description.truncated_count
report.teuxdeux.labels=ID,Cat.,Due,Description
#Custom report - Someday
report.someday.description=Someday
report.someday.sort=project+,cat-/
report.someday.filter=(status:completed or status:pending) and due:
report.someday.columns=id,project,cat,description.truncated_count
report.someday.labels=ID,Project,Cat.,Description

My crontab required tweaking as a result, but is actually simpler now I don't have any of the dummy tasks as visual separators:

task $(task status:pending due.before:today ids) rc.confirmation:no rc.bulk:100 modify due:today < ~/.taskcronin

The taskcronin file is doing the same as last time. And this is my current shell command (I moved all the date definition into the shell as the date functionality within Taskwarrior kept changing slightly with each release):

function td {
    if [[ -z "$@" ]]; then
        #In 2.4.0 sow isn't respecting value in .taskrc so do via date as well, this is just a mess now
        if [[ $(date -d 'today' +%F) == $(date -d 'this monday' +%F) ]]; then
            task due.after:$(date -d 'last sunday' +%F) due.before:$(date -d 'next monday' +%F) teuxdeux
        else    
            task due.after:$(date -d 'last sunday' +%F) due.before:$(date -d 'this monday' +%F) teuxdeux
        fi
    elif [[ "$@" == "roll" ]]; then
        task due.after:$(date -d 'today -2days' +%F) due.before:$(date -d 'today +6days' +%F) teuxdeux
    else
        task "$@"
    fi
}

The one downside of switching to this approach, which I've alluded to, is a loss of natural visual separation between work and home tasks. To solve this I'm playing about with tags and contexts and currently tagging things as @home and/or @work with corresponding contexts:

#Contexts
context.@home=+@home
context.@work=+@work

The only danger here is if I forget to add a tag to a task, I might not see that task! Unfortunately it doesn't seem possible to enforce or set default tags for tasks, so perhaps I'll think about using a uda instead as I could set a default then; It is also important to ensure the context is unset before my cron task runs to so I have task context none; inserted in the front of my crontab task.