;;; 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)