mirror of
https://codeberg.org/andyscott/dotfiles.git
synced 2024-11-09 14:00:47 -05:00
237 lines
8.9 KiB
EmacsLisp
237 lines
8.9 KiB
EmacsLisp
;;; org-mode.el --- org-mode customizations -*- lexical-binding: t -*-
|
|
|
|
;; Author: Andrew Scott <git at andyscott dot me>
|
|
;; Keywords: org, convenience, tools
|
|
;; URL: https://codeberg.org/andyscott/dotfiles
|
|
|
|
;; This file is not part of GNU Emacs
|
|
|
|
;; Copyright (c) 2024 Andrew Scott
|
|
|
|
;; MIT No Attribution
|
|
|
|
;; Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
|
;; software and associated documentation files (the "Software"), to deal in the Software
|
|
;; without restriction, including without limitation the rights to use, copy, modify,
|
|
;; merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
|
|
;; permit persons to whom the Software is furnished to do so.
|
|
|
|
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
;; INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
;; PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
;; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
;; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
;;; Commentary:
|
|
|
|
;; My org-mode customizations.
|
|
|
|
;;; Code:
|
|
|
|
(use-package org
|
|
:bind
|
|
(:map global-map
|
|
("C-c a" . org-agenda)
|
|
("C-c c" . org-capture)
|
|
("C-c l" . org-store-link))
|
|
:config
|
|
;; General options TODO: Comment various options more descriptively
|
|
(setopt org-agenda-block-separator nil
|
|
org-agenda-files (directory-files-recursively org-directory "org$")
|
|
org-agenda-skip-deadline-if-done t
|
|
org-agenda-skip-scheduled-if-deadline-is-shown t
|
|
org-agenda-skip-scheduled-if-done t
|
|
org-agenda-start-on-weekday nil
|
|
org-agenda-tags-column 0
|
|
org-archive-location (concat org-directory "/archive/archive.org::* From %s")
|
|
org-blank-before-new-entry '((heading . auto)
|
|
(plain-list-item . auto))
|
|
org-enforce-todo-dependencies t
|
|
org-fold-catch-invisible-edits 'show-and-error
|
|
org-fontify-done-headline nil
|
|
org-fontify-quote-and-verse-blocks t
|
|
org-fontify-todo-headline t
|
|
org-goto-interface 'outline-path-completion
|
|
org-hide-emphasis-markers t
|
|
org-insert-heading-respect-content t
|
|
org-log-done 'time
|
|
org-outline-path-complete-in-steps nil
|
|
org-pretty-entities t
|
|
org-refile-allow-creating-parent-nodes 'confirm
|
|
org-refile-targets '((nil :maxlevel . 3)
|
|
(org-agenda-files :maxlevel . 2))
|
|
org-refile-use-outline-path nil
|
|
org-return-follows-link t
|
|
org-reverse-note-order t ; Add/refile notes at the beginning of an entry
|
|
org-src-preserve-indentation t
|
|
org-startup-folded 'fold
|
|
org-tags-column 0
|
|
org-todo-keywords '((sequence "BLOCKED(b@/!)" "IN-PROGRESS(i@/!)"
|
|
"TODO(t)" "WAITING(w@/!)" "|" "DONE(d!)"
|
|
"WONT-DO(n@/!)"))
|
|
;; org-todo-keyword-faces '(("TODO" . (icon-button))
|
|
;; ("IN-PROGRESS" . (tool-bar))
|
|
;; ("BLOCKED" . (match))
|
|
;; ("WONT-DO" . (org-done)))
|
|
org-todo-repeat-to-state "TODO")
|
|
|
|
(setq org-capture-templates
|
|
`(
|
|
("m" "Personal")
|
|
("mj" "Log Entry"
|
|
entry (file+datetree ,(concat org-directory "/personal_log.org"))
|
|
"** %?"
|
|
:empty-lines 1)
|
|
|
|
("mn" "Note"
|
|
entry (file+headline ,(concat org-directory "/notes.org") "Note to self...")
|
|
"** %?"
|
|
:empty-lines 1)
|
|
|
|
("mt" "Todo"
|
|
entry (file+headline ,(concat org-directory "/inbox.org") "You can do it!")
|
|
"** TODO [#B] %?\n:CREATED: %U\n "
|
|
:empty-lines 1)
|
|
|
|
("p" "Projects")
|
|
("pn" "Note"
|
|
entry (file+headline ,(concat org-directory "/notes.org") "Project Notes")
|
|
"** %?"
|
|
:empty-lines 1)
|
|
|
|
("pt" "Todo"
|
|
entry (file+headline ,(concat org-directory "/inbox.org") "Project Tasks")
|
|
"** TODO [#B] %?\n:CREATED: %U\n%i\n%a\nNotes: "
|
|
:empty-lines 1)
|
|
|
|
("w" "Work")
|
|
("wn" "Note"
|
|
entry (file+headline ,(concat org-directory "/notes.org") "Work Notes")
|
|
"** %?"
|
|
:empty-lines 1)
|
|
|
|
("wt" "Todo"
|
|
entry (file+headline ,(concat org-directory "/inbox.org") "Work Tasks")
|
|
"** TODO [#B] %?\n:CREATED: %U\n%i\n%a\nNotes: "
|
|
:empty-lines 1)))
|
|
|
|
;; Headline appearance
|
|
(custom-set-faces
|
|
'(org-level-1 ((t (:inherit outline-1 :height 1.5))))
|
|
'(org-level-2 ((t (:inherit outline-2 :height 1.4))))
|
|
'(org-level-3 ((t (:inherit outline-3 :height 1.3))))
|
|
'(org-level-4 ((t (:inherit outline-4 :height 1.2))))
|
|
'(org-level-5 ((t (:inherit outline-5 :height 1.1)))))
|
|
:hook (org-mode . org-indent-mode)
|
|
:init
|
|
(setopt org-directory "~/Nextcloud/Documents/org")
|
|
(bind-keys :prefix-map as/org-prefix-map
|
|
:prefix "C-c o"
|
|
("n" . org-metadown)
|
|
("p" . org-metaup)
|
|
("f" . org-shiftmetaright)
|
|
("b" . org-shiftmetaleft)
|
|
("v" . org-tags-view)
|
|
("C-n" . org-priority-down)
|
|
("C-p" . org-priority-up)))
|
|
|
|
(use-package org-appear
|
|
:config
|
|
(setopt org-appear-autoentities t
|
|
org-appear-autolinks t
|
|
org-appear-autosubmarkers t
|
|
org-appear-trigger 'on-change)
|
|
:hook (org-mode . org-appear-mode))
|
|
|
|
(use-package org-modern
|
|
:disabled
|
|
:config
|
|
(setopt org-modern-symbol "Hack")
|
|
:hook
|
|
(org-mode . org-modern-mode)
|
|
(org-agenda-finalize . org-modern-agenda))
|
|
|
|
(use-package org-super-agenda
|
|
:hook (org-agenda-mode . org-super-agenda-mode)
|
|
:init
|
|
(setq org-agenda-custom-commands
|
|
'(("u" "Super agenda"
|
|
|
|
((agenda "" ((org-agenda-prefix-format " %?-12t %s")
|
|
;; (org-agenda-prefix-format " %-20:c%?-12t %s")
|
|
(org-agenda-remove-tags t)
|
|
(org-agenda-skip-function '(org-agenda-skip-entry-if
|
|
'todo '("DONE" "WONT-DO")))
|
|
(org-agenda-span 5)))
|
|
|
|
(alltodo "" ((org-agenda-overriding-header "")
|
|
(org-agenda-prefix-format " %?-12t %s")
|
|
(org-agenda-remove-tags t)
|
|
(org-super-agenda-groups
|
|
'((:name "Important"
|
|
:priority "A"
|
|
:order 0)
|
|
|
|
(:name "In-Progress"
|
|
:todo "IN-PROGRESS"
|
|
:order 2)
|
|
|
|
(:name "Blocked"
|
|
:todo "BLOCKED"
|
|
:order 3)
|
|
|
|
(:name "Overdue"
|
|
:deadline past
|
|
:scheduled past
|
|
:order 1)
|
|
|
|
;; TODO: Figure out how to organize chores/personal
|
|
(:name "Chores"
|
|
:tag "chores"
|
|
:order 19)
|
|
|
|
(:name "Personal"
|
|
:habit t
|
|
:order 17)
|
|
|
|
(:name "Research"
|
|
:tag "research"
|
|
:order 7)
|
|
|
|
(:name "Upcoming"
|
|
:deadline future
|
|
:scheduled future
|
|
:order 18)
|
|
|
|
(:name "Project Backlog"
|
|
:and (:todo "TODO" :tag "project")
|
|
:order 5)
|
|
|
|
(:name "General Backlog"
|
|
:and (:todo "TODO" :priority "B")
|
|
:order 6)
|
|
|
|
(:name "Less Important"
|
|
:priority<= "C"
|
|
:order 20))))))))))
|
|
|
|
(use-package org-superstar
|
|
:config
|
|
(setopt org-indent-mode-turns-on-hiding-stars nil
|
|
org-superstar-leading-bullet ?\s
|
|
org-superstar-special-todo-items t)
|
|
:hook (org-mode . org-superstar-mode))
|
|
|
|
(use-package org-timeblock
|
|
:bind
|
|
(:map as/org-prefix-map
|
|
("t" . org-timeblock))
|
|
:config
|
|
(setopt org-timeblock-new-task-time 'pick
|
|
org-timeblock-show-future-repeats 'next
|
|
org-timeblock-scale-options (cons 7 20)
|
|
org-timeblock-span 3))
|
|
|
|
(provide 'init-org)
|
|
;;; org-mode.el ends here
|