;; ----- Org ------
(defun my/gtd-agenda (view-name)
"Create an agenda view for GTD in different context based on tags.
With this approach, we cannot have an \"shared\" inbox as tag filtering
is applied to the whole view *before* this function."
(let ((agenda-header view-name))
`((agenda "" ((org-agenda-span 'day)
(org-agenda-overriding-header ,agenda-header)
(org-agenda-skip-function
'(org-agenda-skip-entry-if 'todo 'done))
))
(todo "NEXT"
((org-agenda-skip-function
'(org-agenda-skip-entry-if 'scheduled 'deadline))
(org-agenda-overriding-header "Next")
))
(tags-todo "CATEGORY=\"inbox\""
((org-agenda-prefix-format " %?-12t% s")
(org-agenda-overriding-header "Inbox"))))))
(use-package org
:ensure t
:defer t
:commands (org-mode org-version)
:hook (org-mode . visual-line-mode)
:mode
("\\.org\\'" . org-mode)
:bind (("C-c a" . org-agenda)
("C-c c" . org-capture)
("C-c ," . nil) ; For homw
:map org-mode-map
("C-'" . nil)) ; For avy-goto-char2 (org-cycle-agenda-files)
:custom
(org-directory (expand-file-name "~/org/"))
(org-cycle-hide-drawers 'all) ; Cleaner view
(org-startup-folded 'fold) ; Cleaner view
(org-hide-block-startup t)
(org-todo-keywords '((sequence "TODO(t)" "WAIT(w)" "NEXT(n)" "STARTED(s)" "|" "CANCEL(c)" "DONE(d)")))
;; Agenda
(org-agenda-files '("inbox.org" "todo.org"))
(org-capture-templates
'(("t" "Todo" entry (file "inbox.org")
"* TODO %?\n /Entered on/ %U")
("s" "Sport")
("sc" "Course" entry (file "sport.org")
"* %t :course:
%^{durée}p
%^{intensité}p")
("st" "Étirement" entry (file "sport.org")
"* %t :étirement:
%^{hamstring}p
%^{butterfly}p
%^{pancake}p
%^{pigeon}p
%^{middle_split}p
%^{fenêtre}p")
("ss" "Escalade" entry (file "sport.org")
"* %t :escalade: \n %^{durée}p")
("sm" "Muscu" entry (file "sport.org")
"* %t :muscu:
%^{muscle_up_bar}p
%^{compression}p
%^{extension}p
%^{push_up_tucked}p
%^{planche_tucked}p
")
("sk" "Parkour" entry (file "sport.org")
"* %t :parkour: \n %^{durée}p")
("sp" "Patinage" entry (file "sport.org")
"* %t :patinage: \n %^{durée}p")
("sr" "Roller" entry (file "sport.org")
"* %t :roller: \n %^{durée}p")))
(org-return-follows-link t) ; RET
(org-mouse-1-follows-link t)
(org-log-done 'time) ; Store date when CLOSED
(org-link-descriptive t) ; Display links as the description provided
(org-hide-leading-stars t) ; Better display
(org-hide-emphasis-marker t) ; Better display
(org-refile-targets ; Refile in subprojets
'((org-agenda-files . (:maxlevel . 4))
(nil . (:maxlevel . 2))))
(org-agenda-custom-commands
`(
("h" "Home" ,(my/gtd-agenda "Home") ((org-agenda-tag-filter-preset '("-work"))))
("w" "Work" ,(my/gtd-agenda "Work") ((org-agenda-tag-filter-preset '("+work"))))
("r" "Rewiew"
((todo "TODO"))
((org-agenda-skip-scheduled-if-deadline-is-shown t)))
("w" "Waiting tasks" ((todo "WAIT")))))
:config
;; gunlpot support
(org-babel-do-load-languages
'org-babel-load-languages
'((gnuplot . t))))
;; Quick and dirty plotting
(use-package gnuplot)
;;(use-package gnuplot-mode)
(provide 'init-org)