summaryrefslogtreecommitdiff
path: root/lisp/td-org.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/td-org.el')
-rw-r--r--lisp/td-org.el172
1 files changed, 172 insertions, 0 deletions
diff --git a/lisp/td-org.el b/lisp/td-org.el
new file mode 100644
index 0000000..d9ca50e
--- /dev/null
+++ b/lisp/td-org.el
@@ -0,0 +1,172 @@
+;;; -*- lexical-binding: t; -*-
+
+;;; ----- Bootstrapping Functions -----
+
+(defun td/org-font-setup ()
+ (font-lock-add-keywords 'org-mode
+ '(("^ *\\([-]\\) "
+ (0 (prog1 ()
+ (compose-region (match-beginning 1)
+ (match-end 1)
+ "•"))))))
+ (dolist (face '((org-level-1 . 1.2)
+ (org-level-2 . 1.15)
+ (org-level-3 . 1.1)
+ (org-level-4 . 1.0)))
+ (set-face-attribute (car face)
+ nil
+ :font "Iosevka Comfy Motion Fixed"
+ :weight 'regular
+ :height (cdr face)))
+ (set-face-attribute 'org-block
+ nil
+ :foreground nil
+ :inherit 'fixed-pitch)
+ (set-face-attribute 'org-code
+ nil
+ :foreground nil
+ :inherit '(shadow fixed-pitch))
+ (set-face-attribute 'org-table
+ nil
+ :foreground nil
+ :inherit '(shadow fixed-pitch))
+ (set-face-attribute 'org-verbatim
+ nil
+ :foreground nil
+ :inherit '(shadow fixed-pitch))
+ (set-face-attribute 'org-special-keyword
+ nil
+ :foreground nil
+ :inherit '(font-lock-comment-face fixed-pitch))
+ (set-face-attribute 'org-meta-line
+ nil
+ :foreground nil
+ :inherit '(font-lock-comment-face fixed-pitch))
+ (set-face-attribute 'org-checkbox
+ nil
+ :inherit 'fixed-pitch))
+
+(defun td/org-mode-setup ()
+ (org-indent-mode)
+ (variable-pitch-mode 1)
+ (visual-line-mode 1)
+ (setq evil-auto-indent nil))
+
+;;; ----- Package Declaration -----
+
+(use-package org
+ :ensure t
+ :hook (org-mode . td/org-mode-setup)
+ :bind (("C-c c" . org-capture)
+ ("C-c a" . org-agenda))
+ :config
+ (setq org-ellipsis " ▾"
+ org-hide-emphasis-markers t
+ org-agenda-start-with-log-mode t
+ org-log-done 'time
+ org-fontify-whole-heading-line t
+ org-fontify-quote-and-verse-blocks t
+ org-src-tab-acts-natively t
+ org-edit-src-content-indentation 2
+ org-hide-block-startup nil
+ org-log-into-drawer t
+ org-agenda-files '("~/Documents/org/tasks.org"
+ "~/Documents/org/ideas.org")
+ org-agenda-custom-commands '(("d" "Dashboard"
+ ((agenda ""
+ ((org-deadline-warning-days 7)))
+ (todo "NEXT"
+ ((org-agenda-overriding-header "Next Tasks")))))
+ ("n" "Next Tasks"
+ ((todo "NEXT"
+ ((org-agenda-overriding-header "Next Tasks")))))
+ ("s" "Status"
+ (todo "ACTIVE"
+ ((org-agenda-overriding-header "In Progress")
+ (org-agenda-files org-agenda-files)))
+ ((todo "BACKLOG"
+ ((org-agenda-overriding-header "Backlog")
+ (org-agenda-todo-list-sublevels nil)
+ (org-agenda-files org-agenda-files)))
+ (todo "CANCELED"
+ ((org-agenda-overriding-header "Canceled")
+ (org-agenda-files org-agenda-files)))
+ (todo "COMPLETED"
+ ((org-agenda-overriding-header "Completed")
+ (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 "READY"
+ ((org-agenda-overriding-header "Ready for Work")
+ (org-agenda-files org-agenda-files)))))))
+ org-capture-templates '(("t" "Tasks")
+ ("tt" "New Task" entry (file+olp (car org-agenda-files))
+ "* TODO %?\n %i" :empty-lines 1)
+ ("i" "Ideas")
+ ("ii" "New Idea" entry (file+olp (cadr org-agenda-files))
+ "* %^{Idea}\n %U\n %?\n %i" :empty-lines 1))
+ org-todo-keywords '((sequence "TODO(t)"
+ "NEXT(n)"
+ "|"
+ "DONE(d!)")
+ (sequence "BACKLOG(b)"
+ "PLAN(p)"
+ "READY(r)"
+ "ACTIVE(a)"
+ "|"
+ "COMPLETED(c)"
+ "CANCELED(k@)"))
+ org-refile-targets '(("archive.org" :maxlevel . 1)
+ ("tasks.org" :maxlevel . 1)))
+ (advice-add 'org-refile :after 'org-save-all-org-buffers)
+ (td/org-font-setup))
+
+(use-package org-appear
+ :ensure t
+ :after org
+ :custom
+ (org-hide-emphasis-markers t)
+ (org-appear-autolinks t)
+ (org-appear-inside-latex t)
+ (org-appear-autoentities t)
+ (org-appear-autosubmarkers t)
+ :config
+ (add-hook 'org-mode-hook 'org-appear-mode))
+
+(use-package org-modern
+ :ensure t
+ :hook ((org-mode . org-modern-mode)
+ (org-agenda-finalize-hook . org-modern-agenda))
+ :custom ((org-modern-todo t)
+ (org-modern-table nil)
+ (org-modern-variable-pitch nil)
+ (org-modern-block-fringe nil))
+ :commands
+ (org-modern-mode org-modern-agenda)
+ :init
+ (global-org-modern-mode))
+
+(use-package org-timeline
+ :ensure t
+ :commands org-agenda
+ :init
+ (add-hook 'org-agenda-finalize-hook 'org-timeline-insert-timeline :append))
+
+;; Code block execution and template expansion.
+(with-eval-after-load 'org
+ (org-babel-do-load-languages 'org-babel-load-languages
+ '((emacs-lisp . t)
+ (python . t)))
+
+ (push '("conf-unix" . conf-unix) org-src-lang-modes)
+
+ (require 'org-tempo)
+ (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
+ (add-to-list 'org-structure-template-alist '("py" . "src python"))
+ (add-to-list 'org-structure-template-alist '("rs" . "src rust"))
+ (add-to-list 'org-structure-template-alist '("sh" . "src shell"))
+ (add-to-list 'org-structure-template-alist '("sq" . "src sqlite")))
+
+(provide 'td-org)