Reorganizando mis notas con Emacs y Org Roam

on dlmayhem's blog

El método Zettelkasten implementado en elisp

Desde hace un tiempo venía cuestionándome el método que he utilizado en los últimos años para tomar notas, apuntes y registrar ideas. Básicamente, consistía en escribir archivos de texto plano utilizando GNU Emacs y el glorioso Org Mode, almacenándolos en distintos directorios, clasificándolos según tema, fecha, autor y un sinfín de criterios nada consistentes entre sí. El resultado es que los archivos estaban dispersos por todos lados, muchos ya olvidados en algún rincón, otros repitiendo ideas anteriores y, lo peor de todo, es que estas notas no parecían tener conexión unas con otras.

Fue cuando descubrí el método Zettelkasten. No soy un experto en este método ya que sólo leí un par de introducciones breves y revisé algún video en cierta plataforma privativa, pero me ha bastado para comenzar a reorganizar todo lo que antes era caótico en un sistema coherente de conocimiento. No describiré el método aquí, pero la referencia obligada parece ser How to Take Smart Notes, de Sönke Ahrens.

Inmediatamente me pregunté cómo implementar algo así en Emacs, pero la respuesta llegó antes de terminar la pregunta: seguro que ya existe. Una simple búsqueda me llevó a Org Roam.

# ¿Qué es Org Roam?

Org Roam es una extensión del modo Org que nos permite capturar notas al estilo Zettelkasten con mucha facilidad. En este ejemplo veremos una configuración básica que utiliza use-package (mi configuración completa de GNU Emacs se puede revisar en https://notabug.org/dlmayhem/terror-emacs):

(use-package org-roam
  :ensure t
  :init
  (setq org-roam-v2-ack t)
  :custom
  (org-roam-directory (file-truename "~/Proyectos/org/roam"))
  :bind (("C-c n l" . org-roam-buffer-toggle)
	 ("C-c n f" . org-roam-node-find)
	 ("C-c n g" . org-roam-graph)
	 ("C-c n i" . org-roam-node-insert)
	 ("C-c n c" . org-roam-capture)
	 ("C-c n j" . org-roam-dailies-capture-today))
  :config
  (setq org-roam-node-display-template
	(concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
  (org-roam-setup)
  (require 'org-roam-protocol))

Esta es una configuración casi por defecto, tomada de la documentación oficial de Org Roam. Es importante señalar que en la línea (org-roam-directory (file-truename "~/Proyectos/org/roam")) debemos colocar la ruta del directorio en el que almacenaremos nuestras notas. Sí, todas las notas que capturemos con Org Roam se guardan en el mismo directorio, lo que nos facilita enormemente llevarlas a todas partes con un simple git clone ...

El fragmento siguiente nos permite utilizar org-roam-ui, una extensión para visualizar nuestras notas y sus conexiones en un mapa, muy parecido a lo que se puede hacer con el software privativo Obsidian.

(use-package org-roam-ui
  :defer t
  :config
  (setq org-roam-ui-sync-theme t))

# ¿Cómo se usa?

Los atajos que utilizaremos son los siguientes:

Esta última característica resulta de mucha ayuda, ya que en ocasiones ver una representación gráfica de los enlaces entre notas nos permite encontrar nuevos nexos entre las mismas. Sin embargo, personalmente prefiero el gráfico que genera la extensión org-roam-ui (segundo fragmento de código de la sección anterior):

Recomiendo el excelente video introductorio (en inglés) que hizo System Crafters sobre el tema, donde por supuesto se explica todo mucho mejor que acá.

# Conclusión

Como siempre, todo es mejor en texto plano. Y, como siempre, Emacs ya cuenta con la solución para nuestros problemas. De momento me encuentro traspasando todas mis notas anteriores al formato Zettelkasten y me ha resultado tan divertido como útil. Actualmente tomo mis notas más eficientemente y sin preocuparme de trivialidades como la clasificación, los nombres, etc, permitiéndome volver rápidamente a los textos mismos. Todo esto se agradece sobremanera cuando la atención no es una de tus virtudes.

Tal vez más adelante muestre lo que he comentado acá con ejemplos prácticos.

¡Salud!