I grow under the sun. When I am not writing code, I am either drinking wine or drinking tea (with these little cups). Cheese is my bread and tracking everything in Emacs is my cheese.
P.S. d12frosted means dice with 12 sides from the Chessex™ frosted series. I used to play. Just a little bit.
In my opinion, org-roam is among the best things that happened to Emacs during
the last 5 years. Forget Zettelkasten method, org-roam
is a solution for
non-hierarchical note-taking regardless of methodology you are worshiping. The
most important and appealing feature of org-roam
is its database! Just
imagine, in less than a second I can filter a collection of 10000+ notes by
tags, title, aliases, links and other things. This is what made my wine tracking
solution usable with ever growing collection of tasting notes, and this is what
I used to build various tools for presenting non-trivial views around my notes
(example of a public one).
And now org-roam
has released V2
, the first major redesign affecting both
users and authors of libraries extending org-roam
. And while there are
breaking changes requiring some effort from users, V2
is so amazing and is so
much more stable than V1
, that my advice is to drop the chains of old
org-roam
and embrace all the goodness V2
brings.
Unfortunately, major redesign means lots of breaking changes and in this post I
am going to describe my migration experience, code I used to migrate my notes
and share some thoughts after migrating a code base comparable to org-roam
itself. Of course, it touches my precious vulpea library (the fox image is its
icon), so expect some advertisement™.
NB. Migration process means adapting to and overcoming breaking changes. Since
V2
is full of them, this article might look pessimistic or depressing. But
don’t get fooled, I think that V2
is amazing. I am very happy to use it on a
daily basis for several months and I never looked back. Jethro is doing amazing
work! As well as all contributors (with extra kudos to Noboru Ota, because
Noboru rocks).
Change Log:
[2021-07-24 Sat]
Update post to reflect release of org-roam v2.Capturing is one of the most important activities in the task management process. Previously we talked about storing and querying tasks and now it’s time to cover capturing of tasks, meeting notes and inbox.
Please note that the goal is not to discuss GTD or any other methodology, but rather to discover how org-roam combined with everything we talked previously may help you to improve your capturing process regardless of methodology you are using.
In one of the previous articles (Vol 3 to be precise) we talked about automatic
setup of filetags
, so each of the task in note related to a person is
automatically tagged thanks to tag inheritance. Then, in Vol 4 we talked about
automatic tagging of tasks whenever a person is mentioned either in the title or
the body of some task. This all makes org-agenda
matching capabilities really
useful for when we want to see the list of all tasks related to specific person.
In this article, we are going to write a small utility function that asks user
to select a person and then presents and org-agenda
buffer with tasks related
to selected person.
Believe me, intro is longer than the content!
Change Log:
[2021-03-02 Tue]
: Update naming convention to match personal configurations.[2021-05-10 Mon]
: Update post to reflect changes in org-roam v2. Previous
version of this article is available on GitHub.In previous articles (Vol 1 and Vol 2) we talked about moving tasks from regular
org-mode
files to org-roam
notes. This relied upon adding all org-roam
files to org-agenda-files
, which doesn’t scale well, as when you build an
agenda buffer, it needs to traverse each file. Once you have more than 1k notes,
things become sluggish.
In my experience, once I reached 1200 note files, org-agenda
constantly took
more than 50 seconds to build, rendering this tool completely useless. But then
I realised that only 3% of those files actually contain any TODO
entries, so
there is no need to traverse whole org-roam-directory
!
In this article we are going to optimise org-agenda
back to less than 1 second
by dynamically building org-agenda-files
list to include only files with
TODO
entries. All thanks to the power of org-roam
and some hooks I am going
to describe.
Change Log:
[2021-03-02 Tue]
: Update naming convention to match personal configurations.[2021-03-08 Mon]
: Gustav shared that org-element-map
has an optional
parameter first-match
that works like seq-find
, meaning that
vulpea-project-p
can be optimised.[2021-05-10 Mon]
: Update post to reflect changes in org-roam v2. Previous
version of this article is available on GitHub.[2021-08-19 Thu]
: Gustav proposed to modify buffer only when tags have
changed. Code was updated accordingly (both in the post and on GitHub Gist).[2021-09-07 Tue]
: rngesus-wept proposed an interesting solution on how to
make sure that any extra stuff in org-agenda-files
are not wiped out.In the previous article we covered automatic tagging of notes related to a specific person, and today we are going to cover automatic tagging of an org-mode heading upon insertion of link related to a person. To put it simple, when I mention someone in the task, I would love this task to be automatically tagged with that persons name. As they say, it’s better to see once, than imagine multiple times, so here is a screencast.
Change Log:
[2021-01-24 Sun]
: Since some of the functionality mentioned in the original
article was merged to org-roam
, all code is updated to reflect the current
state of affairs.[2021-03-02 Tue]
: Update naming convention to match personal configurations.[2021-05-10 Mon]
: Update post to reflect changes in org-roam v2. Previous
version of this article is available on GitHub.[2021-11-19 Fri]
: Update post to reflect inclusion of vulpea-insert
function to vulpea
library. You can find previous version of this article in
git history.In the previous articles (vol1 and vol2) we walked the path to org-roam and
solved the issue with garbage in the category column of agenda. Today we are
going to explore meta projects dedicated to specific person, tag inheritance and
moving such projects to separate org-roam
files. As result, we will have code
for automatic tagging based on the title.
Aside from regular meta projects (like personal blog) I also create meta projects for people and locations. This is helpful, because some of the tasks are really related to someone specifically. For example, when I need to return a borrowed book, I just create a task for this.
* Frodo Baggins :@FrodoBaggins:
** TODO Return 'The Lord of the Rings' book
** TODO Farewell party :PROJECT:
It feels like Mr. Frodo is about to live Shire. So we are going to setup a
farewell party for him.
*** TODO Talk to Samwise Gamgee :@SamwiseGamgee:
*** TODO Talk to Meriadoc Brandybuck :@MeriadocBrandybuck:
*** TODO Talk to Peregrin Took :@PeregrinTook:
*** TODO Tie a pair of wool socks
I am not sure where he is going, so a pair of warm wool socks should be good.
At least they can be used to protect bottles of wine during journey. That is in case Frodo doesn't wear socks. But how could it be? Everyone does!
Change Log:
[2021-01-24 Sun]
: Since some of the functionality mentioned in the original
article was merged to org-roam
, all code is updated to reflect the current
state of affairs.[2021-03-02 Tue]
: Update naming convention to match personal configurations.[2021-05-10 Mon]
: Update post to reflect changes in org-roam v2. Previous
version of this article is available on GitHub.In the previous article we set a ground for moving tasks to org-roam, and
encountered an issue with visual garbage in the agenda buffer. Namely,
org-roam
file id as part of the category. In this article, we are going to
explore the means to overcome this issue.
Change Log:
[2021-03-02 Tue]
: Update category extraction function to use TITLE
of the
note and enforce length limit. Kudos to Tim Ruffing for the idea.[2021-03-02 Tue]
: Update naming convention to match personal configurations.[2021-05-10 Mon]
: Update post to reflect changes in org-roam v2. Previous
version of this article is available on GitHub.org-mode is a simple outliner for note taking and list management. It doesn’t impose any complex features on users. This is something users excel at by themselves. My suggestion is to continue this tradition and discover task management capabilities in org-roam, an org-mode extension for non-hierarchical notes management.
Change Log:
[2021-05-10 Mon]
: Update post to reflect changes in org-roam v2. Previous
version of this article is available on GitHub.Org-roam is a note-taking tool built on top of Emacs and Org. Essentially, it’s a replica of Roam Research. These tools provide an easy way to create and manage non-hierarchical notes. If you wish to learn more, just take a look at the Org-roam manual or watch Making Connections in your Notes video by Matt Williams. Believe me, Org-roam and Roam Research are game-changers. Or even better, don’t believe me and validate my claim by yourself.
Since I am already addicted, it was only natural to prefer org-roam
over some
web application. Apart from being developed on top of mature Org ecosystem,
Emacs brings many merits and extensibility is one of them. Once org-roam
introduced tags system in v1.1.1 I felt the lack of functions to manage them.
Adding and removing them by hand is not nice. So in this article I am sharing a
snippet that I’ve forged to ease the unbearable lightness of being.
Change Log:
[2020-10-12 Mon]
: Functionality described in this post (and similar
functionality to manage aliases) is merged to the upstream. Now simply use one
of the following functions:
org-roam-tag-add
org-roam-tag-delete
org-roam-alias-add
org-roam-alias-delete
[2021-07-31 Sat]
: With release of org-roam v2 you should use the following
functions:
org-roam-tag-add
org-roam-tag-remove
org-roam-alias-add
org-roam-alias-remove