home ~ projects ~ socials

My Grimoire

Introduction

A Grimoire is a book of magic.

Mine is the most valuable tool I own. Made from a collection of ten thousand notes assembled over twenty years. Stored knowledge from a generation's worth of time.

Sure, you could call it a second brain. Maybe a developer's notebook. You might even go so far as to call it a simple notes app.

But, words matter.

I'd rather have a book of magic.

Casting Content

The notes in my grimoire can be about anything. A list of gift ideas. How to center text on a web page. The steps to reset the check-engine light on my car when they forget to do it at the oil change place. Anything I care to learn or remember is a candidate for inclusion.

But, it's not just for me. My grimoire is the foundation for everything I make. The pages and posts for my websites are written in it. It's where I'm writing the post you're reading now.

When I want to send something into the world, I update a little section of the note. Something like:

-- metadata 
-- created: 2022-11-02T23:29:42-04:00
-- id: 2h/1i/v2/7a
-- type: post
-- status: published

Anything with a status of published goes out to the site.

It's so low friction it's easy to do the "working-in-public" thing and constantly publish to my Digital Garden

Invoking Code

Beyond holding my notes, my grimoire is alive. I can write little apps and programs that live inside the notes. When I run them, they update themselves with details from whatever the code was designed to do.

[TODO: Redo video showing the Grimoire in action]

Starting The Magic

My Grimoire didn't start out with so much power. In the beginning, it was nothing more than a plain-text notes app. It was like that for years. I'd go back to that in a heartbeat if I somehow lost the ability to run code or publish directly from it.

Those features are great to have, but the notes are where the power lies.

Keeping a Grimoire has been one of the most beneficial things I've done in live. It's helped me in both my personal life and my career. I really can't speak highly enough about it, other than to say this:

If you want to get better at making your way in the world, my most general piece of advice is to take more notes.

-- end of line --

Endnotes

  • I got the suggestion to call my collection of notes a Grimoire from an article in 2600 - The Hacker Quarterly Magazine. I'm a huge fan of tweaking the langauge we use in our heads to change the way we think and move in the world. This switch was one of the most impactful I've ever made.

    I still have my original copy of the ariticle, but I haven't found a version on any public facing website I can link to.

  • I'm still working on improvements for my grimoire software. If you've ever read The Diamond Age: Or, A Young Lady's Illustrated Primer by Neal Stephenson you'll have an idea of where I'd like to take it.

  • The abilty to run code inside notes is called Literate Programming. I originaly used Org Mode in the Emacs text editor to do it. I've since switched to Neovim and wrote my own plugin to provide the functionality.

    If you do anything with code and have a chance to use a notes app that lets you run code inside it, it's absolutely worth giving it a try. It like having a superpower.

    (If you know a little python, jupyter notebooks has a similar vibe. It's worth a quick look.)

  • There's a billion and a half notes apps out there. The one that really got me started taking notes was nvAlt for the mac.

    The person who made nvAlt stopped updating it a long time ago and started working on a new app called nvUltra. It's been in "private beta" for years but I'd been able to keep nvAlt running long enough that I never tried it before moving to Emacs and then my own Neovim plugin.

    The key for me with nvAlt was the single text field of the primary interface. As you start typing, it would start searching for notes that matched what you typed, but you could hit a hot key to make it start a new note with whatever you'd just typed as the title. The result is that it was super fast at both finding existing notes and start new ones.

    When I finally decided to switch away from nvAlt I looked for apps that had the same interface. Obsidian was just out and was the closest thing, but didn't quite get it right. It was just enough friction that I gave up on it and went down my own path (which should give you an idea of just how important the functionality was/is to me).

  • How you keep notes is very much a personal preference thing. For me, it comes down to wanting nothing more than a good search (for which I use Meilisearch) and using nonce words for top level tagging via file names.

    For example, I use the nonce string py- for notes about the Python programming language. If I want to look up my note on how to do case insensitive with a regular expression in Python I'll start typing something like:

    py- regex ins

    where "ins" is the first few letters of the word "insensitive"". Here's what I get when I do that:

    A screenshot of my Neovim grimoire plugin interface showing a search for 'py- regex ins' in the middle of the screen with a list of matching files below it with the first one highlighted and a preview of that highlighted file above the search bar.

    Some note taking systems involve linking between notes. That doesn't have any appeal to me. Nor do I want to mess with trying to sort ten thousand notes into folders. In fact, I realized having to make a decision about what folder to store a note in created a friction that prevented me from taking some notes in the first place.

    So, my approach is to just throw everything into a single bucket and search for them. Even with ten thousand notes, it rarely takes more than a second or two to find what I'm looking for.

  • I used the Markdown plain-text format during the years I spent with nvAlt. I was still free-handing HTML for my site at that point but eventually started to use Markdown for my online content as well. It always felt too limited for me. I tried switching to MDX, but gave up after not being able to get any of the four modules I tried for it to work properly.

    That frustration lead me to make my own markdown replacment format called Neopolitan. And that, in turn, lead to the creation of my Nepoligen static site generator becuase I needed something to actually publish the format.

    It's mostly a personal project at this point but the goal is to polish it up so other folks who like to tinker with things can play with it too. (It's open-source so you can check it out on GitHub if you want to poke at it in the mean time.)