;; The all-powerful Org mode (use-package org :straight org-plus-contrib :mode (("\\.org\\'" . org-mode)) :init (leader-def-key "o" '(nil :which-key "org")) :config (add-hook 'org-mode-hook #'auto-fill-mode) :custom (org-agenda-files `(,(expand-file-name "~/org/todo.org") ,(expand-file-name "~/org/deft/unifydb.org") ,(expand-file-name "~/org/lola-gcal.org") ,(expand-file-name "~/org/personal-gcal.org") ,(expand-file-name "~/org/j-n-gcal.org"))) (org-todo-keywords '((sequence "TODO(t)" "IN PROGRESS(i)" "BLOCKED(b)" "|" "DONE(d)" "CANCELLED(c)"))) (org-capture-templates `(("l" "Lola task" entry (file+headline ,(expand-file-name "~/org/todo.org") "Lola") "* TODO %i%?") ("p" "Personal task" entry (file+headline ,(expand-file-name "~/org/todo.org") "Personal") "* TODO %i%?"))) (org-return-follows-link t) (org-ellipsis " ▼") (org-src-fontify-natively t) (org-log-done 'time) (org-agenda-custom-commands '(("t" "TODOs" ((agenda) (alltodo))))) (org-agenda-span 'day) (org-agenda-todo-ignore-scheduled 'future) (org-agenda-tags-todo-honor-ignore-options t) :general (leader-map "oa" #'org-agenda) (leader-map "oc" #'org-capture)) (use-package evil-org :after org :hook ((org-mode . evil-org-mode) (org-agenda-mode . (lambda () (require 'evil-org-agenda) (evil-org-agenda-set-keys))))) (use-package org-super-agenda :after (org) :defer 1 :config (org-super-agenda-mode) ;; Nuke the header keybindings (setq org-super-agenda-header-map (make-sparse-keymap)) :custom (org-super-agenda-groups `((:name "In progress" :todo "IN PROGRESS") (:name "Lola" :tag "@lola") (:name "unifyDB" :tag "@unifydb") (:name "Personal" :tag "@personal") (:name "Jira" :file-path ,(expand-file-name "~/org/jira"))))) (use-package org-gcal :commands (org-gcal-sync org-gcal-fetch org-gcal-post-at-point org-gcal-delete-at-point org-gcal-request-token) :after (org evil-org) :init (defun org-agenda-redo-and-fetch-gcal (&optional all) (interactive "P") (let ((cb (if all #'org-agenda-redo-all #'org-agenda-redo))) (deferred:nextc (org-gcal-fetch) cb))) (advice-add 'evil-org-agenda-set-keys :after (lambda () (general-def 'motion org-agenda-mode-map "gR" #'org-agenda-redo-and-fetch-gcal))) :config (setq org-gcal-client-id (password-store-get "lola-org-gcal-client-id") org-gcal-client-secret (password-store-get "lola-org-gcal-client-secret") org-gcal-fetch-file-alist `(("jeremydormitzer@lola.com" . ,(expand-file-name "~/org/lola-gcal.org")) ("jeremy.dormitzer@gmail.com" . ,(expand-file-name "~/org/personal-gcal.org")) ("lut2o2moohg6qkdsto1qfq7th4@group.calendar.google.com" . ,(expand-file-name "~/org/j-n-gcal.org"))) org-gcal-notify-p nil)) (use-package org-jira :after (org) :init (setq jiralib-url "https://lola.atlassian.net" org-jira-working-dir (expand-file-name "~/org/jira") org-jira-jira-status-to-org-keyword-alist '(("To Do" . "TODO") ("Blocked" . "BLOCKED") ("In Progress" . "IN PROGRESS") ("Code Review" . "IN PROGRESS") ("Awaiting Release" . "IN PROGRESS") ("Done" . "DONE") ("Won't Fix" . "CANCELLED"))) (add-to-list 'org-agenda-files org-jira-working-dir)) ;; org-roam provides backlinks between org documents (use-package org-roam :hook (org-mode . org-roam-mode) :custom (org-roam-directory "~/org") :bind (:map org-roam-mode-map (("C-c n l" . org-roam) ("C-c n f" . org-roam-find-file) ("C-c n g" . org-roam-graph)) :map org-mode-map (("C-c n i" . org-roam-insert)) (("C-c n I" . org-roam-insert-immediate))) :general (leader-map "of" #'org-roam-find-file) :config (general-def org-roam-mode-map "C-c n" '(nil :which-key "org-roam")) (general-def org-mode-map "C-c n" '(nil :which-key "org-roam")) (general-def 'normal org-roam-backlinks-mode-map "RET" #'org-open-at-point "q" #'bury-buffer)) (provide 'init-org)