I’ve dabbled in many different productivity systems over the years in an effort to organize my personal/work tasks/notes/writing.
These include using methods and services such as:
- Disparate plain text files
- Simplenote
- Wunderlist
- Catch
- Microsoft To-Do
- Evernote
- Trello
- Wekan
Each of the above listed services addresses one, but not all of the items that I need to organize. This leads to using multiple services. I’d like to avoid any sort of added complexity to keep my system as friction-less as possible. So what do I want in my perfect organizational system? The best way to determine this is to list out my needs/wants.
What makes a good system?
Future proof
- A format that can be accessed from anywhere. Ubiquitously supported.
- Consumes minimal bandwidth/storage space.
- Does not rely on a new service that may be shutdown/acquired in a year or two.
Accessibility
- Should be accessible from any desktop computer or mobile device.
- Fully cross platform (Windows, OS X, Linux, iOS, Android)
- Changes should instantly sync once a file is saved.
Built in hierarchical structure
- Systems that use a single text file become confusing to navigate as they grow in size. Tagging systems like those used in Simplenote help a bit, but the structure is still loose. The ideal system would have a logical structure built in so that the user has no choice but to organize their data from the start.
Security
- Needs SSL encryption for all network interactions
- Files can be placed within an encrypted container for added security.
- Can be self hosted.
What needs to be stored?
- Todo items
- Scratchpad
- Technical knowledge
- Study notes
- Writing
- Lyrics
Plain text files work well but suffer from:
- Lack of organizational structure/hierarchy.
- No form of markup to format notes (bold, italic, lists, etc.)
Simplenote came the closest to reaching the above goals, but there were a few gotchas:
- Lack of organizational structure/hierarchy.
- Security concerns as notes are not encrypted on the server.
- Occasional sync issues, which had led to loss of some note data.
Markdown, specifically the CommonMark standard seemed the best choice to ensure that my stored data was read-ably formatted and could easily be exported to another format such as PDF/HTML/etc. by using a utility such as Pandoc.
However, discrete Markdown files still don’t address the issue of hierarchical structure. Sure, in a single page document, Markdown headings can be used to delineate different sections. But what if a user wants to interlink or relate two different documents?
Vimwiki is a system that addresses the hierarchy/interlinking issues.
- Supports taking notes in Markdown (Set to Vimwiki syntax by default. This can be changed in its config file.)
- Markdown files are just plain text with a .md extension. Text files are as low bandwidth as it gets.
- Creation/interlinking of notes is natively supported. This takes care of the hierarchy requirement.
- Wiki is quickly searchable using the built in search command VWS or a grep of the wiki directory.
- Wiki location can be customized for easy syncing using Dropbox, Syncthing, OwnCloud, etc.
- No web server required. You can even SSH into your server to edit the wiki directly.
The Wiki structure
This is how my personal wiki is laid out as an example:
- Todo – This contains all my task lists. There are sub headings for Personal and Work. Once an item is listed using the standard markdown list format, while the cursor is on the line, I press Ctrl + Space to turn the line into a checkbox item.
- Scratchpad – If I want to quickly jot down some information or begin writing something and am unsure where it will live in the wiki hierarchy, I start in this page.
- Technical – This contains sub pages such as Vim Tips, Bash Tips, study notes, tutorial ideas, written tutorials, etc.
- Personal – Personal plans, writing, information that doesn’t fit under the other categories.
- Music – Lyrics, useful tools and links, album release ideas, etc. are stored here.
Wiki Workflow
So how does this look in day to day practice?
I have the wiki stored in my Dropbox. This automatically syncs any updates to my computers and mobile device. On a laptop or desktop, the workflow is:
- Launch a terminal window.
- Create a new window in my running tmux session and start up Vim.
- Press \ + ww to pull up my wiki index page.
This keeps the wiki conveniently running in tmux so it can be accessed quickly. Once a change is made, I manually save using :w in Vim. Changes are automatically synced to Dropbox. For editing on a mobile device, I use the Dropbox Android app, which allows me to edit plain text files. This gets the job done but isn’t ideal for the reason that I am unable to create new wiki page entries. However, there is a future solution for this outlined in the next section.
Potential sync issues to be aware of
Let’s take a look at a potentially tricky scenario. I’ve updated my Todo list on my mobile device. This is automatically synced to Dropbox, and the changes are pulled down to my laptop. However, Vim is already running in tmux. So how do I ensure that the latest changes are loaded? I run the :bufdo e! command in Vim. This reloads the contents of all my currently loaded buffers and populates the new changes in Vim.
Future workflow improvements
As mentioned earlier, I currently have Vimwiki stored in Dropbox. However, there is one way to further improve the system. That is to have a persistent tmux session running on a home server. This addresses two issues:
- Sync issues that can be caused by updating your wiki via a mobile device.
- Security concerns of having data hosted on Dropbox.
The home server can be something small with low power draw such as a Raspberry Pi. The user can ssh into the server and then attach the already running tmux session from their desktop, laptop, or mobile device (using an app such as JuiceSSH).
References
- Evan Travers Vimwiki Article: https://www.smoothterminal.com/articles/vimwiki
- Vimwiki Cheatsheet: http://thedarnedestthing.com/vimwiki%20cheatsheet
- Vimwiki Github: https://github.com/vimwiki/vimwiki