2021-04-11 23:53:27 +02:00
|
|
|
;;; -*- lexical-binding: t; -*-
|
2020-03-26 20:03:25 +01:00
|
|
|
|
2022-07-11 16:30:17 +02:00
|
|
|
(defun +grfn/org-setup ()
|
|
|
|
(setq-local truncate-lines -1)
|
|
|
|
(display-line-numbers-mode -1)
|
|
|
|
(line-number-mode -1))
|
|
|
|
|
|
|
|
(add-hook 'org-mode-hook #'+grfn/org-setup)
|
|
|
|
|
2020-03-26 20:03:25 +01:00
|
|
|
(defun notes-file (f)
|
|
|
|
(concat org-directory (if (string-prefix-p "/" f) "" "/") f))
|
|
|
|
|
2020-09-02 00:36:16 +02:00
|
|
|
(defun grfn/org-project-tag->key (tag)
|
|
|
|
(s-replace-regexp "^project__" "" tag))
|
|
|
|
|
|
|
|
(defun grfn/org-project-tag->name (tag)
|
|
|
|
(s-titleized-words
|
|
|
|
(s-join " " (s-split "_" (grfn/org-project-tag->key tag)))))
|
|
|
|
|
|
|
|
(defun grfn/org-project-tag->keys (tag)
|
|
|
|
(s-join "" (cons "p"
|
|
|
|
(-map (lambda (s) (substring-no-properties s 0 1))
|
|
|
|
(s-split "_" (grfn/org-project-tag->key tag))))))
|
|
|
|
|
|
|
|
(defun grfn/org-projects->agenda-commands (project-tags)
|
|
|
|
(loop for tag in project-tags
|
|
|
|
collect `(,(grfn/org-project-tag->keys tag)
|
|
|
|
,(grfn/org-project-tag->name tag)
|
|
|
|
tags-todo
|
|
|
|
,tag)))
|
|
|
|
|
|
|
|
(defun grfn/org-projects ()
|
|
|
|
(loop for (tag) in
|
|
|
|
(org-global-tags-completion-table
|
|
|
|
(directory-files-recursively "~/notes" "\\.org$"))
|
|
|
|
when (s-starts-with-p "project__" tag)
|
|
|
|
collect tag))
|
|
|
|
|
|
|
|
(comment
|
|
|
|
(grfn/org-projects->agenda-commands (grfn/org-projects))
|
|
|
|
)
|
|
|
|
|
2020-03-26 20:03:25 +01:00
|
|
|
(setq
|
|
|
|
org-directory (expand-file-name "~/notes")
|
|
|
|
+org-dir (expand-file-name "~/notes")
|
|
|
|
org-default-notes-file (concat org-directory "/inbox.org")
|
|
|
|
+org-default-todo-file (concat org-directory "/inbox.org")
|
2020-07-07 00:53:46 +02:00
|
|
|
org-agenda-files (directory-files-recursively
|
|
|
|
"~/notes" "\\.org$")
|
2020-03-26 20:03:25 +01:00
|
|
|
org-refile-targets '((org-agenda-files :maxlevel . 3))
|
|
|
|
org-outline-path-complete-in-steps nil
|
|
|
|
org-refile-use-outline-path t
|
|
|
|
org-file-apps `((auto-mode . emacs)
|
|
|
|
(,(rx (or (and "." (optional "x") (optional "htm") (optional "l") buffer-end)
|
|
|
|
(and buffer-start "http" (optional "s") "://")))
|
|
|
|
. "firefox %s")
|
|
|
|
(,(rx ".pdf" buffer-end) . "apvlv %s")
|
|
|
|
(,(rx "." (or "png"
|
|
|
|
"jpg"
|
|
|
|
"jpeg"
|
|
|
|
"gif"
|
|
|
|
"tif"
|
|
|
|
"tiff")
|
|
|
|
buffer-end)
|
|
|
|
. "feh %s"))
|
|
|
|
org-log-done 'time
|
|
|
|
org-archive-location "~/notes/trash::* From %s"
|
|
|
|
org-cycle-separator-lines 2
|
|
|
|
org-hidden-keywords '(title)
|
|
|
|
org-tags-column -130
|
2021-07-30 17:24:50 +02:00
|
|
|
org-ellipsis "…"
|
2020-03-26 20:03:25 +01:00
|
|
|
org-imenu-depth 9
|
|
|
|
org-capture-templates
|
|
|
|
`(("t" "Todo" entry
|
|
|
|
(file +org-default-todo-file)
|
|
|
|
"* TODO %?\n%i"
|
|
|
|
:kill-buffer t)
|
|
|
|
|
2023-02-27 16:14:11 +01:00
|
|
|
("w" "Work Todo" entry
|
|
|
|
(file+headline ,(notes-file "work.org") "Work Tasks")
|
|
|
|
"* TODO %?\n%i")
|
|
|
|
|
2020-07-17 00:39:27 +02:00
|
|
|
("m" "Email" entry
|
|
|
|
(file +org-default-todo-file)
|
2021-11-08 17:57:37 +01:00
|
|
|
"* TODO [[%L][%:subject]] :email:\n%i")
|
2020-07-17 00:39:27 +02:00
|
|
|
|
2020-03-26 20:03:25 +01:00
|
|
|
("n" "Notes" entry
|
|
|
|
(file +org-default-todo-file)
|
|
|
|
"* %U %?\n%i"
|
|
|
|
:prepend t
|
|
|
|
:kill-buffer t)
|
|
|
|
|
|
|
|
("c" "Task note" entry
|
|
|
|
(clock)
|
2020-08-14 00:35:56 +02:00
|
|
|
"* %U %?\n%i[%l[Context]]\n"
|
2020-03-26 20:03:25 +01:00
|
|
|
:kill-buffer t
|
|
|
|
:unnarrowed t)
|
|
|
|
|
|
|
|
("p" "Projects")
|
|
|
|
("px" "Xanthous" entry
|
|
|
|
(file+headline ,(notes-file "xanthous.org") "Backlog")
|
|
|
|
"* TODO %?\nContext %a\nIn task: %K")
|
2020-07-23 18:38:44 +02:00
|
|
|
("pt" "Tvix" entry
|
|
|
|
(file+headline ,(notes-file "tvix.org") "Tvix TODO")
|
|
|
|
"* TODO %?\nContext %a\nIn task: %K")
|
2020-08-20 18:31:51 +02:00
|
|
|
("pw" "Windtunnel" entry
|
|
|
|
(file+headline ,(notes-file "windtunnel.org") "Tasks")
|
2020-09-14 17:37:21 +02:00
|
|
|
"* TODO %i%?\nContext: %a\nIn task: %K")
|
2020-03-26 20:03:25 +01:00
|
|
|
|
|
|
|
("d" "Data recording")
|
|
|
|
)
|
|
|
|
|
|
|
|
org-capture-templates-contexts
|
2021-10-30 18:14:35 +02:00
|
|
|
`(("px" ((in-file . "/home/grfn/code/depot/users/grfn/xanthous/.*"))))
|
2020-03-26 20:03:25 +01:00
|
|
|
|
|
|
|
org-deadline-warning-days 1
|
|
|
|
org-agenda-skip-scheduled-if-deadline-is-shown 'todo
|
|
|
|
org-todo-keywords '((sequence "TODO(t)" "ACTIVE(a)" "|" "DONE(d)" "RUNNING(r)")
|
|
|
|
(sequence "NEXT(n)" "WAITING(w)" "LATER(l)" "|" "CANCELLED(c)"))
|
|
|
|
org-agenda-custom-commands
|
2023-07-05 21:37:38 +02:00
|
|
|
`(("i" "Inbox" tags "inbox")
|
2020-03-26 20:03:25 +01:00
|
|
|
("r" "Running jobs" todo "RUNNING")
|
|
|
|
("w" "@Work" tags-todo "@work")
|
|
|
|
("n" . "Next...")
|
2023-07-05 21:37:38 +02:00
|
|
|
("nw" "Next @Work" tags-todo "@work&next")
|
|
|
|
("nt" "Next tooling" tags-todo "tooling")
|
2020-09-02 00:36:16 +02:00
|
|
|
|
|
|
|
("p" . "Project...")
|
|
|
|
,@(grfn/org-projects->agenda-commands (grfn/org-projects)))
|
2020-05-18 17:32:07 +02:00
|
|
|
|
2020-06-03 22:29:50 +02:00
|
|
|
org-agenda-dim-blocked-tasks nil
|
|
|
|
org-enforce-todo-dependencies nil
|
|
|
|
|
2020-05-18 17:32:07 +02:00
|
|
|
org-babel-clojure-backend 'cider)
|
2020-06-23 16:25:02 +02:00
|
|
|
|
2020-11-02 20:04:13 +01:00
|
|
|
|
2020-06-23 16:25:02 +02:00
|
|
|
(defun +grfn/insert-work-template ()
|
|
|
|
(interactive)
|
|
|
|
(goto-char (point-min))
|
|
|
|
(forward-line)
|
|
|
|
(insert "#+TODO: TODO(t) NEXT(n) ACTIVE(a) | DONE(d) PR(p) RUNNING(r) TESTING(D)
|
|
|
|
#+TODO: BLOCKED(b) BACKLOG(l) PROPOSED(o) | CANCELLED(c)
|
|
|
|
#+FILETAGS: @work
|
|
|
|
#+FILETAGS: @work
|
|
|
|
#+PROPERTY: Effort_ALL 0 4:00 8:00 12:00 20:00 32:00
|
|
|
|
#+PROPERTY: ESTIMATE_ALL 0 1 2 3 5 8
|
|
|
|
#+PROPERTY: STORY-TYPE_ALL Feature Bug Chore
|
|
|
|
#+PROPERTY: NOBLOCKING t
|
|
|
|
#+COLUMNS: %TODO %40ITEM(Task) %17EFFORT(Estimated){:} %CLOCKSUM(Time Spent) %17STORY-TYPE(Type) %TAGS"))
|
|
|
|
|
|
|
|
(defun +grfn/insert-org-template ()
|
|
|
|
(interactive)
|
|
|
|
(pcase (buffer-file-name)
|
|
|
|
((s-contains "/work/") (+grfn/insert-work-template))))
|
|
|
|
|
|
|
|
;;; TODO: this doesn't work?
|
|
|
|
(define-auto-insert "\\.org?$" #'grfn/insert-org-template t)
|
2020-09-14 19:10:41 +02:00
|
|
|
|
|
|
|
(defun forge--post-submit-around---link-pr-to-org-item
|
|
|
|
(orig)
|
|
|
|
(let ((cb (funcall orig)))
|
|
|
|
(lambda (value headers status req)
|
|
|
|
(prog1 (funcall cb value headers status req)
|
|
|
|
(grfn/at-org-clocked-in-item
|
2020-09-18 15:40:10 +02:00
|
|
|
(let ((url (alist-get 'html_url value))
|
2020-09-14 19:10:41 +02:00
|
|
|
(number (alist-get 'number value)))
|
|
|
|
(org-set-property
|
|
|
|
"pull-request"
|
2020-10-26 18:31:15 +01:00
|
|
|
(org-make-link-string
|
|
|
|
url
|
|
|
|
(format "%s/%s/%d"
|
|
|
|
(->> value
|
|
|
|
(alist-get 'base)
|
|
|
|
(alist-get 'repo)
|
|
|
|
(alist-get 'name))
|
|
|
|
(->> value
|
|
|
|
(alist-get 'base)
|
|
|
|
(alist-get 'repo)
|
|
|
|
(alist-get 'owner)
|
|
|
|
(alist-get 'login))
|
|
|
|
number)))))))))
|
2020-09-14 19:10:41 +02:00
|
|
|
|
|
|
|
(advice-add
|
|
|
|
#'forge--post-submit-callback
|
|
|
|
:around #'forge--post-submit-around---link-pr-to-org-item)
|
2021-06-05 17:02:23 +02:00
|
|
|
|
|
|
|
(set-face-foreground 'org-block +solarized-s-base00)
|
|
|
|
(setq whitespace-global-modes '(not org-mode magit-mode vterm-mode))
|
|
|
|
(setf (alist-get 'file org-link-frame-setup) 'find-file-other-window)
|
|
|
|
(set-face-foreground 'org-block +solarized-s-base00)
|
|
|
|
|
|
|
|
;; (add-hook! org-mode
|
|
|
|
;; (set-company-backend! 'org-mode
|
|
|
|
;; '(:separate company-ob-postgresql
|
|
|
|
;; company-dabbrev
|
|
|
|
;; company-yasnippet
|
|
|
|
;; company-ispell)))
|