~abcdw/rde-devel

Add feature emacs-org-dailies. v1 PROPOSED

This patch series splits the org-dailies functionality from the
feature-org-roam, to allow users to have similar org-dailies outside
org-roam.

Nicolas Graves (3):
  feature: emacs-org-roam: Delete duplicate definition.
  rde: Add feature emacs-org-dailies.
  feature: emacs-org-roam: Properly integrate with feature-org-dailies.

 src/rde/features/emacs-xyz.scm | 115 ++++++++++++++++++++++++---------
 1 file changed, 86 insertions(+), 29 deletions(-)

-- 
2.41.0
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~abcdw/rde-devel/patches/44892/mbox | git am -3
Learn more about email & git

[PATCH 1/3] feature: emacs-org-roam: Delete duplicate definition. Export this patch

org-roam-dailies-directory was defined twice in the feature-emacs-org-roam.
---
 src/rde/features/emacs-xyz.scm | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm
index 4be38b7d..112f0154 100644
--- a/src/rde/features/emacs-xyz.scm
+++ b/src/rde/features/emacs-xyz.scm
@@ -4557,10 +4557,6 @@ the node, relative to `org-roam-directory'."

         ,@(if org-roam-capture-templates
               `((setq org-roam-capture-templates ',org-roam-capture-templates))
               '())

         ,@(if org-roam-dailies-directory
               `((setq org-roam-dailies-directory ,org-roam-dailies-directory))
               '()))

         ,@(if org-roam-file-exclude-regexp
-- 
2.41.0

[PATCH 2/3] rde: Add feature emacs-org-dailies. Export this patch

---
 src/rde/features/emacs-xyz.scm | 52 +++++++++++++++++++++++++++++++---
 1 file changed, 48 insertions(+), 4 deletions(-)

diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm
index 112f0154..316470b9 100644
--- a/src/rde/features/emacs-xyz.scm
+++ b/src/rde/features/emacs-xyz.scm
@@ -111,6 +111,7 @@
            feature-emacs-org
            feature-emacs-org-roam
            feature-emacs-org-agenda
            feature-emacs-org-dailies
            feature-emacs-citar
            feature-emacs-org-protocol
            feature-emacs-spelling
@@ -4450,32 +4451,74 @@ If NODE doesn't exist, create a new org-roam node with REF."
    (add-hook 'before-save-hook 'rde-org-roam-update-todo-tag)
    (advice-add 'org-agenda :before 'rde-org-roam-update-todo-files)))

(define* (feature-emacs-org-dailies
          #:key
          (emacs-org-dailies emacs-org-dailies)
          (org-dailies-directory "daily/")
          (org-dailies-capture-templates #f))
  "Configure org-dailies for GNU Emacs."
  (ensure-pred file-like? emacs-org-dailies)
  (ensure-pred maybe-path? org-dailies-directory)
  (ensure-pred maybe-list? org-dailies-capture-templates)

  (define emacs-f-name 'org-dailies)
  (define f-name (symbol-append 'emacs- emacs-f-name))

  (define (get-home-services config)
    (when (and (not (get-value 'org-roam-dailies? config))
               org-dailies-capture-templates)
      (raise
       (formatted-message
        (G_ "org-dailies package does't handle capture templates for now."))))
    (list
     (rde-elisp-configuration-service
      emacs-f-name
      config
      `(,@(if (get-value 'org-roam-dailies? config)
              '()
              `((require 'org-dailies)
                (setq org-dailies-directory ,org-dailies-directory))))
      #:summary "Daily journaling functionality for Emacs"
      #:commentary "\
This feature configure daily journaling functionality, either with org-roam-dailies,
or with a org-roam-less copy of the package."
      #:keywords '(convenience)
      #:elisp-packages (if (get-value 'org-roam-dailies? config)
                           '()
                           (list emacs-org-dailies)))))

  (feature
   (name f-name)
   (values `((,f-name . #t)
             (org-dailies-directory . ,org-dailies-directory)
             (org-dailies-capture-templates . ,org-dailies-capture-templates)))
   (home-services-getter get-home-services)))

;; TODO: rewrite to states
(define* (feature-emacs-org-roam
          #:key
          (emacs-org-roam emacs-org-roam)
          (org-roam-directory #f)
          (org-roam-dailies-directory #f)
          (org-roam-capture-templates #f)
          (org-roam-dailies-capture-templates #f)
          (org-roam-file-exclude-regexp #f)
          (org-roam-todo? #f)
          (org-roam-dailies? #f)
          (use-node-types? #t))
  "Configure org-roam for GNU Emacs."
  (ensure-pred file-like? emacs-org-roam)
  (define (not-boolean? x) (not (boolean? x)))
  (ensure-pred not-boolean? org-roam-directory)
  (ensure-pred maybe-path? org-roam-dailies-directory)
  (ensure-pred maybe-list? org-roam-capture-templates)
  (ensure-pred boolean? use-node-types?)
  (ensure-pred maybe-list? org-roam-dailies-capture-templates)
  (ensure-pred maybe-list? org-roam-file-exclude-regexp)
  (ensure-pred boolean? org-roam-todo?)
  (ensure-pred boolean? org-roam-dailies?)

  (define emacs-f-name 'org-roam)
  (define f-name (symbol-append 'emacs- emacs-f-name))

  (define (get-home-services config)
    (if org-roam-dailies? (require-value 'org-dailies-directory config))
    (list
     (rde-elisp-configuration-service
      emacs-f-name
@@ -4627,6 +4670,7 @@ marginalia annotations."
  (feature
   (name f-name)
   (values `((,f-name . ,emacs-org-roam)
             (org-roam-dailies? . ,org-roam-dailies?)
             (org-roam-todo? . ,org-roam-todo?)))
   (home-services-getter get-home-services)))

-- 
2.41.0

[PATCH 3/3] feature: emacs-org-roam: Properly integrate with feature-org-dailies. Export this patch

---
 src/rde/features/emacs-xyz.scm | 63 +++++++++++++++++++++-------------
 1 file changed, 40 insertions(+), 23 deletions(-)

diff --git a/src/rde/features/emacs-xyz.scm b/src/rde/features/emacs-xyz.scm
index 316470b9..d670bc2a 100644
--- a/src/rde/features/emacs-xyz.scm
+++ b/src/rde/features/emacs-xyz.scm
@@ -4517,6 +4517,14 @@ or with a org-roam-less copy of the package."
  (define emacs-f-name 'org-roam)
  (define f-name (symbol-append 'emacs- emacs-f-name))

  (define emacs-org-roam-package
    (if org-roam-dailies?
        emacs-org-roam
        (package/inherit emacs-org-roam
          (source (origin (inherit (package-source emacs-org-roam))
                          (snippet
                           '(delete-file "extensions/org-roam-dailies.el")))))))

  (define (get-home-services config)
    (if org-roam-dailies? (require-value 'org-dailies-directory config))
    (list
@@ -4594,12 +4602,27 @@ the node, relative to `org-roam-directory'."
            (define-key map (kbd "C-c r a") 'org-roam-alias-add)
            (define-key map (kbd "C-c r A") 'org-roam-alias-remove)
            (define-key map (kbd "C-c r O") 'rde-org-roam-open-ref)
            (define-key map (kbd "C-c n N") 'org-roam-dailies-goto-next-note)
            (define-key map (kbd "C-c n P")
              'org-roam-dailies-goto-previous-note)))
            ,@(if org-roam-dailies?
                  `((define-key map (kbd "C-c n N")
                      'org-roam-dailies-goto-next-note)
                    (define-key map (kbd "C-c n P")
                      'org-roam-dailies-goto-previous-note))
                  '())))

         ,@(if org-roam-capture-templates
               `((setq org-roam-capture-templates ',org-roam-capture-templates))
               '())

         ,@(if org-roam-dailies?
               `((with-eval-after-load 'org-roam-dailies
                   ,@(if org-dailies-capture-templates
                         `((setq org-roam-dailies-capture-templates
                                 ',(get-value
                                    'org-dailies-capture-templates
                                    config)))
                         '())
                   (setq org-roam-dailies-directory
                         ,(get-value 'org-dailies-directory config))))
               '()))

         ,@(if org-roam-file-exclude-regexp
@@ -4628,25 +4651,19 @@ the node, relative to `org-roam-directory'."
                           '())))
                 '())

        (with-eval-after-load 'org-roam-dailies
          ,@(if org-roam-dailies-capture-templates
                `((setq org-roam-dailies-capture-templates
                        ',org-roam-dailies-capture-templates))
                '())
          ,@(if org-roam-dailies-directory
                `((setq org-roam-dailies-directory
                        ,org-roam-dailies-directory))
                '()))

        (let ((map mode-specific-map))
          (define-key map (kbd "n t") 'org-roam-dailies-goto-today)
          (define-key map (kbd "n y") 'org-roam-dailies-goto-yesterday)
          (define-key map (kbd "n m") 'org-roam-dailies-goto-tomorrow)
          (define-key map (kbd "n d") 'org-roam-dailies-goto-date)
          (define-key map (kbd "n c t") 'org-roam-dailies-capture-today)
          (define-key map (kbd "n c y") 'org-roam-dailies-capture-yesterday)
          (define-key map (kbd "n c m") 'org-roam-dailies-capture-tomorrow)
          (define-key map (kbd "n c d") 'org-roam-dailies-capture-date)
          ,@(if org-roam-dailies?
                `((define-key map (kbd "n t") 'org-roam-dailies-goto-today)
                  (define-key map (kbd "n y") 'org-roam-dailies-goto-yesterday)
                  (define-key map (kbd "n m") 'org-roam-dailies-goto-tomorrow)
                  (define-key map (kbd "n d") 'org-roam-dailies-goto-date)
                  (define-key map (kbd "n c t") 'org-roam-dailies-capture-today)
                  (define-key map (kbd "n c y")
                    'org-roam-dailies-capture-yesterday)
                  (define-key map (kbd "n c m")
                    'org-roam-dailies-capture-tomorrow)
                  (define-key map (kbd "n c d") 'org-roam-dailies-capture-date))
                '())
          (define-key map (kbd "n n") 'org-roam-buffer-toggle)
          (define-key map (kbd "n f") 'org-roam-node-find)
          (define-key map (kbd "n i") 'org-roam-node-insert)
@@ -4660,7 +4677,7 @@ Set roam directory, basic keybindings, reasonable defaults and adjust
marginalia annotations."
      #:keywords '(convenience org-mode roam knowledgebase)
      #:elisp-packages (append
                        (list emacs-org-roam)
                        (list emacs-org-roam-package)
                        (or (and=> (get-value 'emacs-embark config) list)
                            '())
                        (or (and=> (get-value 'emacs-org-recur config)
@@ -4669,7 +4686,7 @@ marginalia annotations."

  (feature
   (name f-name)
   (values `((,f-name . ,emacs-org-roam)
   (values `((,f-name . ,emacs-org-roam-package)
             (org-roam-dailies? . ,org-roam-dailies?)
             (org-roam-todo? . ,org-roam-todo?)))
   (home-services-getter get-home-services)))
-- 
2.41.0