Files
memex/system/skills/OrgMode.org

2.1 KiB

SKILL: Org-Mode & Org-Roam (Technical Implementation)

Philosophy

Plain text is forever. Structure is metadata. Everything is a node.

Technical Implementation

1. Document Structure

  • Headlines: Use `*` for top-level, `**` for second-level, etc.
  • Properties: Every node (headline) that is intended to be an atomic note must have a `:PROPERTIES:` drawer.
  • Unique IDs: Use `:ID:` for Org-roam style linking (e.g., `:ID: 550e8400-e29b-41d4-a716-446655440000`).
  • Dates: Use `[YYYY-MM-DD Day HH:MM]` for inactive timestamps and `<YYYY-MM-DD Day HH:MM>` for active/scheduled ones.

2. Task Management (GTD)

  • Hub: Use `memex/gtd.org` for all TODOs, Projects, and Habits.
  • Statuses: `TODO`, `DOING`, `DONE` (with `CLOSED:`), `WAITING`, `SOMEDAY`.

3. File Naming

  • Daily & Fleeting: `memex/1_daily/YYYY-MM-DD.org`
  • Atomic Notes: `memex/2_notes/slug-of-the-concept.org`
  • Projects: `memex/5_projects/ProjectName/SPEC.org`

4. Code Blocks

  • Use `#+BEGIN_SRC <language>` and `#+END_SRC` for all code snippets.
  • Use `#+RESULTS:` to capture output when running code within Org-mode (Babel).

6. Binary Management (org-attach)

  • Philosophy: Treat binaries (PDFs, images, data) as first-class citizens linked to symbolic nodes. Never use fragile local file paths.
  • The Protocol (System 2):

    1. Identify the Host Node: Every attachment must be linked to a specific Org headline (e.g., in `memex/gtd.org` or a Literature Note).
    2. Generate Native ID: Use `(org-id-get-create)` via Emacs to ensure the node has a globally unique, persistent identifier.
    3. Perform the Attachment: Use `(org-attach-attach "/path/to/file" nil 'mv)` to move the file into the ID-based storage.
    4. Linking: Use `attachment:filename.ext` for all internal references. This ensures the link survives if the file or node is moved.
  • Storage Root: The system-wide attachment directory is `$MEMEX_ATTACHMENTS` (typically `memex/7_resources/` or `memex/attachments/`).

7. Learning Rituals (Closing the Loop)