emacs/config/org-mode.org
Evie Litherland-Smith bae0553bbb Update org-mode capture templates
Move back to separated inbox style for different types of notes

Add calendar capture template that prompts for datetime

Remove automatic datetime from email workflow, prompt at capture
2024-03-01 10:54:07 +00:00

10 KiB

Org-mode Config

For reference information, see Org-mode website

  (setq org-directory "~/Documents/Org"
        org-default-notes-file (expand-file-name "notes.org" org-directory)
        org-hide-emphasis-markers nil
        org-pretty-entities-include-sub-superscripts t
        org-tags-column 0
        org-outline-path-complete-in-steps nil
        org-return-follows-link t
        org-mouse-1-follows-link t
        org-link-descriptive t
        org-enforce-todo-dependencies t
        org-enforce-todo-checkbox-dependencies t
        org-refile-use-outline-path t
        org-refile-allow-creating-parent-nodes t
        org-refile-use-outline-path 'file
        org-refile-targets '((nil . (:maxlevel . 2))))

  ;; Visually indent org-mode files to a given header level
  (add-hook 'org-mode-hook #'org-indent-mode)

  (use-package org
    :ensure t
    :custom
    (org-babel-load-languages '((emacs-lisp . t)
                                (python . t))))

Keymaps

  (keymap-global-set "C-c o ." #'calendar)
  (keymap-global-set "C-c o e" #'org-edit-src-code)
  (keymap-global-set "C-c o a" #'org-agenda)
  (keymap-global-set "C-c o n" #'org-capture)
  (keymap-global-set "C-c o l" #'org-capture-goto-last-stored)

Capture templates

  (setq org-capture-templates
        '(("n" "Note" entry
           (file+datetree "inbox.org")
           "* %?"
           :tree-type month)
          ("t" "Task" entry
           (file+headline "tasks.org" "Inbox")
           "* TODO %?"
           :prepend t)
          ("c" "Calendar Event" entry
           (file+headline "calendar.org" "Inbox")
           "* %?\n%^t\n\n%i"
           :prepend t)
          ("r" "Reading List" entry
           (file+headline "reading.org" "Inbox")
           "* %?")
          ("m" "Email Workflow")
          ("mf" "Follow Up" entry
           (file+olp "mail.org" "Follow Up")
           "* TODO Follow up with %:fromname on %a\nDEADLINE: %^{deadline}t\n\n%i")
          ("mr" "Read Later" entry
           (file+olp "mail.org" "Read Later")
           "* TODO Read %:subject\nSCHEDULED: %^{scheduled}t\n\n%i")
          ))

org-roam

  (use-package org-roam
    :ensure t
    :after org
    :diminish
    :bind (("C-c o r i" . org-roam-node-insert)
           ("C-c o r f" . org-roam-node-find)
           ("C-c o r n" . org-roam-capture))
    :custom
    (org-roam-directory (expand-file-name "roam" org-directory))
    (org-roam-completion-everywhere t)
    (org-roam-node-display-template (concat "${title:*} "
                                            (propertize "${tags:24}" 'face 'org-tag)))
    :config
    (mkdir org-roam-directory t)
    (add-to-list 'display-buffer-alist
                 '("\\*org-roam\\*"
                   (display-buffer-in-side-window)
                   (side . right)
                   (slot . 0)
                   (window-width . 0.33)
                   (window-parameters . ((no-other-window . t)
                                         (no-delete-other-windows . t)))))
    (org-roam-db-autosync-mode +1))

Capture templates

  (with-eval-after-load 'org-roam
    (setq org-roam-capture-templates
          '(("d" "default" plain "%?"
             :target (file+head "${slug}.org"
                                "#+title: ${title}\n#+author: %n")
             :unnarrowed t))))

Graph

  (with-eval-after-load 'org-roam
    (setq org-roam-graph-executable "dot"
          org-roam-graph-filetype "svg"))

org-agenda

  (setq org-agenda-span 'week
        org-agenda-start-on-weekday 1
        org-agenda-sticky nil
        org-agenda-window-setup 'current-window
        org-agenda-tags-column 0
        org-agenda-todo-ignore-scheduled 'future
        org-agenda-todo-ignore-deadlines 'far
        org-agenda-prefix-format '((agenda . " %-12:c%?-12t% s")
                                   (todo . " %-12:c")
                                   (tags . " %-12:c")
                                   (search . " %-12:c"))
        org-agenda-files (list (expand-file-name org-directory)))

  (add-to-list 'org-refile-targets '(org-agenda-files . (:maxlevel . 2)) t)

Mobile agenda integration

Better syncing to mobile, for use with Orgzly.

  (with-eval-after-load 'org
    (setq org-mobile-directory "~/.orgmobile/"
          org-mobile-agendas nil
          org-mobile-files '(org-agenda-files)
          org-mobile-inbox-for-pull (expand-file-name "inbox.org" org-directory)
          org-mobile-force-id-on-agenda-items nil)
    (add-hook 'org-capture-finalize-hook #'org-mobile-push))

org-alert

  (use-package org-alert
    :ensure t
    :after alert
    :config
    (setq org-alert-notification-title "org-mode agenda"
          org-alert-notify-cutoff 30
          org-alert-notify-after-event-cutoff 5)
    (org-alert-enable))

org-journal

  (use-package org-journal
    :bind (("C-c o j" . org-journal-new-entry))
    :custom
    (org-journal-dir (expand-file-name "journal" org-directory))
    (org-journal-file-type 'monthly)
    (org-journal-file-format "%Y-%m.org"))

org-noter

  (use-package org-noter
    :ensure t
    :diminish
    :after (org doc-view)
    :commands (org-noter)
    :custom
    (org-noter-always-create-frame nil)
    (org-noter-kill-frame-at-session-end nil)
    (org-noter-auto-save-last-location t)
    (org-noter-default-notes-file-names '("notes.org"))
    (org-noter-doc-property-in-notes t)
    (org-noter-notes-search-path (list
                                  (expand-file-name org-directory)
                                  (expand-file-name "~/Documents/References/library/")))
    (org-noter-prefer-root-as-file-level nil))

Refile to config

  ;; Add emacs config files to `org-file-targets'
  (dolist (fname my/config-files)
    (add-to-list 'org-refile-targets (cons fname '(:maxlevel . 2)) t))

citar

  (use-package citar
    :ensure t
    :diminish
    :custom
    (org-cite-global-bibliography '("~/Documents/References/main.bib"))
    (org-cite-insert-processor 'citar)
    (org-cite-follow-processor 'citar)
    (org-cite-activate-processor 'citar)
    (citar-bibliography org-cite-global-bibliography)
    (citar-library-paths '("~/Documents/References/library/"))
    (citar-notes-paths '("~/Documents/References/notes/"))
    :hook
    (LaTeX-mode . citar-capf-setup)
    (org-mode . citar-capf-setup)
    :bind (("C-c o c" . citar-open)
           :map org-mode-map :package org
           ("C-c o C-c" . #'org-cite-insert))
    :config
    (require 'nerd-icons)
    (require 'citar-embark)
    (defvar citar-indicator-files-icons
      (citar-indicator-create
       :symbol (nerd-icons-octicon
                "nf-oct-file"
                :face 'nerd-icons-green
                :v-adjust -0.1)
       :function #'citar-has-files
       :padding "  " ; need this because the default padding is too low for these icons
       :tag "has:files"))
    (defvar citar-indicator-links-icons
      (citar-indicator-create
       :symbol (nerd-icons-octicon
                "nf-oct-link"
                :face 'nerd-icons-orange
                :v-adjust 0.01)
       :function #'citar-has-links
       :padding "  " ; need this because the default padding is too low for these icons
       :tag "has:links"))
    (defvar citar-indicator-notes-icons
      (citar-indicator-create
       :symbol (nerd-icons-octicon
                "nf-oct-note"
                :face 'nerd-icons-blue
                :v-adjust -0.3)
       :function #'citar-has-notes
       :padding "  " ; need this because the default padding is too low for these icons
       :tag "has:notes"))
    (defvar citar-indicator-cited-icons
      (citar-indicator-create
       :symbol (nerd-icons-octicon
                "nf-oct-circle"
                :face 'nerd-icon-green)
       :function #'citar-is-cited
       :padding "  " ; need this because the default padding is too low for these icons
       :tag "is:cited"))
    (setq citar-indicators (list citar-indicator-files-icons
                                 citar-indicator-links-icons
                                 citar-indicator-notes-icons
                                 citar-indicator-cited-icons)))

Citar Embark integration

  (use-package citar-embark
    :ensure t
    :diminish
    :after (citar embark)
    :init
    (citar-embark-mode +1))

LaTeX

  (setq org-latex-compiler "lualatex")
  (setq org-preview-latex-default-process 'dvisvgm)

Publishing config

  (setq org-publish-project-alist
        '(("landing"
           :base-directory "~/Documents/Web/landing/"
           :base-extension "org"
           :exclude "README.org"
           :recursive t
           :publishing-function org-html-publish-to-html
           :publishing-directory "/sshx:xenia@legion:/var/www/landing"
           :section-numbers nil
           :with-author t
           :with-email t
           :with-toc nil
           ;; :html-head "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://fniessen.github.io/org-html-themes/src/readtheorg_theme/css/readtheorg.css\"/>"
           )
          ("blog"
           :base-directory "~/Documents/Web/blog/"
           :base-extension "org"
           :exclude "README.org"
           :recursive t
           :publishing-function org-html-publish-to-html
           :publishing-directory "/sshx:xenia@legion:/var/www/blog"
           :section-numbers nil
           :with-author t
           :with-email t
           :with-toc t
           :html-head "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://fniessen.github.io/org-html-themes/src/readtheorg_theme/css/readtheorg.css\"/>"
           )))