Lister is a tool for managing your lists. "Lists" here is used in the sense of Getting Things Done.
Lister does not prescribe a structure for your lists; it assumes they are scattered around your filesystem in some structure that makes sense to you. Lister provides you holistic operations on top of whatever that nonsense looks like.
Lister understands the TaskPaper format.
I used to use the wonderful Things. Then some complications set in:
- I started using an untrusted machine for my daily work, one that I didn't want my personal credentials on and my personal lists syncing to.
- I started using Linux in my personal life. Things is Apple-ecosystem-only.
Not to worry! After some searching, I discovered taskpaper.vim, which provides handy facilities for editing the simple plain-text format from TaskPaper.
I started making a bunch of ad-hoc TaskPaper lists.
Then I realized I was here:
$ lister list-files
/home/awl/code/lister/project.taskpaper
/home/awl/code/photobox/todo.taskpaper
/home/awl/.config/fish/todo.taskpaper
/home/awl/todo.taskpaper
One of the core principles of GTD is that you need to periodically review your lists. That gets tricky if you don't even know where your lists are.
Lister exists to turn a collection like this of disparate plaintext files into a holistic GTD system.
It provides some unixy tooling for working with lists. For instance, if I just want to see what's in some of my lists:
$ lister list-files | grep -v '/home/awl/todo.taskpaper' | xargs lister format
/home/awl/code/lister/project.taskpaper:
Functionality:
- write a taskpaper formatter @done(2020-06-12)
- write a command to list projects @done(2020-07-04)
- write a query function
Unixy CLI:
- figure out how to ignore files
- add a curses interface for browsing
Bookkeeping:
- decide on a name @done(2020-06-08)
"thingus"?
"list processing"?
"listmaster"?
"listicle"?
"blister"?
- change name to `lister` @done(2020-06-08)
- write a README @done(2020-07-04)
- push to GitHub @done(2020-07-04)
/home/awl/code/photobox/todo.taskpaper:
- script feh with some useful actions
- figure out how to get photos into iCloud @done(2020-05-30)
/home/awl/.config/fish/todo.taskpaper:
- audit for places to use `status --is-login` and `status --is-interactive`
Or maybe I want to see a list of projects:
$ lister list-projects -d ~/code/lister
Functionality
Unixy CLI
Bookkeeping
I can also get those with their "paths", which Lister can use to reference them later:
$ lister list-projects -p -d ~/code/lister
/home/awl/code/lister/project.taskpaper:1 Functionality
/home/awl/code/lister/project.taskpaper:1:4 Unixy CLI
/home/awl/code/lister/project.taskpaper:2 Bookkeeping
This isn't illuminating on its own, but you could combine it with
fzf
to search for and show a project:
$ lister list-projects -p -d ~/code/lister | fzf --with-nth=2 -d'\t' | cut -f1 | xargs lister show
... (search for and select "Unixy CLI")
Unixy CLI:
- figure out how to ignore files
It does slightly more than this. lister help
can tell you more (and
tell it better).
One major missing chunk is the idea of an inbox. You could have
something like INBOX.taskpaper
, but without facilities for moving
tasks from there to existing files or projects, there's friction in
processing it.
Other things I'd like to do:
- Add some end-to-end CLI testing.
- Allow for user-defined commands or filtering criteria. Simple examples might be finding things by context, time required, or energy level. Each of those is probably defined in a specific and personal way that would be best implemented specifically and personally.
- Write a real parser for taskpaper. The regex thing works, but I'm interested in doing it The Right Way.
- Finish converting the code to Fennel. Along the way of writing this, I discovered Fennel, and I've been moving things to Fennel as needed.
- I originally had a grand dream of adding a curses interface. I'd
still like to do that, but it might prove totally unnecessary if
everything can be done nicely with an editor and/or
fzf
.
You can use the included rockspec to build this with luarocks
.
You can't just luarocks install
yet, because I haven't submitted it to
the rocks server. It doesn't do anything yet, so why would you want it?
:-D
I also considered skutter
and kryten
, but in addition to being more
obscure and harder to type, they were also (surprisingly) more commonly
in use.