~ruther/guix-local

b7506eb334d1cfceca78682879c69edf525c8ccd — Bruno Victal 3 years ago 306bd7b
services: Add x11-socket-directory-service-type.

The x11-socket-directory-service misuses activation-service-type
to create directories. This kind of usage is incorrect since
activation-service-type does not depend on file-systems, hence incompatible
with user defined /tmp mount.

This commit turns x11-socket-directory-service into a shepherd one-shot
service by defining a new x11-socket-directory-service-type.

* gnu/services/desktop.scm (x11-socket-directory-service-type): New variable.
(x11-socket-directory-service): Deprecate procedure.
(desktop-services-for-system): Use new service-type.
* gnu/tests/lightdm.scm: Ditto.

Reviewed-by: Josselin Poiret <dev@jpoiret.xyz>
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2 files changed, 34 insertions(+), 12 deletions(-)

M gnu/services/desktop.scm
M gnu/tests/lightdm.scm
M gnu/services/desktop.scm => gnu/services/desktop.scm +33 -11
@@ 14,6 14,7 @@
;;; Copyright © 2020 Reza Alizadeh Majd <r.majd@pantherx.org>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021, 2022 muradm <mail@muradm.net>
;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 154,7 155,8 @@
            xfce-desktop-service
            xfce-desktop-service-type

            x11-socket-directory-service
            x11-socket-directory-service ;deprecated
            x11-socket-directory-service-type

            enlightenment-desktop-configuration
            enlightenment-desktop-configuration?


@@ 1573,18 1575,38 @@ rules."
;;; X11 socket directory service
;;;

(define x11-socket-directory-service
(define x11-socket-directory-service-type
  (let ((x11-socket-directory-shepherd-service
         (shepherd-service
          (documentation "Create @file{/tmp/.X11-unix} for XWayland.")
          (requirement '(file-systems))
          (provision '(x11-socket-directory))
          (one-shot? #t)
          (start #~(lambda _
                     (let ((directory "/tmp/.X11-unix"))
                       (mkdir-p directory)
                       (chmod directory #o1777)))))))
    (service-type
     (name 'x11-socket-directory-service)
     (extensions
      (list
       (service-extension shepherd-root-service-type
                          (compose
                           list
                           (const x11-socket-directory-shepherd-service)))))
     (default-value #f) ; no default value required
     (description
      "Create @file{/tmp/.X11-unix} for XWayland.  When using X11, libxcb
takes care of creating that directory however, when using XWayland, we
need to create it beforehand."))))

(define-deprecated x11-socket-directory-service
  x11-socket-directory-service-type
  ;; Return a service that creates /tmp/.X11-unix.  When using X11, libxcb
  ;; takes care of creating that directory.  However, when using XWayland, we
  ;; need to create beforehand.  Thus, create it unconditionally here.
  (simple-service 'x11-socket-directory
                  activation-service-type
                  (with-imported-modules '((guix build utils))
                    #~(begin
                        (use-modules (guix build utils))
                        (let ((directory "/tmp/.X11-unix"))
                          (mkdir-p directory)
                          (chmod directory #o1777))))))
  (service x11-socket-directory-service-type))


;;;
;;; Enlightenment desktop service.


@@ 1889,7 1911,7 @@ applications needing access to be root.")

         (service ntp-service-type)

         x11-socket-directory-service
         (service x11-socket-directory-service-type)

         (service pulseaudio-service-type)
         (service alsa-service-type)

M gnu/tests/lightdm.scm => gnu/tests/lightdm.scm +1 -1
@@ 50,7 50,7 @@
        (service polkit-service-type)
        (service elogind-service-type)
        (service dbus-root-service-type)
        x11-socket-directory-service))
        (service x11-socket-directory-service-type)))

(define %lightdm-os
  (operating-system