#+title: Org-mode Config #+author: Evie Litherland-Smith #+email: evie@xenia.me.uk #+filetags: :emacs:config:org: #+property: header-args:emacs-lisp :tangle yes :mkdirp yes :results output silent For reference information, see [[https://orgmode.com][Org-mode website]] #+begin_src emacs-lisp :results output silent (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)))) (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 ;; Ensure tables and src blocks use fixed-pitch font (set-face-attribute 'org-table nil :inherit 'fixed-pitch) (set-face-attribute 'org-block nil :inherit 'fixed-pitch) ;; Let quote and verse blocks use variable-pitch font, if configured (set-face-attribute 'org-quote nil :inherit 'variable-pitch) (set-face-attribute 'org-verse nil :inherit 'variable-pitch) ;; Enable auto-fill in org-mode buffers (add-hook 'org-mode-hook #'turn-on-auto-fill) ;; Visually indent org-mode files to a given header level (require 'org-indent) (add-hook 'org-mode-hook #'(lambda () (org-indent-mode +1)))) #+end_src * Keymaps #+begin_src emacs-lisp :results output silent (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) #+end_src * Capture templates #+begin_src emacs-lisp :results output silent (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") )) #+end_src * org-roam #+begin_src emacs-lisp (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)) #+end_src ** Capture templates #+begin_src emacs-lisp (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)))) #+end_src ** Graph #+begin_src emacs-lisp (with-eval-after-load 'org-roam (setq org-roam-graph-executable "dot" org-roam-graph-filetype "svg")) #+end_src * org-agenda #+begin_src emacs-lisp :results output silent (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))) #+end_src ** Mobile agenda integration Better syncing to mobile, for use with [[https://github.com/orgzly-revived/orgzly-android-revived][Orgzly]]. #+begin_src emacs-lisp (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)) #+end_src * org-journal #+begin_src emacs-lisp :results output silent (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")) #+end_src * org-noter #+begin_src emacs-lisp (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)) #+end_src * citar #+begin_src emacs-lisp :results output silent (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))) #+end_src ** Citar Embark integration #+begin_src emacs-lisp (use-package citar-embark :ensure t :diminish :after (citar embark) :init (citar-embark-mode +1)) #+end_src * LaTeX #+begin_src emacs-lisp (setq org-latex-compiler "lualatex") (setq org-preview-latex-default-process 'dvisvgm) #+end_src * Publishing config #+begin_src emacs-lisp (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 "" ) ("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 "" ))) #+end_src