all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service
@ 2023-06-02 23:04 Brian Cully via Guix-patches via
  2023-06-09 20:22 ` Ludovic Courtès
                   ` (12 more replies)
  0 siblings, 13 replies; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-02 23:04 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This adds a set of home shepherd services which will start the required
services for a functional pipewire setup.

* gnu/home/services/sound.scm (home-pipewire-shepherd-service),
(home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
(home-pipewire-shepherd-services), (generate-doc): new procedures.
(home-pipewire-service-type): new service type.
(home-pipewire-configuration): new struct.
* doc/guix.texi (Sound Home Services): document it.
---
 doc/guix.texi               | 34 +++++++++++++++++
 gnu/home/services/sound.scm | 74 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 107 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 7f8d8d66e9..0b19c9301f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -116,6 +116,7 @@
 Copyright @copyright{} 2023 Karl Hallsby@*
 Copyright @copyright{} 2023 Nathaniel Nicandro@*
 Copyright @copyright{} 2023 Tanguy Le Carrour@*
+Copyright @copyright{} 2023 Brian Cully@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -43563,6 +43564,39 @@ Sound Home Services
 This is the multicast address used by default by the two services above.
 @end defvar
 
+@cindex PipeWire, home service
+
+@uref{https://pipewire.org, PipeWire} provides a low-latency,
+graph-based audio and video processing service. In addition to its
+native protocol, it can also be used as a replacement for both JACK and
+PulseAudio.
+
+@defvar home-pipewire-service-type
+This provides the service definition for @command{pipewire}, which will
+run on login. Its value is a @code{home-pipewire-configuration} object.
+
+To start the service, add it to the @code{service} field of your
+@code{home-environment}, such as:
+
+@lisp
+(service home-pipewire-service-type)
+@end lisp
+
+@deftp {Data Type} home-pipewire-configuration
+Available @code{home-pipewire-configuration} fields are:
+
+@table @asis
+@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
+The PipeWire package to use.
+
+@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
+The WirePlumber package to use.
+
+@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
+Enable PulseAudio replacement.
+@end table
+@end deftp
+
 @node Mail Home Services
 @subsection Mail Home Services
  
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..94d8bc7482 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Brian Cully <bjc@spork.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,77 @@
 (define-module (gnu home services sound)
   #:use-module (gnu home services)
   #:use-module (gnu home services shepherd)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services configuration)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
   #:export (home-pulseaudio-rtp-sink-service-type
             home-pulseaudio-rtp-source-service-type
-            %pulseaudio-rtp-multicast-address))
+            %pulseaudio-rtp-multicast-address
+
+            home-pipewire-configuration
+            home-pipewire-service-type))
+
+\f
+;;;
+;;; PipeWire support.
+;;;
+(define-configuration/no-serialization home-pipewire-configuration
+  (pipewire (file-like pipewire) "The PipeWire package to use.")
+  (wireplumber (file-like wireplumber) "The WirePlumber package to use.")
+  (enable-pulseaudio? (boolean #t) "Enable PulseAudio replacement."))
+
+(define (home-pipewire-shepherd-service config)
+  (shepherd-service
+   (documentation "PipeWire screen and audio sharing.")
+   (provision '(pipewire))
+   (requirement '(dbus))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire"))))))
+
+(define (home-pipewire-pulseaudio-shepherd-service config)
+  (shepherd-service
+   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
+   (provision '(pipewire-pulseaudio))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire-pulse"))))))
+
+(define (home-wireplumber-shepherd-service config)
+  (shepherd-service
+   (documentation "WirePlumber session management for PipeWire.")
+   (provision '(wireplumber))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-wireplumber config)
+                      "/bin/wireplumber"))))))
+
+(define (home-pipewire-shepherd-services config)
+  (define shepherd-services
+    (filter
+     identity
+     (list home-pipewire-shepherd-service home-wireplumber-shepherd-service
+           (and (home-pipewire-configuration-enable-pulseaudio? config)
+                home-pipewire-pulseaudio-shepherd-service))))
+  (map (cut <> config) shepherd-services))
+
+(define home-pipewire-service-type
+  (service-type
+   (name 'pipewire)
+   (extensions
+    (list (service-extension home-shepherd-service-type
+                             home-pipewire-shepherd-services)))
+   (description
+    "Start essential PipeWire services.")
+   (default-value (home-pipewire-configuration))))
 
 \f
 ;;;
@@ -149,3 +214,10 @@ (define home-pulseaudio-rtp-source-service-type
     "Define a PulseAudio source to receive audio broadcasted over RTP by
 another PulseAudio instance.")
    (default-value %pulseaudio-rtp-multicast-address)))
+
+\f
+;;;
+;;; Generate documentation.
+;;;
+(define (generate-doc)
+  (configuration->documentation 'home-pipewire-configuration))

base-commit: c11b92a8aae6fe7fad0da8257ec28f5009c37b35
-- 
2.40.1





^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
@ 2023-06-09 20:22 ` Ludovic Courtès
  2023-06-12  5:50 ` Andrew Tropin
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 27+ messages in thread
From: Ludovic Courtès @ 2023-06-09 20:22 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863

Hi,

Brian Cully <bjc@spork.org> skribis:

> This adds a set of home shepherd services which will start the required
> services for a functional pipewire setup.
>
> * gnu/home/services/sound.scm (home-pipewire-shepherd-service),
> (home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
> (home-pipewire-shepherd-services), (generate-doc): new procedures.
> (home-pipewire-service-type): new service type.
> (home-pipewire-configuration): new struct.
> * doc/guix.texi (Sound Home Services): document it.

[...]

> +@cindex PipeWire, home service
> +
> +@uref{https://pipewire.org, PipeWire} provides a low-latency,
> +graph-based audio and video processing service. In addition to its
> +native protocol, it can also be used as a replacement for both JACK and
> +PulseAudio.

Could you explain why a Home service is necessary (I’d expect it to be
started on-demand via D-Bus or similar, like PulseAudio)?

Also, please leave two spaces after end-of-sentence periods (this eases
navigation in Emacs).

> +@table @asis
> +@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
> +The PipeWire package to use.
> +
> +@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
> +The WirePlumber package to use.

Could you add a few words saying what each of these packages does,
especially the second one.

> +@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
> +Enable PulseAudio replacement.

Maybe add: “When true, PulseAudio applications will talk to PipeWire,
which will handle them as if they were ``native'' PipeWire
applications.” (I’m making it up, but you get the idea.)

> +;;; PipeWire support.
> +;;;
> +(define-configuration/no-serialization home-pipewire-configuration

Please leave an empty line after the comment.

> +(define (home-pipewire-shepherd-service config)
> +  (shepherd-service
> +   (documentation "PipeWire screen and audio sharing.")
> +   (provision '(pipewire))
> +   (requirement '(dbus))
> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-pipewire config)
> +                      "/bin/pipewire"))))))

Please add the ‘stop’ method or the process will never be stopped.  :-)

> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-pipewire config)
> +                      "/bin/pipewire-pulse"))))))

Same here…

> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-wireplumber config)
> +                      "/bin/wireplumber"))))))

… and here.


> +(define (home-pipewire-shepherd-services config)
> +  (define shepherd-services
> +    (filter
> +     identity
> +     (list home-pipewire-shepherd-service home-wireplumber-shepherd-service
> +           (and (home-pipewire-configuration-enable-pulseaudio? config)
> +                home-pipewire-pulseaudio-shepherd-service))))
> +  (map (cut <> config) shepherd-services))

Rather:

  (cons* (home-pipewire-shepherd-service config)
         (home-wireplumber-shepherd-service config)
         (if …
             (list (home-pipewire-pulseaudio-shepherd-service config))
             '()))

> +   (description
> +    "Start essential PipeWire services.")

Can you add a couple of sentences?  That’s useful when running ‘guix
home search’ or similar.

> +
> +\f
> +;;;
> +;;; Generate documentation.
> +;;;
> +(define (generate-doc)
> +  (configuration->documentation 'home-pipewire-configuration))

This is unused, please remove it.

Could you send a v2?

Thanks!

Ludo’.




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
  2023-06-09 20:22 ` Ludovic Courtès
@ 2023-06-12  5:50 ` Andrew Tropin
  2023-06-12 15:56   ` Brian Cully via Guix-patches via
  2023-06-15 13:16 ` [bug#63863] [PATCH v2] " Brian Cully via Guix-patches via
                   ` (10 subsequent siblings)
  12 siblings, 1 reply; 27+ messages in thread
From: Andrew Tropin @ 2023-06-12  5:50 UTC (permalink / raw)
  To: Brian Cully, 63863

[-- Attachment #1: Type: text/plain, Size: 6991 bytes --]

On 2023-06-02 19:04, Brian Cully via Guix-patches via wrote:

> This adds a set of home shepherd services which will start the required
> services for a functional pipewire setup.
>
> * gnu/home/services/sound.scm (home-pipewire-shepherd-service),
> (home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
> (home-pipewire-shepherd-services), (generate-doc): new procedures.
> (home-pipewire-service-type): new service type.
> (home-pipewire-configuration): new struct.
> * doc/guix.texi (Sound Home Services): document it.
> ---
>  doc/guix.texi               | 34 +++++++++++++++++
>  gnu/home/services/sound.scm | 74 ++++++++++++++++++++++++++++++++++++-
>  2 files changed, 107 insertions(+), 1 deletion(-)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 7f8d8d66e9..0b19c9301f 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -116,6 +116,7 @@
>  Copyright @copyright{} 2023 Karl Hallsby@*
>  Copyright @copyright{} 2023 Nathaniel Nicandro@*
>  Copyright @copyright{} 2023 Tanguy Le Carrour@*
> +Copyright @copyright{} 2023 Brian Cully@*
>  
>  Permission is granted to copy, distribute and/or modify this document
>  under the terms of the GNU Free Documentation License, Version 1.3 or
> @@ -43563,6 +43564,39 @@ Sound Home Services
>  This is the multicast address used by default by the two services above.
>  @end defvar
>  
> +@cindex PipeWire, home service
> +
> +@uref{https://pipewire.org, PipeWire} provides a low-latency,
> +graph-based audio and video processing service. In addition to its
> +native protocol, it can also be used as a replacement for both JACK and
> +PulseAudio.
> +
> +@defvar home-pipewire-service-type
> +This provides the service definition for @command{pipewire}, which will
> +run on login. Its value is a @code{home-pipewire-configuration} object.
> +
> +To start the service, add it to the @code{service} field of your
> +@code{home-environment}, such as:
> +
> +@lisp
> +(service home-pipewire-service-type)
> +@end lisp
> +
> +@deftp {Data Type} home-pipewire-configuration
> +Available @code{home-pipewire-configuration} fields are:
> +
> +@table @asis
> +@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
> +The PipeWire package to use.
> +
> +@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
> +The WirePlumber package to use.
> +
> +@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
> +Enable PulseAudio replacement.
> +@end table
> +@end deftp
> +
>  @node Mail Home Services
>  @subsection Mail Home Services
>   
> diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
> index 22c1a99250..94d8bc7482 100644
> --- a/gnu/home/services/sound.scm
> +++ b/gnu/home/services/sound.scm
> @@ -1,5 +1,6 @@
>  ;;; GNU Guix --- Functional package management for GNU
>  ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
> +;;; Copyright © 2023 Brian Cully <bjc@spork.org>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -19,13 +20,77 @@
>  (define-module (gnu home services sound)
>    #:use-module (gnu home services)
>    #:use-module (gnu home services shepherd)
> +  #:use-module (gnu packages linux)
> +  #:use-module (gnu services configuration)
>    #:use-module (guix records)
>    #:use-module (guix gexp)
>    #:use-module (srfi srfi-1)
> +  #:use-module (srfi srfi-26)
>    #:use-module (ice-9 match)
>    #:export (home-pulseaudio-rtp-sink-service-type
>              home-pulseaudio-rtp-source-service-type
> -            %pulseaudio-rtp-multicast-address))
> +            %pulseaudio-rtp-multicast-address
> +
> +            home-pipewire-configuration
> +            home-pipewire-service-type))
> +
> +\f
> +;;;
> +;;; PipeWire support.
> +;;;
> +(define-configuration/no-serialization home-pipewire-configuration
> +  (pipewire (file-like pipewire) "The PipeWire package to use.")
> +  (wireplumber (file-like wireplumber) "The WirePlumber package to use.")
> +  (enable-pulseaudio? (boolean #t) "Enable PulseAudio replacement."))
> +
> +(define (home-pipewire-shepherd-service config)
> +  (shepherd-service
> +   (documentation "PipeWire screen and audio sharing.")

The description seems a little bit missleading, while PipeWire can do
screensharing, it's not only or even primary role.

> +   (provision '(pipewire))
> +   (requirement '(dbus))
> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-pipewire config)
> +                      "/bin/pipewire"))))))
> +
> +(define (home-pipewire-pulseaudio-shepherd-service config)
> +  (shepherd-service
> +   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
> +   (provision '(pipewire-pulseaudio))
> +   (requirement '(pipewire))
> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-pipewire config)
> +                      "/bin/pipewire-pulse"))))))
> +
> +(define (home-wireplumber-shepherd-service config)
> +  (shepherd-service
> +   (documentation "WirePlumber session management for PipeWire.")
> +   (provision '(wireplumber))
> +   (requirement '(pipewire))
> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-wireplumber config)
> +                      "/bin/wireplumber"))))))
> +
> +(define (home-pipewire-shepherd-services config)
> +  (define shepherd-services
> +    (filter
> +     identity
> +     (list home-pipewire-shepherd-service home-wireplumber-shepherd-service
> +           (and (home-pipewire-configuration-enable-pulseaudio? config)
> +                home-pipewire-pulseaudio-shepherd-service))))
> +  (map (cut <> config) shepherd-services))
> +
> +(define home-pipewire-service-type
> +  (service-type
> +   (name 'pipewire)
> +   (extensions
> +    (list (service-extension home-shepherd-service-type
> +                             home-pipewire-shepherd-services)))
> +   (description
> +    "Start essential PipeWire services.")
> +   (default-value (home-pipewire-configuration))))
>  
>  \f
>  ;;;
> @@ -149,3 +214,10 @@ (define home-pulseaudio-rtp-source-service-type
>      "Define a PulseAudio source to receive audio broadcasted over RTP by
>  another PulseAudio instance.")
>     (default-value %pulseaudio-rtp-multicast-address)))
> +
> +\f
> +;;;
> +;;; Generate documentation.
> +;;;
> +(define (generate-doc)
> +  (configuration->documentation 'home-pipewire-configuration))
>
> base-commit: c11b92a8aae6fe7fad0da8257ec28f5009c37b35

Hi Brian,

Thank you for the patch!  You may also want to add pipewire backend for
alsa:
https://git.sr.ht/~abcdw/rde/tree/525f8c7f25783c6b8fa55f21c8e62237bc0d4a04/src/rde/features/linux.scm#L100

-- 
Best regards,
Andrew Tropin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service
  2023-06-12  5:50 ` Andrew Tropin
@ 2023-06-12 15:56   ` Brian Cully via Guix-patches via
  2023-06-13  4:39     ` Andrew Tropin
  0 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-12 15:56 UTC (permalink / raw)
  To: Andrew Tropin; +Cc: 63863


Andrew Tropin <andrew@trop.in> writes:
>> +(define (home-pipewire-shepherd-service config)
>> +  (shepherd-service
>> +   (documentation "PipeWire screen and audio sharing.")
>
> The description seems a little bit missleading, while PipeWire 
> can do
> screensharing, it's not only or even primary role.

I'm not sure I understand the objection. Would you rather I 
mention its audio capabilities before screen sharing? Or would 
something like "PipeWire media processing" seem to suit it better 
for you?

Truth be told, I find succinctly describing PipeWire for this 
context to be pretty difficult. It does a lot, and it's all pretty 
abstract. PipeWire is just plumbing for services people actually 
care about, and I don't think "PipeWire make media worky" is going 
to fly 😉.

> Thank you for the patch!  You may also want to add pipewire 
> backend for
> alsa:
> https://git.sr.ht/~abcdw/rde/tree/525f8c7f25783c6b8fa55f21c8e62237bc0d4a04/src/rde/features/linux.scm#L100

Thanks for the pointer. I'll try to dig through the documentation 
to see what I can do. I find the Linux sound ecosystem to be 
pretty confusing. For instance: I thought ALSA was the backend 
that PipeWire used on Linux already, so I don't understand how 
ALSA can also use PipeWire as a backend.

My use for this patch was Wayland-motivated, and everything 
outside of basic functionality (screen sharing and playing audio 
from Firefox and MPD) wasn't something I spent much time on — 
since I really don't know much about it — in the hopes that we 
could provide a minimum level of service for people and add better 
support as people needed it as time went on.

-bjc




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service
  2023-06-12 15:56   ` Brian Cully via Guix-patches via
@ 2023-06-13  4:39     ` Andrew Tropin
  2023-06-13 12:20       ` Brian Cully via Guix-patches via
  0 siblings, 1 reply; 27+ messages in thread
From: Andrew Tropin @ 2023-06-13  4:39 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863

[-- Attachment #1: Type: text/plain, Size: 2699 bytes --]

On 2023-06-12 11:56, Brian Cully wrote:

> Andrew Tropin <andrew@trop.in> writes:
>>> +(define (home-pipewire-shepherd-service config)
>>> +  (shepherd-service
>>> +   (documentation "PipeWire screen and audio sharing.")
>>
>> The description seems a little bit missleading, while PipeWire 
>> can do
>> screensharing, it's not only or even primary role.
>
> I'm not sure I understand the objection. Would you rather I 
> mention its audio capabilities before screen sharing?

Nope.

> Or would something like "PipeWire media processing" seem to suit it
> better for you?

Yep.

> Truth be told, I find succinctly describing PipeWire for this 
> context to be pretty difficult. It does a lot, and it's all pretty 
> abstract. PipeWire is just plumbing for services people actually 
> care about, and I don't think "PipeWire make media worky" is going 
> to fly 😉.
>

"PipeWire make media worky" would work great! :D jk

Real-time multimedia capturing, processing and playback or low-latency,
graph-based audio and video processing engine or something like that.

>> Thank you for the patch!  You may also want to add pipewire 
>> backend for
>> alsa:
>> https://git.sr.ht/~abcdw/rde/tree/525f8c7f25783c6b8fa55f21c8e62237bc0d4a04/src/rde/features/linux.scm#L100
>
> Thanks for the pointer. I'll try to dig through the documentation 
> to see what I can do. I find the Linux sound ecosystem to be 
> pretty confusing. For instance: I thought ALSA was the backend 
> that PipeWire used on Linux already, so I don't understand how 
> ALSA can also use PipeWire as a backend.
>
> My use for this patch was Wayland-motivated, and everything 
> outside of basic functionality (screen sharing and playing audio 
> from Firefox and MPD) wasn't something I spent much time on — 
> since I really don't know much about it — in the hopes that we 
> could provide a minimum level of service for people and add better 
> support as people needed it as time went on.

Yep, we have similiar use cases in rde and configuration mentioned
earlier serves them quite well.  According to Alsa: I don't have deep
knowledge in this area too, but according to my knowledge pipewire can
be loaded as a shared library and injected into alsa user-facing API to
process requests, so maybe a backend for ALSA-based applications or
middleend for ALSA will be more apropriate name for the pipewire role
here :)

Anyway, without the config above alsamixer doesn't work on my system,
probably with some configuration it's possible to make it work, but
bypassing pipewire, however I think it would be nice to go full
pipewire.

-- 
Best regards,
Andrew Tropin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service
  2023-06-13  4:39     ` Andrew Tropin
@ 2023-06-13 12:20       ` Brian Cully via Guix-patches via
  2023-06-14  9:08         ` Andrew Tropin
  0 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-13 12:20 UTC (permalink / raw)
  To: Andrew Tropin; +Cc: 63863


Andrew Tropin <andrew@trop.in> writes:
>> Or would something like "PipeWire media processing" seem to 
>> suit it
>> better for you?
>
> Yep.

Works for me.

> Anyway, without the config above alsamixer doesn't work on my 
> system,
> probably with some configuration it's possible to make it work, 
> but
> bypassing pipewire, however I think it would be nice to go full
> pipewire.

I've just tried using ‘alsamixer’ from the ‘alsa-utils’ package 
this morning, and it works for me without any additional 
configuration. It shows both ‘Card’ and ‘Chip’ to be ‘PulseAudio’, 
and volume control works. Although, that is with PulseAudio 
emulation enabled. Should the ALSA configuration always be added? 
Or just if it's enabled in configuration (possibly defaulting #t)?

-bjc




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service
  2023-06-13 12:20       ` Brian Cully via Guix-patches via
@ 2023-06-14  9:08         ` Andrew Tropin
  0 siblings, 0 replies; 27+ messages in thread
From: Andrew Tropin @ 2023-06-14  9:08 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863

[-- Attachment #1: Type: text/plain, Size: 1269 bytes --]

On 2023-06-13 08:20, Brian Cully wrote:

> Andrew Tropin <andrew@trop.in> writes:
>>> Or would something like "PipeWire media processing" seem to 
>>> suit it
>>> better for you?
>>
>> Yep.
>
> Works for me.
>
>> Anyway, without the config above alsamixer doesn't work on my 
>> system,
>> probably with some configuration it's possible to make it work, 
>> but
>> bypassing pipewire, however I think it would be nice to go full
>> pipewire.
>
> I've just tried using ‘alsamixer’ from the ‘alsa-utils’ package 
> this morning, and it works for me without any additional 
> configuration. It shows both ‘Card’ and ‘Chip’ to be ‘PulseAudio’, 
> and volume control works. Although, that is with PulseAudio 
> emulation enabled.

With config mentioned earlier it shows PipeWire in Card and Chip.

> Should the ALSA configuration always be added?  Or just if it's
> enabled in configuration (possibly defaulting #t)?

Yep, I think it should be always added by default.

Also, it make sense to disable autospawn of pulseaudio to prevent
accidential interference.

Like this:
https://git.sr.ht/~abcdw/rde/tree/4365d81c0775beb0f623b756423e17275dbb2d00/src/rde/features/linux.scm#L128

-- 
Best regards,
Andrew Tropin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v2] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
  2023-06-09 20:22 ` Ludovic Courtès
  2023-06-12  5:50 ` Andrew Tropin
@ 2023-06-15 13:16 ` Brian Cully via Guix-patches via
  2023-06-15 13:19   ` Brian Cully via Guix-patches via
  2023-06-15 13:26 ` [bug#63863] [PATCH v3] " Brian Cully via Guix-patches via
                   ` (9 subsequent siblings)
  12 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-15 13:16 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This adds a set of home shepherd services which will start the required
services for a functional pipewire setup.

* gnu/home/services/sound.scm (home-pipewire-shepherd-service),
(home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
(home-pipewire-shepherd-services)
(home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
(home-pipewire-service-type): new service type.
(home-pipewire-configuration): new struct.
(home-pipewire-disable-pulseaudio-auto-start): new variable.
* doc/guix.texi (Sound Home Services): document it.
---
 doc/guix.texi               |  47 +++++++++++++++
 gnu/home/services/sound.scm | 115 +++++++++++++++++++++++++++++++++++-
 2 files changed, 161 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 9232c82b4b..ee50d7a324 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -116,6 +116,7 @@
 Copyright @copyright{} 2023 Karl Hallsby@*
 Copyright @copyright{} 2023 Nathaniel Nicandro@*
 Copyright @copyright{} 2023 Tanguy Le Carrour@*
+Copyright @copyright{} 2023 Brian Cully@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -43635,6 +43636,52 @@ Sound Home Services
 This is the multicast address used by default by the two services above.
 @end defvar
 
+@cindex PipeWire, home service
+
+@uref{https://pipewire.org, PipeWire} provides a low-latency,
+graph-based audio and video processing service.  In addition to its
+native protocol, it can also be used as a replacement for both JACK and
+PulseAudio.
+
+While PipeWire provides the media processing and API, it does not,
+directly, know about devices such as sound cards, nor how you might want
+to connect applications, hardware, and media processing
+filters. Instead, PipeWire relies on a @dfn{session manager} to specify
+all these relationships. While you may use any session manager you wish,
+for most people the
+@url{https://pipewire.pages.freedesktop.org/wireplumber/, WirePlumber}
+session manager, a reference implementation provided by the PipeWire
+project itself, suffices, and that is the one
+@code{home-pipewire-service-type} uses.
+
+@defvar home-pipewire-service-type
+This provides the service definition for @command{pipewire}, which will
+run on login.  Its value is a @code{home-pipewire-configuration} object.
+
+To start the service, add it to the @code{service} field of your
+@code{home-environment}, such as:
+
+@lisp
+(service home-pipewire-service-type)
+@end lisp
+@end defvar
+
+@deftp {Data Type} home-pipewire-configuration
+Available @code{home-pipewire-configuration} fields are:
+
+@table @asis
+@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
+The PipeWire package to use.
+
+@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
+The WirePlumber package to use.
+
+@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
+When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently.
+@end table
+@end deftp
+
 @node Mail Home Services
 @subsection Mail Home Services
  
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..5463255e8c 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Brian Cully <bjc@spork.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,125 @@
 (define-module (gnu home services sound)
   #:use-module (gnu home services)
   #:use-module (gnu home services shepherd)
+  #:use-module (gnu home services xdg)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services configuration)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (home-pulseaudio-rtp-sink-service-type
             home-pulseaudio-rtp-source-service-type
-            %pulseaudio-rtp-multicast-address))
+            %pulseaudio-rtp-multicast-address
+
+            home-pipewire-configuration
+            home-pipewire-service-type))
+
+\f
+;;;
+;;; PipeWire support.
+;;;
+
+(define-configuration/no-serialization home-pipewire-configuration
+  (pipewire
+   (file-like pipewire)
+   "The PipeWire package to use.")
+  (wireplumber
+   (file-like wireplumber)
+   "The WirePlumber package to use.")
+  (enable-pulseaudio?
+   (boolean #t)
+   "When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently."))
+
+(define (home-pipewire-shepherd-service config)
+  (shepherd-service
+   (documentation "PipeWire media processing.")
+   (provision '(pipewire))
+   (requirement '(dbus))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-pulseaudio-shepherd-service config)
+  (shepherd-service
+   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
+   (provision '(pipewire-pulseaudio))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire-pulse"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-wireplumber-shepherd-service config)
+  (shepherd-service
+   (documentation "WirePlumber session management for PipeWire.")
+   (provision '(wireplumber))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-wireplumber config)
+                      "/bin/wireplumber"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-shepherd-services config)
+  (cons* (home-pipewire-shepherd-service config)
+         (home-wireplumber-shepherd-service config)
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             (list (home-pipewire-pulseaudio-shepherd-service config))
+             '())))
+
+(define (home-pipewire-asoundrc config)
+  (mixed-text-file
+   "asoundrc"
+   #~(string-append
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/50-pipewire.conf")
+      ">\n"
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/99-pipewire-default.conf")
+      ">\n"
+      "pcm_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_pcm_pipewire.so")
+      "\"\n}\n"
+      "ctl_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_ctl_pipewire.so")
+      "\"\n}\n")))
+
+(define home-pipewire-disable-pulseaudio-auto-start
+  (plain-file "client.conf" "autospawn = no"))
+
+(define (home-pipewire-xdg-configuration config)
+  (cons* `("alsa/asoundrc" ,(home-pipewire-asoundrc config))
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             `(("pulse/client.conf"
+                ,home-pipewire-disable-pulseaudio-auto-start))
+             '())))
+
+(define home-pipewire-service-type
+  (service-type
+   (name 'pipewire)
+   (extensions
+    (list (service-extension home-shepherd-service-type
+                             home-pipewire-shepherd-services)
+          (service-extension home-xdg-configuration-files-service-type
+                             home-pipewire-xdg-configuration)))
+   (description
+    "Start essential PipeWire services.")
+   (default-value (home-pipewire-configuration))))
 
 \f
 ;;;

base-commit: f74df2ab879fc5457982bbc85b7455a90e82317d
-- 
2.40.1





^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v2] gnu: home: Add support for home-pipewire-service
  2023-06-15 13:16 ` [bug#63863] [PATCH v2] " Brian Cully via Guix-patches via
@ 2023-06-15 13:19   ` Brian Cully via Guix-patches via
  0 siblings, 0 replies; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-15 13:19 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863


This address most of the issues, I hope.

* I've added a config for ALSA.
* I'm disabling autospawn for PulseAudio when ‘enable-pulseaudio?’ 
  is #t
* I've added a paragraph to the documentation explaining 
  WireGuard.
* The missing Shepherd ‘stop’ fields are no longer missing.
* I've changed the wording for the Shepherd ‘pipewire’ service 
  documentation.
* The documentation generation function has been removed.
* I've reworded the ‘enable-pulseaudio?’ configuration field of 
  ‘home-pipewire-configuration’.

-bjc




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v3] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (2 preceding siblings ...)
  2023-06-15 13:16 ` [bug#63863] [PATCH v2] " Brian Cully via Guix-patches via
@ 2023-06-15 13:26 ` Brian Cully via Guix-patches via
  2023-06-15 13:27   ` Brian Cully via Guix-patches via
  2023-06-20 12:41 ` [bug#63863] [PATCH v4 0/1] " Brian Cully via Guix-patches via
                   ` (8 subsequent siblings)
  12 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-15 13:26 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This adds a set of home shepherd services which will start the required
services for a functional pipewire setup.

* gnu/home/services/sound.scm (home-pipewire-shepherd-service),
(home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
(home-pipewire-shepherd-services)
(home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
(home-pipewire-service-type): new service type.
(home-pipewire-configuration): new struct.
(home-pipewire-disable-pulseaudio-auto-start): new variable.
* doc/guix.texi (Sound Home Services): document it.
---
 doc/guix.texi               |  46 +++++++++++++++
 gnu/home/services/sound.scm | 115 +++++++++++++++++++++++++++++++++++-
 2 files changed, 160 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 9232c82b4b..c5e7066a4c 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -116,6 +116,7 @@
 Copyright @copyright{} 2023 Karl Hallsby@*
 Copyright @copyright{} 2023 Nathaniel Nicandro@*
 Copyright @copyright{} 2023 Tanguy Le Carrour@*
+Copyright @copyright{} 2023 Brian Cully@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -43635,6 +43636,51 @@ Sound Home Services
 This is the multicast address used by default by the two services above.
 @end defvar
 
+@cindex PipeWire, home service
+
+@uref{https://pipewire.org, PipeWire} provides a low-latency,
+graph-based audio and video processing service.  In addition to its
+native protocol, it can also be used as a replacement for both JACK and
+PulseAudio.
+
+While PipeWire provides the media processing and API, it does not,
+directly, know about devices such as sound cards, nor how you might want
+to connect applications, hardware, and media processing filters.
+Instead, PipeWire relies on a @dfn{session manager} to specify all these
+relationships.  While you may use any session manager you wish, for most
+people the @url{https://pipewire.pages.freedesktop.org/wireplumber/,
+WirePlumber} session manager, a reference implementation provided by the
+PipeWire project itself, suffices, and that is the one
+@code{home-pipewire-service-type} uses.
+
+@defvar home-pipewire-service-type
+This provides the service definition for @command{pipewire}, which will
+run on login.  Its value is a @code{home-pipewire-configuration} object.
+
+To start the service, add it to the @code{service} field of your
+@code{home-environment}, such as:
+
+@lisp
+(service home-pipewire-service-type)
+@end lisp
+@end defvar
+
+@deftp {Data Type} home-pipewire-configuration
+Available @code{home-pipewire-configuration} fields are:
+
+@table @asis
+@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
+The PipeWire package to use.
+
+@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
+The WirePlumber package to use.
+
+@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
+When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently.
+@end table
+@end deftp
+
 @node Mail Home Services
 @subsection Mail Home Services
  
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..5463255e8c 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Brian Cully <bjc@spork.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,125 @@
 (define-module (gnu home services sound)
   #:use-module (gnu home services)
   #:use-module (gnu home services shepherd)
+  #:use-module (gnu home services xdg)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services configuration)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (home-pulseaudio-rtp-sink-service-type
             home-pulseaudio-rtp-source-service-type
-            %pulseaudio-rtp-multicast-address))
+            %pulseaudio-rtp-multicast-address
+
+            home-pipewire-configuration
+            home-pipewire-service-type))
+
+\f
+;;;
+;;; PipeWire support.
+;;;
+
+(define-configuration/no-serialization home-pipewire-configuration
+  (pipewire
+   (file-like pipewire)
+   "The PipeWire package to use.")
+  (wireplumber
+   (file-like wireplumber)
+   "The WirePlumber package to use.")
+  (enable-pulseaudio?
+   (boolean #t)
+   "When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently."))
+
+(define (home-pipewire-shepherd-service config)
+  (shepherd-service
+   (documentation "PipeWire media processing.")
+   (provision '(pipewire))
+   (requirement '(dbus))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-pulseaudio-shepherd-service config)
+  (shepherd-service
+   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
+   (provision '(pipewire-pulseaudio))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire-pulse"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-wireplumber-shepherd-service config)
+  (shepherd-service
+   (documentation "WirePlumber session management for PipeWire.")
+   (provision '(wireplumber))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-wireplumber config)
+                      "/bin/wireplumber"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-shepherd-services config)
+  (cons* (home-pipewire-shepherd-service config)
+         (home-wireplumber-shepherd-service config)
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             (list (home-pipewire-pulseaudio-shepherd-service config))
+             '())))
+
+(define (home-pipewire-asoundrc config)
+  (mixed-text-file
+   "asoundrc"
+   #~(string-append
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/50-pipewire.conf")
+      ">\n"
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/99-pipewire-default.conf")
+      ">\n"
+      "pcm_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_pcm_pipewire.so")
+      "\"\n}\n"
+      "ctl_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_ctl_pipewire.so")
+      "\"\n}\n")))
+
+(define home-pipewire-disable-pulseaudio-auto-start
+  (plain-file "client.conf" "autospawn = no"))
+
+(define (home-pipewire-xdg-configuration config)
+  (cons* `("alsa/asoundrc" ,(home-pipewire-asoundrc config))
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             `(("pulse/client.conf"
+                ,home-pipewire-disable-pulseaudio-auto-start))
+             '())))
+
+(define home-pipewire-service-type
+  (service-type
+   (name 'pipewire)
+   (extensions
+    (list (service-extension home-shepherd-service-type
+                             home-pipewire-shepherd-services)
+          (service-extension home-xdg-configuration-files-service-type
+                             home-pipewire-xdg-configuration)))
+   (description
+    "Start essential PipeWire services.")
+   (default-value (home-pipewire-configuration))))
 
 \f
 ;;;

base-commit: f74df2ab879fc5457982bbc85b7455a90e82317d
-- 
2.40.1





^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v3] gnu: home: Add support for home-pipewire-service
  2023-06-15 13:26 ` [bug#63863] [PATCH v3] " Brian Cully via Guix-patches via
@ 2023-06-15 13:27   ` Brian Cully via Guix-patches via
  0 siblings, 0 replies; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-15 13:27 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863


The only changes in this version are two spaces after a period.

-bjc




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v4 0/1] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (3 preceding siblings ...)
  2023-06-15 13:26 ` [bug#63863] [PATCH v3] " Brian Cully via Guix-patches via
@ 2023-06-20 12:41 ` Brian Cully via Guix-patches via
  2023-06-20 12:41   ` [bug#63863] [PATCH v4 1/1] " Brian Cully via Guix-patches via
  2023-07-02 12:39 ` [bug#63863] [PATCH v5 0/1] " Brian Cully via Guix-patches via
                   ` (7 subsequent siblings)
  12 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-20 12:41 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This patch iteration adds some more documentation. Specifically:

1) Explain why we need the Shepherd to start services,
2) document the Shepherd services started,
3) flesh out the JACK and PulseAudio emulation bits, and,
4) use @subsubheading to separate the PulseAudio RTP stuff from the
PipeWire stuff.

Regarding point 3, I looked at existing home-service documentation,
and used the style found in the shells section of the manual, rather
than trying to group everything under the @defvar for the
service-type, as is done in other parts (such as desktop services).

I did this because the sections in the sound services are more
verbose, so I felt it read better with @subsubheading where more
disparate topics could be synthesized into a more cohesive narrative
structure, leaving @defvar to explain the variables themselves. Also,
it meant I wouldn't have to make any major changes to the existing
PulseAudio RTP section, which I didn't write, and have only lightly
used.

Brian Cully (1):
  gnu: home: Add support for home-pipewire-service

 doc/guix.texi               |  73 +++++++++++++++++++++++
 gnu/home/services/sound.scm | 115 +++++++++++++++++++++++++++++++++++-
 2 files changed, 187 insertions(+), 1 deletion(-)


base-commit: bb09f3ac002a4f34177d42fd3ea0332f4b7fe7a6
-- 
2.40.1





^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v4 1/1] gnu: home: Add support for home-pipewire-service
  2023-06-20 12:41 ` [bug#63863] [PATCH v4 0/1] " Brian Cully via Guix-patches via
@ 2023-06-20 12:41   ` Brian Cully via Guix-patches via
  0 siblings, 0 replies; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-06-20 12:41 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This adds a set of home shepherd services which will start the required
services for a functional pipewire setup.

* gnu/home/services/sound.scm (home-pipewire-shepherd-service),
(home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
(home-pipewire-shepherd-services)
(home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
(home-pipewire-service-type): new service type.
(home-pipewire-configuration): new struct.
(home-pipewire-disable-pulseaudio-auto-start): new variable.
* doc/guix.texi (Sound Home Services): document it.
---
 doc/guix.texi               |  73 +++++++++++++++++++++++
 gnu/home/services/sound.scm | 115 +++++++++++++++++++++++++++++++++++-
 2 files changed, 187 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index c961f706ec..97c3c85d79 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -116,6 +116,7 @@
 Copyright @copyright{} 2023 Karl Hallsby@*
 Copyright @copyright{} 2023 Nathaniel Nicandro@*
 Copyright @copyright{} 2023 Tanguy Le Carrour@*
+Copyright @copyright{} 2023 Brian Cully@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -43678,6 +43679,7 @@ Sound Home Services
 
 @cindex PulseAudio, home service
 @cindex RTP, for PulseAudio
+@subsubheading PulseAudio RTP Streaming Services
 
 The following services dynamically reconfigure the
 @uref{https://pulseaudio.org,PulseAudio sound server}: they let you
@@ -43765,6 +43767,77 @@ Sound Home Services
 This is the multicast address used by default by the two services above.
 @end defvar
 
+@cindex PipeWire, home service
+@subsubheading PipeWire Home Service
+
+@uref{https://pipewire.org, PipeWire} provides a low-latency,
+graph-based audio and video processing service.  In addition to its
+native protocol, it can also be used as a replacement for both JACK and
+PulseAudio.
+
+While PipeWire provides the media processing and API, it does not,
+directly, know about devices such as sound cards, nor how you might want
+to connect applications, hardware, and media processing filters.
+Instead, PipeWire relies on a @dfn{session manager} to specify all these
+relationships.  While you may use any session manager you wish, for most
+people the @url{https://pipewire.pages.freedesktop.org/wireplumber/,
+WirePlumber} session manager, a reference implementation provided by the
+PipeWire project itself, suffices, and that is the one
+@code{home-pipewire-service-type} uses.
+
+PipeWire can be used as a replacement for PulseAudio by setting
+@code{enable-pulseaudio?} to @code{#t} in
+@code{home-pipewire-configuration}, so that existing PulseAudio clients
+may use it without any further configuration.
+
+In addition, JACK clients may connect to PipeWire by using the
+@command{pw-jack} program, which comes with PipeWire. Simply prefix the
+command with @command{pw-jack} when you run it, and audio data should go
+through PipeWire:
+
+@example
+pw-jack mpv -ao=jack sound-file.wav
+@end example
+
+For more information on PulseAudio emulation, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio},
+for JACK, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK}.
+
+As PipeWire does not use @code{dbus} to start its services on demand
+(as PulseAudio does), @code{home-pipewire-service-type} uses Shepherd
+to start services when logged in, provisioning the @code{pipewire},
+@code{wireplumber}, and, if configured, @code{pipewire-pulseaudio}
+services. @xref{Shepherd Home Service}.
+
+@defvar home-pipewire-service-type
+This provides the service definition for @command{pipewire}, which will
+run on login.  Its value is a @code{home-pipewire-configuration} object.
+
+To start the service, add it to the @code{service} field of your
+@code{home-environment}, such as:
+
+@lisp
+(service home-pipewire-service-type)
+@end lisp
+@end defvar
+
+@deftp {Data Type} home-pipewire-configuration
+Available @code{home-pipewire-configuration} fields are:
+
+@table @asis
+@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
+The PipeWire package to use.
+
+@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
+The WirePlumber package to use.
+
+@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
+When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently.
+@end table
+@end deftp
+
 @node Mail Home Services
 @subsection Mail Home Services
  
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..5463255e8c 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Brian Cully <bjc@spork.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,125 @@
 (define-module (gnu home services sound)
   #:use-module (gnu home services)
   #:use-module (gnu home services shepherd)
+  #:use-module (gnu home services xdg)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services configuration)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (home-pulseaudio-rtp-sink-service-type
             home-pulseaudio-rtp-source-service-type
-            %pulseaudio-rtp-multicast-address))
+            %pulseaudio-rtp-multicast-address
+
+            home-pipewire-configuration
+            home-pipewire-service-type))
+
+\f
+;;;
+;;; PipeWire support.
+;;;
+
+(define-configuration/no-serialization home-pipewire-configuration
+  (pipewire
+   (file-like pipewire)
+   "The PipeWire package to use.")
+  (wireplumber
+   (file-like wireplumber)
+   "The WirePlumber package to use.")
+  (enable-pulseaudio?
+   (boolean #t)
+   "When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently."))
+
+(define (home-pipewire-shepherd-service config)
+  (shepherd-service
+   (documentation "PipeWire media processing.")
+   (provision '(pipewire))
+   (requirement '(dbus))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-pulseaudio-shepherd-service config)
+  (shepherd-service
+   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
+   (provision '(pipewire-pulseaudio))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire-pulse"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-wireplumber-shepherd-service config)
+  (shepherd-service
+   (documentation "WirePlumber session management for PipeWire.")
+   (provision '(wireplumber))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-wireplumber config)
+                      "/bin/wireplumber"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-shepherd-services config)
+  (cons* (home-pipewire-shepherd-service config)
+         (home-wireplumber-shepherd-service config)
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             (list (home-pipewire-pulseaudio-shepherd-service config))
+             '())))
+
+(define (home-pipewire-asoundrc config)
+  (mixed-text-file
+   "asoundrc"
+   #~(string-append
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/50-pipewire.conf")
+      ">\n"
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/99-pipewire-default.conf")
+      ">\n"
+      "pcm_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_pcm_pipewire.so")
+      "\"\n}\n"
+      "ctl_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_ctl_pipewire.so")
+      "\"\n}\n")))
+
+(define home-pipewire-disable-pulseaudio-auto-start
+  (plain-file "client.conf" "autospawn = no"))
+
+(define (home-pipewire-xdg-configuration config)
+  (cons* `("alsa/asoundrc" ,(home-pipewire-asoundrc config))
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             `(("pulse/client.conf"
+                ,home-pipewire-disable-pulseaudio-auto-start))
+             '())))
+
+(define home-pipewire-service-type
+  (service-type
+   (name 'pipewire)
+   (extensions
+    (list (service-extension home-shepherd-service-type
+                             home-pipewire-shepherd-services)
+          (service-extension home-xdg-configuration-files-service-type
+                             home-pipewire-xdg-configuration)))
+   (description
+    "Start essential PipeWire services.")
+   (default-value (home-pipewire-configuration))))
 
 \f
 ;;;
-- 
2.40.1





^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 0/1] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (4 preceding siblings ...)
  2023-06-20 12:41 ` [bug#63863] [PATCH v4 0/1] " Brian Cully via Guix-patches via
@ 2023-07-02 12:39 ` Brian Cully via Guix-patches via
  2023-07-02 12:39   ` [bug#63863] [PATCH v5 1/1] " Brian Cully via Guix-patches via
  2023-08-23  8:25 ` Tanguy LE CARROUR
                   ` (6 subsequent siblings)
  12 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-07-02 12:39 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

Two sentences were missing a double space after a period. Otherwise
this is unchanged from v4.

Are there any remaining issues to be addressed, or can this finally be
merged?

Brian Cully (1):
  gnu: home: Add support for home-pipewire-service

 doc/guix.texi               |  73 +++++++++++++++++++++++
 gnu/home/services/sound.scm | 115 +++++++++++++++++++++++++++++++++++-
 2 files changed, 187 insertions(+), 1 deletion(-)


base-commit: a919a16898e7219fdd26bdfe33a9959e7156d59d
-- 
2.40.1





^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service
  2023-07-02 12:39 ` [bug#63863] [PATCH v5 0/1] " Brian Cully via Guix-patches via
@ 2023-07-02 12:39   ` Brian Cully via Guix-patches via
  2023-11-12 14:14     ` Hilton Chain via Guix-patches via
  0 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-07-02 12:39 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This adds a set of home shepherd services which will start the required
services for a functional pipewire setup.

* gnu/home/services/sound.scm (home-pipewire-shepherd-service),
(home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
(home-pipewire-shepherd-services)
(home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
(home-pipewire-service-type): new service type.
(home-pipewire-configuration): new struct.
(home-pipewire-disable-pulseaudio-auto-start): new variable.
* doc/guix.texi (Sound Home Services): document it.
---
 doc/guix.texi               |  73 +++++++++++++++++++++++
 gnu/home/services/sound.scm | 115 +++++++++++++++++++++++++++++++++++-
 2 files changed, 187 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 853396f776..7a6b7ebc3a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -116,6 +116,7 @@
 Copyright @copyright{} 2023 Karl Hallsby@*
 Copyright @copyright{} 2023 Nathaniel Nicandro@*
 Copyright @copyright{} 2023 Tanguy Le Carrour@*
+Copyright @copyright{} 2023 Brian Cully@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -43742,6 +43743,7 @@ Sound Home Services
 
 @cindex PulseAudio, home service
 @cindex RTP, for PulseAudio
+@subsubheading PulseAudio RTP Streaming Services
 
 The following services dynamically reconfigure the
 @uref{https://pulseaudio.org,PulseAudio sound server}: they let you
@@ -43829,6 +43831,77 @@ Sound Home Services
 This is the multicast address used by default by the two services above.
 @end defvar
 
+@cindex PipeWire, home service
+@subsubheading PipeWire Home Service
+
+@uref{https://pipewire.org, PipeWire} provides a low-latency,
+graph-based audio and video processing service.  In addition to its
+native protocol, it can also be used as a replacement for both JACK and
+PulseAudio.
+
+While PipeWire provides the media processing and API, it does not,
+directly, know about devices such as sound cards, nor how you might want
+to connect applications, hardware, and media processing filters.
+Instead, PipeWire relies on a @dfn{session manager} to specify all these
+relationships.  While you may use any session manager you wish, for most
+people the @url{https://pipewire.pages.freedesktop.org/wireplumber/,
+WirePlumber} session manager, a reference implementation provided by the
+PipeWire project itself, suffices, and that is the one
+@code{home-pipewire-service-type} uses.
+
+PipeWire can be used as a replacement for PulseAudio by setting
+@code{enable-pulseaudio?} to @code{#t} in
+@code{home-pipewire-configuration}, so that existing PulseAudio clients
+may use it without any further configuration.
+
+In addition, JACK clients may connect to PipeWire by using the
+@command{pw-jack} program, which comes with PipeWire.  Simply prefix the
+command with @command{pw-jack} when you run it, and audio data should go
+through PipeWire:
+
+@example
+pw-jack mpv -ao=jack sound-file.wav
+@end example
+
+For more information on PulseAudio emulation, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio},
+for JACK, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK}.
+
+As PipeWire does not use @code{dbus} to start its services on demand
+(as PulseAudio does), @code{home-pipewire-service-type} uses Shepherd
+to start services when logged in, provisioning the @code{pipewire},
+@code{wireplumber}, and, if configured, @code{pipewire-pulseaudio}
+services.  @xref{Shepherd Home Service}.
+
+@defvar home-pipewire-service-type
+This provides the service definition for @command{pipewire}, which will
+run on login.  Its value is a @code{home-pipewire-configuration} object.
+
+To start the service, add it to the @code{service} field of your
+@code{home-environment}, such as:
+
+@lisp
+(service home-pipewire-service-type)
+@end lisp
+@end defvar
+
+@deftp {Data Type} home-pipewire-configuration
+Available @code{home-pipewire-configuration} fields are:
+
+@table @asis
+@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
+The PipeWire package to use.
+
+@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
+The WirePlumber package to use.
+
+@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
+When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently.
+@end table
+@end deftp
+
 @node Mail Home Services
 @subsection Mail Home Services
  
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..5463255e8c 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Brian Cully <bjc@spork.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,125 @@
 (define-module (gnu home services sound)
   #:use-module (gnu home services)
   #:use-module (gnu home services shepherd)
+  #:use-module (gnu home services xdg)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services configuration)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (home-pulseaudio-rtp-sink-service-type
             home-pulseaudio-rtp-source-service-type
-            %pulseaudio-rtp-multicast-address))
+            %pulseaudio-rtp-multicast-address
+
+            home-pipewire-configuration
+            home-pipewire-service-type))
+
+\f
+;;;
+;;; PipeWire support.
+;;;
+
+(define-configuration/no-serialization home-pipewire-configuration
+  (pipewire
+   (file-like pipewire)
+   "The PipeWire package to use.")
+  (wireplumber
+   (file-like wireplumber)
+   "The WirePlumber package to use.")
+  (enable-pulseaudio?
+   (boolean #t)
+   "When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently."))
+
+(define (home-pipewire-shepherd-service config)
+  (shepherd-service
+   (documentation "PipeWire media processing.")
+   (provision '(pipewire))
+   (requirement '(dbus))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-pulseaudio-shepherd-service config)
+  (shepherd-service
+   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
+   (provision '(pipewire-pulseaudio))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire-pulse"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-wireplumber-shepherd-service config)
+  (shepherd-service
+   (documentation "WirePlumber session management for PipeWire.")
+   (provision '(wireplumber))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-wireplumber config)
+                      "/bin/wireplumber"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-shepherd-services config)
+  (cons* (home-pipewire-shepherd-service config)
+         (home-wireplumber-shepherd-service config)
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             (list (home-pipewire-pulseaudio-shepherd-service config))
+             '())))
+
+(define (home-pipewire-asoundrc config)
+  (mixed-text-file
+   "asoundrc"
+   #~(string-append
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/50-pipewire.conf")
+      ">\n"
+      "<"
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/share/alsa/alsa.conf.d/99-pipewire-default.conf")
+      ">\n"
+      "pcm_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_pcm_pipewire.so")
+      "\"\n}\n"
+      "ctl_type.pipewire {\n"
+      "  lib \""
+      #$(file-append
+         (home-pipewire-configuration-pipewire config)
+         "/lib/alsa-lib/libasound_module_ctl_pipewire.so")
+      "\"\n}\n")))
+
+(define home-pipewire-disable-pulseaudio-auto-start
+  (plain-file "client.conf" "autospawn = no"))
+
+(define (home-pipewire-xdg-configuration config)
+  (cons* `("alsa/asoundrc" ,(home-pipewire-asoundrc config))
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             `(("pulse/client.conf"
+                ,home-pipewire-disable-pulseaudio-auto-start))
+             '())))
+
+(define home-pipewire-service-type
+  (service-type
+   (name 'pipewire)
+   (extensions
+    (list (service-extension home-shepherd-service-type
+                             home-pipewire-shepherd-services)
+          (service-extension home-xdg-configuration-files-service-type
+                             home-pipewire-xdg-configuration)))
+   (description
+    "Start essential PipeWire services.")
+   (default-value (home-pipewire-configuration))))
 
 \f
 ;;;
-- 
2.40.1





^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (5 preceding siblings ...)
  2023-07-02 12:39 ` [bug#63863] [PATCH v5 0/1] " Brian Cully via Guix-patches via
@ 2023-08-23  8:25 ` Tanguy LE CARROUR
  2023-08-23 18:44   ` brian via Guix-patches via
  2023-10-11 11:34 ` taosabella
                   ` (5 subsequent siblings)
  12 siblings, 1 reply; 27+ messages in thread
From: Tanguy LE CARROUR @ 2023-08-23  8:25 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863

Hi Brian,

I came across you patch by chance and, as I had been waiting for a
PipeWire home service for a long time, I couldn't resist trying it out!

I copied it to my channel, added it to my home configuration,
reconfigured and… go this message:

```
guix home: error: service 'pipewire' requires 'dbus', which is not provided by any service
```

I was a little confused, because in the documentation, you wrote
"As PipeWire does not use @code{dbus} to start its services on demand".

I added it anyway, reconfigured and after rebooting (I currently have a
problem with shepherd not being properly reloaded! 😞) I can see
the new services as being "stopped" in `herd status` output.
Are they stopped on purpose? Who is supposed to start them?
Sorry, I'm not sure I understand how it's supposed to work.
I've tried joining a JitsiMeet conference. The video seems to be
working, but my mic‘ is marked as "broken".

I've had to roll back my home configuration for the time being,
but if there are more things I can try to make it work and help your
patch being merged, I would be more than happy to try them!

Anyway, thanks for you work on this patch! Can't wait for it to be
merged.

-- 
Tanguy




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service
  2023-08-23  8:25 ` Tanguy LE CARROUR
@ 2023-08-23 18:44   ` brian via Guix-patches via
  2023-08-25  6:44     ` Tanguy LE CARROUR
  0 siblings, 1 reply; 27+ messages in thread
From: brian via Guix-patches via @ 2023-08-23 18:44 UTC (permalink / raw)
  To: Tanguy LE CARROUR; +Cc: 63863

Tanguy LE CARROUR <tanguy@bioneland.org> writes:

> I came across you patch by chance and, as I had been waiting for a
> PipeWire home service for a long time, I couldn't resist trying it out!

Thanks for helping test it!

> I copied it to my channel, added it to my home configuration,
> reconfigured and… go this message:
>
> ```
> guix home: error: service 'pipewire' requires 'dbus', which is not provided by any service
> ```
>
> I was a little confused, because in the documentation, you wrote
> "As PipeWire does not use @code{dbus} to start its services on demand".

Pipewire does not use dbus to start its services on demand, but it does
use it for communication between the pipewire daemon itself and the
session manager (typically wireplumber).

I guess this is confusing. I'll see if I can explain this
better. Although part of me wants to drop the dbus verbiage from the
documentation entirely, since it only exists right now to explain things
to people who might be migrating from Pulseaudio and used to not needing
a Shepherd service. I don't want to write a deep explainer on how DBus
is used. It's not the place for that, nor do I even know that much about
it.

> I added it anyway, reconfigured and after rebooting (I currently have a
> problem with shepherd not being properly reloaded! 😞) I can see
> the new services as being "stopped" in `herd status` output.
> Are they stopped on purpose? Who is supposed to start them?

The services should all start automatically, but they do all depend on
a user-session level dbus daemon running. I see you're using dbus, but
are you using it from ‘home-dbus-service-type’?

> Sorry, I'm not sure I understand how it's supposed to work.
> I've tried joining a JitsiMeet conference. The video seems to be
> working, but my mic‘ is marked as "broken".

If video sharing under Wayland is working, then I'd say that means
Pipewire+Wireguard are working. The mic doesn't work, but can you hear
audio through your speakers or headphones? Are your audio devices
visible? Are you using Pulseaudio emulation (which I recommend you do)?

> Anyway, thanks for you work on this patch! Can't wait for it to be
> merged.

/me pokes Ludo 😉

-bjc




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service
  2023-08-23 18:44   ` brian via Guix-patches via
@ 2023-08-25  6:44     ` Tanguy LE CARROUR
  0 siblings, 0 replies; 27+ messages in thread
From: Tanguy LE CARROUR @ 2023-08-25  6:44 UTC (permalink / raw)
  To: brian; +Cc: 63863

Hi Brian,


Quoting brian (2023-08-23 20:44:55)
> Tanguy LE CARROUR <tanguy@bioneland.org> writes:
> > I copied it to my channel, added it to my home configuration,
> > reconfigured and… go this message:
> >
> > ```
> > guix home: error: service 'pipewire' requires 'dbus', which is not provided by any service
> > ```
> >
> > I was a little confused, because in the documentation, you wrote
> > "As PipeWire does not use @code{dbus} to start its services on demand".
> 
> Pipewire does not use dbus to start its services on demand, but it does
> use it for communication between the pipewire daemon itself and the
> session manager (typically wireplumber).
> 
> I guess this is confusing. I'll see if I can explain this
> better. Although part of me wants to drop the dbus verbiage from the
> documentation entirely, since it only exists right now to explain things
> to people who might be migrating from Pulseaudio and used to not needing
> a Shepherd service. I don't want to write a deep explainer on how DBus
> is used. It's not the place for that, nor do I even know that much about
> it.

It's a bit confusing, indeed! … but I'm easily confused! 😅
What would be great would a mechanism to "pull/manage" service dependencies.


> > I added it anyway, reconfigured and after rebooting (I currently have a
> > problem with shepherd not being properly reloaded! 😞) I can see
> > the new services as being "stopped" in `herd status` output.
> > Are they stopped on purpose? Who is supposed to start them?
> 
> The services should all start automatically, but they do all depend on
> a user-session level dbus daemon running. I see you're using dbus, but
> are you using it from ‘home-dbus-service-type’?

Yes, I added it in my home configuration.


> > Sorry, I'm not sure I understand how it's supposed to work.
> > I've tried joining a JitsiMeet conference. The video seems to be
> > working, but my mic‘ is marked as "broken".
> 
> If video sharing under Wayland is working, then I'd say that means
> Pipewire+Wireguard are working. The mic doesn't work, but can you hear
> audio through your speakers or headphones? Are your audio devices
> visible? Are you using Pulseaudio emulation (which I recommend you do)?

I'll give it another try at the week-end! 🤞


> > Anyway, thanks for you work on this patch! Can't wait for it to be
> > merged.
> 
> /me pokes Ludo 😉

Poke poke 👉


-- 
Tanguy




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (6 preceding siblings ...)
  2023-08-23  8:25 ` Tanguy LE CARROUR
@ 2023-10-11 11:34 ` taosabella
  2023-11-05 15:09 ` [bug#63863] (no subject) Jakob Honal
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 27+ messages in thread
From: taosabella @ 2023-10-11 11:34 UTC (permalink / raw)
  To: 63863

I've tested this patch and it works perfectly, with all Shepherd
services starting after activation and a reboot. Ludovic, are there any
other blockers to getting this into Guix proper?




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] (no subject)
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (7 preceding siblings ...)
  2023-10-11 11:34 ` taosabella
@ 2023-11-05 15:09 ` Jakob Honal
  2023-12-16 15:17 ` [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 27+ messages in thread
From: Jakob Honal @ 2023-11-05 15:09 UTC (permalink / raw)
  To: 63863

[-- Attachment #1: Type: text/html, Size: 245 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service
  2023-07-02 12:39   ` [bug#63863] [PATCH v5 1/1] " Brian Cully via Guix-patches via
@ 2023-11-12 14:14     ` Hilton Chain via Guix-patches via
  0 siblings, 0 replies; 27+ messages in thread
From: Hilton Chain via Guix-patches via @ 2023-11-12 14:14 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863, Ludovic Courtès, Andrew Tropin

Hi Brian,

Tested the patch in my setup, it works well :)

(Some comments are in and after the quote.)

On Sun, 02 Jul 2023 20:39:41 +0800,
Brian Cully via Guix-patches via wrote:
>
> This adds a set of home shepherd services which will start the required
> services for a functional pipewire setup.
>
> * gnu/home/services/sound.scm (home-pipewire-shepherd-service),
> (home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
> (home-pipewire-shepherd-services)
> (home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
> (home-pipewire-service-type): new service type.
> (home-pipewire-configuration): new struct.
> (home-pipewire-disable-pulseaudio-auto-start): new variable.
> * doc/guix.texi (Sound Home Services): document it.
> ---
>  doc/guix.texi               |  73 +++++++++++++++++++++++
>  gnu/home/services/sound.scm | 115 +++++++++++++++++++++++++++++++++++-
>  2 files changed, 187 insertions(+), 1 deletion(-)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 853396f776..7a6b7ebc3a 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -116,6 +116,7 @@
>  Copyright @copyright{} 2023 Karl Hallsby@*
>  Copyright @copyright{} 2023 Nathaniel Nicandro@*
>  Copyright @copyright{} 2023 Tanguy Le Carrour@*
> +Copyright @copyright{} 2023 Brian Cully@*
>
>  Permission is granted to copy, distribute and/or modify this document
>  under the terms of the GNU Free Documentation License, Version 1.3 or
> @@ -43742,6 +43743,7 @@ Sound Home Services
>
>  @cindex PulseAudio, home service
>  @cindex RTP, for PulseAudio
> +@subsubheading PulseAudio RTP Streaming Services
>
>  The following services dynamically reconfigure the
>  @uref{https://pulseaudio.org,PulseAudio sound server}: they let you
> @@ -43829,6 +43831,77 @@ Sound Home Services
>  This is the multicast address used by default by the two services above.
>  @end defvar
>
> +@cindex PipeWire, home service
> +@subsubheading PipeWire Home Service
> +
> +@uref{https://pipewire.org, PipeWire} provides a low-latency,
> +graph-based audio and video processing service.  In addition to its
> +native protocol, it can also be used as a replacement for both JACK and
> +PulseAudio.
> +
> +While PipeWire provides the media processing and API, it does not,
> +directly, know about devices such as sound cards, nor how you might want
> +to connect applications, hardware, and media processing filters.
> +Instead, PipeWire relies on a @dfn{session manager} to specify all these
> +relationships.  While you may use any session manager you wish, for most
> +people the @url{https://pipewire.pages.freedesktop.org/wireplumber/,
> +WirePlumber} session manager, a reference implementation provided by the
> +PipeWire project itself, suffices, and that is the one
> +@code{home-pipewire-service-type} uses.
> +
> +PipeWire can be used as a replacement for PulseAudio by setting
> +@code{enable-pulseaudio?} to @code{#t} in
> +@code{home-pipewire-configuration}, so that existing PulseAudio clients
> +may use it without any further configuration.
> +
> +In addition, JACK clients may connect to PipeWire by using the
> +@command{pw-jack} program, which comes with PipeWire.  Simply prefix the
> +command with @command{pw-jack} when you run it, and audio data should go
> +through PipeWire:
> +
> +@example
> +pw-jack mpv -ao=jack sound-file.wav
> +@end example
> +
> +For more information on PulseAudio emulation, see
> +@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio},
> +for JACK, see
> +@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK}.
> +
> +As PipeWire does not use @code{dbus} to start its services on demand
> +(as PulseAudio does), @code{home-pipewire-service-type} uses Shepherd
> +to start services when logged in, provisioning the @code{pipewire},
> +@code{wireplumber}, and, if configured, @code{pipewire-pulseaudio}
> +services.  @xref{Shepherd Home Service}.
> +
> +@defvar home-pipewire-service-type
> +This provides the service definition for @command{pipewire}, which will
> +run on login.  Its value is a @code{home-pipewire-configuration} object.
> +
> +To start the service, add it to the @code{service} field of your
> +@code{home-environment}, such as:
> +
> +@lisp
> +(service home-pipewire-service-type)
> +@end lisp
> +@end defvar
> +
> +@deftp {Data Type} home-pipewire-configuration
> +Available @code{home-pipewire-configuration} fields are:
> +
> +@table @asis
> +@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
> +The PipeWire package to use.
> +
> +@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
> +The WirePlumber package to use.
> +
> +@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
> +When true, enable PipeWire's PulseAudio emulation support, allowing
> +PulseAudio clients to use PipeWire transparently.
> +@end table
> +@end deftp
> +
>  @node Mail Home Services
>  @subsection Mail Home Services
>
> diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
> index 22c1a99250..5463255e8c 100644
> --- a/gnu/home/services/sound.scm
> +++ b/gnu/home/services/sound.scm
> @@ -1,5 +1,6 @@
>  ;;; GNU Guix --- Functional package management for GNU
>  ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
> +;;; Copyright © 2023 Brian Cully <bjc@spork.org>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -19,13 +20,125 @@
>  (define-module (gnu home services sound)
>    #:use-module (gnu home services)
>    #:use-module (gnu home services shepherd)
> +  #:use-module (gnu home services xdg)
> +  #:use-module (gnu packages linux)
> +  #:use-module (gnu services configuration)
>    #:use-module (guix records)
>    #:use-module (guix gexp)
>    #:use-module (srfi srfi-1)
>    #:use-module (ice-9 match)
>    #:export (home-pulseaudio-rtp-sink-service-type
>              home-pulseaudio-rtp-source-service-type
> -            %pulseaudio-rtp-multicast-address))
> +            %pulseaudio-rtp-multicast-address
> +
> +            home-pipewire-configuration
> +            home-pipewire-service-type))
> +
> +\f
> +;;;
> +;;; PipeWire support.
> +;;;
> +
> +(define-configuration/no-serialization home-pipewire-configuration
> +  (pipewire
> +   (file-like pipewire)
> +   "The PipeWire package to use.")
> +  (wireplumber
> +   (file-like wireplumber)
> +   "The WirePlumber package to use.")
> +  (enable-pulseaudio?
> +   (boolean #t)
> +   "When true, enable PipeWire's PulseAudio emulation support, allowing
> +PulseAudio clients to use PipeWire transparently."))
> +
> +(define (home-pipewire-shepherd-service config)
> +  (shepherd-service
> +   (documentation "PipeWire media processing.")
> +   (provision '(pipewire))
> +   (requirement '(dbus))
> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-pipewire config)
> +                      "/bin/pipewire"))))
> +   (stop #~(make-kill-destructor))))
> +
> +(define (home-pipewire-pulseaudio-shepherd-service config)
> +  (shepherd-service
> +   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
> +   (provision '(pipewire-pulseaudio))
> +   (requirement '(pipewire))
> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-pipewire config)
> +                      "/bin/pipewire-pulse"))))
> +   (stop #~(make-kill-destructor))))
> +
> +(define (home-wireplumber-shepherd-service config)
> +  (shepherd-service
> +   (documentation "WirePlumber session management for PipeWire.")
> +   (provision '(wireplumber))
> +   (requirement '(pipewire))
> +   (start #~(make-forkexec-constructor
> +             (list #$(file-append
> +                      (home-pipewire-configuration-wireplumber config)
> +                      "/bin/wireplumber"))))
> +   (stop #~(make-kill-destructor))))
> +
> +(define (home-pipewire-shepherd-services config)
> +  (cons* (home-pipewire-shepherd-service config)
> +         (home-wireplumber-shepherd-service config)
> +         (if (home-pipewire-configuration-enable-pulseaudio? config)
> +             (list (home-pipewire-pulseaudio-shepherd-service config))
> +             '())))
> +
> +(define (home-pipewire-asoundrc config)
> +  (mixed-text-file
> +   "asoundrc"
> +   #~(string-append
> +      "<"
> +      #$(file-append
> +         (home-pipewire-configuration-pipewire config)
> +         "/share/alsa/alsa.conf.d/50-pipewire.conf")
> +      ">\n"
> +      "<"
> +      #$(file-append
> +         (home-pipewire-configuration-pipewire config)
> +         "/share/alsa/alsa.conf.d/99-pipewire-default.conf")
> +      ">\n"
> +      "pcm_type.pipewire {\n"
> +      "  lib \""
> +      #$(file-append
> +         (home-pipewire-configuration-pipewire config)
> +         "/lib/alsa-lib/libasound_module_pcm_pipewire.so")
> +      "\"\n}\n"
> +      "ctl_type.pipewire {\n"
> +      "  lib \""
> +      #$(file-append
> +         (home-pipewire-configuration-pipewire config)
> +         "/lib/alsa-lib/libasound_module_ctl_pipewire.so")
> +      "\"\n}\n")))


I'd prefer the following:
--8<---------------cut here---------------start------------->8---
(define (home-pipewire-asoundrc config)
  (match-record config <home-pipewire-configuration>
    (pipewire)
    (mixed-text-file
     "asoundrc"
     "<" pipewire "/share/alsa/alsa.conf.d/50-pipewire.conf>\n"
     "<" pipewire "/share/alsa/alsa.conf.d/99-pipewire-default.conf>\n"
     "pcm_type.pipewire {\n"
     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_pcm_pipewire.so\"\n"
     "}\n"
     "ctl_type.pipewire {\n"
     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_ctl_pipewire.so\"\n"
     "}\n")))
--8<---------------cut here---------------end--------------->8---

or:
--8<---------------cut here---------------start------------->8---
(define (home-pipewire-asoundrc config)
  (match-record config <home-pipewire-configuration>
    (pipewire)
    (mixed-text-file
     "asoundrc"
     #~(begin
         (use-modules (ice-9 format))
         (format #f "~
<~a/share/alsa/alsa.conf.d/50-pipewire.conf>
<~@*~a/share/alsa/alsa.conf.d/99-pipewire-default.conf>
pcm_type.pipewire {
  lib \"~@*~a/lib/alsa-lib/libasound_module_pcm_pipewire.so\"
}
ctl_type.pipewire {
  lib \"~@*~a/lib/alsa-lib/libasound_module_ctl_pipewire.so\"
}~%" #$pipewire)))))
--8<---------------cut here---------------end--------------->8---


> +
> +(define home-pipewire-disable-pulseaudio-auto-start
> +  (plain-file "client.conf" "autospawn = no"))
> +
> +(define (home-pipewire-xdg-configuration config)
> +  (cons* `("alsa/asoundrc" ,(home-pipewire-asoundrc config))
> +         (if (home-pipewire-configuration-enable-pulseaudio? config)
> +             `(("pulse/client.conf"
> +                ,home-pipewire-disable-pulseaudio-auto-start))
> +             '())))
> +
> +(define home-pipewire-service-type
> +  (service-type
> +   (name 'pipewire)
> +   (extensions
> +    (list (service-extension home-shepherd-service-type
> +                             home-pipewire-shepherd-services)
> +          (service-extension home-xdg-configuration-files-service-type
> +                             home-pipewire-xdg-configuration)))
> +   (description
> +    "Start essential PipeWire services.")
> +   (default-value (home-pipewire-configuration))))
>
>  \f
>  ;;;
> --
> 2.40.1


One thing to note: the wireplumber package is built with elogind integration, so
it fails to start when elogind is not present:
--8<---------------cut here---------------start------------->8---
[wireplumber] failed to start systemd logind monitor: -2 (No such file or directory)
--8<---------------cut here---------------end--------------->8---

I think we can add a wireplumber variant built with "-Delogind=disabled" and
maybe mention it in the documentation.

Thanks




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (8 preceding siblings ...)
  2023-11-05 15:09 ` [bug#63863] (no subject) Jakob Honal
@ 2023-12-16 15:17 ` Brian Cully via Guix-patches via
  2023-12-16 15:23 ` [bug#63863] [PATCH v6] " Brian Cully via Guix-patches via
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-12-16 15:17 UTC (permalink / raw)
  To: Hilton Chain; +Cc: 63863


Hilton Chain <hako@ultrarare.space> writes:

> I'd prefer the following:
> 
> (define (home-pipewire-asoundrc config)
>  (match-record config <home-pipewire-configuration>
>    (pipewire)
>    (mixed-text-file
>     "asoundrc"
>     "<" pipewire "/share/alsa/alsa.conf.d/50-pipewire.conf>\n"
>     "<" pipewire "/share/alsa/alsa.conf.d/99-pipewire-default.conf>\n"
>     "pcm_type.pipewire {\n"
>     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_pcm_pipewire.so\"\n"
>     "}\n"
>     "ctl_type.pipewire {\n"
>     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_ctl_pipewire.so\"\n"
>     "}\n")))
> 
> 
> or:
> 
> (define (home-pipewire-asoundrc config)
>  (match-record config <home-pipewire-configuration>
>    (pipewire)
>    (mixed-text-file
>     "asoundrc"
>     #~(begin
>         (use-modules (ice-9 format))
>         (format #f "~
> <~a/share/alsa/alsa.conf.d/50-pipewire.conf>
> <~@*~a/share/alsa/alsa.conf.d/99-pipewire-default.conf>
> pcm_type.pipewire {
>  lib \"~@*~a/lib/alsa-lib/libasound_module_pcm_pipewire.so\"
> }
> ctl_type.pipewire {
>  lib \"~@*~a/lib/alsa-lib/libasound_module_ctl_pipewire.so\"
> }~%" #$pipewire)))))

I prefer the former to the latter; I often find ‘format’ strings to be pretty confusing, and the documentation doesn't tend to help much. I know I'm not alone in this, and since this is fairly simple, I'll use the straight concatenation, which has the additional benefit of preserving indentation.

> One thing to note: the wireplumber package is built with elogind integration, so
> it fails to start when elogind is not present:
> 
> [wireplumber] failed to start systemd logind monitor: -2 (No such file or directory)
> 
> I think we can add a wireplumber variant built with "-Delogind=disabled" and
> maybe mention it in the documentation.

Sounds reasonable. I don't know how long wireplumber has been able to be built without systemd stuff, just that I tried running it with seatd/greetd and it failed. Have you got it working without elogind?

I'm not sure when I'll be able to have a look at it, so I'd rather the current patch go in, and we can add elogind-less variants afterwards.

--
-bjc




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v6] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (9 preceding siblings ...)
  2023-12-16 15:17 ` [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
@ 2023-12-16 15:23 ` Brian Cully via Guix-patches via
  2023-12-20  8:46   ` bug#63863: " Oleg Pykhalov
  2023-12-22 15:22 ` [bug#63863] [PATCH v7] " Brian Cully via Guix-patches via
       [not found] ` <handler.63863.D63863.17030619999937.notifdone@debbugs.gnu.org>
  12 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-12-16 15:23 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This adds a set of home shepherd services which will start the required
services for a functional pipewire setup.

* gnu/home/services/sound.scm (home-pipewire-shepherd-service),
(home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),
(home-pipewire-shepherd-services)
(home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
(home-pipewire-service-type): new service type.
(home-pipewire-configuration): new struct.
(home-pipewire-disable-pulseaudio-auto-start): new variable.
* doc/guix.texi (Sound Home Services): document it.

Change-Id: I99e0ae860de91d459c3c554ec5503bf35f785a2a
---
 doc/guix.texi               |  72 +++++++++++++++++++++++++
 gnu/home/services/sound.scm | 102 +++++++++++++++++++++++++++++++++++-
 2 files changed, 173 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index e61a893af9..90888a514f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -45050,6 +45050,7 @@ Sound Home Services
 
 @cindex PulseAudio, home service
 @cindex RTP, for PulseAudio
+@subsubheading PulseAudio RTP Streaming Services
 
 The following services dynamically reconfigure the
 @uref{https://pulseaudio.org,PulseAudio sound server}: they let you
@@ -45137,6 +45138,77 @@ Sound Home Services
 This is the multicast address used by default by the two services above.
 @end defvar
 
+@cindex PipeWire, home service
+@subsubheading PipeWire Home Service
+
+@uref{https://pipewire.org, PipeWire} provides a low-latency,
+graph-based audio and video processing service.  In addition to its
+native protocol, it can also be used as a replacement for both JACK and
+PulseAudio.
+
+While PipeWire provides the media processing and API, it does not,
+directly, know about devices such as sound cards, nor how you might want
+to connect applications, hardware, and media processing filters.
+Instead, PipeWire relies on a @dfn{session manager} to specify all these
+relationships.  While you may use any session manager you wish, for most
+people the @url{https://pipewire.pages.freedesktop.org/wireplumber/,
+WirePlumber} session manager, a reference implementation provided by the
+PipeWire project itself, suffices, and that is the one
+@code{home-pipewire-service-type} uses.
+
+PipeWire can be used as a replacement for PulseAudio by setting
+@code{enable-pulseaudio?} to @code{#t} in
+@code{home-pipewire-configuration}, so that existing PulseAudio clients
+may use it without any further configuration.
+
+In addition, JACK clients may connect to PipeWire by using the
+@command{pw-jack} program, which comes with PipeWire.  Simply prefix the
+command with @command{pw-jack} when you run it, and audio data should go
+through PipeWire:
+
+@example
+pw-jack mpv -ao=jack sound-file.wav
+@end example
+
+For more information on PulseAudio emulation, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio},
+for JACK, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK}.
+
+As PipeWire does not use @code{dbus} to start its services on demand
+(as PulseAudio does), @code{home-pipewire-service-type} uses Shepherd
+to start services when logged in, provisioning the @code{pipewire},
+@code{wireplumber}, and, if configured, @code{pipewire-pulseaudio}
+services.  @xref{Shepherd Home Service}.
+
+@defvar home-pipewire-service-type
+This provides the service definition for @command{pipewire}, which will
+run on login.  Its value is a @code{home-pipewire-configuration} object.
+
+To start the service, add it to the @code{service} field of your
+@code{home-environment}, such as:
+
+@lisp
+(service home-pipewire-service-type)
+@end lisp
+@end defvar
+
+@deftp {Data Type} home-pipewire-configuration
+Available @code{home-pipewire-configuration} fields are:
+
+@table @asis
+@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
+The PipeWire package to use.
+
+@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
+The WirePlumber package to use.
+
+@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
+When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently.
+@end table
+@end deftp
+
 @node Mail Home Services
 @subsection Mail Home Services
  
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..313a57305b 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Brian Cully <bjc@spork.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,112 @@
 (define-module (gnu home services sound)
   #:use-module (gnu home services)
   #:use-module (gnu home services shepherd)
+  #:use-module (gnu home services xdg)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services configuration)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (home-pulseaudio-rtp-sink-service-type
             home-pulseaudio-rtp-source-service-type
-            %pulseaudio-rtp-multicast-address))
+            %pulseaudio-rtp-multicast-address
+
+            home-pipewire-configuration
+            home-pipewire-service-type))
+
+\f
+;;;
+;;; PipeWire support.
+;;;
+
+(define-configuration/no-serialization home-pipewire-configuration
+  (pipewire
+   (file-like pipewire)
+   "The PipeWire package to use.")
+  (wireplumber
+   (file-like wireplumber)
+   "The WirePlumber package to use.")
+  (enable-pulseaudio?
+   (boolean #t)
+   "When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently."))
+
+(define (home-pipewire-shepherd-service config)
+  (shepherd-service
+   (documentation "PipeWire media processing.")
+   (provision '(pipewire))
+   (requirement '(dbus))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-pulseaudio-shepherd-service config)
+  (shepherd-service
+   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
+   (provision '(pipewire-pulseaudio))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire-pulse"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-wireplumber-shepherd-service config)
+  (shepherd-service
+   (documentation "WirePlumber session management for PipeWire.")
+   (provision '(wireplumber))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-wireplumber config)
+                      "/bin/wireplumber"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-shepherd-services config)
+  (cons* (home-pipewire-shepherd-service config)
+         (home-wireplumber-shepherd-service config)
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             (list (home-pipewire-pulseaudio-shepherd-service config))
+             '())))
+
+(define (home-pipewire-asoundrc config)
+  (match-record config <home-pipewire-configuration>
+                (pipewire)
+    (mixed-text-file
+     "asoundrc"
+     "<" pipewire "/share/alsa/alsa.conf.d/50-pipewire.conf>\n"
+     "<" pipewire "/share/alsa/alsa.conf.d/99-pipewire-default.conf>\n"
+     "pcm_type.pipewire {\n"
+     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_pcm_pipewire.so\"\n"
+     "}\n"
+     "ctl_type.pipewire {\n"
+     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_ctl_pipewire.so\"\n"
+     "}\n")))
+
+(define home-pipewire-disable-pulseaudio-auto-start
+  (plain-file "client.conf" "autospawn = no"))
+
+(define (home-pipewire-xdg-configuration config)
+  (cons* `("alsa/asoundrc" ,(home-pipewire-asoundrc config))
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             `(("pulse/client.conf"
+                ,home-pipewire-disable-pulseaudio-auto-start))
+             '())))
+
+(define home-pipewire-service-type
+  (service-type
+   (name 'pipewire)
+   (extensions
+    (list (service-extension home-shepherd-service-type
+                             home-pipewire-shepherd-services)
+          (service-extension home-xdg-configuration-files-service-type
+                             home-pipewire-xdg-configuration)))
+   (description
+    "Start essential PipeWire services.")
+   (default-value (home-pipewire-configuration))))
 
 \f
 ;;;

base-commit: d5298c5e334e56a9aabddcb62d312e63135864f6
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 27+ messages in thread

* bug#63863: [PATCH v6] gnu: home: Add support for home-pipewire-service
  2023-12-16 15:23 ` [bug#63863] [PATCH v6] " Brian Cully via Guix-patches via
@ 2023-12-20  8:46   ` Oleg Pykhalov
  0 siblings, 0 replies; 27+ messages in thread
From: Oleg Pykhalov @ 2023-12-20  8:46 UTC (permalink / raw)
  To: Brian Cully
  Cc: Ludovic Courtès, 63863-done, Tanguy LE CARROUR,
	Andrew Tropin

[-- Attachment #1: Type: text/plain, Size: 3099 bytes --]

Hi Brian,

Brian Cully <bjc@spork.org> writes:

> This adds a set of home shepherd services which will start the required
> services for a functional pipewire setup.
>
> * gnu/home/services/sound.scm (home-pipewire-shepherd-service),
> (home-pipewire-pulse-shepherd-service), (home-wireplumber-shepherd-service),

The ‘home-pipewire-pulse-shepherd-service’ procedure is missing. Do you
have a code for this procedure or should it be removed from the commit
message?  The PipeWire service seems to work without it.

> (home-pipewire-shepherd-services)
> (home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
> (home-pipewire-service-type): new service type.
> (home-pipewire-configuration): new struct.
> (home-pipewire-disable-pulseaudio-auto-start): new variable.
> * doc/guix.texi (Sound Home Services): document it.
>
> Change-Id: I99e0ae860de91d459c3c554ec5503bf35f785a2a
> ---
>  doc/guix.texi               |  72 +++++++++++++++++++++++++
>  gnu/home/services/sound.scm | 102 +++++++++++++++++++++++++++++++++++-
>  2 files changed, 173 insertions(+), 1 deletion(-)
> ...
> base-commit: d5298c5e334e56a9aabddcb62d312e63135864f6

This is the third implementation of a PipeWire related home services
which I've found on the Internet. In the end all of them are the same
except variable naming. Also I've looked how NixOS and Gentoo GNU/Linux
distributions use PipeWire. Running it is a home service is the
recommended way by the upstream (user's systemd units are recommended by
the upstream to be correct) [1].

[1]: https://github.com/PipeWire/pipewire/blob/bd87902da6a2badae096e4679eedfe9da2e75d79/NEWS#L5573


The patch is tested with the following Guix home configuration:
--8<---------------cut here---------------start------------->8---
    (service home-dbus-service-type)
    (service home-pipewire-service-type)
--8<---------------cut here---------------end--------------->8---

The sound from speakers and microphone work.

Also I've packaged obs-pipewire-audio-capture package which works with
current PipeWire implementation.


I think we could merge the patch after getting
‘home-pipewire-pulse-shepherd-service’ or removing it from the commit
message, e.g.:
--8<---------------cut here---------------start------------->8---
gnu: home: Add home-pipewire service.

This adds a set of home Shepherd services which will start the required
services for a functional PipeWire setup

* gnu/home/services/sound.scm
(home-pipewire-shepherd-service, home-wireplumber-shepherd-service,
home-pipewire-shepherd-services, home-pipewire-asoundrc,
home-pipewire-xdg-configuration): New procedures.
(home-pipewire-service-type): New service type.
(home-pipewire-configuration): New struct.
(home-pipewire-disable-pulseaudio-auto-start): New variable.
* doc/guix.texi (Sound Home Services): Document it.
--8<---------------cut here---------------end--------------->8---

Brian, could you add the code for ‘home-pipewire-pulse-shepherd-service’
if it is required, please?


Thanks,
Oleg.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [bug#63863] [PATCH v7] gnu: home: Add support for home-pipewire-service
  2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
                   ` (10 preceding siblings ...)
  2023-12-16 15:23 ` [bug#63863] [PATCH v6] " Brian Cully via Guix-patches via
@ 2023-12-22 15:22 ` Brian Cully via Guix-patches via
       [not found] ` <handler.63863.D63863.17030619999937.notifdone@debbugs.gnu.org>
  12 siblings, 0 replies; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-12-22 15:22 UTC (permalink / raw)
  To: 63863; +Cc: Brian Cully

This adds a set of home shepherd services which will start the required
services for a functional pipewire setup.

* gnu/home/services/sound.scm (home-pipewire-shepherd-service),
(home-pipewire-pulseaudio-shepherd-service), (home-wireplumber-shepherd-service),
(home-pipewire-shepherd-services)
(home-pipewire-asoundrc), (home-pipewire-xdg-configuration): new procedures.
(home-pipewire-service-type): new service type.
(home-pipewire-configuration): new struct.
(home-pipewire-disable-pulseaudio-auto-start): new variable.
* doc/guix.texi (Sound Home Services): document it.

Change-Id: I99e0ae860de91d459c3c554ec5503bf35f785a2a
---
 doc/guix.texi               |  72 +++++++++++++++++++++++++
 gnu/home/services/sound.scm | 102 +++++++++++++++++++++++++++++++++++-
 2 files changed, 173 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index e61a893af9..90888a514f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -45050,6 +45050,7 @@ Sound Home Services
 
 @cindex PulseAudio, home service
 @cindex RTP, for PulseAudio
+@subsubheading PulseAudio RTP Streaming Services
 
 The following services dynamically reconfigure the
 @uref{https://pulseaudio.org,PulseAudio sound server}: they let you
@@ -45137,6 +45138,77 @@ Sound Home Services
 This is the multicast address used by default by the two services above.
 @end defvar
 
+@cindex PipeWire, home service
+@subsubheading PipeWire Home Service
+
+@uref{https://pipewire.org, PipeWire} provides a low-latency,
+graph-based audio and video processing service.  In addition to its
+native protocol, it can also be used as a replacement for both JACK and
+PulseAudio.
+
+While PipeWire provides the media processing and API, it does not,
+directly, know about devices such as sound cards, nor how you might want
+to connect applications, hardware, and media processing filters.
+Instead, PipeWire relies on a @dfn{session manager} to specify all these
+relationships.  While you may use any session manager you wish, for most
+people the @url{https://pipewire.pages.freedesktop.org/wireplumber/,
+WirePlumber} session manager, a reference implementation provided by the
+PipeWire project itself, suffices, and that is the one
+@code{home-pipewire-service-type} uses.
+
+PipeWire can be used as a replacement for PulseAudio by setting
+@code{enable-pulseaudio?} to @code{#t} in
+@code{home-pipewire-configuration}, so that existing PulseAudio clients
+may use it without any further configuration.
+
+In addition, JACK clients may connect to PipeWire by using the
+@command{pw-jack} program, which comes with PipeWire.  Simply prefix the
+command with @command{pw-jack} when you run it, and audio data should go
+through PipeWire:
+
+@example
+pw-jack mpv -ao=jack sound-file.wav
+@end example
+
+For more information on PulseAudio emulation, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio},
+for JACK, see
+@uref{https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-JACK}.
+
+As PipeWire does not use @code{dbus} to start its services on demand
+(as PulseAudio does), @code{home-pipewire-service-type} uses Shepherd
+to start services when logged in, provisioning the @code{pipewire},
+@code{wireplumber}, and, if configured, @code{pipewire-pulseaudio}
+services.  @xref{Shepherd Home Service}.
+
+@defvar home-pipewire-service-type
+This provides the service definition for @command{pipewire}, which will
+run on login.  Its value is a @code{home-pipewire-configuration} object.
+
+To start the service, add it to the @code{service} field of your
+@code{home-environment}, such as:
+
+@lisp
+(service home-pipewire-service-type)
+@end lisp
+@end defvar
+
+@deftp {Data Type} home-pipewire-configuration
+Available @code{home-pipewire-configuration} fields are:
+
+@table @asis
+@item @code{pipewire} (default: @code{pipewire}) (type: file-like)
+The PipeWire package to use.
+
+@item @code{wireplumber} (default: @code{wireplumber}) (type: file-like)
+The WirePlumber package to use.
+
+@item @code{enable-pulseaudio?} (default: @code{#t}) (type: boolean)
+When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently.
+@end table
+@end deftp
+
 @node Mail Home Services
 @subsection Mail Home Services
  
diff --git a/gnu/home/services/sound.scm b/gnu/home/services/sound.scm
index 22c1a99250..313a57305b 100644
--- a/gnu/home/services/sound.scm
+++ b/gnu/home/services/sound.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2023 Brian Cully <bjc@spork.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,112 @@
 (define-module (gnu home services sound)
   #:use-module (gnu home services)
   #:use-module (gnu home services shepherd)
+  #:use-module (gnu home services xdg)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu services configuration)
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (home-pulseaudio-rtp-sink-service-type
             home-pulseaudio-rtp-source-service-type
-            %pulseaudio-rtp-multicast-address))
+            %pulseaudio-rtp-multicast-address
+
+            home-pipewire-configuration
+            home-pipewire-service-type))
+
+\f
+;;;
+;;; PipeWire support.
+;;;
+
+(define-configuration/no-serialization home-pipewire-configuration
+  (pipewire
+   (file-like pipewire)
+   "The PipeWire package to use.")
+  (wireplumber
+   (file-like wireplumber)
+   "The WirePlumber package to use.")
+  (enable-pulseaudio?
+   (boolean #t)
+   "When true, enable PipeWire's PulseAudio emulation support, allowing
+PulseAudio clients to use PipeWire transparently."))
+
+(define (home-pipewire-shepherd-service config)
+  (shepherd-service
+   (documentation "PipeWire media processing.")
+   (provision '(pipewire))
+   (requirement '(dbus))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-pulseaudio-shepherd-service config)
+  (shepherd-service
+   (documentation "Drop-in PulseAudio replacement service for PipeWire.")
+   (provision '(pipewire-pulseaudio))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-pipewire config)
+                      "/bin/pipewire-pulse"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-wireplumber-shepherd-service config)
+  (shepherd-service
+   (documentation "WirePlumber session management for PipeWire.")
+   (provision '(wireplumber))
+   (requirement '(pipewire))
+   (start #~(make-forkexec-constructor
+             (list #$(file-append
+                      (home-pipewire-configuration-wireplumber config)
+                      "/bin/wireplumber"))))
+   (stop #~(make-kill-destructor))))
+
+(define (home-pipewire-shepherd-services config)
+  (cons* (home-pipewire-shepherd-service config)
+         (home-wireplumber-shepherd-service config)
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             (list (home-pipewire-pulseaudio-shepherd-service config))
+             '())))
+
+(define (home-pipewire-asoundrc config)
+  (match-record config <home-pipewire-configuration>
+                (pipewire)
+    (mixed-text-file
+     "asoundrc"
+     "<" pipewire "/share/alsa/alsa.conf.d/50-pipewire.conf>\n"
+     "<" pipewire "/share/alsa/alsa.conf.d/99-pipewire-default.conf>\n"
+     "pcm_type.pipewire {\n"
+     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_pcm_pipewire.so\"\n"
+     "}\n"
+     "ctl_type.pipewire {\n"
+     "  lib \"" pipewire "/lib/alsa-lib/libasound_module_ctl_pipewire.so\"\n"
+     "}\n")))
+
+(define home-pipewire-disable-pulseaudio-auto-start
+  (plain-file "client.conf" "autospawn = no"))
+
+(define (home-pipewire-xdg-configuration config)
+  (cons* `("alsa/asoundrc" ,(home-pipewire-asoundrc config))
+         (if (home-pipewire-configuration-enable-pulseaudio? config)
+             `(("pulse/client.conf"
+                ,home-pipewire-disable-pulseaudio-auto-start))
+             '())))
+
+(define home-pipewire-service-type
+  (service-type
+   (name 'pipewire)
+   (extensions
+    (list (service-extension home-shepherd-service-type
+                             home-pipewire-shepherd-services)
+          (service-extension home-xdg-configuration-files-service-type
+                             home-pipewire-xdg-configuration)))
+   (description
+    "Start essential PipeWire services.")
+   (default-value (home-pipewire-configuration))))
 
 \f
 ;;;

base-commit: d5298c5e334e56a9aabddcb62d312e63135864f6
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [bug#63863] closed (Re: [bug#63863] [PATCH v6] gnu: home: Add support for home-pipewire-service)
       [not found] ` <handler.63863.D63863.17030619999937.notifdone@debbugs.gnu.org>
@ 2023-12-22 15:22   ` Brian Cully via Guix-patches via
  2023-12-26 12:57     ` bug#63863: " Oleg Pykhalov
  0 siblings, 1 reply; 27+ messages in thread
From: Brian Cully via Guix-patches via @ 2023-12-22 15:22 UTC (permalink / raw)
  To: 63863


help-debbugs@gnu.org (GNU bug Tracking System) writes:

> Your bug report
>
> #63863: [PATCH] gnu: home: Add support for home-pipewire-service
>
> which was filed against the guix-patches package, has been 
> closed.

Was this intentional?

> The ‘home-pipewire-pulse-shepherd-service’ procedure is 
> missing. Do you
> have a code for this procedure or should it be removed from the 
> commit
> message?  The PipeWire service seems to work without it.

I'd renamed it to ‘home-pulseaudio-shepherd-service’ and forgot to 
update the commit message; v7 will have it fixed.

-bjc




^ permalink raw reply	[flat|nested] 27+ messages in thread

* bug#63863: closed (Re: [bug#63863] [PATCH v6] gnu: home: Add support for home-pipewire-service)
  2023-12-22 15:22   ` [bug#63863] closed (Re: [bug#63863] [PATCH v6] gnu: home: Add support for home-pipewire-service) Brian Cully via Guix-patches via
@ 2023-12-26 12:57     ` Oleg Pykhalov
  0 siblings, 0 replies; 27+ messages in thread
From: Oleg Pykhalov @ 2023-12-26 12:57 UTC (permalink / raw)
  To: Brian Cully; +Cc: 63863-done

[-- Attachment #1: Type: text/plain, Size: 882 bytes --]

Brian Cully <bjc@spork.org> writes:

> help-debbugs@gnu.org (GNU bug Tracking System) writes:
>
>> Your bug report
>>
>> #63863: [PATCH] gnu: home: Add support for home-pipewire-service
>>
>> which was filed against the guix-patches package, has been closed.
>
> Was this intentional?

It was accidental, apologies.  I reopened the issue right after closing.

>> The ‘home-pipewire-pulse-shepherd-service’ procedure is missing. Do you
>> have a code for this procedure or should it be removed from the commit
>> message?  The PipeWire service seems to work without it.
>
> I'd renamed it to ‘home-pulseaudio-shepherd-service’ and forgot to update the
> commit message; v7 will have it fixed.

Pushed to master as afdbf7f271529573397474fdb8f1c9d00dceba37, following
the Guix convention style with a neatly formatted commit message.


Thanks,
Oleg.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2023-12-26 12:59 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-02 23:04 [bug#63863] [PATCH] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
2023-06-09 20:22 ` Ludovic Courtès
2023-06-12  5:50 ` Andrew Tropin
2023-06-12 15:56   ` Brian Cully via Guix-patches via
2023-06-13  4:39     ` Andrew Tropin
2023-06-13 12:20       ` Brian Cully via Guix-patches via
2023-06-14  9:08         ` Andrew Tropin
2023-06-15 13:16 ` [bug#63863] [PATCH v2] " Brian Cully via Guix-patches via
2023-06-15 13:19   ` Brian Cully via Guix-patches via
2023-06-15 13:26 ` [bug#63863] [PATCH v3] " Brian Cully via Guix-patches via
2023-06-15 13:27   ` Brian Cully via Guix-patches via
2023-06-20 12:41 ` [bug#63863] [PATCH v4 0/1] " Brian Cully via Guix-patches via
2023-06-20 12:41   ` [bug#63863] [PATCH v4 1/1] " Brian Cully via Guix-patches via
2023-07-02 12:39 ` [bug#63863] [PATCH v5 0/1] " Brian Cully via Guix-patches via
2023-07-02 12:39   ` [bug#63863] [PATCH v5 1/1] " Brian Cully via Guix-patches via
2023-11-12 14:14     ` Hilton Chain via Guix-patches via
2023-08-23  8:25 ` Tanguy LE CARROUR
2023-08-23 18:44   ` brian via Guix-patches via
2023-08-25  6:44     ` Tanguy LE CARROUR
2023-10-11 11:34 ` taosabella
2023-11-05 15:09 ` [bug#63863] (no subject) Jakob Honal
2023-12-16 15:17 ` [bug#63863] [PATCH v5 1/1] gnu: home: Add support for home-pipewire-service Brian Cully via Guix-patches via
2023-12-16 15:23 ` [bug#63863] [PATCH v6] " Brian Cully via Guix-patches via
2023-12-20  8:46   ` bug#63863: " Oleg Pykhalov
2023-12-22 15:22 ` [bug#63863] [PATCH v7] " Brian Cully via Guix-patches via
     [not found] ` <handler.63863.D63863.17030619999937.notifdone@debbugs.gnu.org>
2023-12-22 15:22   ` [bug#63863] closed (Re: [bug#63863] [PATCH v6] gnu: home: Add support for home-pipewire-service) Brian Cully via Guix-patches via
2023-12-26 12:57     ` bug#63863: " Oleg Pykhalov

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.