doomemacs/modules/lang/org/contrib/roam.el
Henrik Lissner aa54383b5d
refactor: deprecate doom-etc-dir for doom-data-dir
doom-etc-dir will be renamed to doom-data-dir, to better reflect its
purpose, and align it with XDG_DATA_HOME (where it will be moved to in
v3, where Doom will begin to obey XDG directory conventions more
closely).
2022-08-14 20:43:35 +02:00

96 lines
4 KiB
EmacsLisp

;;; lang/org/contrib/roam.el -*- lexical-binding: t; -*-
;;;###if (modulep! +roam)
(defvar +org-roam-open-buffer-on-find-file t
"If non-nil, open the org-roam buffer when opening an org roam file.")
;;
;;; Packages
(use-package! org-roam
:hook (org-load . +org-init-roam-maybe-h)
:hook (org-roam-backlinks-mode . turn-on-visual-line-mode)
:commands (org-roam-buffer-toggle-display
org-roam-dailies-find-date
org-roam-dailies-find-today
org-roam-dailies-find-tomorrow
org-roam-dailies-find-yesterday)
:preface
;; Set this to nil so we can later detect if the user has set custom values
;; for these variables. If not, default values will be set in the :config
;; section.
(defvar org-roam-directory nil)
(defvar org-roam-db-location nil)
:init
(map! :after org
:map org-mode-map
:localleader
:prefix ("m" . "org-roam")
"b" #'org-roam-switch-to-buffer
"f" #'org-roam-find-file
"g" #'org-roam-graph
"i" #'org-roam-insert
"I" #'org-roam-insert-immediate
"m" #'org-roam
"t" #'org-roam-tag-add
"T" #'org-roam-tag-delete
(:prefix ("d" . "by date")
:desc "Find previous note" "b" #'org-roam-dailies-find-previous-note
:desc "Find date" "d" #'org-roam-dailies-find-date
:desc "Find next note" "f" #'org-roam-dailies-find-next-note
:desc "Find tomorrow" "m" #'org-roam-dailies-find-tomorrow
:desc "Capture today" "n" #'org-roam-dailies-capture-today
:desc "Find today" "t" #'org-roam-dailies-find-today
:desc "Capture Date" "v" #'org-roam-dailies-capture-date
:desc "Find yesterday" "y" #'org-roam-dailies-find-yesterday
:desc "Find directory" "." #'org-roam-dailies-find-directory))
:config
(defun +org-init-roam-maybe-h ()
"Activate `org-roam-mode'. If it fails, fail gracefully."
(unless (with-demoted-errors "ORG ROAM ERROR: %s"
(org-roam-mode +1)
t)
(message "To try reinitializing org-roam, run 'M-x org-roam-mode'")
(org-roam-mode -1)))
(setq org-roam-directory
(file-name-as-directory
(file-truename
(expand-file-name (or org-roam-directory "roam")
org-directory)))
org-roam-db-location (or org-roam-db-location
(concat doom-data-dir "org-roam.db"))
;; Make org-roam buffer sticky; i.e. don't replace it when opening a
;; file with an *-other-window command.
org-roam-buffer-window-parameters '((no-delete-other-windows . t))
org-roam-link-use-custom-faces 'everywhere
org-roam-completion-everywhere t
org-roam-completion-system
(cond ((modulep! :completion helm) 'helm)
((modulep! :completion ivy) 'ivy)
((modulep! :completion ido) 'ido)
('default)))
;; Normally, the org-roam buffer doesn't open until you explicitly call
;; `org-roam'. If `+org-roam-open-buffer-on-find-file' is non-nil, the
;; org-roam buffer will be opened for you when you use `org-roam-find-file'
;; (but not `find-file', to limit the scope of this behavior).
(add-hook! 'find-file-hook
(defun +org-roam-open-buffer-maybe-h ()
(and +org-roam-open-buffer-on-find-file
(memq 'org-roam-buffer--update-maybe post-command-hook)
(not (window-parameter nil 'window-side)) ; don't proc for popups
(not (eq 'visible (org-roam-buffer--visibility)))
(with-current-buffer (window-buffer)
(org-roam-buffer--get-create)))))
;; Hide the mode line in the org-roam buffer, since it serves no purpose. This
;; makes it easier to distinguish from other org buffers.
(add-hook 'org-roam-buffer-prepare-hook #'hide-mode-line-mode))
;; Since the org module lazy loads org-protocol (waits until an org URL is
;; detected), we can safely chain `org-roam-protocol' to it.
(use-package! org-roam-protocol
:after org-protocol)