;;; org.el -*- lexical-binding: t; -*- (defun +org--restart-mode-h () "Restart `org-mode', but only once." (remove-hook 'doom-switch-buffer-hook #'+org--restart-mode-h 'local) (delq! (current-buffer) org-agenda-new-buffers) (let ((file buffer-file-name) (old-buffer (current-buffer)) (inhibit-redisplay t) new-buffer) (kill-buffer) (setq new-buffer (find-file file)) (unless (buffer-live-p old-buffer) (make-indirect-buffer new-buffer old-buffer 'clone)))) (defun +org--restart-mode-h () "Restart `org-mode', but only once." (remove-hook 'doom-switch-buffer-hook #'+org--restart-mode-h 'local) (delq! (current-buffer) org-agenda-new-buffers) (let ((file buffer-file-name) (inhibit-redisplay t)) (kill-buffer) (find-file file))) (defun +org--restart-mode-h () "Restart `org-mode', but only once." (remove-hook 'doom-switch-buffer-hook #'+org--restart-mode-h 'local) (quiet! (org-mode-restart)) (delq! (current-buffer) org-agenda-new-buffers) (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 ;; :config ;; :init ;; (setq org-roam-directory "~/org/roam") ; No file-truename needed in Doom ;; :config ;; (advice-remove 'org-roam-db-query '+org-roam-try-init-db-a) ;; (org-roam-db-autosync-mode) ;; (setq org-roam-completion-everywhere t)) ; (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* ((current-file-dir (file-name-directory (buffer-file-name))) (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") )