summaryrefslogtreecommitdiff
path: root/yellowsquid/services/pipewire.scm
blob: 222df2894ae190d66e3a3a8059b1eca401f709e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
(define-module (yellowsquid services pipewire)
  #:use-module (gnu home services)
  #:use-module (gnu home services shepherd)
  #:use-module (gnu packages linux)
  #:use-module (gnu services)
  #:use-module (guix gexp)
  #:export (home-pipewire-service-type
            home-wireplumber-service-type))

(define (home-pipewire-shepherd-service pipewire)
  "Return a shepherd service for PipeWire."
  (list (shepherd-service
         (documentation "PipeWire PulseAudio")
         (provision '(pipewire-pulse pulseaudio))
         (requirement '(pipewire pipewire-media-session))
         (start #~(make-forkexec-constructor
                   (list #$(file-append pipewire "/bin/pipewire-pulse"))))
         (stop #~(make-kill-destructor)))
        (shepherd-service
         (documentation "PipeWire Multimedia Service")
         (provision '(pipewire))
         (start #~(make-forkexec-constructor
                   (list #$(file-append pipewire "/bin/pipewire"))))
         (stop #~(make-kill-destructor)))))

(define home-pipewire-service-type
  (service-type (name 'home-pipewire)
                (extensions
                 (list (service-extension home-shepherd-service-type
                                          home-pipewire-shepherd-service)
                       (service-extension home-profile-service-type
                                          (lambda (pkg) `(,pkg)))))
                (default-value pipewire-0.3)
                (description "Userland PipeWire daemon.")))

(define (home-wireplumber-shepherd-service wireplumber)
  "Return a shepherd service for WirePlumber."
  (list (shepherd-service
         (documentation "Multimedia Service Session Manager")
         (provision '(wireplumber pipewire-media-session))
         (requirement '(pipewire))
         (start #~(make-forkexec-constructor
                   (list #$(file-append wireplumber "/bin/wireplumber"))))
         (stop #~(make-kill-destructor)))))

(define home-wireplumber-service-type
  (service-type (name 'home-wireplumber)
                (extensions
                 (list (service-extension home-shepherd-service-type
                                          home-wireplumber-shepherd-service)
                       (service-extension home-profile-service-type
                                          (lambda (pkg) `(,pkg)))))
                (default-value wireplumber)
                (description "Userland WirePlumber daemon.")))