diff mbox series

[bug#57952] gnu: Add guix-send-email.

Message ID 19f63e3d16273f9d43f61890b0c8472afaa75d3f.1663668015.git.efraim@flashner.co.il
State Accepted
Headers show
Series [bug#57952] gnu: Add guix-send-email. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

Efraim Flashner Sept. 20, 2022, 10 a.m. UTC
* gnu/packages/guix-extensions.scm (guix-send-email): New variable.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add guix-extensions.
---
 gnu/local.mk                     |  1 +
 gnu/packages/guix-extensions.scm | 62 ++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+)
 create mode 100644 gnu/packages/guix-extensions.scm


base-commit: 5a9e3b7c3981f684f601e2d21e8202223b384de9

Comments

Liliana Marie Prikler Sept. 20, 2022, 4:51 p.m. UTC | #1
Am Dienstag, dem 20.09.2022 um 13:00 +0300 schrieb Efraim Flashner:
> * gnu/packages/guix-extensions.scm (guix-send-email): New variable.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add guix-extensions.
Probably unnecessary file; gwl lives nice in package-management.
> ---
>  gnu/local.mk                     |  1 +
>  gnu/packages/guix-extensions.scm | 62
> ++++++++++++++++++++++++++++++++
>  2 files changed, 63 insertions(+)
>  create mode 100644 gnu/packages/guix-extensions.scm
> 
> diff --git a/gnu/local.mk b/gnu/local.mk
> index 238fb72bc5..ba28788776 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -295,6 +295,7 @@ GNU_SYSTEM_MODULES
> =                                \
>    %D%/packages/guile.scm                       \
>    %D%/packages/guile-wm.scm                    \
>    %D%/packages/guile-xyz.scm                   \
> +  %D%/packages/guix-extensions.scm             \
>    %D%/packages/gv.scm                          \
>    %D%/packages/gxmessage.scm                   \
>    %D%/packages/hardware.scm                    \
> diff --git a/gnu/packages/guix-extensions.scm b/gnu/packages/guix-
> extensions.scm
> new file mode 100644
> index 0000000000..bb23b59de4
> --- /dev/null
> +++ b/gnu/packages/guix-extensions.scm
> @@ -0,0 +1,62 @@
> +;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
> +;;;
> +;;; GNU Guix is free software; you can redistribute it and/or modify
> it
> +;;; under the terms of the GNU General Public License as published
> by
> +;;; the Free Software Foundation; either version 3 of the License,
> or (at
> +;;; your option) any later version.
> +;;;
> +;;; GNU Guix is distributed in the hope that it will be useful, but
> +;;; WITHOUT ANY WARRANTY; without even the implied warranty of
> +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +;;; GNU General Public License for more details.
> +;;;
> +;;; You should have received a copy of the GNU General Public
> License
> +;;; along with GNU Guix.  If not, see
> <http://www.gnu.org/licenses/>.
> +
> +(define-module (gnu packages guix-extensions)
> +  #:use-module ((guix licenses) #:prefix license:)
> +  #:use-module (guix gexp)
> +  #:use-module (guix packages)
> +  #:use-module (guix build-system trivial)
> +  #:use-module (gnu packages version-control))
> +
> +(define-public guix-send-email
> +  (package
> +    (name "guix-send-email")
> +    (version "0")
> +    (source #f)
> +    (build-system trivial-build-system)
> +    (arguments
> +     (list
> +       #:modules '((guix build utils))
> +       #:builder
> +       #~(begin
> +           (use-modules (guix build utils))
> +           (let ((dest (string-append #$output
> +                                      "/share/guix/extensions/send-
> email.scm"))
> +                 (git            #$(this-package-input "git"))
> +                 (git-send-email (assoc-ref %build-inputs "git:send-
> email")))
> +             (mkdir-p (dirname dest))
> +             (with-output-to-file dest
> +               (lambda ()
> +                 (format #t
> +"(define-module (guix extensions send-email)~@
> +                #:use-module (guix scripts)~@
> +                #:export (guix-send-email))~@
> +~@
> +(define-command (guix-send-email . args)~@
> +                (category extension)~@
> +                (synopsis \"Replace 'guix send-email' with 'git
> send-email'\")~@
> +                (setenv \"GIT_EXEC_PATH\" \"~a/libexec/git-core\")~@
> +                (apply system* \"~a/bin/git\" \"send-email\"
> args))~%"
> +                 git-send-email git)))))))
> +    (home-page "")  ; Should be documentation location for
> GUIX_EXTENSIONS_PATH
> +    (inputs
> +     `(("git" ,git)
> +       ("git:send-email" ,git "send-email")))
> +    (synopsis "Replace @code{guix send-email} with @code{git send-
> email}")
> +    (description "This Guix extension provides a shell redirect from
> @code{guix
> +send-email} to @code{git send-email}.")
> +    ;; The package definition is longer than the code;
> +    ;; let this serve as the declaration of the license.
> +    (license license:gpl3+)))
I don't think this is a useful tool to provide at all nor a useful way
of providing it.  For one, I think users of "guix send-email" (which
for the record should probably be guix git send-email analogous to our
other git extensions) would like to have some features from
etc/teams.scm incorporated into them rather than having a wrapper that
simply performs the same operation.  For the other, the implementation
takes up more place in Guix than defining the actual command internally
would.  Thus, I doubt whether the design choices made here were wise
ones.

Cheers
Simon Tournier Sept. 20, 2022, 5:38 p.m. UTC | #2
Hi,

On Tue, 20 Sep 2022 at 13:00, Efraim Flashner <efraim@flashner.co.il> wrote:
> * gnu/packages/guix-extensions.scm (guix-send-email): New variable.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add guix-extensions.

Oh, that’s cool!  If we go for a new file, then maybe the package
guix-modules from gnu/packages/package-management.scm should go there.
WDYT?


Cheers,
simon
Efraim Flashner Sept. 21, 2022, 10:02 a.m. UTC | #3
On Tue, Sep 20, 2022 at 06:51:55PM +0200, Liliana Marie Prikler wrote:
> Am Dienstag, dem 20.09.2022 um 13:00 +0300 schrieb Efraim Flashner:
> > * gnu/packages/guix-extensions.scm (guix-send-email): New variable.
> > * gnu/local.mk (GNU_SYSTEM_MODULES): Add guix-extensions.
> Probably unnecessary file; gwl lives nice in package-management.

I'm expecting that there will be other ones eventually, and I didn't
really think it fit with package-management.

> > ---
> >  gnu/local.mk                     |  1 +
> >  gnu/packages/guix-extensions.scm | 62
> > ++++++++++++++++++++++++++++++++
> >  2 files changed, 63 insertions(+)
> >  create mode 100644 gnu/packages/guix-extensions.scm
> > 
> > diff --git a/gnu/local.mk b/gnu/local.mk
> > index 238fb72bc5..ba28788776 100644
> > --- a/gnu/local.mk
> > +++ b/gnu/local.mk
> > @@ -295,6 +295,7 @@ GNU_SYSTEM_MODULES
> > =                                \
> >    %D%/packages/guile.scm                       \
> >    %D%/packages/guile-wm.scm                    \
> >    %D%/packages/guile-xyz.scm                   \
> > +  %D%/packages/guix-extensions.scm             \
> >    %D%/packages/gv.scm                          \
> >    %D%/packages/gxmessage.scm                   \
> >    %D%/packages/hardware.scm                    \
> > diff --git a/gnu/packages/guix-extensions.scm b/gnu/packages/guix-
> > extensions.scm
> > new file mode 100644
> > index 0000000000..bb23b59de4
> > --- /dev/null
> > +++ b/gnu/packages/guix-extensions.scm
> > @@ -0,0 +1,62 @@
> > +;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
> > +;;;
> > +;;; GNU Guix is free software; you can redistribute it and/or modify
> > it
> > +;;; under the terms of the GNU General Public License as published
> > by
> > +;;; the Free Software Foundation; either version 3 of the License,
> > or (at
> > +;;; your option) any later version.
> > +;;;
> > +;;; GNU Guix is distributed in the hope that it will be useful, but
> > +;;; WITHOUT ANY WARRANTY; without even the implied warranty of
> > +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > +;;; GNU General Public License for more details.
> > +;;;
> > +;;; You should have received a copy of the GNU General Public
> > License
> > +;;; along with GNU Guix.  If not, see
> > <http://www.gnu.org/licenses/>.
> > +
> > +(define-module (gnu packages guix-extensions)
> > +  #:use-module ((guix licenses) #:prefix license:)
> > +  #:use-module (guix gexp)
> > +  #:use-module (guix packages)
> > +  #:use-module (guix build-system trivial)
> > +  #:use-module (gnu packages version-control))
> > +
> > +(define-public guix-send-email
> > +  (package
> > +    (name "guix-send-email")
> > +    (version "0")
> > +    (source #f)
> > +    (build-system trivial-build-system)
> > +    (arguments
> > +     (list
> > +       #:modules '((guix build utils))
> > +       #:builder
> > +       #~(begin
> > +           (use-modules (guix build utils))
> > +           (let ((dest (string-append #$output
> > +                                      "/share/guix/extensions/send-
> > email.scm"))
> > +                 (git            #$(this-package-input "git"))
> > +                 (git-send-email (assoc-ref %build-inputs "git:send-
> > email")))
> > +             (mkdir-p (dirname dest))
> > +             (with-output-to-file dest
> > +               (lambda ()
> > +                 (format #t
> > +"(define-module (guix extensions send-email)~@
> > +                #:use-module (guix scripts)~@
> > +                #:export (guix-send-email))~@
> > +~@
> > +(define-command (guix-send-email . args)~@
> > +                (category extension)~@
> > +                (synopsis \"Replace 'guix send-email' with 'git
> > send-email'\")~@
> > +                (setenv \"GIT_EXEC_PATH\" \"~a/libexec/git-core\")~@
> > +                (apply system* \"~a/bin/git\" \"send-email\"
> > args))~%"
> > +                 git-send-email git)))))))
> > +    (home-page "")  ; Should be documentation location for
> > GUIX_EXTENSIONS_PATH
> > +    (inputs
> > +     `(("git" ,git)
> > +       ("git:send-email" ,git "send-email")))
> > +    (synopsis "Replace @code{guix send-email} with @code{git send-
> > email}")
> > +    (description "This Guix extension provides a shell redirect from
> > @code{guix
> > +send-email} to @code{git send-email}.")
> > +    ;; The package definition is longer than the code;
> > +    ;; let this serve as the declaration of the license.
> > +    (license license:gpl3+)))
> I don't think this is a useful tool to provide at all nor a useful way
> of providing it.  For one, I think users of "guix send-email" (which
> for the record should probably be guix git send-email analogous to our
> other git extensions) would like to have some features from
> etc/teams.scm incorporated into them rather than having a wrapper that
> simply performs the same operation.  For the other, the implementation
> takes up more place in Guix than defining the actual command internally
> would.  Thus, I doubt whether the design choices made here were wise
> ones.

I suppose I didn't explain the package well in the description, but the
purpose was to (a) create a simple guix extension to serve as an example
for other people, and (b) to "solve" the case of "oops, I wrote guix
send-email instead of git send-email".

It's also not an extension that I personally would see myself
installing.

I would be happy to change it into a cookbook entry, starting with
(display "Hello World"), moving to (apply system* %hello/bin/hello args)
and finally guix-send-email to add an example with needing a bit more
complexity but still understandable. Or guix-vacuum-database, to wrap
vacuuming /var/guix/db/db.sqlite in a guix extension.
Efraim Flashner Sept. 21, 2022, 10:03 a.m. UTC | #4
On Tue, Sep 20, 2022 at 07:38:01PM +0200, zimoun wrote:
> Hi,
> 
> On Tue, 20 Sep 2022 at 13:00, Efraim Flashner <efraim@flashner.co.il> wrote:
> > * gnu/packages/guix-extensions.scm (guix-send-email): New variable.
> > * gnu/local.mk (GNU_SYSTEM_MODULES): Add guix-extensions.
> 
> Oh, that’s cool!  If we go for a new file, then maybe the package
> guix-modules from gnu/packages/package-management.scm should go there.
> WDYT?

I feel like guix-modules is still about package-management, so it's not
out of place where it is. Some implementation of how-can-i-help would
probably fit better in guix-extensions than elsewhere.
Liliana Marie Prikler Sept. 21, 2022, 4:56 p.m. UTC | #5
Am Mittwoch, dem 21.09.2022 um 13:02 +0300 schrieb Efraim Flashner:
> I suppose I didn't explain the package well in the description, but
> the purpose was to (a) create a simple guix extension to serve as an
> example for other people, and (b) to "solve" the case of "oops, I
> wrote guix send-email instead of git send-email".
> 
> It's also not an extension that I personally would see myself
> installing.
> 
> I would be happy to change it into a cookbook entry, starting with
> (display "Hello World"), moving to (apply system* %hello/bin/hello
> args) and finally guix-send-email to add an example with needing a
> bit more complexity but still understandable. Or guix-vacuum-
> database, to wrap vacuuming /var/guix/db/db.sqlite in a guix
> extension.
In that case I do think it'd be better as a cookbook entry, but I'm
also low-key hoping that if there's serious interest in a guix send-
email, that the etc/teams stuff is merged into that.

Cheers
Simon Tournier Sept. 21, 2022, 9:16 p.m. UTC | #6
Hi,

On Wed, 21 Sep 2022 at 13:02, Efraim Flashner <efraim@flashner.co.il> wrote:

> I suppose I didn't explain the package well in the description, but the
> purpose was to (a) create a simple guix extension to serve as an example
> for other people, and (b) to "solve" the case of "oops, I wrote guix
> send-email instead of git send-email".

The example I prepared for the lightening talk was:

--8<---------------cut here---------------start------------->8---
(define-module (guix extensiosn hello)
  #:export (guix-hello))

(define-command (guix-hello . cmd-line)
  (category plumbing)
  (synopsis "hello world")

  (display (G_ "Hello, world!")))
--8<---------------cut here---------------end--------------->8---

where the ’plumbing’ category could any other.  Even, we could introduce
a special category name ’extension’.

Running another program (as ’hello’ or anything else) could also fit
another good example.


Cheers,
simon
Simon Tournier Sept. 21, 2022, 9:19 p.m. UTC | #7
Hi,

On Wed, 21 Sep 2022 at 18:56, Liliana Marie Prikler <liliana.prikler@gmail.com> wrote:

> In that case I do think it'd be better as a cookbook entry, but I'm
> also low-key hoping that if there's serious interest in a guix send-
> email, that the etc/teams stuff is merged into that.

Maybe etc/teams could end as an extension.  People would install the
extension and then run “guix teams”.


Cheers,
simon
M Sept. 22, 2022, 7:30 p.m. UTC | #8
> +    (synopsis "Replace @code{guix send-email} with @code{git send-email}")
> +    (description "This Guix extension provides a shell redirect from @code{guix
> +send-email} to @code{git send-email}.")

When I noticed 'gnu: Add guix-send-email', I expected a wrapper around 
'git send-email' that provided some additional functionality, more 
specifically, I expected you could do something like

$ guix send-email commit1..commit2 --base=commit1

and it would automatically take care of first sending the cover letter, 
then waiting for a response, then send the later e-mails to 
NNNNN@debbugs.gnu.org.

Without such additional functionality (*), I don't think it's really 
useful.  However, if it's added to Guix proper (maybe Guix proper could 
be tweaked to say 'hint: did you mean git send-email [...]?'), I think 
it could be valuable (I would think it's somewhat unlikely for people 
that need some help with figuring out that the correct command is "git 
send-email" and not "guix send-email", to determine that they need to 
install "guix-send-email", so I don't think it solves (b) well).

> [...] Or guix-vacuum-database, to wrap
> vacuuming /var/guix/db/db.sqlite in a guix extension.

If there is interest in such a command (and not 'merely' as an example 
on how to write Guix extensions), I think it would be valuable and 
low-cost to have this in Guix proper.  (Vacuuming is for reducing disk 
usage, if the disk is (close to) full and needs some vacuuming, it might 
be too late to install "guix-vacuum-database" ...)

Greetings,
Maxime

(*) integrating etc/teams stuff would be nice too.
Ludovic Courtès Sept. 28, 2022, 8:45 p.m. UTC | #9
Hi!

I must say I’m a bit skeptical about the usefulness of the extension,
though it looks pretty fun :-) and also a good example of how to write
an extension (similar to what Simon presented in Paris).

Maybe we should just keep it as an example in the source tree?

Thanks,
Ludo’.
Efraim Flashner Sept. 30, 2022, 10:39 a.m. UTC | #10
The consensus is that this would be part of a useful cookbook article,
but there are better options for the namespace of 'guix send-email'
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 238fb72bc5..ba28788776 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -295,6 +295,7 @@  GNU_SYSTEM_MODULES =				\
   %D%/packages/guile.scm			\
   %D%/packages/guile-wm.scm			\
   %D%/packages/guile-xyz.scm			\
+  %D%/packages/guix-extensions.scm		\
   %D%/packages/gv.scm				\
   %D%/packages/gxmessage.scm			\
   %D%/packages/hardware.scm			\
diff --git a/gnu/packages/guix-extensions.scm b/gnu/packages/guix-extensions.scm
new file mode 100644
index 0000000000..bb23b59de4
--- /dev/null
+++ b/gnu/packages/guix-extensions.scm
@@ -0,0 +1,62 @@ 
+;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages guix-extensions)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
+  #:use-module (guix packages)
+  #:use-module (guix build-system trivial)
+  #:use-module (gnu packages version-control))
+
+(define-public guix-send-email
+  (package
+    (name "guix-send-email")
+    (version "0")
+    (source #f)
+    (build-system trivial-build-system)
+    (arguments
+     (list
+       #:modules '((guix build utils))
+       #:builder
+       #~(begin
+           (use-modules (guix build utils))
+           (let ((dest (string-append #$output
+                                      "/share/guix/extensions/send-email.scm"))
+                 (git            #$(this-package-input "git"))
+                 (git-send-email (assoc-ref %build-inputs "git:send-email")))
+             (mkdir-p (dirname dest))
+             (with-output-to-file dest
+               (lambda ()
+                 (format #t
+"(define-module (guix extensions send-email)~@
+                #:use-module (guix scripts)~@
+                #:export (guix-send-email))~@
+~@
+(define-command (guix-send-email . args)~@
+                (category extension)~@
+                (synopsis \"Replace 'guix send-email' with 'git send-email'\")~@
+                (setenv \"GIT_EXEC_PATH\" \"~a/libexec/git-core\")~@
+                (apply system* \"~a/bin/git\" \"send-email\" args))~%"
+                 git-send-email git)))))))
+    (home-page "")  ; Should be documentation location for GUIX_EXTENSIONS_PATH
+    (inputs
+     `(("git" ,git)
+       ("git:send-email" ,git "send-email")))
+    (synopsis "Replace @code{guix send-email} with @code{git send-email}")
+    (description "This Guix extension provides a shell redirect from @code{guix
+send-email} to @code{git send-email}.")
+    ;; The package definition is longer than the code;
+    ;; let this serve as the declaration of the license.
+    (license license:gpl3+)))