I’m currently using Org-roam to facilitate most new note creation.
Org-roam has a concept of “daily” files. I consider these are collections of nodes that the target location (especially the filename, at least in my case) based on the date.
I use dailies (org-roam-capture-today
) for:
- Recurring meeting notes
- Daily stand-ups
- Customer meetings
- Logging/Journaling
- Personal journal
- Work log
I primarily use org-roam-capture
for other collections of information. For example, if I were keeping notes about reading a specific book I would likely setup a directory and one or more org-roam-capture-template
entries.
mkdir -p ~/org/roam/Books/Learning-CFEngine/
If I didn’t feel like doing a lot of up-front capture template setup then I would probably make one capture template for the book that let me capture to a file per chapter like this:
(setq org-roam-capture-templates
'(
;; This is just a default category which is the org-roam default if you
;; don't setup multiple templates.
("d" "default"
plain "%?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
:unnarrowed t)
;; Books
("b" "Books")
;; Books Learning CFEngine
("bc" "Learning CFEngine" )
;; This works, but annoyingly it prompts for Chapter Number twice on
;; new file and once for each capture.
;; ${title} is the first thing that Org-roam is prompting you for (Node is the prompt i see), so
;; when the capture triggers this is the bit that I want to get typed
;; out as close to me thinking about it as possible. E.g. I really
;; like this chapter, the examples are great.
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/${Chapter Number}.org"
"#+title: ${Chapter Number} - ${Chapter Title}" )
;; Some of my capture template attempts didn't work out well ...
;; This doesn't work. %\1 gets expanded as %^A plain "* %T
;; ${title}\n%?" :if-new ( file+head "Books/Learning-CFEngine/${Chapter
;; Number}.org" "#+title: %\1 - ${Chapter Title}" )
;; This expands to nothing for the filename and I end up with .org
;; file' plain "* %T ${title}\n%?" :if-new ( file+head
;; "Books/Learning-CFEngine/%\1.org" "#+title: ${Chapter Number} -
;; ${Chapter Title}" )
;; This errors out if: Wrong type argument: stringp, nil plain "* %T
;; ${title}\n%?" :if-new ( file+head "Books/Learning-CFEngine/%\\1.org"
;; "#+title: ${Chapter Number} - ${Chapter Title}" )
:immediate-finish t
:jump-to-captured t)
)
)
If I was willing to spend a bit more time setting up and maintaining captures then I might instead have something like this:
(setq org-roam-capture-templates
'(
;; This is just a default category which is the org-roam default if you
;; don't setup multiple templates.
( "d" "default"
plain "%?"
:if-new (file+head
"%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)
;; Books
( "b" "Books" )
( "bc" "Learning CFEngine" )
( "bcp" "Preface"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/Preface.org"
"#+title: Learning CFEngine - Preface" )
:immediate-finish t
:jump-to-captured nil)
( "bc1" "Chapter 01 - Introduction"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/01.org"
"#+title: Learning CFEngine - 01 - Introduction" )
:immediate-finish t
:jump-to-captured nil )
( "bc2" "Chapter 02 - Getting Started with CFEngine"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/02-Getting_Started_with_CFEngine.org"
"#+title: Learning CFEngine - 02 - Getting Started with CFEngine" )
:immediate-finish t
:jump-to-captured nil )
( "bc3" "Chapter 03 - CFEngine Basics"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/03-CFEngine_Basics.org"
"#+title: Learning CFEngine 03 - CFEngine Basics" )
:immediate-finish t
:jump-to-captured nil )
)
)
)
When I initiate org-roam-capture
I am prompted for Node
. I type my most immediate thought, for example “One of my favorite quotes” and hit enter.
I am shown a menu where I can select a template.
Select a capture template ========================= [d] default [b]... Books... ----------------------------------------------------------------------------- [C] Customize org-capture-templates [q] Abort
I select b
for Books and I am taken to the Books sub-menu.
Select a capture template ========================= b [c] Learning CFEngine... ----------------------------------------------------------------------------- [C] Customize org-capture-templates [q] Abort
I press c
for Learning CFEngine and I am presented with a prompt to select the chapter.
Select a capture template ========================= b [c] Learning CFEngine... ----------------------------------------------------------------------------- [C] Customize org-capture-templates [q] Abort
And then when I initiate a capture.
Select a capture template ========================= bc [p] Preface bc [1] Chapter 01 - Introduction bc [2] Chapter 02 - Getting Started with CFEngine bc [3] Chapter 03 - CFEngine Basics ----------------------------------------------------------------------------- [C] Customize org-capture-templates [q] Abort
I select 1
for Chapter 1 and am prompted with the capture template to record my thoughts.
* 2022-11-12 Sat 14:45 One of my favorite quotes <Insertion point here>
After I fill in whatever I want, I save it, the file looks like this:
cat ~/org/roam/Books/Learning-CFEngine/01.org
:PROPERTIES: :ID: bcf34856-ddba-45a3-8026-e73d0347385b :END: #+title: Learning CFEngine - 01 - Introduction * <2022-11-12 Sat 14:45> One of my favorite quotes :PROPERTIES: :CREATED: [2022-11-12 Sat 14:45] :ID: 3071be3c-aa5a-4c7f-ac6a-06a4dc6b334e :END: #+caption: Mark Burgess, author of CFEngine #+begin_quote Every time someone logs onto a system by hand, they jeopardize everyone’s understanding of the system. #+end_quote
You mentioned reading the book for a class. So I might have one or more capture templates for the class. Probably I’d have at least one daily capture for a class meeting. I would take notes from the class in a file specific for that day. The template includes a link to the single file for the class (I call it training here).
(setq org-roam-dailies-capture-templates
`(
( "m" "Meetings" )
( "mt" "Training" )
( "mtc" "CFEngine - ACME Corp. - 2022-11-15"
entry
"* %?"
:if-new (file+head ,(expand-file-name "meetings/training/CFEngine/ACME_Corp_2022-11-15/%<%Y-%m-%d>.org" org-roam-dailies-directory)
":properties:\n:Training: [[id:165577da-3547-4671-8789-9b3e06dbfe7f][CFEngine Training - ACME Corp - 2022-11-15]]\n:end:#+title: CFEngine - ACME Corp. %<%A, %B %d %Y>\n")
:clock-in nil
:clock-resume nil
)
))
Then I have a couple more capture templates for the training. Once for assignments which makes TODO entries and one for Edit which just takes me to the file for editing anything.
(setq org-roam-capture-templates
'(
;; This is just a default category which is the org-roam default if you
;; don't setup multiple templates.
( "d" "default"
plain "%?"
:if-new (file+head
"%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)
( "t" "training" )
( "tc" "CFEngine" )
( "tca" "ACME Corp - 2022-11-15" )
( "tcaa" "Assignment"
entry
"* TODO ${title}\nDEADLINE: %^{DEADLINE}t SCHEDULED: %t\n:properties:\n:prior-context: %a\n:end:"
:if-new (file+head
"training/cfengine/2022-11-15_ACME_Corp.org"
"#+title: CFEngine Training - ACME Corp - 2022-11-15")
)
("tcae" "Edit"
plain
"%?"
:if-new (file+head
"training/cfengine/2022-11-15_ACME_Corp.org"
"#+title: CFEngine Training - ACME Corp - 2022-11-15")
:immediate-finish t
:junp-to-captured t
:unnarrowed t
)
;; Books
( "b" "Books" )
( "bc" "Learning CFEngine" )
( "bcr" "Review"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/Review.org"
":PROPERTIES:\n:ID: book-learning-cfengine-3-review\n:END:\n#+title: Learning CFEngine - Review\n" )
:immediate-finish t
:jump-to-captured nil)
( "bcp" "Preface"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/Preface.org"
":PROPERTIES:\n:REVIEW: [[id:book-learning-cfengine-3-review][Review]]\n:END:\n#+title: Learning CFEngine - Preface\n" )
:immediate-finish t
:jump-to-captured nil)
( "bc1" "Chapter 01 - Introduction"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/01.org"
":PROPERTIES:\n:REVIEW: [[id:book-learning-cfengine-3-review][Review]]\n:END:\n#+title: Learning CFEngine - 01 - Introduction\n" )
:immediate-finish t
:jump-to-captured nil )
( "bc2" "Chapter 02 - Getting Started with CFEngine"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/02-Getting_Started_with_CFEngine.org"
":PROPERTIES:\n:REVIEW: [[id:book-learning-cfengine-3-review][Review]]\n:END:\n#+title: Learning CFEngine - 02 - Getting Started with CFEngine\n" )
:immediate-finish t
:jump-to-captured nil )
( "bc3" "Chapter 03 - CFEngine Basics"
plain "* %T ${title}\n%?"
:if-new ( file+head
"Books/Learning-CFEngine/03-CFEngine_Basics.org"
":PROPERTIES:\n:REVIEW: [[id:book-learning-cfengine-3-review][Review]]\n:END:\n#+title: Learning CFEngine 03 - CFEngine Basics\n" )
:immediate-finish t
:jump-to-captured nil )
)
)
)
for each in $(find ~/org/roam/training/cfengine/2022-11-15_ACME_Corp.org -type f); do echo "$each"; cat $each; done
for each in $(find ~/org/roam/Books/Learning-CFEngine/ -type f); do echo "$each"; cat $each; done
for each in $(find ~/org/roam/daily/meetings/training/CFEngine/ACME_Corp_2022-11-15/ -type f); do echo "$each"; cat $each; done
/home/nickanderson/org/roam/training/cfengine/2022-11-15_ACME_Corp.org :PROPERTIES: :ID: 165577da-3547-4671-8789-9b3e06dbfe7f :END: #+title: CFEngine Training - ACME Corp - 2022-11-15 * TODO Read chapter 1 of Learning CFEngine :ATTACH: DEADLINE: <2022-11-15 Tue> SCHEDULED: <2022-11-13 Sun> :PROPERTIES: :ID: fa4d4582-d2b6-49b0-8bbe-23c4d1c6ad7c :END: :properties: :prior-context: [[id:944564f7-27c0-45f7-9fc4-73278a236d80][We are supposed to read the first chapter of Learning CFEngine 3 before training]] :end: [[id:bcf34856-ddba-45a3-8026-e73d0347385b][Learning CFEngine - 01 - Introduction]] /home/nickanderson/org/roam/Books/Learning-CFEngine/Review.org :PROPERTIES: :ID: book-learning-cfengine-3-review :END: #+title: Learning CFEngine - Review * <2022-11-13 Sun 13:17> TLDR loved it /home/nickanderson/org/roam/Books/Learning-CFEngine/01.org :PROPERTIES: :ID: bcf34856-ddba-45a3-8026-e73d0347385b :review: [[id:book-learning-cfengine-3-review][Review]] :END: #+title: Learning CFEngine - 01 - Introduction * <2022-11-12 Sat 14:45> One of my favorite quotes :PROPERTIES: :CREATED: [2022-11-12 Sat 14:45] :ID: 3071be3c-aa5a-4c7f-ac6a-06a4dc6b334e :END: #+caption: Mark Burgess, author of CFEngine #+begin_quote Every time someone logs onto a system by hand, they jeopardize everyone’s understanding of the system. #+end_quote /home/nickanderson/org/roam/daily/meetings/training/CFEngine/ACME_Corp_2022-11-15/2022-11-13.org :PROPERTIES: :ID: b7755247-9649-4058-8997-12ccd24fe04a :Training: [[id:165577da-3547-4671-8789-9b3e06dbfe7f][CFEngine Training - ACME Corp - 2022-11-15]] :END: #+title: CFEngine - ACME Corp. Sunday, November 13 2022 * We are supposed to read the first chapter of Learning CFEngine 3 before training :PROPERTIES: :ID: 944564f7-27c0-45f7-9fc4-73278a236d80 :END: [[id:fa4d4582-d2b6-49b0-8bbe-23c4d1c6ad7c][Read chapter 1 of Learning CFEngine]]