I was an Emacs user for several years before switching to Neovim, and then recently switched to Kakoune. I've been getting more serious about using the note-taking app Obsidian as an editor-agnostic replacement for org-mode, and so far it has filled that role nicely.
I plan on writing a series of blog posts about how I'm recreating my org-mode usage in Obsidian. Some of the things I used org-mode for are not really possible in Obsidian right now, so writing some plugins might be part of this work.
Recreating Org-mode's Agenda View
One of my favorite features in org-mode was the agenda view. There are two community-made plugins for Obsidian that allow you to create an agenda view: Tasks and Dataview.
Let's say we have this list of tasks somewhere in our Obsidian vault:
- [ ] Dentist appointment [due:: 2023-05-22]
- [ ] Sweep the kitchen floor [due:: 2023-05-23]
- [ ] Do laundry [due:: 2023-05-23]
- [ ] Make post about Obsidian [due:: 2023-05-23]
Ordinarily, the [due:: 2023-05-23]
syntax is meaningless to Obsidian. However, both Tasks and Dataview know how to parse that format and use it for displaying lists of tasks elsewhere in your notes.
Tasks Plugin
Tasks is the more simple option here. Dataview allows you to add custom values to your notes that you can query for later; if that sounds unnecessary to you, go with Tasks.
Once your tasks are labeled with due dates, in a fence (that's what those three backtick characters are called) labeled "tasks", you can tell it to show you your upcoming tasks, sorted by day of the week.
We can display an agenda view like org-mode by putting this in a note:
```tasks
not done
due before next week
group by due
```
When you preview that note, Obsidian will replace the ```tasks
block with this:
2023-05-22 Monday
- Dentist appointment 📅 2023-05-22
2023-05-23 Tuesday
- Sweep the kitchen floor 📅 2023-05-23
- Do laundry 📅 2023-05-23
- Make post about Obsidian 📅 2023-05-23
Viola -- there is your agenda view. I like to have a "home note" that serves as a kind of dashboard, and I have that agenda view code block in it. But you can use more filters to get an agenda view for a specific project -- see the plugin's documentation to get an idea of what you can do.
Dataview Plugin
Dataview comes highly recommended by Obsidian power users. If you simply want an agenda view for your tasks, it's overkill. But if you're trying to replace Emacs, it's exactly-the-right-amount-of-kill. To stay focused, I'll only show how to create a basic agenda view here.
The same syntax for defining due dates works with Dataview, so our task list looks the same as before. The agenda view query is:
```dataview
TASK
WHERE due
AND due - date(today) < dur(7days)
GROUP BY due
```
The syntax is not as English-like as with the Tasks plugin, but in return you can use Dataview for more types of queries beyond just task items.
I Just Wish It Worked Outside of Obsidian
The biggest thing I miss about using Emacs is that just about everything you do can be done inside of Emacs. Sharing the same UI, the same shortcuts, the same everything for both coding and taking notes is fantastic. While I can edit my Obsidian notes in my new text editor of choice (Kakoune), there are still plenty of features that only work within Obsidian itself. These agenda view examples are such features.
In a sense, this isn't much different from org-mode, which requires you to use Emacs. Both Emacs and Obsidian offer an agenda view, and to see them, you must be using those respective applications. But the fact that Emacs was also the same application I used to edit code made it much more convenient.
Unfortunately, both of the plugins I mentioned here rely on features that are specific to Obsidian; they can't be run outside of it. Some kind of command-line tool that can query markdown files like Dataview would be a real holy grail for editor-agnostic, text-based task management.