;;; $DOOMDIR/+org.el -*- lexical-binding: t; -*- (setq org-directory "~/org/") (after! org (setq org-startup-indented t org-pretty-entities t org-hide-emphasis-markers t org-capture-templates-contexts nil org-confirm-babel-evaluate nil) (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (python . t) (C . t) (lisp . t)))) (add-hook 'org-capture-mode-hook #'delete-other-windows) (add-hook 'org-capture-mode-hook (lambda () (set-window-dedicated-p (selected-window) nil))) (after! org-roam (setq org-roam-directory (file-truename "~/org/")) (org-roam-db-autosync-mode) (defun my/org-roam-short-id () (let ((chars "abcdefghijklmnopqrstuvwxyz0123456789")) (apply #'string (cl-loop repeat 4 collect (aref chars (random (length chars))))))) (setq org-roam-capture-templates '(("d" "default" plain "* %?" :if-new (file+head (lambda () (concat (my/org-roam-short-id) ".org")) "#+TITLE: %^{title|Untitled}\n#+FILETAGS: :%^{tags}:\n\n") :unnarrowed t))) (cl-defmethod org-roam-node-file-stem ((node org-roam-node)) (file-name-base (org-roam-node-file node))) (setq org-roam-node-display-template (concat "${title:*} " (propertize "${file-stem}" 'face 'org-tag))) (setq org-roam-mode-sections '(org-roam-backlinks-section org-roam-reflinks-section org-roam-unlinked-references-section)) (defun my/org-roam-check-self-link () (when-let* ((node (org-roam-node-at-point)) (id (org-roam-node-id node))) (save-excursion (goto-char (point-min)) (while (re-search-forward org-link-any-re nil t) (when (string-match-p (regexp-quote id) (match-string 0)) (message "Warning: self-link detected")))))) (defun my/org-roam-check-dead-links () (dolist (link (org-roam-db-query [:select [dest] :from links :where (= source $s1)] (org-roam-id-at-point))) (unless (org-roam-db-query [:select id :from nodes :where (= id $s1)] (car link)) (message "Error: dead link to %s" (car link))))) (add-hook 'before-save-hook (lambda () (when (org-roam-file-p) (my/org-roam-check-self-link) (my/org-roam-check-dead-links))) nil t) (map! :leader :prefix ("n r" . "roam") :desc "Find node" "f" #'org-roam-node-find :desc "Insert node" "i" #'org-roam-node-insert :desc "Backlinks" "b" #'org-roam-buffer-toggle :desc "Capture" "c" #'org-roam-capture :desc "Graph" "g" #'org-roam-graph :desc "Random node" "r" #'org-roam-node-random :desc "Toggle buffer" "t" #'org-roam-buffer-toggle :desc "Open link" "o" #'org-open-at-point :desc "Jump back" "O" #'org-mark-ring-goto)) (with-eval-after-load 'ox-html (setq org-html-xml-declaration nil org-html-doctype "html5" org-html-html5-fancy t org-html-head-include-default-style nil org-html-postamble nil)) (use-package! websocket :after org-roam) (use-package! org-roam-ui :after org-roam :config (setq org-roam-ui-sync-theme t org-roam-ui-follow t org-roam-ui-update-on-save t)) (use-package! org-appear :hook (org-mode . org-appear-mode) :config (setq org-appear-autoemphasis t org-appear-autolinks t org-appear-autosubmarkers t org-appear-autoentities t))