My Crazy Notetaking Setup

Without going into too much detail, let’s just say that I enjoy messing with my workflow far too much. I’m constantly trying to get a more efficient setup, a faster, newer, better, shinier plugin, and a more robust tool to use. I have an addiction for configuration. However, for the past few months, I’ve found a workflow that works pretty consistently for me.


I take all of my notes in Vim. I’ll leave it to you to determine whether this is because I’m very efficient in Vim, or because I’m a little bit masochistic. (Hint: it’s a bit of both.) I take all of my notes in Markdown, which I find very easy to write, read, and use. It’s especially nice when I want to generate a study guide for my classes, since I can use the amazing pandoc command.

Note Management

Since I take my notes in plaintext, I can take advantage of the power of Git to track revisions. Each separate class has its own Git repository which I host on Gitlab (I would have used Github, but the fact that I can’t have infinite private repositories means that all of my university’s administration would jump down my throat for academic dishonesty). This way, I can properly synchronize my repositories between my desktop and laptop.

Study Guides

This is where my love of Linux (and ancient technologies) rears its ugly head. Generally, I want to take all of the notes that I’ve taken over the quarter or semester and compile them into one document that I can easily read anywhere. I use pandoc to convert all of my notes into LaTeX, which I then \input into a container document. Then I can compile my document and voila! I have a beautifully typeset (like that matters) study guide with all of my notes. I generally format the container to be a tiny bit fancier than usual, including a table of contents and multiple chapters.

Of course, running these commands by hand every time I updated my notes would get quite cumbersome. So, looking into the past for inspiration, I landed on another ancient Unix utility: make. I always make sure to implement a clean rule and that I use wildcards to prevent having to update my makefile with every new note markdown file. I also modify my .gitignore so I don’t actually include those automatically generated .tex files in my version control history.


Any “time benefits” I get from this system are undoubtedly negated by the time it takes to maintain it. It’s more about creating a system in which I can use my favorite tools (Vim, Git, and the command line) and in which I have total control. Are the results better than just biting the bullet and using Microsoft Word or Google Drive? Probably not. It would probably be usable from more computers, and the revision history would be just as good. But it’s more about the principle of being able to take notes in a way that’s comfortable for me.

Efficiency is doing things right; effectiveness is doing the right things. – Peter Drucker