Keeping your Obsidian notes clean and consistent
Today I want to discuss some tools which can be helpful for keeping note-taking clean and consistent. I am using Obsidian for academic research.
I have a mixture of a Wiki-based approach, where I have a "Frontpage" which links into different surface-level topics which then link to even more detailed notes. I also have literature notes, notes with thoughts and summaries of different methodology, and so on, implementing some form of "Zettelkasten" approach. Then I have notes for certain people (e.g., students or collaborators), daily notes where I basically dump down thoughts during the day, event-related notes, and various other things.
All these different kind of note-taking quickly lead to an unmanageable amount of files. Coming up with a good structure for all this is a topic on its own, but today I want to discuss which plugins I use to keep everything consistent.
The goal is to provide a framework which, as much as possible, ensures that stuff will a) be consistent from the beginning through the use of templates and preset overview tables, and b) stay consistent through automated cleanup and use of auto-completions.
Plugin: Linter
The plugin Linter allows you to set up rules for all files to comply with. For example, you want all headings capitalized, or a certain number of new lines after each paragraph, or just make sure that your frontmatter section is sorted alphabetically.
That's the core of this plugin. You select a variety of rules across formatting, headings, YAML, paragraphs, etc. Then, you can actually set it up in a way that all files will automatically be "fixed" according to your formatting rules on every save or edit. If "on every save" is too much, you can also change it to be just a manual button press on your convenience - either on a single file or the whole vault.
Overall, this plugin helps me to make sure that all files have the same visual formatting. It's not much, but it makes the vault look more consistent. All files are formatted similar which makes the vault have a consistent look and feel.
Link: https://github.com/platers/obsidian-linter
Plugin: Templater
Another corner stone for consistency is using templates. If you set up a single template for your literature notes, daily notes, or meeting notes, you can make sure that it looks the same and consistent every day, every time you create a new note.
By keeping a strict consistency on layouting, your brain will learn how a literature note looks. This makes it easy to grasp it as first glance, know where to look for certain information, or when searching for a certain note in your vault.
While there's some templating capability built-in, it is worth to look into more advanced options. One of the oldest and biggest templating plugins for Obsidian is Templater, which comes with a variety of extra and advanced options.
There's a whole documentation on different options, but the gist is this:
---
creation date: <% tp.file.creation_date() %>
modification date: <% tp.file.last_modified_date("dddd Do MMMM YYYY HH:mm:ss") %>
---
<< [[<% tp.date.now("YYYY-MM-DD", -1) %>]] | [[<% tp.date.now("YYYY-MM-DD", 1) %>]] >>
# <% tp.file.title %>
<% tp.web.daily_quote() %>
You set up your "template" in a format like this. It looks cryptic at first, as it is riddled with various commands. What is does is, when you create a new file or apply it to some existing file, it will use this formatting to set up your file. During this, it will substitute each <% %>
command with some kind of fitting text replacement. For example, it can automatically populate the code <% tp.file.creation_date() %>
with the current date on file creation.
Now, why would you need that? Well, let's say you have a certain formatting for your meeting notes such as:
# Meeting: Lunch meeting
Starting date: 2023/07/12 13:05:00
Members: Paul, Marc, John
## Contents
A great first step to making your notes very consistent and also saving you some typing time would be, to create a template like this:
# Meeting: <% tp.file.title %>
Starting date: <% tp.file.creation_date() %>
Members: <% tp.file.cursor() %>
## Contents
You can apply it to a new note called "Lunch meeting" and it would automatically add your meeting formatting, insert the starting date (creation date of your note), and put the cursor in the position to start typing the team members.
Links:
- Plugin: https://github.com/SilentVoid13/Templater
- Documentation: https://silentvoid13.github.io/Templater/
Plugin: Dataview
The next plugin I want to highlight is called Dataview. This is a monster and you would probably need some time to learn it, but hear me out.
I have already a more detailed post on Dataview so I keep this rather short. In essence, it is a scripting engine in order to automatically create lists, tables, or other data overviews of your vault. (If you are a programmer: Think of this as SQL queries on your vault. If you aren't a programmer, don't be intimidated, there are lots of interesting snippets you can copy from the web and play with ;-).)
For example, let's say you have a couple of literature notes on all new AI papers which you have been reading. Wouldn't it be nice to create a table of all of them? Ideally automatically, so you don't need to update it every time you add a new note? This is where Dataview comes to play.
You create a snippet like this somewhere in your note:
```dataview
TABLE venue, year FROM #literature SORT year DESC
```
And it will automatically create a dynamic table like this, aggregating all notes with the tag #literature
in your vault:
Neat.
You might ask: Where do "venue" and "year" actually come from? Well, those are YAML parameters defined in the front-matter of the file. (This is the heading part of the file where you can fine aliases or tags).
Again, if this feels like magic (and it kind of this), don't be intimidated. There's many cool resources on Obsidian and Dataview and many people play around with these things. Therefore, you can already find existing snippets and examples when you search the web. Make sure to check out my post where I discuss many more examples similar to the one above.
Links:
- Plugin: https://github.com/blacksmithgu/obsidian-dataview
- Documentation: https://blacksmithgu.github.io/obsidian-dataview/
Plugin: Breadcrumbs
I've already wrote about the plugin Breadcrumbs in another article, but I think this plugin deserves another mention in this context.
A picture is worth more than thousand words, so let's start with one:
What Breadcrumbs helps you with is create context for your notes. For example, let's say I have a note "HOME" where I link to a note called "Research MOC", where I link to another file called "Research Topics MOC", where I link to another file "Vision and Language".
When just being in the file "Vision and Language", it might be hard to understand the context of this file. What is it related to?
The plugin "Breadcrumbs" uses either tags, incoming links, YAML frontmatter parameters, or a number of other ways to automatically determine some "structure" in your notes. Then, it will display a "breadcrumb trail" (that's where the name is coming from) to visualize the context of this file.
There's a lot of different ways to set it up, but ultimatively I found it meaningful for creating much structure in my vault, especially if you go for some kind of "Wiki-like" approach with index pages or summary pages.
Link: https://github.com/SkepticMystic/breadcrumbs
Other plugins which could help with naming consistency
Above I have introduced my favorite plugins to keep some structure across your files.
There's some more which I found interesting. Keep in mind that it becomes more and more complex and at some point you spend more time setting up plugins or cleaning up your notes and note structure rather than do actual work.
Plugin: Metadata Menu
Next, I want to discuss the Metadata Menu plugin. This plugin can be thought of as an extension to dataview with templating sprinkled in. You can create "fileClasses" which are essentially Dataview Parameter presets. Let's take the example above, where I have "year" and "venue" as parameters:
Using this plugin, I can setup rules which say:
- "year" is always a number
- "venue" is always one of {ECCV, CVPR, ICCV}
After setting this up, the plugin can create overviews such as dropdown menus or selection boxes for your files, essentially forcing you to use these options.
This "forcing" makes for a way to enforce consistency. That is, you can make sure that you use the same set of options everywhere across all files. No typos, no slightly different wordings each time. One consistent set of values for each field.
This can also help if you want to combine it with automation. I.e., if you want to aggregate all notes with a certain value in a certain field, you need to make sure that there's naming consistency, or some notes might slip through.
The setup can become cumbersome and be aware of not playing with it too much, or your notes might become over-engineered ;-), but overall it seemed an interesting option so I wanted to mention it in context of this article.
Links:
- Plugin: https://github.com/mdelobelle/metadatamenu
- Documentation and Demo Videos: https://mdelobelle.github.io/metadatamenu/
Plugin: Various Complements
This plugin is essentially "auto completion", but for Obsidian. It will suggest many things while typing. I found it a bit obnoxiously verbose at some point, but overall it could help you to maintain some consistency across your writing, your note names, and so on.
Here's an example from the official website, which should help you understand its gist:
Link: https://tadashi-aikawa.github.io/docs-obsidian-various-complements-plugin/
Last but not least, a cautionary note
Don't overdo maintenance.
Lastly, all these plugins are setup in a way to get the maintenance out of my way. However, things will change over time. I might add new fields to templates, or change the way I want to structure certain things.
For this, it is crucial to not try to keep your whole Obsidian vault tidy and try to keep up all your notes with all recent changes. If you are already at dozens, hundreds, or maybe even thousand notes, there's no point in trying to maintain everything perfectly.
Basically, there's two ways out:
- Live with older things being slightly out of date. If you add a new field to a template or Dataview structure, maybe it is fine if older files just don't have it.
- In an extreme case where you want to do redo lots of structure: Start clean with a second vault. However, and I can't stress this enough, do not plan to migrate all your existing notes to your new system. You'll never be finished and always try to catch up with your older notes rather than doing new work. (Speaking from experience here.)
Disclosure: This post may contain affiliate links. This means I may make a small commission if you make a purchase.
About me
Dr. Marc A. Kastner
I am an assistant professor working on computer vision and multimodal understanding. I am interested in task- and knowledge management. In my free time, I blog on productivity workflows and apps.
For my professional portfolio, please visit: marc-kastner.com
See Also
My favorite resources on Obsidian
Obsidian and especially the ecosystem around Obsidian plugins and themes is blooming. Therefore, I have been searching around Obsidian and …
Read More...Obsidian Breadcrumbs
Recently, one of my most valuable Obsidian plugins seems to be Breadcrumbs. The idea is simple: You define a hierarchical relationship of …
Read More...How I connect DevonThink and Obsidian
For knowledgement I am using a combination of Obsidian and DevonThink. Why two apps? Well, I like to keep text notes (mainly "my own …
Read More...