diff options
Diffstat (limited to 'dot_config/emacs/lisp/org-mode-config.el')
| -rw-r--r-- | dot_config/emacs/lisp/org-mode-config.el | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/dot_config/emacs/lisp/org-mode-config.el b/dot_config/emacs/lisp/org-mode-config.el new file mode 100644 index 0000000..8bc324c --- /dev/null +++ b/dot_config/emacs/lisp/org-mode-config.el @@ -0,0 +1,165 @@ +;;; Org +(use-package org + :ensure nil ; do not try to install it as it is built-in + :commands (org-capture org-agenda) + :custom + (org-M-RET-may-split-line '((default . nil))) + (org-insert-heading-respect-content t) + (org-log-done 'time) + (org-log-into-drawer t) + (org-capture-bookmark nil) + + (org-directory "~/org/") + (org-default-notes-file (concat org-directory "agenda.org")) + (org-agenda-files (list org-directory)) + + ;; Learn about the ! and more by reading the relevant section of the + ;; Org manual. Evaluate: (info "(org) Tracking TODO state changes") + (org-todo-keywords '((sequence "TODO(t)" + "STARTED(s!)" + "NEXT(n)" + "SOMEDAY(.)" + "WAITING(w@)""|" "DONE(x!)" "CANCELLED(c@)"))) + (org-startup-indented t) + (org-pretty-entities t) + (org-startup-with-inline-images t) + (org-image-actual-width 300) + :config + (define-key org-mode-map (kbd "C-c C-r") verb-command-map) + + (setq org-anki-file (concat org-directory "anki.org")) + (setq org-capture-templates + `(("f" "Fleeting note" item + (file+headline org-default-notes-file "Notes") + "- %?") + ("o" "Quote" item + (file+headline ,(concat org-directory "quotes.org") "Quotes") + "- %?") + ("p" "Permanent note" plain + (file denote-last-path) + #'denote-org-capture + :no-save t + :immediate-finish nil + :kill-buffer t + :jump-to-captured nil) + ("t" "New task" entry + (file+headline org-default-notes-file "Tasks") + "* TODO %i%?") + ("j" "Journal" entry + (file denote-journal-path-to-new-or-existing-entry) + "* %U %?\n%i\n%a" + :kill-buffer t + :empty-lines 1) + ("a" "Anki basic" + entry + (file+headline org-anki-file "Dispatch Shelf") + "* Card%^g\n:PROPERTIES:\n:ANKI_NOTE_TYPE: Basic\n:ANKI_DECK: Mega\n:END:\n** Front\n%?\n** Back\n%c\n") + ("A" "Anki cloze" + entry + (file+headline org-anki-file "Dispatch Shelf") + "* Card%^g\n:PROPERTIES:\n:ANKI_NOTE_TYPE: Cloze\n:ANKI_DECK: Mega\n:END:\n** Text\n%c\n** Extra\n"))) + +(add-to-list 'org-export-backends 'md) +:bind +(("C-c C" . org-capture) + ("C-c A" . org-agenda))) + +(use-package org-modern + :ensure t + :defer t + :hook (org-mode . org-modern-mode) + :custom + (org-modern-star "replace")) + +(use-package denote + :after org + :init + (denote-rename-buffer-mode 1) + :custom + (denote-directory (concat org-directory "/notes/")) + :hook + (dired-mode . denote-dired-mode) + :config + ;; https://github.com/protesilaos/denote/issues/681 + (add-to-list 'denote-file-types + '(org-gpg + :extension ".org.gpg" + :front-matter denote-org-front-matter + :title-key-regexp "^#\\+title\\s-*:" + :title-value-function denote-format-string-for-org-front-matter + :title-value-reverse-function denote-trim-whitespace + :keywords-key-regexp "^#\\+filetags\\s-*:" + :keywords-value-function denote-format-keywords-for-org-front-matter + :keywords-value-reverse-function denote-extract-keywords-from-front-matter + :signature-key-regexp "^#\\+signature\\s-*:" + :signature-value-function denote-format-string-for-org-front-matter + :signature-value-reverse-function denote-trim-whitespace + :identifier-key-regexp "^#\\+identifier\\s-*:" + :identifier-value-function denote-format-string-for-org-front-matter + :identifier-value-reverse-function denote-trim-whitespace + :date-key-regexp "^#\\+date\\s-*:" + :date-value-function denote-date-org-timestamp + :date-value-reverse-function denote-extract-date-from-front-matter + :link-retrieval-format "[denote:%VALUE%]" + :link denote-org-link-format + :link-in-context-regexp denote-org-link-in-context-regexp)) + :custom-face + (denote-faces-link ((t (:slant italic)))) + :bind (("C-c n l" . denote-link-or-create) + ("C-c n f" . consult-denote-find) + ("C-c n c" . denote) + ("C-c n e" . (lambda () (interactive) (dired org-directory))))) + +(use-package consult-denote) + +(use-package denote-journal + :ensure t + :hook (calendar-mode . denote-journal-calendar-mode) + :config + (defun my-denote-journal-new-entry () + "Like `denote-journal-new-entry' but specifies a file type of my preference." + (interactive) + (let ((denote-file-type 'org-gpg)) ; assumes `org-gpg' exists + (call-interactively 'denote-journal-new-entry))) + ;; Use the "journal" subdirectory of the `denote-directory'. Set this + ;; to nil to use the `denote-directory' instead. + (setq denote-journal-directory + (expand-file-name "journal" denote-directory)) + ;; Default keyword for new journal entries. It can also be a list of + ;; strings. + (setq denote-journal-keyword "journal") + ;; Read the doc string of `denote-journal-title-format'. + (setq denote-journal-title-format 'day-date-month-year) + :bind + (("C-c n j" . my-denote-journal-new-entry))) + +;;; Org Present +(use-package org-present + :config + (eval-after-load "org-present" + '(progn + (add-hook 'org-present-mode-hook + (lambda () + ;; (meow-motion-mode) + (org-present-big) + (org-display-inline-images) + (org-present-hide-cursor) + (org-present-read-only))) + (add-hook 'org-present-mode-quit-hook + (lambda () + ;; (meow-normal-mode) + (org-present-small) + (org-remove-inline-images) + (org-present-show-cursor) + (org-present-read-write)))))) +;;; Anki editor +(use-package anki-editor + :bind + (:map org-mode-map ("C-c a" . anki-editor-ui))) + +;;; HTTP Client +(use-package verb) + +(require 'org-demo-macro) + +(provide 'org-mode-config) |
