summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--README.org145
-rw-r--r--Workflow.org253
3 files changed, 400 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index bf36d54..09324ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
!/.gitignore
!/AGENTS.md
!/README.md
+!/README.org
+!/Workflow.org
!/early-init.el
!/init.el
!/custom.el
diff --git a/README.org b/README.org
new file mode 100644
index 0000000..a3f8b95
--- /dev/null
+++ b/README.org
@@ -0,0 +1,145 @@
+#+title: Emacs Org Workflow Configuration
+
+* Overview
+
+This repository is a compact Emacs 30 configuration centered on Org mode.
+The configuration is intentionally small and keeps the live behavior in two files:
+
+- =early-init.el= for true early-startup behavior
+- =init.el= for runtime configuration and workflow behavior
+
+Custom-generated settings are kept in =custom.el= so the main configuration stays readable.
+
+* Implementation Summary
+
+** Early Startup
+
+=early-init.el= handles only startup concerns that must run before normal initialization:
+
+- disables automatic package activation
+- removes menu, tool, and scroll bars early to reduce flicker
+- increases GC limits during startup
+- sets the initial frame font and frame size
+
+The steady-state GC threshold is restored in =init.el=.
+
+** Runtime Configuration
+
+=init.el= is organized into a few direct sections rather than abstractions:
+
+- core paths
+- startup behavior
+- package bootstrap
+- UI defaults
+- completion
+- Org configuration
+- capture templates
+
+The configuration prefers built-in Emacs and Org features where possible.
+
+** Package Management
+
+Packages are initialized with the built-in package manager.
+The configuration installs these packages when missing:
+
+- =vertico=
+- =marginalia=
+- =orderless=
+- =consult=
+- =modus-themes=
+- =olivetti=
+- =git-auto-commit-mode=
+
+Archive refresh only happens when a required package is missing.
+
+** Startup Behavior
+
+Emacs starts in the custom Org Home agenda.
+The startup path explicitly requires =org-agenda= before evaluating =initial-buffer-choice= so the agenda command is available reliably at startup.
+
+The Home agenda is intended to act like a modal entry point into the workflow.
+
+** UI and Editor Defaults
+
+The configuration applies a small set of editor defaults directly:
+
+- no auto-save files or backup files
+- fast minibuffer echoing
+- recursive minibuffers enabled
+- conservative scrolling
+- mouse wheel scrolling tuned for line-by-line movement
+- automatic revert of changed files
+- active-region replacement via =delete-selection-mode=
+- =y-or-n-p= in place of =yes-or-no-p=
+- spaces instead of tabs by default
+- =fill-column= set to 80
+
+The selected GUI frame reapplies the startup font from =default-frame-alist=.
+
+** Completion Stack
+
+The minibuffer completion setup is simple and modern:
+
+- =vertico= provides the UI
+- =marginalia= adds annotations
+- =orderless= provides matching behavior
+- =consult= provides search and outline commands
+
+** Org Workflow
+
+The Org setup is organized around a heading-based workflow in a single notes file under =~/org=.
+Key behaviors include:
+
+- Home agenda command on startup
+- full-frame agenda display
+- stock Org speed commands enabled
+- overview startup folding for Org buffers
+- drawers hidden at startup
+- file-based refile paths with single-step completion
+- refile targets limited to agenda files up to level 2
+- internal heading links instead of ID-based links
+- heading-respecting insertion and movement behavior
+
+** Capture Templates
+
+The capture system stays low-friction and writes into named headings in the default notes file.
+
+Available templates:
+
+- Inbox
+- Task
+- Question
+- Meeting
+- Recurring
+
+Inbox, Task, Question, and Recurring entries record a =CAPTURED= property and capture context with =%a=.
+Meeting capture remains timestamp-based.
+
+** Agenda Design
+
+The Home agenda is ordered as:
+
+- weekly agenda section
+- task list
+- open questions
+- refile queue
+
+The refile queue is based on entries under an Inbox subtree that inherits =CATEGORY: inbox=.
+
+* Files
+
+** =early-init.el=
+
+Early startup configuration only.
+
+** =init.el=
+
+Main configuration and workflow behavior.
+
+** =custom.el=
+
+Custom-generated state loaded at the end of =init.el= so Customize values override defaults.
+
+** =Workflow.org=
+
+Human-facing documentation for the workflows and keybindings enabled by this configuration.
diff --git a/Workflow.org b/Workflow.org
new file mode 100644
index 0000000..25405b3
--- /dev/null
+++ b/Workflow.org
@@ -0,0 +1,253 @@
+#+title: Workflow Guide
+
+* Purpose
+
+This document describes the workflows implemented by this Emacs configuration and the keybindings that support them.
+It focuses on the actual behavior configured in this repository.
+
+* Operating Model
+
+** Startup
+
+When Emacs starts, it opens the custom Org Home agenda.
+That agenda is the main entry point into the system.
+
+** Agenda Mode
+
+Opening the agenda uses a full-frame modal view.
+The agenda is intended to become the active workspace rather than appear in a side split.
+
+** Capture Mode
+
+Capture reuses the current window and then deletes other windows while capture is active.
+The result is a modal capture flow with minimal window churn.
+
+** Org Buffer Defaults
+
+When an Org buffer opens:
+
+- it starts folded to overview level
+- drawers are hidden at startup
+- standard Org speed commands are enabled
+
+* Home Agenda
+
+The Home agenda command key is =h= inside =org-agenda= custom commands.
+Its sections appear in this order:
+
+1. weekly agenda
+2. task list
+3. open questions
+4. refile
+
+The refile section uses this matcher:
+
+#+begin_src emacs-lisp
+CATEGORY="inbox"+LEVEL>1
+#+end_src
+
+That means entries under an Inbox subtree can appear in the refile section when the parent heading carries =CATEGORY: inbox=.
+
+* Capture Workflows
+
+** Inbox Capture
+
+- key: =C-c c= then =i=
+- target: =Inbox=
+- content: plain note
+- metadata: =CAPTURED= property and captured context link
+
+Use this for raw notes that still need sorting or refiling.
+
+** Task Capture
+
+- key: =C-c c= then =t=
+- target: =Tasks=
+- content: =TODO=
+- metadata: =CAPTURED= property and captured context link
+
+** Question Capture
+
+- key: =C-c c= then =q=
+- target: =Questions=
+- content: =CLARIFY=
+- metadata: =CAPTURED= property and captured context link
+
+** Meeting Capture
+
+- key: =C-c c= then =m=
+- target: =Meetings=
+- content: timestamped meeting note
+- metadata: no =CAPTURED= property
+
+** Recurring Capture
+
+- key: =C-c c= then =r=
+- target: =Recurring=
+- content: scheduled =TODO=
+- metadata: =CAPTURED= property
+
+* Refile Workflow
+
+The configuration is built around using Org refile rather than custom routing.
+
+Relevant settings:
+
+- outline paths are file-based
+- completion happens in one step
+- targets are agenda files up to level 2
+
+The intended loop is:
+
+1. capture into Inbox
+2. review the refile section in the Home agenda
+3. refile the note into its long-term heading
+
+* Keybindings
+
+** Global Commands
+
+| Key | Command | Purpose |
+|-----+---------+---------|
+| =C-s= | =consult-line= | Search in the current buffer |
+| =C-c o= | =consult-outline= | Jump through headings in the current buffer |
+| =C-c c= | =org-capture= | Open capture |
+| =C-c a= | =org-agenda= | Open agenda |
+| =C-c r= | =org-refile= | Refile current entry |
+| =C-c z= | =olivetti-mode= | Toggle focused writing layout |
+
+** Common Org Commands
+
+| Key | Command | Purpose |
+|-----+---------+---------|
+| =C-c C-w= | =org-refile= | Refile subtree |
+| =C-c $= | =org-archive-subtree= | Archive subtree directly |
+| =C-c C-x C-s= | =org-archive-subtree= | Archive subtree directly |
+| =C-c C-x C-a= | =org-archive-subtree-default= | Archive using default archive command |
+| =C-c C-l= | =org-insert-link= | Insert link |
+| =C-c C-o= | =org-open-at-point= | Open link or reference at point |
+| =C-c C-t= | =org-todo= | Change TODO state |
+| =C-c C-q= | =org-set-tags-command= | Edit tags |
+| =C-c C-s= | =org-schedule= | Schedule item |
+| =C-c C-d= | =org-deadline= | Add deadline |
+| =C-<return>= | =org-insert-heading-respect-content= | Insert heading while respecting subtree content |
+
+** Capture Template Keys
+
+| Key | Template | Target |
+|-----+----------+--------|
+| =i= | Inbox | Inbox |
+| =t= | Task | Tasks |
+| =q= | Question | Questions |
+| =m= | Meeting | Meetings |
+| =r= | Recurring | Recurring |
+
+** Org Speed Commands
+
+Speed commands are available at the beginning of a headline when point is in a valid speed-command position.
+This configuration uses Org's standard built-in speed commands.
+
+*** Outline Navigation
+
+| Key | Command |
+|-----+---------|
+| =n= | next visible heading |
+| =p= | previous visible heading |
+| =f= | next heading at same level |
+| =b= | previous heading at same level |
+| =F= | next block |
+| =B= | previous block |
+| =u= | up heading |
+| =j= | =org-goto= |
+| =g= | refile to current location history with prefix behavior |
+
+*** Outline Visibility
+
+| Key | Command |
+|-----+---------|
+| =c= | cycle current subtree |
+| =C= | cycle whole buffer |
+| =SPC= | display outline path |
+| =s= | toggle narrow to subtree |
+| =k= | cut subtree |
+| === | column view |
+
+*** Outline Structure Editing
+
+| Key | Command |
+|-----+---------|
+| =U= | move subtree up |
+| =D= | move subtree down |
+| =r= | promote/right shift heading |
+| =l= | demote/left shift heading |
+| =R= | shift subtree right |
+| =L= | shift subtree left |
+| =i= | insert heading respecting content |
+| =^= | sort subtree |
+| =w= | refile |
+| =a= | archive subtree with confirmation |
+| =@= | mark subtree |
+| =#= | toggle comment |
+
+*** Clock Commands
+
+| Key | Command |
+|-----+---------|
+| =I= | clock in |
+| =O= | clock out |
+
+*** Metadata Editing
+
+| Key | Command |
+|-----+---------|
+| =t= | change TODO state |
+| =,= | set priority |
+| =0= | clear priority |
+| =1= | set priority A |
+| =2= | set priority B |
+| =3= | set priority C |
+| =:= | set tags |
+| =e= | set effort |
+| =E= | increase effort |
+| =W= | set appointment warning minutes |
+
+*** Agenda and Search
+
+| Key | Command |
+|-----+---------|
+| =v= | open agenda |
+| =/= | sparse tree |
+
+*** Miscellaneous
+
+| Key | Command |
+|-----+---------|
+| =o= | open at point |
+| =?= | show speed command help |
+| =<= | set subtree restriction lock |
+| =>= | remove restriction lock |
+
+* Notes On Behavior
+
+** Refile
+
+Use =w= as the stock Org speed command for refile, or =C-c C-w= outside speed-command context.
+
+** Narrowing
+
+Use =s= as the stock speed command for toggling subtree narrowing.
+This configuration intentionally does not replace it with custom bindings.
+
+** Archive
+
+Use =a= as the stock archive speed command with confirmation, or use =C-c $= for the direct archive command.
+
+** Internal Links
+
+This setup is intended to work with heading links like:
+
+#+begin_example
+[[*Heading]]
+#+end_example
+
+It does not switch Org into an ID-based linking workflow.