;;; org.el -*- lexical-binding: t; -*- (defun +org--restart-mode-h () "Restart org-mode on buffer switch." (remove-hook 'doom-switch-buffer-hook #'+org--restart-mode-h 'local) (cl-delete (current-buffer) org-agenda-new-buffers :test 'eq) (quiet! (org-mode-restart)) (run-hooks 'find-file-hook)) (add-hook! 'org-agenda-finalize-hook (defun +org-exclude-agenda-buffers-from-workspace-h () "Don't associate temporary agenda buffers with current workspace." (when (and org-agenda-new-buffers (bound-and-true-p persp-mode) (not org-agenda-sticky)) (let (persp-autokill-buffer-on-remove) (persp-remove-buffer org-agenda-new-buffers (get-current-persp) nil))))) (use-package org :defer t :config (defalias '+org--restart-mode-h #'ignore)) (advice-add #'org-capture :around (lambda (fun &rest args) (letf! ((#'+org--restart-mode-h #'ignore)) (apply fun args)))) (use-package! org-roam :after org :custom (org-roam-directory "~/org/roam") (org-roam-completion-everywhere t) (org-roam-capture-templates '(("d" "default" plain "%?" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n") :unnarrowed t) ("r" "reference" plain "%?" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+filetags: :reference:\n") :unnarrowed t) ("p" "project" plain "\n* Goals\n\n%?\n\n* Tasks\n\n* Notes\n\n" :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+filetags: :project:\n") :unnarrowed t))) :config (org-roam-db-autosync-mode) :bind (("C-c n l" . org-roam-buffer-toggle) ("C-c n f" . org-roam-node-find) ("C-c n r" . org-roam-node-random))) ; (use-package! org-roam ; :custom ; (org-roam-directory "~/org/roam") ; (org-roam-completion-everywhere t) ; (org-roam-capture-templates ; '(("d" "default" plain ; "%?" ; :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" ; "#+title: ${title}\n") ; :unnarrowed t) ; ("r" "reference" plain ; "%?" ; :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" ; "#+title: ${title}\n#+filetags: :reference:\n") ; :unnarrowed t) ; ("p" "project" plain ; "\n* Goals\n\n%?\n\n* Tasks\n\n* Notes\n\n" ; :if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" ; "#+title: ${title}\n#+filetags: :project:\n") ; :unnarrowed t))) ; :config ; (org-roam-setup) ; ;; If using org-roam-protocol ; (require 'org-roam-protocol)) (after! org (require 'org-re-reveal) (setq org-re-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js") (setq org-re-reveal-theme "white") (setq org-re-reveal-transition "slide")) (after! org (require 'org-tempo) (add-to-list 'org-structure-template-alist '("n" . "notes"))) (use-package! anki-editor :after org :config (setq anki-editor-create-decks t) :bind (:map org-mode-map ("C-c a" . anki-editor-push-notes))) (use-package! org-anki :after org :config (setq org-anki-default-deck "Default") :bind (:map org-mode-map ("C-c n" . org-anki-sync-entry))) (after! org (use-package! ob-mermaid :config (setq ob-mermaid-cli-path "mmdc")) ; Adjust path if needed ;; Add mermaid to org-babel languages (org-babel-do-load-languages 'org-babel-load-languages (append org-babel-load-languages '((mermaid . t))))) (after! org (setq-default org-download-image-dir "./images") (defun my/org-download-image-dir-setup () "Create and set org-download-image-dir relative to current org file." (let ((filename (buffer-file-name))) (when filename (let* ((current-file-dir (file-name-directory filename)) (image-dir (expand-file-name "images" current-file-dir))) (make-directory image-dir t) (setq-local org-download-image-dir image-dir))))) (add-hook 'org-mode-hook #'my/org-download-image-dir-setup) (setq org-download-link-format "[[file:%s]]\n") (setq org-download-timestamp "%Y%m%d-%H%M%S_") (setq org-download-screenshot-method "maim -s %s") )