Org-mode is my exocortex, second brain, second mind, mind palace, pensive, personal knowledge management system, and apocrypha. It’s very flexible and the features I use as well as how I organize my files continues to change so I collected things here to document how I do things. I try to snapshot this periodically, so you might be interested in checking out one of those:

[How I org in 2023](https://cmdln.org/2023/03/25/how-i-org-in-2023/)
[How I org in 2024](https://cmdln.org/2024/01/05/how-i-org-in-2024/)

No, my Emacs org-mode configuration is not published. However, if you have some question, just reach out.

Goal

Ideally, I want total recall (what was I doing, who did I talk to, what do I need to do, what have I done), to be able to access my information in 5, 10, 20 or 100 years from now without strife. I want to work and interact with my system efficiently and I want to expand my knowledge and be able to share with others.

On the best of days I never leave Emacs and I have a full record of everything I did and how much time I spent working on it.

Statistics

As of Thursday, December 5, 2024 I had 71MB of .org files in ~/org. 6101 files and 1453607 lines of text, the largest single file was 1.4MB and the longest lined file had 26370 lines.

6072 of these files were inside Org-roam, the majority of them (4525 ) were “dailies”. There were 18749 nodes in total, so about 3 nodes per file. This seemed accurate since many headlines (I had 70908 headlines) didn’t have IDs. IDs got created automatically when I stored a link (which often happened during capture) or attached a file.

System ATTACH

I don’t follow any formal system. I use my own S.H.I.T. (Stuff here’n there) methodology.

Figure 1: Martti Bergström (@masi@fosstodon.org) uses the Nick Anderson SHIT meethod. https://fosstodon.org/@masi/110266696809445948

Figure 1: Martti Bergström (@masi@fosstodon.org) uses the Nick Anderson SHIT meethod. https://fosstodon.org/@masi/110266696809445948

The core of my system are daily notes. I have many different daily notes, but my work log is the one that I spend the most time in. It’s where I note down each thing I work on and track how much time I spent working on each thing.

Capture

Capturing is central to my work flow. It’s the first thing I do when I sit down and get started working. It’s important that I can quickly store new information in my system at any time and I do this most frequently with org-roam-dailies-capture-today.

Org-roam’s capture templates provide a key feature that I found lacking from org-capture, the ability to seed a new file from a template. Prior to using org-roam I had no good way to populate a new file with a bunch of scaffolding. Once I started using org-roam back in 2020 the volume of capture templates I use skyrocketed from less than 10 to 72 now.

was an important concept in my workflow. Fundamentally it’s grabbing new content and putting it somewhere. It facilitated consistency and automated some tedium of organization. I needed capturing to be fast and not interrupt my flow.

Org-roam was my primary capture interface and I really liked the daily capabilities. Each day I captured notes about everything I was working on into my work log while clocking time. This gave me a nice place to think and process what I was working on as well as a place to get my bearings and see what I had been working on when I got side-tracked. Having a new file each day gave me a fresh start and it helped me to avoid performance issues I had previously experienced with large (multi-megabyte) files.

I had 24 org-capture-templates, 19 org-roam-capture-templates and 95 org-roam-dailies-capture-templates.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
(set (make-local-variable 'org-confirm-babel-evaluate) nil)
(setq org-confirm-babel-evaluate nil)
     ;;; Stefan Monnier <foo at acm.org>. It is the opposite of fill-paragraph
   (defun unfill-paragraph (&optional region)
     "Takes a multi-line paragraph and makes it into a single line of text."
     (interactive (progn (barf-if-buffer-read-only) '(t)))
     (let ((fill-column (point-max))
           ;; This would override `fill-column' if it's an integer.
           (emacs-lisp-docstring-fill-column t))
       (fill-paragraph nil region)))

   ;; Handy key definition
   ;;(define-key global-map "\M-Q" 'unfill-paragraph)