My Org Brain

Wouldn’t you like to have your own minimal concept-mapping system in emacs? I would!

The Premise

I am a huge fan of Org Mode. My ramblings about it in my Spacemacs posts are testimonial to this fact. Do have a read through them if you haven’t already.

Org Mode centralizes notes as its “first-class citizen” (so to speak). Hence, all functionality in org mode is built on top of notes. For example, org mode headlines can be made into TODOs and have a clock attached to them, or have a deadline attached to them or have tags associated to them and so on. This is all good when you want to brain-storm on a project idea and list out resources and tasks pertinent to that project. To this end org mode works perfectly and seamlessly. But after a certain point integrating all your ideas together into a cohesive unit that you can reference easily and navigate around is not possible in a linear outline fashion that org mode provides you with. You need a way to visualize a map of all objects of importance to you clearly.

The Principle

The basic idea is to be able to create relations between the items in your head in a hierarchial manner. Hence, there is a parent-child relation made between the objects under consideration. In an outline (like the one org mode provides us with) each object can have only one parent, that is, every sub-heading can comme under only a single heading. It turns out you can fix this issue.

In org mode you can assign IDs and properties to headings. Thus you can link a sub-heading to two or more headings using this ID (which can be unique to all the orgfiles you have). You can create this id using the following syntax

* Heading
:ID: <your-custom-id>

You can generate this custom id using M-x org-id-get-create.

Now you can store the link using C-c l and link it around your orgfiles.

But in this system you will still be viewing your ideas in a linear structure like an outline even though you have created a non-linear relation. This is where org-brain comes in.

The Payoff

The package org-brain written by Erik Sj&oumlstrand or Kungsgeten is what comes in handy here. If you are using emacs just install it from elpa with M-x package-install org-brain RET and see the official repository for additional details regarding config and init (with use-package).

If you are on spacemacs like me, you will have to create a custom layer for the package org-brain.

Writing a layer for spacemacs is well documented, so I won’t provide any prelude to this section.

So put the following in your ~/.emacs.d/private/org-brain/packages.el

(defconst org-brain-packages
  '(org-brain ascii-art-to-unicode)
(defun org-brain/init-org-brain ()
  (use-package org-brain
    :ensure t
    (setq org-brain-path "/path/to/brain/folder")
    (setq org-id-track-globally t)
    (setq org-id-locations-file "~/.emacs.d/.org-id-locations")

Add org-brain to dotspacemacs-configuration-layers and compile your dotfiles and you are ready to go. Now you can get started with org-brain and setup your own brain. Again look through the official repository for help.


If you want to use the default keybindings that the official package proides, make sure your editing style is emacs. Else, add the following to the :init section

(with-eval-after-load 'evil
  (evil-set-initial-state 'org-brain-visualize-mode 'emacs))

If you want see and use my setup for org-brain and run through my tutorial head over to my repository org-brain-layer for more help. Until next time

Moriturus te Saluto!