diff mbox series

[bug#61789,14/27] services: xorg: Deprecate 'screen-locker-service' procedure.

Message ID 9e2b1d0ac1148daefe99a9075fdd99b440f11f74.1677350249.git.mirai@makinata.eu
State New
Headers show
Series Deprecate old-style services. | expand

Commit Message

Bruno Victal Feb. 25, 2023, 6:58 p.m. UTC
* doc/guix.texi (X Window): Replace 'screen-locker-service' with 'screen-locker-service-type'.
Document <screen-locker-configuration>.
* gnu/services/desktop.scm (desktop-services-for-system): Use screen-locker-service-type.
* gnu/services/xorg.scm: Export accessors for <screen-locker-configuration>.
(<screen-locker>): Rename to ...
(<screen-locker-configuration>): ... this.
(<screen-locker-configuration>)[empty?]: Rename to ...
(<screen-locker-configuration>)[allow-empty-password?]: ... this.
(screen-locker-pam-services): Update record name.
(screen-locker-setuid-programs): Update accessor name.
(screen-locker-service): Deprecate procedure.
---
 doc/guix.texi            | 32 ++++++++++++++++++++++-----
 gnu/services/desktop.scm |  8 +++++--
 gnu/services/xorg.scm    | 47 +++++++++++++++++++++++++---------------
 3 files changed, 62 insertions(+), 25 deletions(-)

Comments

Ludovic Courtès March 3, 2023, 4:45 p.m. UTC | #1
Bruno Victal <mirai@makinata.eu> skribis:

> * doc/guix.texi (X Window): Replace 'screen-locker-service' with 'screen-locker-service-type'.
> Document <screen-locker-configuration>.
> * gnu/services/desktop.scm (desktop-services-for-system): Use screen-locker-service-type.
> * gnu/services/xorg.scm: Export accessors for <screen-locker-configuration>.
> (<screen-locker>): Rename to ...
> (<screen-locker-configuration>): ... this.
> (<screen-locker-configuration>)[empty?]: Rename to ...
> (<screen-locker-configuration>)[allow-empty-password?]: ... this.
> (screen-locker-pam-services): Update record name.
> (screen-locker-setuid-programs): Update accessor name.
> (screen-locker-service): Deprecate procedure.

Also leaving this one out: there’s a bit too much going on here, and I
think we should discuss it separately (it’s quite different from the
old-style service procedures.)

Ludo’.
Bruno Victal March 6, 2023, 2:36 p.m. UTC | #2
Hi Ludo’,

On 2023-03-03 16:45, Ludovic Courtès wrote:
> Bruno Victal <mirai@makinata.eu> skribis:
> 
>> * doc/guix.texi (X Window): Replace 'screen-locker-service' with 'screen-locker-service-type'.
>> Document <screen-locker-configuration>.
>> * gnu/services/desktop.scm (desktop-services-for-system): Use screen-locker-service-type.
>> * gnu/services/xorg.scm: Export accessors for <screen-locker-configuration>.
>> (<screen-locker>): Rename to ...
>> (<screen-locker-configuration>): ... this.
>> (<screen-locker-configuration>)[empty?]: Rename to ...
>> (<screen-locker-configuration>)[allow-empty-password?]: ... this.
>> (screen-locker-pam-services): Update record name.
>> (screen-locker-setuid-programs): Update accessor name.
>> (screen-locker-service): Deprecate procedure.
> 
> Also leaving this one out: there’s a bit too much going on here, and I
> think we should discuss it separately (it’s quite different from the
> old-style service procedures.)

The changes essentially amount to a rename of the configuration record-type (with backward compatibility)
and making explicit what the 'screen-locker-service' procedure does behind the scenes with 'screen-locker-service-type'.

Do you have another plan in mind to split or refactor this change?


Cheers,
Bruno
Ludovic Courtès March 6, 2023, 10:32 p.m. UTC | #3
Hi,

Bruno Victal <mirai@makinata.eu> skribis:

> On 2023-03-03 16:45, Ludovic Courtès wrote:
>> Bruno Victal <mirai@makinata.eu> skribis:
>> 
>>> * doc/guix.texi (X Window): Replace 'screen-locker-service' with 'screen-locker-service-type'.
>>> Document <screen-locker-configuration>.
>>> * gnu/services/desktop.scm (desktop-services-for-system): Use screen-locker-service-type.
>>> * gnu/services/xorg.scm: Export accessors for <screen-locker-configuration>.
>>> (<screen-locker>): Rename to ...
>>> (<screen-locker-configuration>): ... this.
>>> (<screen-locker-configuration>)[empty?]: Rename to ...
>>> (<screen-locker-configuration>)[allow-empty-password?]: ... this.
>>> (screen-locker-pam-services): Update record name.
>>> (screen-locker-setuid-programs): Update accessor name.
>>> (screen-locker-service): Deprecate procedure.
>> 
>> Also leaving this one out: there’s a bit too much going on here, and I
>> think we should discuss it separately (it’s quite different from the
>> old-style service procedures.)
>
> The changes essentially amount to a rename of the configuration record-type (with backward compatibility)
> and making explicit what the 'screen-locker-service' procedure does behind the scenes with 'screen-locker-service-type'.
>
> Do you have another plan in mind to split or refactor this change?

Actually no.  :-)  Just thinking we should discuss it separately because
it looks less “obvious” to me than the other patches.

Ludo’.
diff mbox series

Patch

diff --git a/doc/guix.texi b/doc/guix.texi
index 9f6f1f8794..05900d514a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -22221,18 +22221,38 @@  X Window
 @end deffn
 
 
-@deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}]
-Add @var{package}, a package for a screen locker or screen saver whose
-command is @var{program}, to the set of setuid programs and add a PAM entry
-for it.  For example:
+@defvar screen-locker-service-type
+Type for a service that adds a package for a screen locker or screen
+saver to the set of setuid programs and add a PAM entry for it.  The
+value for this service is a @code{<screen-locker-configuration>} object.
+
+For example, to make XlockMore usable:
 
 @lisp
-(screen-locker-service xlockmore "xlock")
+(service screen-locker-service-type
+         (screen-locker-configuration
+           "xlock" (file-append xlockmore "/bin/xlock") #f))
 @end lisp
 
 makes the good ol' XlockMore usable.
-@end deffn
+@end defvar
 
+@deftp {Data Type} screen-locker-configuration
+Data type representing the configuration of
+@code{screen-locker-service-type}.
+
+@table @asis
+@item @code{name} (type: string)
+Name of the screen locker.
+
+@item @code{program} (type: gexp)
+Path to the executable for the screen locker as a G-Expression.
+
+@item @code{allow-empty-password?} (type: boolean)
+Whether to allow empty passwords.
+
+@end table
+@end deftp
 
 @node Printing Services
 @subsection Printing Services
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index fe1f0fd20a..d4ac88311f 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -1755,8 +1755,12 @@  (define* (desktop-services-for-system #:optional
              (service sddm-service-type))
 
          ;; Screen lockers are a pretty useful thing and these are small.
-         (screen-locker-service slock)
-         (screen-locker-service xlockmore "xlock")
+         (service screen-locker-service-type
+                  (screen-locker-configuration
+                   "slock" (file-append slock "/bin/slock") #f))
+         (service screen-locker-service-type
+                  (screen-locker-configuration
+                   "xlock" (file-append xlockmore "/bin/xlock") #f))
 
          ;; Add udev rules for MTP devices so that non-root users can access
          ;; them.
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 5f073d05d3..c4745cecf5 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -107,10 +107,13 @@  (define-module (gnu services xorg)
 
             slim-service-type
 
-            screen-locker
-            screen-locker?
+            screen-locker-configuration
+            screen-locker-configuration?
+            screen-locker-configuration-name
+            screen-locker-configuration-program
+            screen-locker-configuration-allow-empty-password?
             screen-locker-service-type
-            screen-locker-service
+            screen-locker-service  ; deprecated
 
             localed-configuration
             localed-configuration?
@@ -683,21 +686,30 @@  (define slim-service-type
 ;;; Screen lockers & co.
 ;;;
 
-(define-record-type <screen-locker>
-  (screen-locker name program empty?)
+(define-record-type <screen-locker-configuration>
+  (screen-locker-configuration name program allow-empty-password?)
+  screen-locker-configuration?
+  (name    screen-locker-configuration-name)           ;string
+  (program screen-locker-configuration-program)        ;gexp
+  (allow-empty-password?
+   screen-locker-configuration-allow-empty-password?)) ;Boolean
+
+(define-deprecated/public-alias
+  screen-locker
+  screen-locker-configuration)
+
+(define-deprecated/public-alias
   screen-locker?
-  (name    screen-locker-name)                     ;string
-  (program screen-locker-program)                  ;gexp
-  (empty?  screen-locker-allows-empty-passwords?)) ;Boolean
+  screen-locker-configuration?)
 
 (define screen-locker-pam-services
   (match-lambda
-    (($ <screen-locker> name _ empty?)
+    (($ <screen-locker-configuration> name _ empty?)
      (list (unix-pam-service name
                              #:allow-empty-passwords? empty?)))))
 
 (define screen-locker-setuid-programs
-  (compose list file-like->setuid-program screen-locker-program))
+  (compose list file-like->setuid-program screen-locker-configuration-program))
 
 (define screen-locker-service-type
   (service-type (name 'screen-locker)
@@ -711,10 +723,11 @@  (define screen-locker-service-type
 the graphical server by making it setuid-root, so it can authenticate users,
 and by creating a PAM service for it.")))
 
-(define* (screen-locker-service package
-                                #:optional
-                                (program (package-name package))
-                                #:key allow-empty-passwords?)
+(define-deprecated (screen-locker-service package
+                                          #:optional
+                                          (program (package-name package))
+                                          #:key allow-empty-passwords?)
+  screen-locker-service-type
   "Add @var{package}, a package for a screen locker or screen saver whose
 command is @var{program}, to the set of setuid programs and add a PAM entry
 for it.  For example:
@@ -725,9 +738,9 @@  (define* (screen-locker-service package
 
 makes the good ol' XlockMore usable."
   (service screen-locker-service-type
-           (screen-locker program
-                          (file-append package "/bin/" program)
-                          allow-empty-passwords?)))
+           (screen-locker-configuration program
+                                        (file-append package "/bin/" program)
+                                        allow-empty-passwords?)))
 
 
 ;;;