From 395504b1eaabf34008c8ff8d903311d12c24aa85 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 30 May 2025 19:31:52 +0200 Subject: [PATCH] Move Org configuration from configuration.org to init.el --- configuration.org | 420 ---------------------------------------------- init.el | 351 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 351 insertions(+), 420 deletions(-) diff --git a/configuration.org b/configuration.org index f58a2cc..30844d8 100644 --- a/configuration.org +++ b/configuration.org @@ -312,426 +312,6 @@ It also provides some nice commands to navigate between change sets. (add-to-list 'completion-at-point-functions #'cape-elisp-symbol)) #+end_src -* Org mode - -** ~outline~ - -This is the mode Org is based on. It’s technically a built-in, but i configure it here so it remains together with other Org setup. - -#+begin_src emacs-lisp -(use-package outline - :ensure nil - :custom-face - (outline-1 ((t (:inherit font-lock-function-name-face :overline t :weight bold :height 1.2)))) - (outline-2 ((t (:inherit font-lock-variable-name-face :overline t :weight bold :height 1.1)))) - (outline-3 ((t (:inherit font-lock-keyword-face :overline t :weight bold))))) -#+end_src - -** Function to set up Org-mode buffers - -#+begin_src emacs-lisp -(defun gpolonkai/setup-org-mode () - (org-indent-mode 1) - (variable-pitch-mode 1) - (auto-fill-mode 0) - (visual-line-mode 1)) -#+end_src - -** Display horizontal rulers as a full-width line - -From [[https://matrix.to/#/@suckless_shill:matrix.org][viz]] in the [[https://matrix.to/#/#org-mode:matrix.org][org-mode]] Matrix room. - -#+begin_src emacs-lisp -(defun vz/org-fontify-horizontal-break () - "Display Org’s horizontal break (-----) as a full-width horizontal line" - (push '("^[[:space:]]*\\(------*\\)\n" - (0 (progn - (put-text-property (match-beginning 1) (match-end 1) - 'display (make-string (- (match-end 1) (match-beginning 1)) ?\s)) - (put-text-property (match-beginning 1) (match-end 0) - 'face '(:strike-through t :extend t))))) - org-font-lock-extra-keywords) - (setq-local font-lock-extra-managed-props (cons 'display font-lock-extra-managed-props))) - -(add-hook 'org-font-lock-set-keywords-hook #'vz/org-fontify-horizontal-break) -#+end_src - -** Main ~org~ configuration - -#+begin_src emacs-lisp -(use-package org - :demand - :custom-face - (org-block ((t (:inherit fixed-pitch)))) - (org-code ((t (:inherit (shadow fixed-pitch))))) - (org-indent ((t (:inherit (org-hide fixed-pitch))))) - (org-verbatim ((t (:inherit (shadow fixed-pitch))))) - (org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch))))) - (org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch))))) - (org-checkbox ((t (:inherit fixed-pitch)))) - (org-table ((t (:inherit (shadow fixed-pitch))))) - (org-_drawer ((t (:inherit (shadow fixed-pitch))))) - :init - (require 'xdg-paths) - (defface org-checkbox-todo-text - '((t (:inherit org-todo))) - "Face for the text part of an unchecked org-mode checkbox.") - (defface org-checkbox-done-text - '((t (:inherit org-done))) - "Face for the text part of a checked org-mode checkbox.") - (font-lock-add-keywords - 'org-mode - `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?: \\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" 1 'org-checkbox-todo-text prepend)) - 'append) - (font-lock-add-keywords - 'org-mode - `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" 12 'org-checkbox-done-text prepend)) - 'append) - (setq-default org-default-notes-file (expand-file-name "notes.org" org-directory) - org-agenda-files `(,org-directory) - org-time-stamp-formats '("<%Y-%m-%d>" . "<%Y-%m-%d %H:%M>") - org-todo-keywords '((sequence "TODO(t)" - "DOING(w@/!)" - "BLOCKED(b@/!)" - "SOMEDAY(s!)" - "|" - "CANCELED(c@/!)" - "REVIEW(r@/!)" - "DONE(d@/!)")) - org-todo-keyword-faces '(("SOMEDAY" . (:foreground "goldenrod")) - ("CANCELED" . (:foreground "#228b22" :strike-through t))) - org-html-checkbox-types - '((unicode (on . "") - (off . "") - (trans . "")))) - :config - ;; Load the markdown exporter - (require 'ox-md) - ;; Handle org-protocol:// links - (require 'org-protocol) - ;; Make it possible to encrypt headings - (require 'org-crypt) - ;; Make it possible to use inline tasks - (require 'org-inlinetask) - ;; Make sure we load Python babel stuff - (org-babel-do-load-languages - 'org-babel-load-languages - '((python . t))) - ;; Track habits - (require 'org-habit) - :custom - (org-log-into-drawer t) - (org-ellipsis "…#") - (org-startup-folded 'content) - (org-log-done 'time) - (org-src-preserve-indentation t) - (org-tags-column 0) - (org-startup-indented t) - (org-special-ctrl-a/e t) - (org-return-follows-link t) - (org-src-fontify-natively t) - (org-goto-interface 'outline-path-completion) - (org-goto-max-level 10) - (org-html-checkbox-type 'unicode) - (org-src-window-setup 'current-window) - (org-pretty-entities t) - (org-pretty-entities-include-sub-superscripts t) - (org-use-speed-commands t) - (org-hide-leading-stars t) - (org-enforce-todo-dependencies t) - (org-enforce-todo-checkbox-dependencies t) - (org-catch-invisible-edits 'show) - (org-log-reschedule 'time) - (org-log-redeadline 'note) - (org-refile-use-outline-path 'file) - (org-outline-path-complete-in-steps nil) - (org-refile-allow-creating-parent-nodes 'confirm) - (org-crypt-key "B0740C4C") - (org-speed-commands-user '(("m" . org-mark-subtree))) - (org-refile-targets '((nil :maxlevel . 6) - (org-agenda-files :maxlevel . 3))) - (org-agenda-custom-commands '(("c" "Simple agenda view" - ((tags "PRIORITY=\"A\"" - ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) - (org-agenda-overriding-header "High priority unfinished tasks"))) - (agenda "") - (alltodo "" - ((org-agenda-skip-function - '(or (air-org-skip-subtree-if-habit) - (air-org-skip-subtree-if-priority ?A) - (gpolonkai/org-skip-subtree-if-state "SOMEDAY") - (org-agenda-skip-if nil '(scheduled deadline)))) - (org-agenda-overriding-header "ALL normal priority tasks")))) - ((org-agenda-compact-blocks t))))) - (org-log-note-clock-out t) - (org-capture-templates '(("L" "Org-protocol capture" entry - (file+headline - (lambda () - (expand-file-name "index.org" org-directory)) - "Captures") - "** %:description\n:PROPERTIES:\n:SOURCE: %:link\n:END:\n\n%:initial" - :empty-lines 1) - ("R" "Region to Current Clocked Task" plain - (clock) - "%i" - :immediate-finish t - :empty-lines 1) - ("K" "Kill-ring to Current Clocked Task" plain - (clock) - "%c" - :immediate-finish t - :empty-lines 1) - ("c" "Item to current Clocked Task" item - (clock) - "%i%?" - :empty-lines 1) - ("g" "GT2 note" entry - (file+headline - (lambda () - (expand-file-name "gt2-notes.org" org-directory)) - "Captures") - "** %^{Title}\n:PROPERTIES:\n:CREATED: %T\n:END:\n\n%a\n\n%i%?") - ("p" "Blog post" entry - (file+olp+datetree - (lambda () - (expand-file-name "blog.org" org-directory))) - "* %^{Title} :blog:\n:PROPERTIES:\n:CREATED: %T\n:END:\n\n%i%?"))) - (org-read-date-force-compatible-dates nil) - (org-agenda-prefix-format '((agenda . " %i %-12:c%?-12t% s") - (todo . " %i %-12:c %(concat \"[ \"(org-format-outline-path (org-get-outline-path)) \" ]\") ") - (tags . " %i %-12:c %(concat \"[ \"(org-format-outline-path (org-get-outline-path)) \" ]\") ") - (timeline . " % s") - (search . " %i %-12:c"))) - (org-agenda-dim-blocked-tasks t) - (org-link-descriptive t) - (org-hide-emphasis-markers t) - (org-agenda-skip-deadline-prewarning-if-scheduled 'pre-scheduled) - (org-deadline-warning-days 7) - :hook - (ediff-select . f-ediff-org-unfold-tree-element) - (ediff-unselect . f-ediff-org-fold-tree) - (org-mode . gpolonkai/setup-org-mode) - :bind - (:map gpolonkai/pers-map - ("a" . gpolonkai/org-agenda-list) - ("C" . org-capture) - ("l" . org-store-link) - :map org-mode-map - ("SPC" . gpolonkai/org-space-key) - ("C-c l" . org-toggle-link-display) - ("C-a" . gpolonkai/move-to-beginning-of-line) - ("C-e" . gpolonkai/move-to-end-of-line) - ("C-c h" . outline-previous-heading) - ("C-c ." . gpolonkai/org-insert-current-timestamp) - ("C-c ;" . org-toggle-timestamp-type))) -#+end_src - -** ~org-roam~ - -Let’s see if i can get my brain more organised this way… - -#+begin_src emacs-lisp -(use-package org-roam - :after org - :ensure t - :config - (setq org-roam-node-display-template (concat "${title:*} " - (propertize "${tags:10}" 'face 'org-tag))) - (org-roam-db-autosync-mode) - (require 'org-roam-dailies) - (require 'org-roam-protocol) - :custom - (org-roam-directory (file-truename (expand-file-name "roam" org-directory))) - (org-roam-dailies-directory (file-truename (expand-file-name "roam/journal" org-directory))) - (org-roam-completion-everywhere t) - (org-roam-capture-templates '(("d" "default" plain "\n%?" - :target (file+head - "${slug}-%<%Y%m%d%H%M%S>.org" - "#+title: ${title}") - :unnarrowed t))) - (org-roam-dailies-capture-templates '( - ("d" "default" entry "* %<%H:%M>: %?" - :if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n")))) - :bind - (("C-c n c" . org-roam-capture) - ("C-c n g" . org-roam-graph) - ("C-c n i" . org-roam-node-insert) - ("C-c n l" . org-roam-buffer-toggle) - :map org-mode-map - ("C-M-i" . completion-at-point) - :map org-roam-dailies-map - ("d" . org-roam-dailies-capture-date) - ("j" . org-roam-dailies-capture-today) - ("Y" . org-roam-dailies-capture-yesterday) - ("T" . org-roam-dailies-capture-tomorrow)) - :bind-keymap - ("C-c n d" . org-roam-dailies-map)) -#+end_src - -** ~org-roam-timestamps~ - -#+begin_src emacs-lisp -(use-package org-roam-timestamps - :after org-roam - :config - (org-roam-timestamps-mode) - :custom - (org-roam-timestamps-remember-timestamps t) - (org-roam-timestamps-timestamp-parent-file t)) -#+end_src - -** ~org-roam-ui~ - -#+begin_src emacs-lisp -(use-package org-roam-ui - :after org-roam - :custom - (org-roam-ui-sync-theme t) - (org-roam-ui-follow t) - (org-roam-ui-update-on-save t) - (org-roam-ui-open-on-start nil)) -#+end_src - -** ~org-bullets~ for more beautiful bullet points - -#+begin_src emacs-lisp -(use-package org-bullets - :custom - (org-bullets-face-name 'org-bullet-face) - (org-bullets-bullet-list '("✙" "♱" "♰" "☥" "✞" "✟" "✝" "†" "✠" "✚" "✜" "✛" "✢" "✣" "✤" "✥")) - :hook - (org-mode . org-bullets-mode)) -#+end_src - -** ~org-sticky-header~ so i always know where i am - -#+begin_src emacs-lisp -(use-package org-sticky-header - :custom - (org-sticky-header-full-path 'full) - :hook - (org-mode . org-sticky-header-mode)) -#+end_src - -** ~org-random-todo~ to show a random ToDo every hour - -#+begin_src emacs-lisp -(use-package org-random-todo - :demand - :config - ;; Don’t bug me too often… - (setq org-random-todo-how-often 3600) - :custom - (org-random-todo-skip-keywords '("SOMEDAY")) - :bind - (:map gpolonkai/pers-map - ("r" . org-random-todo))) -#+end_src - -** ~org-autolist~ for better list management - -#+begin_src emacs-lisp -(use-package org-autolist - :hook - (org-mode . org-autolist-mode)) -#+end_src - -** ~secretaria~ to remind me of my tasks - -And because even secretaries need a secretary today. - -#+begin_src emacs-lisp -(use-package secretaria - :after - alert - :hook - ;; use this for getting a reminder every 30 minutes of those tasks - ;; scheduled for today and which have no time of day defined. - (after-init . secretaria-unknown-time-always-remind-me)) -#+end_src - -** ~org-clock-waybar~ to export currently clocked task for status bar display - -#+begin_src emacs-lisp -(use-package org-clock-waybar - :ensure nil - :vc (:url "https://gitea.polonkai.eu/gergely/org-clock-waybar.git") - :config - (org-clock-waybar-setup)) -#+end_src - -** ~consult-org-roam~ - -#+begin_src emacs-lisp -(use-package consult-org-roam - :config - (consult-org-roam-mode) - :bind (:map goto-map - ("r" . consult-org-roam-search) - :map global-map - ("C-c n f" . consult-org-roam-file-find))) -#+end_src - -** ~org-appear~, to display markup only when it’s actually needed - -#+begin_src emacs-lisp -(use-package org-appear - :hook - (org-mode . org-appear-mode) - :custom - (org-appear-autosubmarkers t) - (org-appear-autolinks t) - (org-appear-autoemphasis t)) -#+end_src - -** ~ob-mermaid~, to generate Mermaid diagrams - -#+begin_src emacs-lisp -(use-package ob-mermaid - :custom - (ob-mermaid-cli-path "/home/polesz/.local/node/bin/mmdc")) -#+end_src - -** ~plantuml-mode~ to edit PlantUML files in and out of Org documents - -Before using this, make sure the latest PlantUML JAR file is downloaded into the downloads -directory. It is available from [[http://plantuml.com/download][here]]. - -#+begin_src emacs-lisp -(use-package plantuml-mode - :init - (setq plantuml-jar-path - (expand-file-name - ;; Make sure we have a download location even if XDG is not working - (cond - ((xdg-user-dir "DOWNLOAD") - (expand-file-name "plantuml.jar" (xdg-user-dir "DOWNLOAD"))) - (t - "~/Downloads/plantuml.jar")))) - (defvaralias 'org-plantuml-jar-path 'plantuml-jar-path) - :config - (org-babel-do-load-languages - 'org-babel-load-languages - '((plantuml . t)))) -#+end_src - -** ~ox-rst~ to export to ReSTructured text - -#+begin_src emacs-lisp -(use-package ox-rst - :after org) -#+end_src - -** ~orgit~ and ~orgit-forge~ to store link to Git stuff - -#+begin_src emacs-lisp -(use-package orgit - :after magit org) - -(use-package orgit-forge - :after magit org orgit) -#+end_src - * Mailing ** Set up whitespace handling in mu4e buffers diff --git a/init.el b/init.el index 75fe0e7..2a0f9a3 100644 --- a/init.el +++ b/init.el @@ -855,6 +855,357 @@ order." (use-package rg :commands (rg)) +(use-package outline + :ensure nil + :custom-face + (outline-1 ((t (:inherit font-lock-function-name-face + :overline t + :weight bold + :height 1.2)))) + (outline-2 ((t (:inherit font-lock-variable-name-face + :overline t + :weight bold + :height 1.1)))) + (outline-3 ((t (:inherit font-lock-keyword-face + :overline t + :weight bold))))) + +(defun gpolonkai/setup-org-mode () + "Setup Org related variables." + (org-indent-mode 1) + (variable-pitch-mode 1) + (auto-fill-mode 0) + (visual-line-mode 1)) + +;; From @suckless_shill:matrix.org (viz) in the #org-mode:matrix.org Matrix room + +(defun vz/org-fontify-horizontal-break () + "Display Org’s horizontal break (-----) as a full-width horizontal line." + (push '("^[[:space:]]*\\(------*\\)\n" + (0 (progn + (put-text-property (match-beginning 1) (match-end 1) + 'display (make-string + (- (match-end 1) + (match-beginning 1)) + ?\s)) + (put-text-property (match-beginning 1) (match-end 0) + 'face '(:strike-through t :extend t))))) + org-font-lock-extra-keywords) + (setq-local font-lock-extra-managed-props + (cons 'display font-lock-extra-managed-props))) + +(add-hook 'org-font-lock-set-keywords-hook #'vz/org-fontify-horizontal-break) + +(use-package org + :demand + :custom-face + (org-block ((t (:inherit fixed-pitch)))) + (org-code ((t (:inherit (shadow fixed-pitch))))) + (org-indent ((t (:inherit (org-hide fixed-pitch))))) + (org-verbatim ((t (:inherit (shadow fixed-pitch))))) + (org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch))))) + (org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch))))) + (org-checkbox ((t (:inherit fixed-pitch)))) + (org-table ((t (:inherit (shadow fixed-pitch))))) + (org-_drawer ((t (:inherit (shadow fixed-pitch))))) + :init + (require 'xdg-paths) + (defface org-checkbox-todo-text + '((t (:inherit org-todo))) + "Face for the text part of an unchecked org-mode checkbox.") + (defface org-checkbox-done-text + '((t (:inherit org-done))) + "Face for the text part of a checked org-mode checkbox.") + (font-lock-add-keywords + 'org-mode + `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?: \\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" 1 'org-checkbox-todo-text prepend)) + 'append) + (font-lock-add-keywords + 'org-mode + `(("^[ \t]*\\(?:[-+*]\\|[0-9]+[).]\\)[ \t]+\\(\\(?:\\[@\\(?:start:\\)?[0-9]+\\][ \t]*\\)?\\[\\(?:X\\|\\([0-9]+\\)/\\2\\)\\][^\n]*\n\\)" 12 'org-checkbox-done-text prepend)) + 'append) + (setq-default org-default-notes-file (expand-file-name "notes.org" org-directory) + org-agenda-files `(,org-directory) + org-time-stamp-formats '("<%Y-%m-%d>" . "<%Y-%m-%d %H:%M>") + org-todo-keywords '((sequence "TODO(t)" + "DOING(w@/!)" + "BLOCKED(b@/!)" + "SOMEDAY(s!)" + "|" + "CANCELED(c@/!)" + "REVIEW(r@/!)" + "DONE(d@/!)")) + org-todo-keyword-faces '(("SOMEDAY" . (:foreground "goldenrod")) + ("CANCELED" . (:foreground "#228b22" + :strike-through t))) + org-html-checkbox-types + '((unicode (on . "") + (off . "") + (trans . "")))) + :config + ;; Load the markdown exporter + (require 'ox-md) + ;; Handle org-protocol:// links + (require 'org-protocol) + ;; Make it possible to encrypt headings + (require 'org-crypt) + ;; Make it possible to use inline tasks + (require 'org-inlinetask) + ;; Make sure we load Python babel stuff + (org-babel-do-load-languages + 'org-babel-load-languages + '((python . t))) + ;; Track habits + (require 'org-habit) + :custom + (org-log-into-drawer t) + (org-ellipsis "…#") + (org-startup-folded 'content) + (org-log-done 'time) + (org-src-preserve-indentation t) + (org-tags-column 0) + (org-startup-indented t) + (org-special-ctrl-a/e t) + (org-return-follows-link t) + (org-src-fontify-natively t) + (org-goto-interface 'outline-path-completion) + (org-goto-max-level 10) + (org-html-checkbox-type 'unicode) + (org-src-window-setup 'current-window) + (org-pretty-entities t) + (org-pretty-entities-include-sub-superscripts t) + (org-use-speed-commands t) + (org-hide-leading-stars t) + (org-enforce-todo-dependencies t) + (org-enforce-todo-checkbox-dependencies t) + (org-catch-invisible-edits 'show) + (org-log-reschedule 'time) + (org-log-redeadline 'note) + (org-refile-use-outline-path 'file) + (org-outline-path-complete-in-steps nil) + (org-refile-allow-creating-parent-nodes 'confirm) + (org-crypt-key "B0740C4C") + (org-speed-commands-user '(("m" . org-mark-subtree))) + (org-refile-targets '((nil :maxlevel . 6) + (org-agenda-files :maxlevel . 3))) + (org-agenda-custom-commands '(("c" "Simple agenda view" + ((tags "PRIORITY=\"A\"" + ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) + (org-agenda-overriding-header "High priority unfinished tasks"))) + (agenda "") + (alltodo "" + ((org-agenda-skip-function + '(or (air-org-skip-subtree-if-habit) + (air-org-skip-subtree-if-priority ?A) + (gpolonkai/org-skip-subtree-if-state "SOMEDAY") + (org-agenda-skip-if nil '(scheduled deadline)))) + (org-agenda-overriding-header "ALL normal priority tasks")))) + ((org-agenda-compact-blocks t))))) + (org-log-note-clock-out t) + (org-capture-templates '(("L" "Org-protocol capture" entry + (file+headline + (lambda () + (expand-file-name "index.org" org-directory)) + "Captures") + "** %:description\n:PROPERTIES:\n:SOURCE: %:link\n:END:\n\n%:initial" + :empty-lines 1) + ("R" "Region to Current Clocked Task" plain + (clock) + "%i" + :immediate-finish t + :empty-lines 1) + ("K" "Kill-ring to Current Clocked Task" plain + (clock) + "%c" + :immediate-finish t + :empty-lines 1) + ("c" "Item to current Clocked Task" item + (clock) + "%i%?" + :empty-lines 1) + ("g" "GT2 note" entry + (file+headline + (lambda () + (expand-file-name "gt2-notes.org" org-directory)) + "Captures") + "** %^{Title}\n:PROPERTIES:\n:CREATED: %T\n:END:\n\n%a\n\n%i%?") + ("p" "Blog post" entry + (file+olp+datetree + (lambda () + (expand-file-name "blog.org" org-directory))) + "* %^{Title} :blog:\n:PROPERTIES:\n:CREATED: %T\n:END:\n\n%i%?"))) + (org-read-date-force-compatible-dates nil) + (org-agenda-prefix-format '((agenda . " %i %-12:c%?-12t% s") + (todo . " %i %-12:c %(concat \"[ \"(org-format-outline-path (org-get-outline-path)) \" ]\") ") + (tags . " %i %-12:c %(concat \"[ \"(org-format-outline-path (org-get-outline-path)) \" ]\") ") + (timeline . " % s") + (search . " %i %-12:c"))) + (org-agenda-dim-blocked-tasks t) + (org-link-descriptive t) + (org-hide-emphasis-markers t) + (org-agenda-skip-deadline-prewarning-if-scheduled 'pre-scheduled) + (org-deadline-warning-days 7) + :hook + (ediff-select . f-ediff-org-unfold-tree-element) + (ediff-unselect . f-ediff-org-fold-tree) + (org-mode . gpolonkai/setup-org-mode) + :bind + (:map gpolonkai/pers-map + ("a" . gpolonkai/org-agenda-list) + ("C" . org-capture) + ("l" . org-store-link) + :map org-mode-map + ("SPC" . gpolonkai/org-space-key) + ("C-c l" . org-toggle-link-display) + ("C-a" . gpolonkai/move-to-beginning-of-line) + ("C-e" . gpolonkai/move-to-end-of-line) + ("C-c h" . outline-previous-heading) + ("C-c ." . gpolonkai/org-insert-current-timestamp) + ("C-c ;" . org-toggle-timestamp-type))) + +(use-package org-roam + :after org + :ensure t + :config + (setq org-roam-node-display-template (concat "${title:*} " + (propertize "${tags:10}" 'face 'org-tag))) + (org-roam-db-autosync-mode) + (require 'org-roam-dailies) + (require 'org-roam-protocol) + :custom + (org-roam-directory (file-truename (expand-file-name "roam" org-directory))) + (org-roam-dailies-directory (file-truename (expand-file-name "roam/journal" org-directory))) + (org-roam-completion-everywhere t) + (org-roam-capture-templates '(("d" "default" plain "\n%?" + :target (file+head + "${slug}-%<%Y%m%d%H%M%S>.org" + "#+title: ${title}") + :unnarrowed t))) + (org-roam-dailies-capture-templates '( + ("d" "default" entry "* %<%H:%M>: %?" + :if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n")))) + :bind + (("C-c n c" . org-roam-capture) + ("C-c n g" . org-roam-graph) + ("C-c n i" . org-roam-node-insert) + ("C-c n l" . org-roam-buffer-toggle) + :map org-mode-map + ("C-M-i" . completion-at-point) + :map org-roam-dailies-map + ("d" . org-roam-dailies-capture-date) + ("j" . org-roam-dailies-capture-today) + ("Y" . org-roam-dailies-capture-yesterday) + ("T" . org-roam-dailies-capture-tomorrow)) + :bind-keymap + ("C-c n d" . org-roam-dailies-map)) + +(use-package org-roam-timestamps + :after org-roam + :config + (org-roam-timestamps-mode) + :custom + (org-roam-timestamps-remember-timestamps t) + (org-roam-timestamps-timestamp-parent-file t)) + +(use-package org-roam-ui + :after org-roam + :custom + (org-roam-ui-sync-theme t) + (org-roam-ui-follow t) + (org-roam-ui-update-on-save t) + (org-roam-ui-open-on-start nil)) + +(use-package org-bullets + :custom + (org-bullets-face-name 'org-bullet-face) + (org-bullets-bullet-list '("✙" "♱" "♰" "☥" "✞" "✟" "✝" "†" "✠" "✚" "✜" "✛" "✢" "✣" "✤" "✥")) + :hook + (org-mode . org-bullets-mode)) + +(use-package org-sticky-header + :custom + (org-sticky-header-full-path 'full) + :hook + (org-mode . org-sticky-header-mode)) + +(use-package org-random-todo + :demand + :config + ;; Don’t bug me too often… + (setq org-random-todo-how-often 3600) + :custom + (org-random-todo-skip-keywords '("SOMEDAY")) + :bind + (:map gpolonkai/pers-map + ("r" . org-random-todo))) + +(use-package org-autolist + :hook + (org-mode . org-autolist-mode)) + +(use-package secretaria + :after + alert + :hook + ;; use this for getting a reminder every 30 minutes of those tasks + ;; scheduled for today and which have no time of day defined. + (after-init . secretaria-unknown-time-always-remind-me)) + +(use-package org-clock-waybar + :ensure nil + :vc (:url "https://gitea.polonkai.eu/gergely/org-clock-waybar.git") + :config + (org-clock-waybar-setup)) + +(use-package consult-org-roam + :config + (consult-org-roam-mode) + :bind (:map goto-map + ("r" . consult-org-roam-search) + :map global-map + ("C-c n f" . consult-org-roam-file-find))) + +(use-package org-appear + :hook + (org-mode . org-appear-mode) + :custom + (org-appear-autosubmarkers t) + (org-appear-autolinks t) + (org-appear-autoemphasis t)) + +(use-package ob-mermaid + :custom + (ob-mermaid-cli-path "/home/polesz/.local/node/bin/mmdc")) + +;; Before using this, make sure the latest PlantUML JAR file is downloaded into +;; the downloads directory. It is available from here: +;; http://plantuml.com/download + +(use-package plantuml-mode + :init + (setq plantuml-jar-path + (expand-file-name + ;; Make sure we have a download location even if XDG is not working + (cond + ((xdg-user-dir "DOWNLOAD") + (expand-file-name "plantuml.jar" (xdg-user-dir "DOWNLOAD"))) + (t + "~/Downloads/plantuml.jar")))) + (defvaralias 'org-plantuml-jar-path 'plantuml-jar-path) + :config + (org-babel-do-load-languages + 'org-babel-load-languages + '((plantuml . t)))) + +(use-package ox-rst + :after org) + +(use-package orgit + :after magit org) + +(use-package orgit-forge + :after magit org orgit) + ;; I started moving my configuration to this Org file. It’s easier to document this way. (org-babel-load-file (expand-file-name "configuration.org" user-emacs-directory))