February 23, 2019

One week bullet journaling with Markdown + Syncthing

One week bullet journaling with Markdown + Syncthing

I'm a productivity freak, I always look for the latest and coolest project management - productivity boosting techniques, so I knew about bullet journaling since it started gaining some popularity.

Why didn't I adopt it yet? I tried many times, but can't keep a paper journal proper for more than few weeks,  I always struggle to find it or something to write on it, and it becomes difficult for me to keep that up in the long run.

I've developed mobile apps for few years, and a mobile app could work great, even a web app probably would do the trick. I have tried and use most of the apps around, for my personal and work projects. I'm pretty sure I could even code myself a decent one perfectly fitting my workflow.

But I feel the need of something that doesn't get in my way that much: unlocking the phone and finding the app takes a few clicks, same for a desktop app, I would need to use the mouse! Even if this might sound awkward to you, consider I'm spending most of my time coding on an editor or a terminal, so I don't lift my hands from the keyboard often.

The Bullet journal is a nice technique covering most of my requirements:

  • take a log of what I do during the day
  • write down tasks that I'll do later
  • note interesting sites and projects that can go to this blog
  • keep an overview of the days ahead and main priorities
  • have this information with me on all computers and devices I use, possibly update

What follows is my adaptation of the bullet journaling to make it fit in my *nix geek workflow.

The main idea is to keep a single Markdown file in a shared folder between all my devices, and rather than using a version tracking system rely on Syncthing to keep track of the edits and keep data up-to-date on all devices.

Setting up Syncthing

I started setting up Syncthing, an incredibly useful privacy-friendly tool that allows to share folders between computers without having to move them to a cloud server first.

I thought about many alternatives for both syncing and versioning. For example I could use plain git and sync the file pushing and pulling from a private repository.

This approach has few disadvantages:  I would need to commit every time I edit the file, which can be tricky on mobile and the private repository is still in the cloud for some admin to see.

Remember that once something is on some kind of network it can't be considered secure. I don't need to keep any national secret, but I like the idea of being able to control who eventually could have access to my daily log.

Syncthing installs as a background service, but has a very cute interface accessible via the browser.

When installed it will start up sharing a default folder ~/Sync, and this is where I placed my bullet.md markdown file containing the log.

To add a new device, for example your phone, you just need to scan a QRCode or copy the sync ID of the device, by clicking the top right menu Actions > Show ID.

On Android you will have to define where the Sync folder lives. I choose to put it in the /storage/emulated/0 folder on the main storage.

Once synching is ready we can move creating the bullet list file.

Markdown Bullet list

I use markdown for documentation, blogging, opening issues and all sort of stuff. So even if I don't plan to render my list in html, this might turn useful if at some point I need to archive or print it.

My list is organized as follows.

Header

---
title: Fiore Basile bullet list
Created: 2019/02/10 12:24:41
Last modified: 2019/02/21 18:51:01
---

This header uses the markdown yml front-matter syntax. The last-modified timestamp is updated automatically by the editor, more on this in Editor setup

Table of Contents

Next is a table of contents. This links to all items in the list and makes it easy to reach the different sections when rendering (also in the editor, cmd clicking).

## Table of contents

- [Table of contents](#table-of-contents)
- [Future plan](#future-plan)
- [Feb 2019](#feb-2019)
    - [Feb 10, 2019 SUN](#feb-10-2019-sun)
    - [Feb 11, 2019 MON](#feb-11-2019-mon)
    - [Fab 12, 2019 TUE](#fab-12-2019-tue)
    - [Feb 13, 2019 WED](#feb-13-2019-wed)
    - [Feb 14, 2019 THU](#feb-14-2019-thu)

Using my setup described below, you can have this generated automatically every time you save

Future Plans

This section is a list of things that i need to remember but will happen in the next months. Events and other important milestones are also marked here.

## Future Plan

JAN
- pay taxes

FEB
- attend celebration

MAR

...

Month section

The comes a section for each month, this is a kind of overview for the month, listing each day in table format

Day  |Notes        | 
-----|-------------|
10 M |something    |
11 T |something    |
12 W |something    |
13 T |something    |
14 F |something    |

Day section

Finally this is the real log, I find useful to annotate three main categories of items:

  • Todo items done: these come from trello boards, emails, etc. I don't need to mark them because they are tracked externally, but log they are done and comment on how much time it took.
  • Events, calls, meetings I attend. For each I can also add a few bullets as a summary of the action items
  • Personal notes, comments about the day
  • Reminders: while I'm working I collect tasks from myself or from other people. Instead of interrupting my work, I write them down to process them later

The formatting is very simple:

- event or work done
- ! reminder of some important event or item
- [ ] todo item
- [x] todo item completed

> Some note

And here is an example of how a typical day could look:

If find the Markdown output is already clear enough even before rendering. The checkboxes and formatting makes it look even better when rendered.

Nice eh? Read below on how to setup your editor to look like this.

Editor setup

On my Mac I use daily the awesome Visual Studio Code editor. And among other things it has a great support for markdown editing and rendering also thanks to a number of user-provided extensions that make it really powerful.

Here the list of extensions that you should install for an optimal markdown editing experience:

  • Auto Timestamp auto updates the Last modified header field each time you save
  • Markdown All in One has keyboard shortcuts, auto-generates table of contents, tables, list and much more
  • Markdown Emoji not really useful if you don't render, but cool if you do

The final killer feature is to directly open VSCode on my bullet list each time I type bullet on the terminal. Very easy, just define an alias in your shell, if you use fish like I do, create a file ~/.config/fish/config.fish containing:

alias bullet="code ~/Sync/bullet.md"

On Linux I recommend to check out Typora, an open-source markdown editor with a very nice UI. Install it on ubuntu:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE
sudo add-apt-repository 'deb https://typora.io ./linux/'
sudo apt update
sudo apt install typora

On mobile the setup is a bit more difficult. I'm using Android currently so there's a zillion Markdown editors around. The best I've tried so far is IAWriter that also has some syncing features and works on most platforms. Unfortunately I find it is priced too high for a text editor on the Mac. And VSCode is way more advanced on the desktop.

In general any text editor will work, if you are ready to look for the sync folder each time you want to open your bullet list. IAWriter makes it a little difficult, maybe for a bug in the file selection, you can't select a markdown file it didn't create (or I didn't manage to).

Luckily a really nice open-source gem, Turbo Editor comes to the rescue. It's a simple text editor with Markdown support, syntax highlighting and .. recently edited files. Highly recommended.

If you are a terminal lover like me, you won't resist to try and use Termux + Vim, which makes it possible to use an alias also on mobile. Another tip is to link the Sync folder in your home on Termux typing:

ln -sf /storage/emulated/0/Sync ~/.

Final Thoughts

Very often we over design our workflows, having so many tools at hand gives a sense of power, but the mental overhead sometime is not worth it. This low tech solution is working pretty well for me, your mileage may vary, but you can give it a try too.