dotfiles/home/dot_config/crafted-emacs/custom-org.el

132 lines
5.2 KiB
EmacsLisp

;;; org.el -*- lexical-binding: t; -*-
;; Author: Tyler Starr
;; Commentary
;; Custom configuration for org-mode stuff!
;;; Org file locations
;; Set default working directory for org files
(setq org-directory "~/documents/org")
;; Set default locations to store notes
(setq org-default-notes-file "~/documents/org/capture/refile.org")
;; Set agenda files
(setq org-agenda-files (quote ("~/documents/org/capture"
"~/documents/org/capture/agendas"
"~/documents/org/capture/bookmarks"
"~/documents/org/capture/notes")))
;;; Set Todo Options
;; Set keywords for todo items
(setq org-todo-keywords
(quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
(sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" ))))
;; Set colors for todo items
(setq org-todo-keyword-faces
(quote (("TODO" :foreground "red" :weight bold)
("NEXT" :foreground "blue" :weight bold)
("DONE" :foreground "forest green" :weight bold)
("WAITING" :foreground "orange" :weight bold)
("HOLD" :foreground "magenta" :weight bold)
("CANCELLED" :foreground "forest green" :weight bold))))
;; Set tags based on todo changes
(setq org-todo-state-tags-triggers
(quote (("CANCELLED" ("CANCELLED" . t))
("WAITING" ("WAITING" . t))
("HOLD" ("WAITING") ("HOLD" . t))
(done ("WAITING") ("HOLD"))
("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
("NEXT" ("WAITING") ("CANCELLED") ("HOLD")))))
;; open org-capture
(global-set-key (kbd "C-c c") 'org-capture)
(defvar ts-capture-prmt-history nil
"History of prompt answers for org capture.")
(defun ts/prmt (prompt variable)
"PROMPT for string, save it to VARIABLE and insert it."
(make-local-variable variable)
(set variable (read-string (concat prompt ": ") nil ts-capture-prmt-history)))
;; Capture templates for: TODO tasks, Notes, appointments, and meetings
(setq org-capture-templates
(quote (("t" "todo" entry (file "~/documents/org/capture/refile.org")
"* TODO %?\n%U\n%a\n")
("r" "respond" entry (file "~/documents/org/capture/refile.org")
"* TODO Respond to %:from on %:subject\nSCHEDULED: %t\n%U\n%a\n")
("w" "workout" entry (file+datetree "~/documents/org/tracking/workout.org")
"* Test: %(ts/prmt \"Hey\" 'lel) - %(ts/prmt \"Hey1\" 'lel)")
("n" "note" entry (file "~/documents/org/capture/refile.org")
"* %? :NOTE:\n%U\n%a\n")
("m" "Meeting" entry (file "~/documents/org/capture/refile.org")
"* MEETING with %? :MEETING:\n%U")
("h" "Habit" entry (file "~/documents/org/capture/refile.org")
"* NEXT %?\n%U\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n"))))
;; Targets include this file and any file contributing to the agenda - up to 9 levels deep
(setq org-refile-targets (quote ((nil :maxlevel . 9)
(org-agenda-files :maxlevel . 9))))
;; Use full outline paths for refile targets - we file directly with IDO
(setq org-refile-use-outline-path t)
;; Targets complete directly with IDO
(setq org-outline-path-complete-in-steps nil)
;; Allow refile to create parent tasks with confirmation
(setq org-refile-allow-creating-parent-nodes (quote confirm))
;; Exclude DONE state tasks from refile targets
(defun bh/verify-refile-target ()
"Exclude todo keywords with a done state from refile targets"
(not (member (nth 2 (org-heading-components)) org-done-keywords)))
(setq org-refile-target-verify-function 'bh/verify-refile-target)
(crafted-package-install-package 'org-super-agenda)
(org-super-agenda-mode)
(setq org-super-agenda-header-map (make-sparse-keymap))
(setq org-agenda-custom-commands
'(("c" "Custom Agenda"
((agenda "" ((org-agenda-span 'day)
(org-super-agenda-groups
'((:name "--- LATE ---"
:face (:underline t)
:deadline past
:order 1)
(:name "--- DUE TODAY ---"
:time-grid t
:deadline today
:order 2)
(:name "--- SCHEDULED TODAY ---"
:time-grid t
:date today
:scheduled today
:order 3)
(:name ""
:discard (:anything)
:order 99))
)))))))
;; Configure common tags
(setq org-tag-alist
'((:startgroup)
; Put mutually exclusive tags here
(:endgroup)
("@errand" . ?E)
("@home" . ?H)
("@work" . ?W)
("agenda" . ?a)
("planning" . ?p)
("publish" . ?P)
("batch" . ?b)
("note" . ?n)
("idea" . ?i)
("thinking" . ?t)
("recurring" . ?r)))
;;; Provide the module
(provide 'custom-org)