Subject: [PATCH] Split emacs-piem and emacs-git-email
From: Declan Tsien <[email-masked]>
To: [email-masked]
Date: Sun, 23 Oct 2022 13:49:54 +0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Currently, emacs-piem and emacs-git-email bundle multiple lisp files with
identical functionality but for different tastes. Split into separated
packages would avoid pulling unnecessary dependencies into user profile.

Also fix info manual for emacs-git-email and add info-manual for
emacs-piem

From 6b44b4998369f01365c0ddb1b935072cfefcbe1b Mon Sep 17 00:00:00 2001
From: Declan Tsien <[email-masked]>
Date: Sun, 23 Oct 2022 11:40:07 +0800
Subject: [PATCH 1/4] gnu: emacs-git-email: Fix makeinfo.

* gnu/packages/emacs-xyz.scm (emacs-git-email): Fix makeinfo.
---
 gnu/packages/emacs-xyz.scm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 06ec9dd904..be6d4c6ba3 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -17341,7 +17341,8 @@ (define-public emacs-git-email
                (delete-file "git-email-piem.el")))
            (add-before 'install 'makeinfo
              (lambda _
-               (invoke "makeinfo" "doc/git-email.texi"))))))
+               (invoke "make" "doc/git-email.info")
+               (rename-file "doc/git-email.info" "git-email.info"))))))
       (native-inputs
        (list texinfo))
       (propagated-inputs

base-commit: 1f734a6f0a7db5b0e12091a0c869c5c4810ac80e
-- 
2.38.0

From 3d6c28a0cbeed2f38d91cd31155a257578675f6d Mon Sep 17 00:00:00 2001
From: Declan Tsien <[email-masked]>
Date: Sun, 23 Oct 2022 11:42:19 +0800
Subject: [PATCH 2/4] gnu: emacs-piem: Add build-info-manual phase.

* gnu/packages/emacs-xyz.scm (emacs-piem): Add build-info-manual phase.
[native-inputs]: Add texinfo.
---
 gnu/packages/emacs-xyz.scm | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index be6d4c6ba3..bc56067a7c 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -7151,9 +7151,15 @@ (define-public emacs-piem
                  (lambda* (#:key inputs #:allow-other-keys)
                    (emacs-substitute-variables "piem-b4.el"
                      ("piem-b4-b4-executable"
-                      (search-input-file inputs "/bin/b4"))))))))
+                      (search-input-file inputs "/bin/b4")))))
+               (add-after 'unpack 'build-info-manual
+                 (lambda _
+                   (invoke "make" "Documentation/piem.info")
+                   (rename-file "Documentation/piem.info" "piem.info"))))))
     (inputs
      (list b4))
+    (native-inputs
+     (list texinfo))
     (propagated-inputs
      (list emacs-elfeed
            emacs-notmuch
-- 
2.38.0

From ff45839e29bad8bd4fa5d9b4868b3f68fe8d300d Mon Sep 17 00:00:00 2001
From: Declan Tsien <[email-masked]>
Date: Sun, 23 Oct 2022 11:46:37 +0800
Subject: [PATCH 3/4] gnu: emacs-piem: Split into multiple separated packages.

emacs-piem currently bundles multiple lisp files with identical functionality
but for different tastes. Split into separated packages would avoid pulling
unnecessary dependencies into user profile.

* gnu/packages/emacs-xyz.scm (emacs-piem): Split into multiple separated
packages.
* gnu/packages/emacs-xyz.scm (emacs-piem-b4): New variable.
* gnu/packages/emacs-xyz.scm (emacs-piem-elfeed): New variable.
* gnu/packages/emacs-xyz.scm (emacs-piem-eww): New variable.
* gnu/packages/emacs-xyz.scm (emacs-piem-gnus): New variable.
* gnu/packages/emacs-xyz.scm (emacs-piem-notmuch): New variable.
* gnu/packages/emacs-xyz.scm (emacs-piem-rmail): New variable.
* gnu/packages/emacs-xyz.scm (emacs-piem-lei): New variable.
---
 gnu/packages/emacs-xyz.scm | 139 +++++++++++++++++++++++++++++--------
 1 file changed, 109 insertions(+), 30 deletions(-)

diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index bc56067a7c..3f62e92116 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -7134,45 +7134,124 @@ (define-public emacs-piem
   (package
     (name "emacs-piem")
     (version "0.4.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://git.kyleam.com/piem")
-             (commit (string-append "v" version))))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32 "0wr6n6wvznngjdp4c0pmdr4xz05dark0kxi5svzhzxsg3rdaql3z"))))
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.kyleam.com/piem")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "0wr6n6wvznngjdp4c0pmdr4xz05dark0kxi5svzhzxsg3rdaql3z"))))
     (build-system emacs-build-system)
     (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'configure
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (emacs-substitute-variables "piem-b4.el"
-                     ("piem-b4-b4-executable"
-                      (search-input-file inputs "/bin/b4")))))
-               (add-after 'unpack 'build-info-manual
-                 (lambda _
-                   (invoke "make" "Documentation/piem.info")
-                   (rename-file "Documentation/piem.info" "piem.info"))))))
-    (inputs
-     (list b4))
-    (native-inputs
-     (list texinfo))
-    (propagated-inputs
-     (list emacs-elfeed
-           emacs-notmuch
-           emacs-transient))
-    (home-page "https://docs.kyleam.com/piem")
+     (list #:exclude #~(cons* "^piem-b4.el"
+                              "^piem-elfeed.el"
+                              "^piem-eww.el"
+                              "^piem-gnus.el"
+                              "^piem-lei.el"
+                              "^piem-notmuch.el"
+                              "^piem-rmail.el"
+                              %default-exclude)
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'build-info-manual
+                          (lambda _
+                            (invoke "make" "Documentation/piem.info")
+                            (rename-file "Documentation/piem.info" "piem.info"))))))
+    (native-inputs (list texinfo))
+    (propagated-inputs (list emacs-transient))
+    (home-page "https://docs.kyleam.com/piem/")
     (synopsis "Glue for working with public-inbox archives")
-    (description "This packages provides a collection of Emacs libraries for
+    (description
+     "This package provides a collection of Emacs libraries for
 working with public-inbox archives.  As much of the hard work here is already
 done by other Emacs libraries—things like mail clients, news readers, Git
 interfaces, and even web browsers—piem is mostly about bridging some of these
 parts for convenience.")
     (license license:gpl3+)))
 
+(define-public emacs-piem-b4
+  (package
+    (inherit emacs-piem)
+    (name "emacs-piem-b4")
+    (inputs (list b4))
+    (propagated-inputs (list emacs-piem))
+    (arguments
+     (list #:include #~(list "piem-b4.el")
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'configure
+                          (lambda* (#:key inputs #:allow-other-keys)
+                            (emacs-substitute-variables "piem-b4.el"
+                                                        ("piem-b4-b4-executable"
+                                                         (search-input-file
+                                                          inputs "/bin/b4"))))))))
+    (synopsis "Emacs interface to the b4 tool")
+    (description
+     "This library provides a @code{emacs-transient} interface to @code{b4}.  It is
+documented in the piem manual.")))
+
+(define-public emacs-piem-elfeed
+  (package
+    (inherit emacs-piem)
+    (name "emacs-piem-elfeed")
+    (propagated-inputs (list emacs-piem emacs-elfeed))
+    (arguments
+     (list #:include #~(list "piem-elfeed.el")))
+    (synopsis "Elfeed integration for piem")
+    (description
+     "This library provides @code{emacs-elfeed} integration for @code{piem}.")))
+
+(define-public emacs-piem-eww
+  (package
+    (inherit emacs-piem)
+    (name "emacs-piem-eww")
+    (propagated-inputs (list emacs-piem))
+    (arguments
+     (list #:include #~(list "piem-eww.el")))
+    (synopsis "EWW integration for piem")
+    (description "This library provides EWW integration for @code{piem}.")))
+
+(define-public emacs-piem-gnus
+  (package
+    (inherit emacs-piem)
+    (name "emacs-piem-gnus")
+    (propagated-inputs (list emacs-piem))
+    (arguments
+     (list #:include #~(list "piem-gnus.el")))
+    (synopsis "Gnus integration for piem")
+    (description "This library provides Gnus integration for @code{piem}.")))
+
+(define-public emacs-piem-notmuch
+  (package
+    (inherit emacs-piem)
+    (name "emacs-piem-notmuch")
+    (propagated-inputs (list emacs-piem emacs-notmuch))
+    (arguments
+     (list #:include #~(list "piem-notmuch.el")))
+    (synopsis "Notmuch integration for piem")
+    (description
+     "This library provides @code{emacs-notmuch} integration for @code{piem}.")))
+
+(define-public emacs-piem-rmail
+  (package
+    (inherit emacs-piem)
+    (name "emacs-piem-rmail")
+    (propagated-inputs (list emacs-piem))
+    (arguments
+     (list #:include #~(list "piem-rmail.el")))
+    (synopsis "Rmail integration for piem")
+    (description "This library provides Rmail integration for @code{piem}.")))
+
+(define-public emacs-piem-lei
+  (package
+    (inherit emacs-piem)
+    (name "emacs-piem-lei")
+    (propagated-inputs (list emacs-piem))
+    (arguments
+     (list #:include #~(list "piem-lei.el")))
+    (synopsis "Lei integration for piem")
+    (description "This library provides lei integration for @code{piem}.")))
+
 (define-public emacs-ert-expectations
   (package
     (name "emacs-ert-expectations")
-- 
2.38.0

From d0c79a8c055c3818c1ea97e4cf0aa373303025e5 Mon Sep 17 00:00:00 2001
From: Declan Tsien <[email-masked]>
Date: Sun, 23 Oct 2022 11:48:13 +0800
Subject: [PATCH 4/4] gnu: emacs-git-email: Split into multiple separated
 packages.

emacs-git-email currently bundles multiple lisp files with identical
functionality but for different tastes. Split into separated packages would
avoid pulling unnecessary dependencies into user profile.

* gnu/packages/emacs-xyz.scm (emacs-git-email): Split into multiple separated
packages.
* gnu/packages/emacs-xyz.scm (emacs-git-email-gnus): New Variable.
* gnu/packages/emacs-xyz.scm (emacs-git-email-magit): New Variable.
* gnu/packages/emacs-xyz.scm (emacs-git-email-mu4e): New Variable.
* gnu/packages/emacs-xyz.scm (emacs-git-email-notmuch): New Variable.
* gnu/packages/emacs-xyz.scm (emacs-git-email-piem): New Variable.
---
 gnu/packages/emacs-xyz.scm | 115 +++++++++++++++++++++++++++++--------
 1 file changed, 90 insertions(+), 25 deletions(-)

diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 3f62e92116..0bbae04f08 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -17405,39 +17405,104 @@ (define-public emacs-git-email
     (package
       (name "emacs-git-email")
       (version (git-version "0.2.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://git.sr.ht/~yoctocell/git-email")
-               (commit commit)))
-         (patches
-          (search-patches "emacs-git-email-missing-parens.patch"))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1lk1yds7idgawnair8l3s72rgjmh80qmy4kl5wrnqvpmjrmdgvnx"))))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.sr.ht/~yoctocell/git-email")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1lk1yds7idgawnair8l3s72rgjmh80qmy4kl5wrnqvpmjrmdgvnx"))))
       (build-system emacs-build-system)
       (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           ;; piem is not yet packaged in Guix.
-           (add-after 'unpack 'remove-piem
-             (lambda _
-               (delete-file "git-email-piem.el")))
-           (add-before 'install 'makeinfo
-             (lambda _
-               (invoke "make" "doc/git-email.info")
-               (rename-file "doc/git-email.info" "git-email.info"))))))
-      (native-inputs
-       (list texinfo))
-      (propagated-inputs
-       (list mu emacs-magit emacs-notmuch))
+       (list #:exclude #~(cons* "^git-email-gnus.el"
+                                "^git-email-magit.el"
+                                "^git-email-mu4e.el"
+                                "^git-email-notmuch.el"
+                                "^git-email-piem.el"
+                                %default-exclude)
+             #:phases #~(modify-phases %standard-phases
+                          (add-before 'install 'makeinfo
+                            (lambda _
+                              (invoke "make" "doc/git-email.info")
+                              (rename-file "doc/git-email.info"
+                                           "git-email.info"))))))
+      (native-inputs (list texinfo))
       (license license:gpl3+)
       (home-page "https://sr.ht/~yoctocell/git-email")
       (synopsis "Format and send Git patches in Emacs")
       (description "This package provides utilities for formatting and
 sending Git patches via Email, without leaving Emacs."))))
 
+(define-public emacs-git-email-gnus
+  (package
+    (inherit emacs-git-email)
+    (name "emacs-git-email-gnus")
+    (propagated-inputs (list emacs-git-email))
+    (arguments
+     (list #:include #~(list "git-email-gnus.el")))
+    (synopsis "Gnus integration for git-email")
+    (description
+     "This library sets some variables for git-email to make it work
+better with Gnus.")))
+
+(define-public emacs-git-email-magit
+  (package
+    (inherit emacs-git-email)
+    (name "emacs-git-email-magit")
+    (propagated-inputs (list emacs-git-email emacs-magit))
+    (arguments
+     (list #:include #~(list "git-email-magit.el")))
+    (synopsis "Magit integration for git-email")
+    (description
+     "This library offers transient commands in the magit-status buffer
+for interacting with git-email.")))
+
+(define-public emacs-git-email-mu4e
+  (package
+    (inherit emacs-git-email)
+    (name "emacs-git-email-mu4e")
+    (propagated-inputs (list emacs-git-email mu))
+    (inputs (list `("emacs-git-email-mu4e-patch" ,(car (search-patches
+                                                        "emacs-git-email-missing-parens.patch")))))
+    (arguments
+     (list #:include #~(list "git-email-mu4e.el")
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'apply-patch
+                          (lambda* (#:key inputs #:allow-other-keys)
+                            (let ((patch (assoc-ref inputs
+                                          "emacs-git-email-mu4e-patch")))
+                              (invoke "patch" "-p1" "--batch" "-i" patch)))))))
+    (synopsis "Mu4e integration for git-email")
+    (description
+     "This library sets some variables for git-email to make it work
+better with @code{mu}.")))
+
+(define-public emacs-git-email-notmuch
+  (package
+    (inherit emacs-git-email)
+    (name "emacs-git-email-notmuch")
+    (propagated-inputs (list emacs-git-email emacs-notmuch))
+    (arguments
+     (list #:include #~(list "git-email-notmuch.el")))
+    (synopsis "Notmuch integration for git-email")
+    (description
+     "This library sets some variables for git-email to make it work
+better with @code{emacs-notmuch}.")))
+
+(define-public emacs-git-email-piem
+  (package
+    (inherit emacs-git-email)
+    (name "emacs-git-email-piem")
+    (propagated-inputs (list emacs-git-email emacs-piem))
+    (arguments
+     (list #:include #~(list "git-email-piem.el")))
+    (synopsis "Piem integration for git-email")
+    (description
+     "This library sets some variables for git-email to make it work
+better with @code{emacs-piem}.")))
+
 (define-public emacs-erc-hl-nicks
   (package
     (name "emacs-erc-hl-nicks")
-- 
2.38.0