As part of trying to be more productive whilst working from home I have been writing a daily work journal. This is to help with tracking what I have actually been doing with my time, as well as record all those times I go “I really should learn not to do this again”.

I did a similar thing during my PhD using VimWiki, a wiki and diary plugin for The One True Editor. While this was a great plugin, it didn’t play nice with the pandoc markdown plugins I used and actually had too many features that I wasn’t using. So I decided to go back to basics and do what all developers do at some point, re-invent the wheel!

The plan

I basically need a online repository for daily diary entries and other notes. So a Git repo it is!

I use markdown for everything so that can be the note format and I can always use Pandoc to convert that to whatever format I want.

I also need to be able to add notes when out and about and away from a terminal (shockingly this can happen some times). As everything is in markdown files I can use the excellent HackMD online editor and connect it to the notes repo. This also allows easy sharing and collaboration on notes if I need that.

One of the features I liked about VimWiki was the shortcut to jump to a new vim buffer for today or yesterday, so I need command line aliases for that.

The result

Turns out to be pretty simple to achieve the above with a bit of Bash foo. Some liberal use of the date command can help create a diary/year/month/ structure automatically. The key is to make sure the folders are definitely there when a new month/year starts.

export NOTES=$HOME/Documents/Notes
alias notes='cd $NOTES'

alias diary='mkdir -p $NOTES/diary/$(date +"%Y/%m") && $EDITOR $NOTES/diary/$(date +"%Y/%m/")'
alias yesterday='mkdir -p $NOTES/diary/$(date -d yesterday +"%Y/%m") && $EDITOR $NOTES/diary/$(date -d yesterday +"%Y/%m/")'

This works great for the diary entries and I can easily add arbitrary files for project notes.

⇒  tree
├── diary
│  └── 2020
│     ├── 03
│     │  ├──
│     │  ├──
│     │  └──
│     └── 04
│        ├──
│        ├──
│        ├──
│        ├──
│        ├──
│        ├──
│        └──
└── work
   ├── features
   │  ├──
   │  ├──
   │  └──
   ├── issues
   │  └──

I will probably add more to this as time goes on. I may even try my hand at some vimscript to add these commands to Vim. I also plan to add some simple Pandoc commands to convert this structure into HTML for rendering images etc. Basically re-inventing (a much simpler) VimWiki.