diff options
| author | Szymon Szukalski <szymon@szymonszukalski.com> | 2026-04-02 13:58:14 +1100 |
|---|---|---|
| committer | Szymon Szukalski <szymon@szymonszukalski.com> | 2026-04-02 13:58:14 +1100 |
| commit | 0d787210e8be2ffe53a44c2d8af95c849c776f53 (patch) | |
| tree | 9e83aefce5c238504b01d39fa8cd91e23d673c62 | |
| parent | 6107c2fe77e547a2d7c48150c48b19172b828d3c (diff) | |
Add central MOC startup note
| -rw-r--r-- | README.md | 9 | ||||
| -rw-r--r-- | config.org | 56 |
2 files changed, 65 insertions, 0 deletions
@@ -73,6 +73,14 @@ emacs --batch -Q --load ./init.el ## Workflow +### MOC + +There is a central [moc.org](/Users/skas/org/moc.org) note at `~/org/moc.org`. It is a deliberately small, curated navigation surface for the notes system rather than an exhaustive index or system of record. + +The MOC opens automatically on Emacs startup through startup-hook behavior, but it is not configured as the default fallback buffer when nothing is open. `C-c n M` opens it manually at any time. + +Its Quick Access section provides actionable links for opening the agenda, today's note, capture, and a new note, while the rest of the file stays lightweight and curated around active projects, areas, and a few high-leverage resources. + ### Daily notes Daily notes are plain Org files in `~/org/daily/`, named by date. When a daily note is created through the config, it starts with these headings: @@ -108,6 +116,7 @@ Denote handles long-lived notes. The main bindings are: - `C-c n n` to open or create a Denote note. - `C-c n l` to insert a Denote link. +- `C-c n M` to open the central MOC note. - `C-c n m` to create a PARA subdirectory from the minibuffer before capturing into it. - `C-c n d` to open today's daily note. @@ -325,6 +325,8 @@ with the standard section layout already in place. Agenda views stay focused on PARA notes, so project, area, and resource files can surface TODOs without pulling in daily or archived notes. A small directory helper keeps PARA subdirectories easy to create from the minibuffer before capturing into them. +A curated =moc.org= in the Org root acts as the startup landing page and quick +navigation surface without becoming a global fallback buffer. #+begin_src emacs-lisp (use-package org @@ -460,6 +462,45 @@ If TIME is nil, use the current date." (format-time-string "%Y-%m-%d.org" time) ss/org-daily-directory)) + (defun ss/moc-path () + "Return the file name for the central MOC note." + (expand-file-name "moc.org" ss/org-directory)) + + (defun ss/moc-template () + "Return the initial contents for the central MOC note." + (concat + "#+title: MOC\n\n" + "* Quick Access\n" + "- [[elisp:(ss/open-agenda)][Open agenda]]\n" + "- [[elisp:(ss/open-todays-note)][Today's note]]\n" + "- [[elisp:(org-capture nil)][Capture]]\n" + "- [[elisp:(denote-open-or-create)][New note]]\n\n" + "* Projects (active)\n" + "- Backend Chapter Uplift\n" + "- API Strategy\n" + "- Maturity Matrix\n" + "- DPT Ways of Working\n\n" + "* Areas\n" + "- My Role\n" + "- People and Performance\n" + "- SE Practice\n" + "- Stakeholder Alignment\n" + "- Engineering Department\n\n" + "* Resources (high leverage)\n" + "- API Strategy Reference\n" + "- Triage System\n" + "- Weekly Focus\n")) + + (defun ss/ensure-moc () + "Create the central MOC note when it does not exist. +Return the path to the note." + (let ((file (ss/moc-path))) + (unless (file-exists-p file) + (make-directory (file-name-directory file) t) + (with-temp-file file + (insert (ss/moc-template)))) + file)) + (defun ss/daily-note-template (&optional time) "Return the initial contents for the daily note at TIME." (format "#+title: %s\n\n* Tasks\n\n* Notes\n\n* Open Loops\n" @@ -481,13 +522,28 @@ Return the path to the note." (interactive) (find-file (ss/ensure-daily-note))) + (defun ss/open-moc () + "Open the central MOC note." + (interactive) + (find-file (ss/ensure-moc))) + + (defun ss/open-moc-on-startup () + "Open the central MOC note during normal startup." + (when (and (equal (buffer-name (current-buffer)) "*scratch*") + (not buffer-file-name)) + (ss/open-moc))) + (defun ss/open-agenda () "Refresh agenda files and invoke `org-agenda'." (interactive) (ss/ensure-org-agenda-loaded) (call-interactively #'org-agenda)) + :init + (add-hook 'emacs-startup-hook #'ss/open-moc-on-startup) + (ss/ensure-moc) :bind (("C-c a" . ss/open-agenda) ("C-c c" . org-capture) + ("C-c n M" . ss/open-moc) ("C-c n m" . ss/create-note-subdirectory) ("C-c n d" . ss/open-todays-note)) :config |
