dotfiles/Emacs/custom/setup-org.el
2025-05-30 23:03:58 -04:00

160 lines
5.1 KiB
EmacsLisp
Executable File

(use-package org-bullets
:config
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
:custom
(org-bullets-bullet-list '("" "" "" "" "" "" "")))
(setq org-hide-emphasis-markers t
org-pretty-entities t
org-agenda-tags-column 0
org-auto-align-tags nil
org-tags-column 0
org-catch-invisible-edits 'show-and-error
org-special-ctrl-a/e t
org-insert-heading-respect-content t
org-ellipsis "")
(add-hook 'org-mode-hook (lambda ()
(variable-pitch-mode)
(visual-line-mode)
(org-indent-mode)))
(defun update-org-last-modified ()
"Update the #+LAST_MODIFIED everytime we save."
(when (derived-mode-p 'org-mode)
(save-excursion
(goto-char (point-min))
(when (re-search-forward "^#\\+LAST_MODIFIED:" nil t)
(delete-region (point) (line-end-position))
(insert (format-time-string " %Y-%m-%dT%H:%M:%S%z" (current-time) t))))))
(add-hook 'before-save-hook 'update-org-last-modified)
(font-lock-add-keywords 'org-mode
'(("^ *\\([-]\\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) ""))))))
(custom-theme-set-faces
'user
'(org-block ((t (:inherit fixed-pitch))))
'(org-code ((t (:inherit (shadow fixed-pitch)))))
'(org-document-info ((t (:foreground "dark orange"))))
'(org-document-info-keyword ((t (:inherit (shadow fixed-pitch)))))
'(org-indent ((t (:inherit (org-hide fixed-pitch)))))
'(org-link ((t (:foreground "royal blue" :underline t))))
'(org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch)))))
'(org-property-value ((t (:inherit fixed-pitch))) t)
'(org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch)))))
'(org-table ((t (:inherit fixed-pitch :foreground "#83a598"))))
'(org-tag ((t (:inherit (shadow fixed-pitch) :weight bold :height 0.8))))
'(org-verbatim ((t (:inherit (shadow fixed-pitch))))))
(use-package org-roam
:ensure t
:custom
(org-roam-directory "~/RoamNotes")
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert))
:config
(org-roam-setup))
(use-package org-drill
:ensure t)
;; setup agenda
(setq org-directory "~/Org"
org-agenda-files '("Tasks.org" "Birthdays.org" "Habits.org")
org-agenda-start-with-log-mode t
org-log-done 'time
org-log-into-drawer t)
(setq org-todo-keywords
'((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)")
(sequence "BACKLOG(b)" "PLANNED(p)" "READY(r)" "ACTIVE(a)" "REVIEW(v)" "WAIT(w@/!)" "HOLD(h)" "|" "COMPLETED(c)")))
(setq org-agenda-custom-commands
'(("d" "Dashboard"
((agenda "" ((org-deadline-warning-days 7)))
(todo "NEXT"
((org-agenda-overriding-header "Next Tasks")))
(tags-todo "agenda/ACTIVE" ((org-agenda-overriding-header "Active Projects")))))
("n" "Next Tasks"
((todo "NEXT"
((org-agenda-overriding-header "Next Tasks")))))
;; Low-effort next actions
("e" tags-todo "+TODO=\"NEXT\"+Effort<15&+Effort>0"
((org-agenda-overriding-header "Low Effort Tasks")
(org-agenda-max-todos 20)
(org-agenda-files org-agenda-files)))
("w" "Workflow Status"
((todo "WAIT"
((org-agenda-overriding-header "Waiting on External")
(org-agenda-files org-agenda-files)))
(todo "REVIEW"
((org-agenda-overriding-header "In Review")
(org-agenda-files org-agenda-files)))
(todo "PLAN"
((org-agenda-overriding-header "In Planning")
(org-agenda-todo-list-sublevels nil)
(org-agenda-files org-agenda-files)))
(todo "BACKLOG"
((org-agenda-overriding-header "Project Backlog")
(org-agenda-todo-list-sublevels nil)
(org-agenda-files org-agenda-files)))
(todo "READY"
((org-agenda-overriding-header "Ready for Work")
(org-agenda-files org-agenda-files)))
(todo "ACTIVE"
((org-agenda-overriding-header "Active Projects")
(org-agenda-files org-agenda-files)))
(todo "COMPLETED"
((org-agenda-overriding-header "Completed Projects")
(org-agenda-files org-agenda-files)))
(todo "CANC"
((org-agenda-overriding-header "Cancelled Projects")
(org-agenda-files org-agenda-files)))))))
(setq org-capture-templates
`(("t" "Tasks / Projects")
("tt" "Task" entry (file+olp "~/Org/Tasks.org" "Inbox")
"* TODO %?\n %U\n %i" :empty-lines 1)
("ts" "Clocked Entry Subtask" entry (clock)
"* TODO %?\n %U\n %i" :empty-lines 1)
("j" "Journal Entries")
("jj" "Journal" entry
(file+olp+datetree "~/Org/Journal.org")
"\n* %<%I:%M %p> - Journal :journal:\n\n%?\n\n"
:clock-in :clock-resume
:empty-lines 1)
("jm" "Meeting" entry
(file+olp+datetree "~/Org/Tasks.org")
"* %<%I:%M %p> - Meeting :meetings:\n\n%?\n\n"
:clock-in :clock-resume
:empty-lines 1)))
(define-key global-map (kbd "C-c j")
(lambda () (interactive) (org-capture)))
;; org-habit
(require 'org-habit)
(add-to-list 'org-modules 'org-habit)
(setq org-habit-graph-column 60)
;; org-babel
(org-babel-do-load-languages
'org-babel-load-languages
'(
(C . t)
(scheme . t)))
(provide 'setup-org)