Commit 2a5e24ae2229

Vincent Demeester <vincent@sbr.pm>
2025-05-25 19:06:40
tools/emacs/mini: org-mode configuration…
… it is just a start, missing a lot of my usual customization, but let's try to add them as we go. Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 46b104b
Changed files (1)
tools
emacs
tools/emacs/mini/init.el
@@ -851,6 +851,168 @@
 ;; TODO window management
 ;; TODO ORG mode configuration (BIG one)
 (use-package org
+  :mode (("\\.org$" . org-mode)
+         ("\\.org.draft$" . org-mode))
+  :commands (org-agenda org-capture)
+  :bind (("C-c o l" . org-store-link)
+         ("C-c o r r" . org-refile)
+	 ;; ("C-c o r R" . vde/reload-org-refile-targets)
+         ("C-c o a a" . org-agenda)
+	 ;; ("C-c o a r" . vde/reload-org-agenda-files)
+	 ;; ("C-c C-x i" . vde/org-clock-in-any-heading)
+         ("C-c o s" . org-sort)
+	 ("C-c O" . org-open-at-point-global)
+         ("<f12>" . org-agenda))
+  :custom
+  (org-use-speed-commands t)
+  (org-special-ctrl-a/e t)
+  (org-special-ctrl-k t)
+  (org-hide-emphasis-markers t)
+  (org-pretty-entities t)
+  (org-ellipsis "…")
+  (org-return-follows-link t)
+  (org-todo-keywords '((sequence "STRT(s)" "NEXT(n)" "TODO(t)" "WAIT(w)" "|" "DONE(d!)" "CANX(c@/!)")))
+  (org-todo-state-tags-triggers '(("CANX" ("CANX" . t))
+                                  ("WAIT" ("WAIT" . t))
+                                  (done ("WAIT"))
+                                  ("TODO" ("WAIT") ("CANX"))
+                                  ("NEXT" ("WAIT") ("CANX"))
+                                  ("DONE" ("WAIT") ("CANX"))))
+  (org-tag-alist
+   '((:startgroup)
+     ("Handson" . ?o)
+     (:grouptags)
+     ("Write" . ?w) ("Code" . ?c)
+     (:endgroup)
+     
+     (:startgroup)
+     ("Handsoff" . ?f)
+     (:grouptags)
+     ("Read" . ?r) ("Watch" . ?W) ("Listen" . ?l)
+     (:endgroup)))
+  (org-log-done 'time)
+  (org-log-redeadline 'time)
+  (org-log-reschedule 'time)
+  (org-log-into-drawer t)
+  (org-list-demote-modify-bullet '(("+" . "-") ("-" . "+")))
+  (org-agenda-file-regexp "^[a-zA-Z0-9-_]+.org$")
+  (org-agenda-files `(,org-inbox-file ,org-todos-file))
+  (org-agenda-remove-tags t)
+  (org-agenda-span 'day)
+  (org-agenda-start-on-weekday 1)
+  (org-agenda-window-setup 'current-window)
+  (org-agenda-sticky t)
+  (org-agenda-sorting-strategy
+   '((agenda time-up deadline-up scheduled-up todo-state-up priority-down)
+     (todo todo-state-up priority-down deadline-up)
+     (tags todo-state-up priority-down deadline-up)
+     (search todo-state-up priority-down deadline-up)))
+  (org-agenda-custom-commands
+   '(
+     ;; Archive tasks
+     ("#" "To archive" todo "DONE|CANX")
+     ;; TODO take inspiration from those
+     ;; ("$" "Appointments" agenda* "Appointments")
+     ;; ("b" "Week tasks" agenda "Scheduled tasks for this week"
+     ;;  ((org-agenda-category-filter-preset '("-RDV")) ; RDV for Rendez-vous
+     ;;   (org-agenda-use-time-grid nil)))
+     ;; 
+     ;; ;; Review started and next tasks
+     ;; ("j" "STRT/NEXT" tags-todo "TODO={STRT\\|NEXT}")
+     ;; 
+     ;; ;; Review other non-scheduled/deadlined to-do tasks
+     ;; ("k" "TODO" tags-todo "TODO={TODO}+DEADLINE=\"\"+SCHEDULED=\"\"")
+     ;; 
+     ;; ;; Review other non-scheduled/deadlined pending tasks
+     ;; ("l" "WAIT" tags-todo "TODO={WAIT}+DEADLINE=\"\"+SCHEDULED=\"\"")
+     ;; 
+     ;; ;; Review upcoming deadlines for the next 60 days
+     ;; ("!" "Deadlines all" agenda "Past/upcoming deadlines"
+     ;;  ((org-agenda-span 1)
+     ;;   (org-deadline-warning-days 60)
+     ;;   (org-agenda-entry-types '(:deadline))))
+
+     ("d" "Daily Agenda"
+      ((agenda ""
+	       ((org-agenda-span 'day)
+		(org-deadline-warning-days 5)))
+       (tags-todo "+PRIORITY=\"A\""
+		  ((org-agenda-overriding-header "High Priority Tasks")))
+       (todo "NEXT"
+	     ((org-agenda-overriding-header "Next Tasks")))))
+     ("D" "Daily Agenda (old)"
+      ((agenda ""
+	       ((org-agenda-files (vde/all-org-agenda-files))
+		(org-agenda-span 'day)
+		(org-deadline-warning-days 5)))
+       (tags-todo "+PRIORITY=\"A\""
+		  ((org-agenda-files (vde/all-org-agenda-files))
+		   (org-agenda-overriding-header "High Priority Tasks")))
+       (todo "NEXT"
+	     ((org-agenda-files (vde/all-org-agenda-files))
+	      (org-agenda-overriding-header "Next Tasks")))))
+     ("i" "Inbox (triage)"
+      ((tags-todo ".*"
+		  ((org-agenda-files `(,org-inbox-file)) ;; FIXME use constant here
+		   (org-agenda-overriding-header "Unprocessed Inbox Item")))))
+     ("A" "All (old)"
+      ((tags-todo ".*"
+		  ((org-agenda-files (vde/all-org-agenda-files))))))
+     ("u" "Untagged Tasks"
+      ((tags-todo "-{.*}"
+		  ((org-agenda-overriding-header "Untagged tasks")))))
+     ("w" "Weekly Review"
+      ((agenda ""
+	       ((org-agenda-overriding-header "Completed Tasks")
+		(org-agenda-skip-function '(org-agenda-skip-entry-if 'nottodo 'done))
+		(org-agenda-span 'week)))
+       (agenda ""
+	       ((org-agenda-overriding-header "Unfinished Scheduled Tasks")
+		(org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done))
+		(org-agenda-span 'week)))))
+     ;; FIXME Should only take into account projects and areas ?
+     ("R" "Review projects" tags-todo "-CANX/"
+      ((org-agenda-overriding-header "Reviews Scheduled")
+       (org-agenda-skip-function 'org-review-agenda-skip)
+       (org-agenda-cmp-user-defined 'org-review-compare)
+       (org-agenda-sorting-strategy '(user-defined-down))))))
+  ;; TODO cleanup this list a bit
+  (org-agenda-category-icon-alist `(("personal"  ,(list (propertize "🏡")))
+				    ("work"  ,(list (propertize "🏢")))
+				    ("appointments"  ,(list (propertize "📅")))
+				    ("health"  ,(list (propertize "⚕️")))
+				    ("systems"  ,(list (propertize "🖥️")))
+				    ("journal"  ,(list (propertize "📝")))
+				    ("project--" ,(list (propertize "💼" )))
+				    ("tekton", (list (propertize "😼")))
+				    ("openshift-pipelines", (list (propertize "🎩")))
+				    ("redhat", (list (propertize "🎩")))
+				    ("area--"  ,(list (propertize"🏢" )))
+				    ("area--home"  ,(list (propertize "🏡")))
+				    ("home"  ,(list (propertize "🏡")))
+				    ("home-services" ,(list (propertize "☕ ")))
+				    ("email"  ,(list (propertize"📨" )))
+				    ("people"  ,(list (propertize"👤" )))
+				    ("machine" ,(list (propertize "🖥️")))
+				    ("website" ,(list (propertize "🌍")))
+				    ("bike" ,(list (propertize "🚴‍♂️")))
+				    ("security" ,(list (propertize "🛡️")))
+				    ("i*" ,(list (propertize "📒")))))
+  (org-agenda-prefix-format '((agenda . " %i %?-12t% s")
+			      (todo . " %i")
+			      (tags . " %i")
+			      (search . " %i")))
+  (org-insert-heading-respect-content t)
+  (org-M-RET-may-split-line '((default . nil)))
+  (org-goto-interface 'outline-path-completion)
+  (org-outline-path-complete-in-steps nil)
+  (org-goto-max-level 2)
+  :bind
+  (:map org-mode-map
+	("C-<left>" . org-shiftleft)
+	("C-<right>" . org-shiftright)
+	("C-<up>" . org-shiftup)
+	("C-<down>" . org-shiftdown))
   :config
   (unbind-key "S-<left>" org-mode-map)
   (unbind-key "S-<right>" org-mode-map)