My World in Textfiles

As a software developer, I am empowered to build and control my life with plain text. This series explores ways that I'm trying to de-appify my life and be able to own my own data... with Plain Text.

I homebrewed my own notes system using Drafts and Vimwiki.

There are many note taking applications. This one is mine.

For over ten years now, I've been managing a glob of .txt and .md files as the main notes/context for my life. Over time, I've concluded that having my notes in plaintext is important… I value the portability and flexibility.

For the longest time, the winning combination was SimpleNote on iPhone and Brett Terpstra's amazing NValt… Simplenote sync'd to NValt via Simplenote's sync, and NValt also saved a copy to Dropbox. I think eventually that was too troublesome due to frequent sync errors and Simplenote's mobile app choking on large documents.

The problem

I have struggled to get a system that made sense on desktop and mobile. I'm looking for…

  • Markdown. Whatever app I use needs to speak markdown.
  • Search. I need to be able to quickly search and find file names and full-text content.
  • Performant. I can't stand when the mobile app takes 15 seconds to load before I can start typing. I also have a couple notes with 30k+ words. (Mostly typed on my phone!) Most of the iPhone apps I've used become flip-books with files this large.
  • Dropbox. I pay for this service, so I'd rather not another sync service to the list. Many apps will let you open and save files to Dropbox, but won't search or save to Dropbox by default. (Honestly though… I need to look at iCloud's storage options.)
  • Vim. It's no surprise, I like Vim a lot. I don't mind using a traditional text editor to compose, but once I get into editing and cleaning up a file, I start twitching without modal editing.

When I need an app I usually consult The Sweet Setup and honestly they haven't been wrong. If you don't care about Vim, I think their recommendations for Bear and Ulysses are spot on. Bear is awesome, but I currently need Dropbox. Ulysses is incredible, but a touch expensive for something I would mainly use on my phone for writing. (If I didn't have the Vim requirement, I'd absolutely be writing a blog post about Ulysses. It's that awesome.)

If you don't care about using Vim on the desktop, you should look at the Sweet Setup's list. However, if you do care…

The (current) solution: Vimwiki + drafts.app

Vimwiki

I'm jealous of org-mode, ok?

Some time ago, I started experimenting with Vimwiki as a note taking tool on my laptop. Vimwiki on desktop answers all my needs as listed above… and when I am writing code, I am always one keystroke away from all my notes and context.

While I no longer use it as a task manager, I still like the diary feature and the linking. I use it daily at work as a personal network of links and resources and artifacts related to ongoing projects and to store documentation in Markdown format.

Vimwiki is really two things… a set of folders and conventions for naming files, and a vim plugin that interfaces with those folders and filename conventions with handy shortcuts.

There is not really a mobile app that would work for Vimwiki… but I am sort of hacking it using Drafts.app.

Drafts.app

Drafts is a wonderful app. There is a much better overview on macstories, but in short: Drafts focuses on capturing plain text in the moment, then allows you to process that text at the appropriate time using customizable actions.

A series of customizable actions allow me to put text from my phone into the Vimwiki set of folders and filename conventions… this is all still a work in progress.

I started with a simple custom Action to save the current draft to my Vimwiki diary. It's pretty simple. It's a Drafts Action with one Dropbox step:

That is it! Just add to a file with the right file name. If it already exists, append. Very simple.

Until it's not.

While this allows me to get text into just one part of my wiki, it doesn't answer ALL THE THINGS.

I started down a perilous path trying to emulate every major feature that I want out of Drafts... and after a week of madness I realized that I do more composing than reading on my phone. All I need to do is put the text where it needs to go 80% of the time.

The Bleeding Edge: Magic Wiki

magic gif

You've made it this far? Good grief.

When I'm writing text on my phone, I'm usually drafting text for a single one-time message. (sms, email, etc.) This is the Drafts core use case. It's super good at this right out of the box. No complaints.

I also do a few other things regularly:

  • Jotting down a thought on a book I'm reading.
  • Logging/journaling a moment in time.
  • Take a fragment of notes on a meeting for later.
  • Compose/draft a blogpost.
  • Writing a fragment of a thought that probably needs to be filed near some topic.

With this thought in mind... I recently set up some custom workspaces in Drafts:

Workspaces

These are all driven by tags. I can either add them to a new draft manually... although for some of them (like meeting especially) I've taken to using an iOS Shortcuts workflow to building the draft.

It's easy to think of these as folders... but they are more like contexts in the strict GTD sense. The streams don't cross. A draft isn't both a booknote and a meeting note. This just makes finding what I'm working on a lot easier, especially as most of my actions archive after it's completed.

I also built a simple iOS Shortcut for meeting notes. it lets me choose a recent calendar event, pulls some pertinent details out, gets a template file from Drafts, and inserts the event details into the template and tags it properly. That means if I have a useful meeting with some notes, I can always generate a properly formatted, properly tagged draft for it.

(I'm pretty excited about this!)

Action

I built a custom Action in Drafts to file these different needs out of Drafts into my organization system in Vimwiki.

It uses the same tags as my workspaces to categorize and file any draft that I have in place. If it's a meeting, it saves it to my vimwiki diary. If it's a booknote, it saves it in the right location. (I have other custom Drafts actions to build up a booknote... that's a whole other blog post!)

Getting text into the wiki topics: inboxes

If you've been following along, I've covered every one of my use cases except one: the fragment or thought that needs to be filed somewhere in the wiki's linked structure as part of a topic.

Zettelkasten is a note taking strategy I've been reading about. I really like what I've read so far, and it maps well to what I'm doing.

I've decided to start using the diary as a sort of inbox… entries that don't have a title show up in vimwiki's diary index as just a date. Anything without a title is a candidate for either moving into its own page in the wiki or for naming for better searchability in the future. I don't need to be doing that on my phone... it's sufficient to periodically groom the diary on the desktop and place content where it needs to go.

Nothing is perfect…

I still haven't figured it all out, and I never will. Here's the problems with which I'm wrestling:

Generating Indexes

Wikis depend on links. Zettelkasten as a strategy relies heavily on links, tags, and indexes. Links are manually created… but it's also nice to have an index of related pages.

Vimwiki has the ability to generate an index on command… and is getting the ability to automatically regenerate the index on file save. It's not stable for me yet (might be because I'm using markdown rather than the wiki syntax) and it will never work on mobile, but it'll do for now.

For now, I can periodically manually rebuild an index based on a tag or folder to keep my wiki organized. That's enough.

I didn't have a good path for search and opening… until while writing this Dropbox raised the price on me and added fulltext search. It works on mobile and desktop, and is robust enough for most mobile searching needs.

On desktop, I have a host of awesome text search tools including rg, fd or just MacOS Spotlight.

Images

I still don't have a good answer for this. I'm guessing/hoping that with new updates to iOS shortcuts, I'll be able to upload images to dropbox and drop a link back into a draft.

On desktop, I merely put it in a folder and make a relative link manually. It hasn't been too big of an issue so far.

All the above is overthinking it.

Don't copy my setup blindly.

I'm solving my particular problems with my particular uses. I write a lot on my phone, and research more on my desktop. That's backwards from how I used to be five years ago. Unless your needs align perfectly with mine, you should consider what you actually need.

I've been working on this post for too long. I'm sure it'll go through some changes, there's a changelog at the bottom of the page.

If you have any thoughts or questions, feel free to reach out!


Changelog
  • 2024-02-20 09:38:14 -0600
    Convert to permalinks

  • 2022-06-08 12:14:02 -0500
    Found some more tldr

  • 2022-06-08 11:31:29 -0500
    Rename articles

  • 2020-06-18 14:26:02 -0500
    Move everything to CST

    Don't know why I didn't do that before. It caused _no_ end of
    problems.

  • 2020-06-14 15:51:50 -0500
    Update articles with series and series partials

    After the refactor, needed to move the series metadata to the actual
    name.

  • 2020-06-08 12:34:07 -0500
    Hack together more series pages

  • 2019-07-08 15:50:50 -0500
    Stab at a sidebar for the blog

    I think that I'd rather figure out how to do this using css grid
    somehow... but this works

    Borrowed CSS and idea from the lovely https://takeonrules.com/.

  • 2019-07-01 14:21:54 -0500
    tweak a sentence... thanks Seth!

  • 2019-07-01 13:42:10 -0500
    Fix path

  • 2019-07-01 13:40:27 -0500
    New Post: Vimwiki and Drafts