Hey. Hi. Here's a missed connection:

You: Wrote a blog about some super cool bash-based TODO list + journal thing. You kept it all in the Terminal. It was glorious to behold.

Me: Read this in, like, 2014 or something.

Oh, it's hopeless.

Anyway, I read some blog - SOMEWHERE - by some guy (I think it was a guy? statistically, it was probably a guy) who had this very cool setup of keeping an ongoing journal and TODO list all from the Terminal and all in Vim. He (?) was all about writing writing writing, as a hack to keep his productivity up. And I am all about that too.

So I finally implemented something like it! It took me on a nice journey through bash/zsh, and, oh, how I love my zsh. Here are some previous adventures in it:

Specs

OK, for this tutorial/thing I did, I wanted:

  • A todo list thingie from the Terminal.
  • A journal thingie from the Terminal.
  • A way to kill Evernote (sorry, Evernote).

todo.txt

First step was easy. Someone already built a CLI TODO list manager, and that person is Gina Trapani (thank you, Gina), who made todo.txt.

It's super easy to install - just brew install todo-txt on a Mac. Then you need to configure your ~/.todo/config file according to this tip:

export TODO_DIR="$HOME/Dropbox/todo"
export TODO_FILE="$TODO_DIR/todo.txt"
export DONE_FILE="$TODO_DIR/done.txt"
export REPORT_FILE="$TODO_DIR/report.txt"
export TMP_FILE="/tmp/todo.tmp"
export TODOTXT_DEFAULT_ACTION=ls

You can change the above to whatever, and SUCH is the glory! I have big plans for this, connecting these folders to a bunch of Python scripts for collating, organizing and archiving my TODOs and DONEs.

Finally, I aliased the actual todo.txt commands to spare keystrokes in honor of the great god Productivity. I did this in my ~/.dotfiles/system/.zshrc

alias t="todo.sh"
alias ta="todo.sh add"
alias td="todo.sh do"
alias tls="todo.sh ls"

And voila: todotxt

Journaling from the terminal

One of the big things I use Evernote for is keeping an ongoing diary of my workdays - what I'm doing, what's confusing, ideas I have. It's where I, for example, paste in charts and SQL queries from the data I am sciencing. But! One thing Evernote does not do well is - okay, two things. The first thing it doesn't do well is data privacy. I have no idea where my deeply private data is being stored; what do I know about the Evernote servers? Nuffin. So, I don't like that.

The second thing is doesn't do well is, well, this:

$$p(\mathbf{x} | C_{k}) = \frac{(\sum_{i} x_{i})!}{\prod_{i} x_{i}!}\prod_{i} p_{ki}^{x_i} $$

That is - Markdown+LaTeX math! There's no elegant way to math in Evernote. It's very ugly and horrible. So switching to Markdown is a win.

Setting up the Terminal-journal (journinal) was easy:

  1. First, I made a directory where I'd store my Markdown journals. I aliased it to hawaii because, that way, it would make me feel happy every time I typed that.
  2. Second, I wrote the following function into my ~/.dotfiles/system/.zshrc:
function notes() {
  local TODAY_NOTES=$(date +%Y-%b-%d_%A).md;
  echo $TODAY_NOTES;
  # aliased to my notes folder
  hawaii;
  # aliased to my work name
  if [[ -z $1 ]]; then
    SUBDIR=$WORK
  else
    SUBDIR=$1
  fi
  vi $SUBDIR/$TODAY_NOTES;
}

I have subdirectories in hawaii for work, personal and omscs, so that way - when I am lamenting life - I can do it directly from the Terminal by simply typing notes personal. It will either find or auto-create the .md file with today's date, e.g., 2018-10-01_Monday.md, and enter Vim for me:

notes

RPROMPT

Okay, so this is a thing I found elsewhere, but the basic idea is: use the right-hand side prompt (RPROMPT) in your zsh to put stuff like: how many TODOs you have in your code, how many project-specific tasks you have coming up, and the like. It is also cool, so check out Wynn's blog.

TODOs on my TODOs

I have a bunch of Python scripty ideas, e.g.:

  • To properly destroy Evernote, I want to bulk-migrate all my old notes into the Markdown format.
  • I want a weekly archiver that sweeps through my todo.txt list and my work notes and collates them into one big biweekly update I can send to my boss.
  • I am debating the version control on my notes and TODOs. I do not 100% trust a private GitHub repo!!! But maybe it's fine. Debating whether to stick all this stuff in Keybase like some sort of Amyericanski spy (sorry, have been watching a lot of The Americans).