;;; package --- summary +org.el
;;;  lexical-binding: t; -*-

;;; Commentary:
;;; Code:
(setq +inbox-file "~/org/inbox.org")
(setq +project-file "~/org/projects.org")
(setq +reminders-file "~/org/reminders.org")
(setq +today-file "~/org/today.org")
(setq +work-file "~/org/15five.org")

(after! org
  (setq org-directory (expand-file-name "~/org/")
        org-journal-dir "~/org/journal/"
        org-agenda-files (list org-directory)
        org-agenda-window-setup 'only-window
        org-pretty-entities t
        org-log-done 'time
        ;org-contacts-files '("~/org/contacts.org")
        ; attempt to return todo function to spacemacs
        ;evil-org-key-theme '(textobjects navigation additional insert todo)
        ;; show actually italicized text instead of /italicized text/
        ;org-agenda-block-separator ""
        org-fontify-whole-heading-line t
        org-fontify-done-headline t
        org-fontify-quote-and-verse-blocks t
        org-ellipsis "…"
        org-capture-templates
            '(("i" "Send to inbox" entry (file+headline "~/org/inbox.org" "Inbox")
               "* TODO %?\n")
               ("l" "Send to inbox with link" entry (file+headline "~/org/inbox.org" "Inbox")
               "* TODO %?\n  %i\n  %a")
              ("w" "Work diary entry" entry (file "~/org/work_diary.org")
               "* %u\n%?\n")
              ("u" "Add unblink entry" entry (file+headline "~/org/unblink.org" "Misc")
               "* TITLE\n:PROPERTIES:\n:EXPORT_FILE_NAME: TITLE\n:EXPORT_DATE: %i\n:END:\n%?\n")
              ("n" "Add an idea" entry (file "~/org/ideas.org")
               "*  %?\nEntered on %U\n"))
        org-todo-keywords
            '((sequence "TODO(t)" "NEXT(n)" "MAYBE(m)" "|" "DONE(d)" "WONTDO(w)"))

        org-todo-keyword-faces
            '((("TODO" . (:foreground "red" :weight bold))
               ("NEXT" . (:foreground "blue"))
               ("MAYBE" . (:foreground "sea green"))
               ("WAITING" . (:foreground "forest green"))
               ("WONTDO" . (:foreground "forest green"))
               ("DONE" . (:foreground "light sea green"))))

        org-agenda-span 5
        org-agenda-start-day "1d"

        org-agenda-custom-commands
            '(("N" "List all next tasks" ((agenda "" ((org-agenda-span 1)))
                                          (tags "@errand/-DONE") ; should generaly be pretty empty
                                          (tags "@book/NEXT") ; should generaly be pretty empty
                                          (tags "@work/NEXT")
                                          (tags "@home/NEXT")
                                          (tags "@farm/NEXT")
                                          (tags "@town/NEXT")))
              ("R" "Weekly Review"
                ((agenda "" ((org-agenda-span 7)))
                 (stuck "") ; review stuck projects as designated by org-stuck-projects
                 (tags "PROJECT/-DONE-MAYBE") ; review all projects
                 (todo "MAYBE") ; review someday/maybe items
                 (todo "WAITING")))) ; review waiting items

        ;;org-use-tag-inheritance t; bug in variable below, just turn 'em off
        ;;org-tags-exclude-from-injeritance '("PROJECT" "SPRINT") ; PROJECT should not be inheritable

        org-stuck-projects
          '("+PROJECT/-MAYBE-DONE" ("TODO" "NEXT") nil "\\<IGNORE\\>")

        org-tag-alist '(("@personal" . ?h)
                        ("@farm" . ?f)
                        ("@town" . ?s)
                        ("@errand" . ?e)
                        ("@15five" . ?w)
                        ("@family" . ?m))

        org-modules '(ol-eshell
                      ol-notmuch
                      ob-eval
                      ob-exp
                      ob-http
                      org-drill
                      org-id)

            ; refile targets
        org-refile-targets '(("~/org/today.org" :maxlevel . 2)
                            ("~/org/someday.org" :maxlevel . 2)
                            ("~/org/projects.org" :maxlevel . 2)
                            ("~/org/inbox.org" :maxlevel . 2)
                            ("~/org/15five.org" :maxlevel . 2))))
;; org-match-sparse-tree
;;
;; org-set-tags-command
(defun +open-inbox-file ()
  (interactive)
  "Opens the inbox file"
  (find-file +inbox-file))
(defun +open-projects-file ()
  (interactive)
  "Opens the projects file"
  (find-file +project-file))
(defun +open-reminders-file ()
  (interactive)
  "Opens the reminders file"
  (find-file +reminders-file))
(defun +open-today-file ()
  (interactive)
  "Opens the today file"
  (find-file +today-file))
(defun +open-work-file ()
  (interactive)
  "Opens the today file"
  (find-file +work-file))

(map!
 :leader
   :desc "Open inbox" "I" #'+open-inbox-file
   :desc "Open projects" "E" #'+open-projects-file
   :desc "Open work" "W" #'+open-work-file
   :desc "Open today" "T" #'+open-today-file)

(defun +show-agenda ()
  (interactive)
  (delete-other-windows)
  (with-popup-rules! nil
    (org-agenda-list)
    (calendar))
  (other-window 1)
  (split-window-vertically)
  (other-window 1)
  (find-file +todo-file))


(map! :leader
      (:prefix "f" :desc "Save all org buffers" "a" #'org-save-all-org-buffers))
