Getting Things Done Framework

about | blog | config | notes | github

1. Useful Resources

2. What is GTD?

GTD is an acronym for "Getting Things Done". It is a framework for managing tasks and projects.

This document covers how I use GTD. We configure this framework for Org-mode which really just provides a barebones system for implementnig any task management system. So, what I've ended up doing is not exactly "GTD", but it is a variation that better suits my workflow.

3. Configuration

3.1. Setup Dependencies

First let's make sure we pull in Org-mode as we build of it's provided system.

(require 'init-org)

We define capture templates with Doct here as well.

(require 'init-doct)

3.2. Task Management Workflow

gtd_workflow.png

We can define a workflow that achieves this with the following set of sequences for org-todo-keywords.

(setq org-todo-keywords
      '((sequence "TODO(t)" "|" "DONE(d)")
        (sequence "|" "BACKLOG(b)")
        (sequence "|" "BLOCKED(B)")
        (sequence "|" "CANCELLED(c)")))

3.3. Face Customization

We make use of doom-themes built in functions to get the primary colors of the current theme we are using. This also means that we have to use a doom-theme.

;; (defun zamlz/configure-org-todo-keyword-faces ()
;;   (interactive)
;;   (message "Configure org todo keyword faces")
;;   (let
;;       ((black   (doom-color 'bg))
;;        (grey    (doom-color 'base1))
;;        (red     (doom-color 'red))
;;        (orange  (doom-color 'orange))
;;        (green   (doom-color 'green))
;;        (yellow  (doom-color 'yellow))
;;        (blue    (doom-color 'blue))
;;        (violet  (doom-color 'violet))
;;        (cyan    (doom-color 'cyan))
;;        (white   (doom-color 'white)))
;;     (setq org-todo-keyword-faces
;;           `(("TODO"      . (:weight bold :foreground ,black  :background ,red))
;;             ("BLOCKED"   . (:weight bold :foreground ,black  :background ,yellow))
;;             ("BACKLOG"   . (:weight bold :foreground ,black  :background ,violet))
;;             ("CANCELLED" . (:weight bold :foreground ,black  :background ,grey))
;;             ("DONE"      . (:weight bold :foreground ,black  :background ,green))))))

Alternate simpler version

(defun zamlz/configure-org-todo-keyword-faces ()
  (interactive)
  (message "Configure org todo keyword faces")
  (let ((red     "#cc241d")
        (green   "#98971a")
        (blue    "#458588")
        (magenta "#b16286")
        (yellow  "#d79921")
        (white   "#181818"))
    (setq org-todo-keyword-faces
          `(("TODO"      . (:weight bold :foreground ,white :background ,red))
            ("BLOCKED"   . (:weight bold :foreground ,white :background ,magenta))
            ("BACKLOG"   . (:weight bold :foreground ,white :background ,blue))
            ("CANCELLED" . (:weight bold :foreground ,white :background ,yellow))
            ("DONE"      . (:weight bold :foreground ,white :background ,green))))))

We should call this function in order to set those colors.

(zamlz/configure-org-todo-keyword-faces)

3.4. Track Habits

Enables habit tracking in org-mode via org-habit.

(with-eval-after-load 'org
  (add-to-list 'org-modules 'org-habit t)
  (setq org-habit-graph-column 40)
  (setq org-habit-preceding-days 28)
  (setq org-habit-following-days 7)
  (setq org-habit-show-habits-only-for-today t)
  (setq org-habit-show-all-today t)
  (setq org-habit-show-done-always-green t))

3.5. Capture Templates

Org mode template definitions in the doct format

(setq org-capture-templates
      (doct '(:group "ORG CAPTURE TEMPLATES"
                     :children
                     ((:group "GTD Tasks"
                              :file "tasks.org"
                              :headline "Inbox"
                              :type entry
                              :prepend t
                              :template ("* %{todo-state} %? :INBOX:"
                                         ":PROPERTIES:"
                                         ":created: %U"
                                         ":END:")
                              :children
                              (("[GTD] Todo Task" :keys "t" :todo-state "TODO")
                               ("[GTD] Someday/Maybe" :keys "s" :todo-state "SOMEDAY")
                               ("[GTD] Meeting/Appointment" :keys "m" :todo-state "MEETING")))
                      (:group "Journal"
                              :file "journal.org"
                              :datetree t
                              :type entry
                              :prepend t
                              :template ("* %U - %? %{journal-type}"
                                         ":PROPERTIES:"
                                         ":created: %U"
                                         ":END:")
                              :children
                              (("[Journal] Entry" :keys "j" :journal-type ":JOURNAL:")
                               ("[Journal] Recollection" :keys "r"
                                :journal-type ":RECOLLECTION:" :time-prompt t)
                               ("[Journal] Dream Entry" :keys "d" :journal-type ":DREAM:")
                               ("[Journal] Phone Call" :keys "p" :journal-type ":@PHONE:")))
                      ))))

3.6. Feature Provide

(provide 'init-gtd)

Created: 2021-11-13

Emacs 26.1 (Org mode 9.5)