diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2aa221c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +root = true + +# Format the plain text documents. +[*.{org,adoc,md}] +end_of_line = lf +insert_final_newline = true diff --git a/config.el b/config.el index c9c3d05..42ec6f4 100644 --- a/config.el +++ b/config.el @@ -1,4 +1,6 @@ (defvar +wiki-directory "~/writings/wiki") +(defvar +structured-notes-directory-name "structured") +(defvar +structured-notes-directory (f-join +wiki-directory +structured-notes-directory-name)) (defvar my/wiki-asset-directory-name "assets") (defun my/is-in-wiki-directory () @@ -37,4 +39,60 @@ `((notes . ,(list (org-entry-get (point) anki-editor-prop-note-id))))) (org-entry-delete (point) anki-editor-prop-note-id))) +(setq + org-roam-capture-templates `(("p" "permanent" plain "%?" + :if-new + (file+head "%<%Y-%m-%d-%H-%M-%S>.org" + "#+title: ${title} +#+date: \"%<%Y-%m-%d %T %:z>\" +#+date_modified: \"%<%Y-%m-%d %T %:z>\" +#+language: en") + :unnarrowed t) + + ("c" "cards" plain "%?" + :if-new + (file+head ,(f-join +anki-cards-directory-name "%<%Y>.org") "#+title: Anki: ${title} +#+date: \"%<%Y-%m-%d %T %:z>\" +#+date_modified: \"%<%Y-%m-%d %T %:z>\" +#+language: en +#+property: anki_deck ${title}") + :unnarrowed t) + + ("l" "literature" plain "%?" + :if-new + (file+head ,(f-join +structured-notes-directory-name "literature.${slug}.org") "#+title: ${title} +#+date: \"%<%Y-%m-%d %T %:z>\" +#+date_modified: \"%<%Y-%m-%d %T %:z>\" +#+language: en") + :unnarrowed t) + + ("d" "dailies" entry "* %?" + :if-new + (file+head ,(expand-file-name "%<%Y-%m-%d>.org" org-roam-dailies-directory) "#+title: %<%Y-%m-%d>\n")) + + ("s" "structured" plain "%?" + :if-new + (file+head ,(f-join +structured-notes-directory-name "${slug}.org") "#+title: ${title}") + :unnarrowed t))) + +(eval-after-load "org-roam" + '(cl-defmethod org-roam-node-slug ((node org-roam-node)) + "Override the slug method with a kebab-case instead of the +snake_case." + (let ((title (org-roam-node-title node))) + (cl-flet* ((nonspacing-mark-p (char) + (memq char org-roam-slug-trim-chars)) + (strip-nonspacing-marks (s) + (ucs-normalize-NFC-string + (apply #'string (seq-remove #'nonspacing-mark-p + (ucs-normalize-NFD-string s))))) + (cl-replace (title pair) + (replace-regexp-in-string (car pair) (cdr pair) title))) + (let* ((pairs `(("[^[:alnum:][:digit:]_.]+" . "-") ;; convert anything not alphanumeric except "." + ("\s+" . "-") ;; remove whitespaces + ("__*" . "-") ;; remove sequential underscores + ("^_" . "") ;; remove starting underscore + ("_$" . ""))) ;; remove ending underscore + (slug (-reduce-from #'cl-replace (strip-nonspacing-marks title) pairs))) + (downcase slug)))))) ;;; config.el ends here