bug#58813: [PATCH v2] doc: Document how to use Patman for patches submission.

2023-03-07 Thread Liliana Marie Prikler
Hi,

Am Dienstag, dem 07.03.2023 um 18:39 +0100 schrieb Simon Tournier:
> I still think this documentation for configuring ’patman’ about
> “Patch management” is helpful.  I think it could be part of the
> manual.  If not for reasons I am missing, at least this documentation
> should be included in the Cookbook.
There are two discussions here:
1. Should we "mandate" the use of patman?
2. Should we describe how to use patman for submitting patches to Guix?
I think most agree with the latter, but disagree with the former. 
Thus, whatever steps you add for the use with patman must be easily
enough replicated by people not using it, or else we risk low adoption
of best practices.

> And from my point of view, if we say that [1,2] fits the manual, then
> this dedicated section about “Patch management” also fits the manual.
> If this dedicated section about “Patch management” also does not fit
> the manual, then [1,2] neither. :-)
> 
> 1: 
> 2:
> 
I think [2] is distinct here in that it discusses Guix-specific quirks
when using TeX.

Cheers





bug#62040: Support for running guix system vm images for different architectures

2023-03-07 Thread Nathan Dehnel
I tried to build a guix vm for aarch64 on x64:

guix system vm --target=aarch64-linux-gnu
/home/nathan/guix-config/guixaarch64vm/config.scm

I copied the script out of the store and removed -enable-kvm because
qemu doesn't support it if the architectures are different:

#!/gnu/store/d99ykvj3axzzidygsmdmzxah4lvxd6hw-bash-5.1.8/bin/sh
exec 
/gnu/store/wqs83j00b2dd1481qwjw2hk49q7yrgb9-qemu-7.2.0/bin/qemu-system-aarch64
-kernel /gnu/store/yj98lqgxb17i8
pqm4rmj32ix7861fqy0-linux-libre-6.1.14/Image -initrd
/gnu/store/9pcg7jskx5ahz2gpnzsl1mim6akr2jly-system/initrd -appe
nd "root=/dev/vda1
gnu.system=/gnu/store/xqqq1xq7wwlsafdj104plipm66pwnb5w-system
gnu.load=/gnu/store/xqqq1xq7wwlsafd
j104plipm66pwnb5w-system/boot modprobe.blacklist=usbmouse,usbkbd
quiet" -no-reboot -object rng-random,filename=/dev/
urandom,id=guix-vm-rng -device virtio-rng-pci,rng=guix-vm-rng -virtfs
local,path="/gnu/store",security_model=none,mo
unt_tag="TAGjoptajej2oynju6yvboauz7pl6uj" -drive
file=/gnu/store/h5icgvql06yj4r0fqhkhl4y68wrr7pah-disk-image,format=
raw,if=virtio,cache=writeback,werror=report,readonly=on -m  512 "$@"

I tried to run it with these options:

./8vigmmi4gll68cb1648q3rwsyjfvzpkm-run-vm.sh -nographic -machine
virt,gic-version=max -m 512M -cpu max -smp 4 -netdev
user,id=vnet,hostfwd=:127.0.0.1:0-:22 -device
virtio-net-pci,netdev=vnet
GC Warning: pthread_getattr_np or pthread_attr_getstack failed for main thread
GC Warning: Couldn't read /proc/stat
Welcome, this is GNU's early boot Guile.
Use 'gnu.repl' for an initrd REPL.

loading kernel modules...
loading '/gnu/store/xqqq1xq7wwlsafdj104plipm66pwnb5w-system/boot'...
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure open-file: No such file or directory:
"/gnu/store/xqqq1xq7wwlsafdj104plipm66pwnb5w-system/boot"

Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)>

Can guix system vm support running non-native vms? Or does it?





bug#62023: compute-guix-derivation failed to compute the derivation for Guix

2023-03-07 Thread Maxim Cournoyer
tags 62023 +notabug
quit

Hello,

Adroit  writes:

> I keep getting this:
>
>> $ curl substitutes.nonguix.org
>> 
>> 301 Moved Permanently
>> 
>> 301 Moved Permanently
>> nginx
>> 
>> 
>> $ guix pull
>> Updating channel 'guix' from Git repository at 
>> 'https://git.savannah.gnu.org/git/guix.git'...
>> Updating channel 'nonguix' from Git repository at 
>> 'https://gitlab.com/nonguix/nonguix'...
>> Updating channel 'flat' from Git repository at 
>> 'https://github.com/flatwhatson/guix-channel.git'...
>> Updating channel 'guix-gaming-games' from Git repository at
>> 'https://gitlab.com/guix-gaming-channels/games.git'...
>> Building from these channels:
>> guix-gaming-gameshttps://gitlab.com/guix-gaming-channels/games.git e87c837
>> flat https://github.com/flatwhatson/guix-channel.git b62ba32
>> nonguix https://gitlab.com/nonguix/nonguix 5a54541
>> guix https://git.savannah.gnu.org/git/guix.git 61a0b03
>> substitute: updating substitutes from
>> 'https://substitutes.nonguix.org'... 0.0%guix substitute: warning:
>> substitutes.nonguix.org: host not found: Name or service not known
>> substitute:
>> substitute: updating substitutes from
>> 'https://ci.guix.gnu.org'... 0.0%guix substitute: warning:
>> ci.guix.gnu.org: host not found: Name or service not known
>> substitute:
>> substitute: updating substitutes from
>> 'https://bordeaux.guix.gnu.org'... 0.0%guix substitute: warning:
>> bordeaux.guix.gnu.org: host not found: Name or service not known
>> substitute:
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0%
>> substitute: updating substitutes from 'https://substitutes.nonguix.org'... 
>> 0.0%
>> substitute: updating 

bug#58813: [PATCH v2] doc: Document how to use Patman for patches submission.

2023-03-07 Thread Simon Tournier
Hi,

On Tue, 07 Mar 2023 at 11:46, Maxim Cournoyer  wrote:

>> My proposal is to have Patch management using patman as a dedicated section.
>> This way, we keep the submission guidelines simple using good ol'
>> git-send-email.  And by being a dedicated section, it acts as the Perfect
>> Setup: that's a tool very handy for doing the patch management task.

> Based on the other replies gathered so far, it seems there's little
> excitement to learn yet another tool for patch management, so I think
> I'll pursue the '--x-cmd' idea I already wrote about here, which would
> allow integration directly with 'git send-email'.

Well, from my point of view, it is not exclusive. :-)

Let say I do not use the tools ’info’ and ’man’, but the manual has a
section dedicated to it [1].  Let say I am not excited by LaTex/TeX with
Guix, but the manual has a section dedicated to it [2].

And the “Perfect Setup” is about Emacs and links to Magit, other tools
that we could ask.  Maybe I am not excited by them.  Etc.

Anyway.

I still think this documentation for configuring ’patman’ about “Patch
management” is helpful.  I think it could be part of the manual.  If not
for reasons I am missing, at least this documentation should be included
in the Cookbook.

And from my point of view, if we say that [1,2] fits the manual, then
this dedicated section about “Patch management” also fits the manual.
If this dedicated section about “Patch management” also does not fit the
manual, then [1,2] neither. :-)

1: 
2: 

Cheers,
simon





bug#61967: guix pack error with python packages

2023-03-07 Thread Maxim Cournoyer
Hi Josselin,

Josselin Poiret  writes:

> Hi Cayetano,
>
> Cayetano Santos via Bug reports for GNU Guix  writes:
>
>> Hello guix,
>>
>>   I’m trying to deploy a test set of python packages to a remote server,
>>   using the following guix pack command (latest guix, as for now)
>>
>> guix pack -R --compression=xz --save-provenance \
>> -S /.guix-profile/bin=bin -S /.guix-profile/share=share \
>> -S /.guix-profile/etc=etc -S /.guix-profile/lib=lib \
>> -S /.guix-profile/include=include
>>
>>   The resulting file.tar.xz is sent to the server with
>>
>> scp file.tar.xz server:/dir1/dir2/.
>
> This is most likely [1], which hasn't been fixed yet but I have a patch
> to that effect.  The problem is that it would cause a lot of rebuilds so
> I haven't sent it yet, I'll send it after the core-updates merge.

If you send it *after* the core-updates merge (to core-updates)? It's
going to be quite a while before it lands to master.  Perhaps you could
send it now?  core-updates is the right branch for mass rebuilds.

-- 
Thanks,
Maxim





bug#61013: guix style indentation problem in (list ...)

2023-03-07 Thread Maxim Cournoyer
Hi Ludo,

Ludovic Courtès  writes:

> Hello,
>
> Maxim Cournoyer  skribis:
>
>> I recently stumbled on this indentation produced with guix style:
>>
>> (arguments
>>  (list
>>;; Disable tests that use the network and non-free assets.
>>#:test-flags #~(list "-m" "not external and not samples")))
>>
>>
>> While the conventional way would be to indent it as:
>>
>> (arguments
>>  (list
>>   ;; Disable tests that use the network and non-free assets.
>>   #:test-flags #~(list "-m" "not external and not samples")))
>
> Fixed in 0a37921d851b94aef6900214098dc5bd62b46e26, thanks!

Awesome, that was quick!  I'll try to use it more regularly and reports
of any problematic behavior.

-- 
Thanks,
Maxim





bug#58813: [PATCH v2] doc: Document how to use Patman for patches submission.

2023-03-07 Thread Maxim Cournoyer
Hi Simon,

Simon Tournier  writes:

> From: Maxim Cournoyer 
>
> Fixes .
>
> * doc/contributing.texi (Sending a Patch Series): Adjust the examples to no
> longer showcase broken command substitutions.
> (Patch management using patman): New section about how to use Patman, with
> examples.
> ---
>  doc/contributing.texi | 111 --
>  doc/guix.texi |   2 +-
>  2 files changed, 108 insertions(+), 5 deletions(-)
>
> Hi,
>
> My proposal is to have Patch management using patman as a dedicated section.
> This way, we keep the submission guidelines simple using good ol'
> git-send-email.  And by being a dedicated section, it acts as the Perfect
> Setup: that's a tool very handy for doing the patch management task.
>
> WDYT?

Based on the other replies gathered so far, it seems there's little
excitement to learn yet another tool for patch management, so I think
I'll pursue the '--x-cmd' idea I already wrote about here, which would
allow integration directly with 'git send-email'.

-- 
Thanks,
Maxim





bug#61987: 'current-guix' uses configure flags of Git checkout

2023-03-07 Thread Winter via Bug reports for GNU Guix
tags 61987 notabug
close 61987
thanks

Hi Simon,

Agreed -- I'll submit a patch for a side effect of this, but this doesn't seem 
to be an actual issue.

Thanks,
Winter




bug#61955: Code snippets do not show in Firefox reader mode

2023-03-07 Thread
On Tue, 7 Mar 2023 at 15:47, Simon Tournier  wrote:
> Which Firefox?  Do you mean icecat from Guix?

Mozilla Firefox 102.8.0esr.





bug#62000: Inconsistent indentation rules for define-configuration

2023-03-07 Thread Simon Tournier
Hi Bruno,

On Tue, 7 Mar 2023 at 14:54, Bruno Victal  wrote:

> Having a field named 'package' within define-configuration causes incorrect 
> indentation.

As I tried to explain, .dir-locals.el does not consider the context
but only the keyword 'package'.  Because of

   (eval . (put 'package 'scheme-indent-function 0))

each time the word 'package' appears, then it applies the rule.  Maybe
I am missing something but from my point of view, it would not be
possible to change what you are suggesting: apply indentation rules
depending on the context.

Cheers,
simon





bug#61013: guix style indentation problem in (list ...)

2023-03-07 Thread Ludovic Courtès
Hello,

Maxim Cournoyer  skribis:

> I recently stumbled on this indentation produced with guix style:
>
> (arguments
>  (list
>;; Disable tests that use the network and non-free assets.
>#:test-flags #~(list "-m" "not external and not samples")))
>
>
> While the conventional way would be to indent it as:
>
> (arguments
>  (list
>   ;; Disable tests that use the network and non-free assets.
>   #:test-flags #~(list "-m" "not external and not samples")))

Fixed in 0a37921d851b94aef6900214098dc5bd62b46e26, thanks!

Ludo’.





bug#62000: Inconsistent indentation rules for define-configuration

2023-03-07 Thread Bruno Victal
Hi Simon,

On 2023-03-07 13:16, Simon Tournier wrote:
> Hi,
> 
> Cool you had the number 62000. ;-)
> 
> On Mon, 06 Mar 2023 at 12:48, Bruno Victal  wrote:
>> Suspected file: .dir-locals.el
>>
>> Using 'package' as a field in define-configuration results in
>> inconsistent indentation: 
>>
>> --8<---cut here---start->8---
>> (define-configuration/no-serialization mympd-configuration
>>   (package
>> (file-like mympd) < notice how it's 
>> indented with 2 spaces
>> "The package object of the myMPD server."
>> empty-serializer)
>>
>>   (shepherd-requirement
>>(list-of-symbol '())   < vs 1 space
>>"This is a list of symbols naming Shepherd services that this service
>> will depend on."
>>empty-serializer)
>>
>> ;; ...
>> )
>> --8<---cut here---end--->8---
> 
> What do you mean by inconsistent?  Do you think that
> ’sheperd-requirement’ should be management by .dir-locals.el?

It's not 'shepherd-requirement' that should be managed by .dir-locals.el, it 
could have been named something else.

Compare with 'mympd-ip-acl':

--8<---cut here---start->8---
(define-configuration/no-serialization mympd-ip-acl
  (allow
   (list-of-string '())
   "Allowed IP addresses.")

  (deny
   (list-of-string '())
   "Disallowed IP addresses."))
--8<---cut here---end--->8---

It's uniformly indented.

> Well, since ’sheperd-requirement’ is not in .dir-locals.el, the
> indentation seems expected.  What do you consider as a bug?

Having a field named 'package' within define-configuration causes incorrect 
indentation.


Cheers,
Bruno.





bug#61987: 'current-guix' uses configure flags of Git checkout

2023-03-07 Thread Simon Tournier
Hi,

> ./configure --localstatedir=/var --sysconfdir=/hi/guix

[...]

> (define-public %sysconfidr "/hi/guix")

Well, I do not see where is the bug. :-)  I think it is expected.

Cheers,
simon





bug#61955: Code snippets do not show in Firefox reader mode

2023-03-07 Thread Simon Tournier
Hi,

On Sat, 04 Mar 2023 at 10:23, 無  wrote:
> When opening the documentation in Firefox's reader mode, code snippets
> do not appear.

Which Firefox?  Do you mean icecat from Guix?

Well, indeed.  It renders:

--8<---cut here---start->8---
for a text editor, you can run:

This command shows you a number of matching packages, each
--8<---cut here---end--->8---

instead of,

--8<---cut here---start->8---
for a text editor, you can run:

guix search text editor

This command shows you a number of matching packages, each
--8<---cut here---end--->8---

Cheers,
simon





bug#62000: Inconsistent indentation rules for define-configuration

2023-03-07 Thread Simon Tournier
Hi,

Cool you had the number 62000. ;-)

On Mon, 06 Mar 2023 at 12:48, Bruno Victal  wrote:
> Suspected file: .dir-locals.el
>
> Using 'package' as a field in define-configuration results in
> inconsistent indentation: 
>
> --8<---cut here---start->8---
> (define-configuration/no-serialization mympd-configuration
>   (package
> (file-like mympd) < notice how it's 
> indented with 2 spaces
> "The package object of the myMPD server."
> empty-serializer)
>
>   (shepherd-requirement
>(list-of-symbol '())   < vs 1 space
>"This is a list of symbols naming Shepherd services that this service
> will depend on."
>empty-serializer)
>
> ;; ...
> )
> --8<---cut here---end--->8---

What do you mean by inconsistent?  Do you think that
’sheperd-requirement’ should be management by .dir-locals.el?

Well, .dirl-locals.el does not consider the context, IIUC.

For instance,

(let ((package something))
  (package
()
)
  )

Because of .dir-locals.el, the rules looks like that:

(not-in-dir-locals.el
 ()
 )

(package
  ()
  )

(package/inherit
()
  ()
  )

(add-before
()
()
  ()
  )

(let-keywords
()
()
()
  ()
  )

Or you can see that differently,

(not-in-dir-locals.el ()
  ()
  )

(package ()
 ()
 )

(package/inherit ()
  ()
  )

(add-before () ()
  ()
  )


Well, since ’sheperd-requirement’ is not in .dir-locals.el, the
indentation seems expected.  What do you consider as a bug?

Cheer,
simon






bug#57742: QT plugins from profile not found (QT_PLUGIN_PATH)

2023-03-07 Thread Maxim Cournoyer
Hello,

Marek Paśnikowski  writes:

> Hello.
>
> I found a piece of QT documentation on handling of plugins [1].
>
> Is it helpful to achieving working Plasma Desktop on Guix?
>
> Maxim - I was able to only find your email address; I don't think the
> other participants of this Debbugs issue will receive a copy of this
> message.
>
> Best Regards,
> Marek Paśnikowski
>
> [1]: 
> https://doc.qt.io/qt-6.2/deployment-plugins.html#loading-and-verifying-plugins-dynamically

The upstream bug I had opened,
https://bugreports.qt.io/browse/QTBUG-107459, has now been closed as
"Believed not to be a problem.", so it's indeed supposed to work.

I'll try looking into reverting some of the changes made when Qt 6 was
introduced; there may be warnings, if I recall correctly, but since it's
advertised as something supported, let's put it to the test!

-- 
Thanks,
Maxim





bug#58813: [PATCH v2] doc: Document how to use Patman for patches submission.

2023-03-07 Thread Simon Tournier
From: Maxim Cournoyer 

Fixes .

* doc/contributing.texi (Sending a Patch Series): Adjust the examples to no
longer showcase broken command substitutions.
(Patch management using patman): New section about how to use Patman, with
examples.
---
 doc/contributing.texi | 111 --
 doc/guix.texi |   2 +-
 2 files changed, 108 insertions(+), 5 deletions(-)

Hi,

My proposal is to have Patch management using patman as a dedicated section.
This way, we keep the submission guidelines simple using good ol'
git-send-email.  And by being a dedicated section, it acts as the Perfect
Setup: that's a tool very handy for doing the patch management task.

WDYT?

Cheers,
simon


diff --git a/doc/contributing.texi b/doc/contributing.texi
index 61c05c2489..197f9719ba 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -1531,7 +1531,7 @@ that we can send the rest of the patches to.
 @example
 $ git send-email outgoing/-cover-letter.patch -a \
   --to=guix-patches@@gnu.org \
-  $(etc/teams.scm cc-members ...)
+  --cc=team-member1@@example.org --cc=team-member2@@example.org ...
 $ rm outgoing/-cover-letter.patch # we don't want to resend it!
 @end example
 
@@ -1545,7 +1545,7 @@ can send the actual patches to the newly-created issue 
address.
 @example
 $ git send-email outgoing/*.patch \
   --to=@var{ISSUE_NUMBER}@@debbugs.gnu.org \
-  $(etc/teams.scm cc-members ...)
+  --cc=team-member1@@example.org --cc=team-member2@@example.org ...
 $ rm -rf outgoing # we don't need these anymore
 @end example
 
@@ -1588,18 +1588,121 @@ You can run the following command to have the 
@code{Mentors} team put in
 CC of a patch series:
 
 @example
-$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org $(./etc/teams.scm cc 
mentors) *.patch
+$ ./etc/teams.scm cc mentors
 @end example
 
+then note the @var{output} of the script.
+
+@example
+$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org @var{output} *.patch
+@end example
+
+Taking care to manually splice the @var{output} of the
+@file{etc/teams.scm} script into the command.
+
 The appropriate team or teams can also be inferred from the modified
 files.  For instance, if you want to send the two latest commits of the
 current Git repository to review, you can run:
 
 @example
 $ guix shell -D guix
-[env]$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org 
$(./etc/teams.scm cc-members HEAD~2 HEAD) *.patch
+[env]$ git send-email --to @var{ISSUE_NUMBER}@@debbugs.gnu.org @var{output} 
*.patch
+@end example
+
+@node Patch management using @command{patman}
+@subsection Patch management using @command{patman}
+@cindex patman patch manager
+@cindex patch management, via patman
+
+If you want something a bit higher level than @command{git send-email}
+to organize your patch submissions and take care of its various options
+for you, you may want to try the @command{patman} command, from the
+eponymous package.  Patman's help can be accessed via @samp{patman -H}
+or as an Info manual after installing the @code{u-boot-documentation}
+package (@pxref{Patman patch manager,,,u-boot,The U-Boot
+Documentation}).
+
+As manually stitching the output of the @file{etc/teams.scm} script in
+the @command{git send-email} command can get tedious; you may prefer to
+use Patman to automate this for you.  Its necessary basic configuration
+is already found at the root of the Guix repository, in the
+@file{.patman} file.  Another useful bit to have is a default
+destination for the @command{git send-email} command.  You can specify
+it in your repository-local Guix @file{.git/config} file with:
+
+@example
+[sendemail]
+to = guix-patches@@gnu.org
+@end example
+
+To send a long series to Debbugs, the patches can be written to the
+current directory with:
+
+@example
+patman -n
+@end example
+
+The first patch should then be sent using @samp{git send-email
+-cover-letter.patch}, as explained earlier (@pxref{Multiple
+Patches}).
+
+After Debbugs has issued a unique bug email in reply to that initial
+patch submission, e.g. @email{N@@debbugs.gnu.org}, you can save this
+information into the top commit of your patch series (it doesn't matter
+which, but it's more convenient to amend it later when it's at the top)
+like so, via the Patman-specific @code{Series-to} git message tag:
+
+@example
+gnu: Add foo.
+
+* gnu/packages/dummy.scm: Add foo.
+
+Series-to: N@@debbugs.gnu.org
 @end example
 
+You can then send your series to that address with the right people
+automatically added in CC by simply issuing:
+
+@example
+patman
+@end example
+
+After addressing the first round of review comments, you can annotate a
+v2 patch series by adding these Patman-specific git message tags:
+
+@example
+gnu: Add foo.
+
+* gnu/packages/dummy.scm: Add foo.
+
+Series-to: N@@debbugs.gnu.org
+Series-version: 2
+Series-changes: 2
+- Factorized X into Y and Z
+@end example
+
+The