;;; -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (use-package org :custom (org-ellipsis " ▾") (org-babel-python-command "python3") (org-confirm-babel-evaluate nil) (org-hide-emphasis-markers t) (org-startup-folded 'show3levels) :config (defun bd/org-mode-setup-hook () "Sets up improved org-mode defaults upon each org file open." (org-indent-mode) (org-toggle-inline-images) (org-latex-preview '(16))) (add-hook 'org-mode-hook 'bd/org-mode-setup-hook) (plist-put org-format-latex-options :scale 1.2) (push '("\\.pdf\\'" . "zathura %s") org-file-apps) (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (shell . t) (lisp . t) (scheme . t) (dot . t) (python . t)))) (use-package ox :custom (org-latex-toc-command "\\tableofcontents \\clearpage") (org-export-with-toc nil) (org-export-preserve-breaks t)) (use-package org-agenda :bind (("C-c n a" . org-agenda) ("C-c n c" . org-capture) ("C-c n s" . org-schedule) ("C-c n d" . org-deadline) ("C-c n r" . org-refile)) :config (advice-add 'org-refile :after 'org-save-all-org-buffers) (defvar-local agenda-file "~/dc/agenda/agenda_tasks.org") (defvar-local bd/course-list '(("520" . ?2) ("575" . ?7) ("610" . ?1)) "Courses for tagging, capturing, and various agenda views.") (defvar-local bd/device-list '(("garm" . ?G) ("heimdallr" . ?H) ("hodr" . ?M) ("surt" . ?I) ("vali" . ?V)) "Devices for tagging, capturing, and various agenda views.") (defun bd/combine-tags (tag-alist add? or-p) "Given TAG-ALIST in the form of ORG-TAG-ALIST, returns a concatenated string representing all the tags ORd or ANDed together." (apply #'concat (mapcar (lambda (e) (concat (when or-p "|") (if add? "+" "-") (car e))) tag-alist))) (setopt org-log-done 'time org-deadline-warning-days 7 org-log-into-drawer "history" org-agenda-restore-windows-after-quit t org-agenda-show-future-repeats nil org-todo-keywords '((sequence "TODO(t)" "NEXT(n!)" "HOLD(h!)" "|" "DONE(d)" "CANC(c)")) org-tag-alist `(("chore" . ?C) ,@bd/device-list ("idea" . ?i) ("programming" . ?p) ("web" . ?s) ("writing" . ?w) ("reading" . ?r) ,@bd/course-list) org-refile-targets '(("archived_tasks.org" :maxlevel . 1) ("agenda_tasks.org" :maxlevel . 1)) org-agenda-files `(,agenda-file "~/dc/agenda/archived_tasks.org") org-capture-templates `(("c" " College") ("cs" "Software Engineering Theory" entry (file+olp ,agenda-file "CS520") "* TODO %?\n DEADLINE: %^t") ("cm" "Combinatorics/Graph Theory" entry (file+olp ,agenda-file "CS575") "* TODO %?\n DEADLINE: %^t") ("cc" "Compiler Techniques" entry (file+olp ,agenda-file "CS610") "* TODO %?\n DEADLINE: %^t") ("s" " Self") ("si" "Idea" entry (file+olp ,agenda-file "Idea / Return") "* TODO %?\n %u") ("sc" "Context" entry (file+olp ,agenda-file "Idea / Return") "* TODO %?\n %a") ("st" "Deadline" entry (file+olp ,agenda-file "Deadline") "* TODO %?\n DEADLINE: %^t") ("sb" "Book" entry (file+olp ,agenda-file "Book List") "* TODO %?\n %u"))) (let ((orphan-view '(tags-todo "-{.*}" ((org-agenda-block-separator nil) (org-agenda-overriding-header "\nOrphaned Items\n"))))) (setopt org-agenda-custom-commands `(("c" "Chores" ((agenda "" ((org-agenda-block-separator nil) (org-agenda-entry-types '(:deadline)) (org-agenda-show-all-dates nil) (org-agenda-span 21) (org-deadline-warning-days 0) (org-agenda-skip-function '(org-agenda-skip-entry-if 'notregexp (regexp-opt (cons "chore" (mapcar #'car bd/device-list))))) (org-agenda-overriding-header "\nPriority Deadlines (+21d)\n"))) (tags-todo (concat "chore" (bd/combine-tags bd/device-list nil nil)) ((org-agenda-block-separator nil) (org-agenda-overriding-header "Mundane\n"))) ,@(mapcar (lambda (e) `(tags-todo ,(car e) ((org-agenda-block-separator nil) (org-agenda-overriding-header (concat "\nDevice: " ,(capitalize (car e)) "\n"))))) bd/device-list) ,orphan-view)) ("r" "Recreational" ((tags-todo "+idea" ((org-agenda-block-separator nil) (org-agenda-skip-function '(org-agenda-skip-entry-if 'regexp "chore")) (org-agenda-overriding-header "Ideas\n"))) (tags-todo "+reading|+writing" ((org-agenda-block-separator nil) (org-agenda-skip-function '(org-agenda-skip-entry-if 'regexp "chore")) (org-agenda-overriding-header "\nReading/Writing\n"))) (tags-todo "+programming|+web" ((org-agenda-block-separator nil) (org-agenda-skip-function '(org-agenda-skip-entry-if 'regexp "chore")) (org-agenda-overriding-header "\nProgramming\n"))) ,orphan-view)) ("s" "College" ((tags-todo (bd/combine-tags bd/course-list t t) ((org-agenda-block-separator nil) (org-agenda-overriding-header "\nAll Courses\n"))) (agenda "" ((org-agenda-block-separator nil) (org-agenda-entry-types '(:deadline :scheduled)) (org-agenda-show-all-dates nil) (org-agenda-span 15) (org-deadline-warning-days 0) (org-scheduled-past-days 7) (org-agenda-skip-function '(org-agenda-skip-entry-if 'notregexp (regexp-opt (mapcar #'car bd/course-list)))) (org-agenda-overriding-header "\nUpcoming Deadlines (+15d)\n"))) ,orphan-view)))))) (provide 'bd--org) ;;; bd-org ends here