emacs/config/org-mode.org

11 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-attach-id-dir (expand-file-name "data/" org-directory)
        org-hide-emphasis-markers nil
        org-pretty-entities-include-sub-superscripts t
        org-fontify-done-headline t
        org-fontify-todo-headline t
        org-fontify-emphasized-text t
        org-fontify-quote-and-verse-blocks t
        org-src-window-setup 'current-window
        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))
                             (org-agenda-files . (:maxlevel . 2))))

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

  ;; Enable auto-fill in org-mode buffers
  (add-hook 'org-mode-hook #'turn-on-auto-fill)

  (use-package org
    :ensure t
    :custom
    (org-yank-folded-subtrees nil)
    (org-yank-adjusted-subtrees t)
    (org-M-RET-may-split-line '((default . nil)
                                (headline . nil)
                                (item . nil)
                                (table . t)))
    (org-babel-load-languages '((emacs-lisp . t)
                                (lua . t)
                                (python . t)))
    :config
    (set-face-attribute 'org-table nil :inherit 'fixed-pitch)
    (set-face-attribute 'org-block nil :inherit 'fixed-pitch)
    (set-face-attribute 'org-quote nil :inherit 'variable-pitch)
    (set-face-attribute 'org-verse nil :inherit 'variable-pitch))

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+olp+datetree "notes.org" "Inbox")
           "* %?")
          ("t" "Task" entry
           (file+olp+datetree "tasks.org" "Inbox")
           "* TODO [#B] %?")
          ("r" "Reading List" entry
           (file+olp+datetree "reading.org" "Inbox")
           "* %?")
          ("d" "Diary Event" entry
           (file+datetree "diary.org")
           "* %?\n%^T")
          ("#" "used by gnus-icalendar-org" entry
           (file+datetree "diary.org")
           "%i" :immediate-finish t)
          ("m" "Email Workflow")
          ("mf" "Follow Up" entry
           (file+olp+datetree "tasks.org" "Inbox")
           "* TODO Follow up with %:fromname on %a :email:\nDEADLINE: %^{deadline}t\n\n%i")
          ("mr" "Read Later" entry
           (file+olp+datetree "reading.org" "Inbox")
           "* TODO Read %:subject :email:\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 nil)
    (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 'day
        org-agenda-start-on-weekday 1
        org-agenda-sticky nil
        org-agenda-window-setup 'current-window
        org-agenda-tags-column 0
        org-agenda-diary-file (expand-file-name "diary.org" org-directory)
        org-agenda-include-diary nil
        org-agenda-include-deadlines t
        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)
                          (expand-file-name "journal" org-directory)
                          (expand-file-name "projects" org-directory)))

Mobile agenda integration

Better syncing to mobile, for use with Orgzly.

  (with-eval-after-load 'org
    (setq org-mobile-directory "~/.orgmobile/"
          org-mobile-capture-file "inbox.org"
          org-mobile-agendas nil
          org-mobile-files (list (expand-file-name "diary.org" org-directory))
          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-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))

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))
    :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\"/>"
           )))