summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormuradm <mail@muradm.net>2025-02-05 16:09:33 +0300
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2025-02-06 22:26:45 +0900
commit220ef58440668c39ddf7c6434c0fbfc82d3dd507 (patch)
tree87db4469041022fff2635c4ef05ee47fdac29cc1
parent447207d27b6b83c63c8bd9d5c0aa63bccf8dc6d8 (diff)
services: greetd: Add new gtkgreet greeter.
* gnu/services/base.scm (<greetd-gtkgreet-sway-session>): New record, represents 'gtkgreet' greeter session configuration. * doc/guix.texi (Base Services): Document new 'gtkgreet' greeter. Change-Id: I2e8b5710965faa05795af1d0b2a0e2f774af1d5a Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
-rw-r--r--doc/guix.texi51
-rw-r--r--gnu/services/base.scm36
2 files changed, 84 insertions, 3 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 00d3dba316..9f1e4bf0f0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -20600,8 +20600,9 @@ exist.
The user to use for running the greeter.
@item @code{default-session-command} (default: @code{(greetd-agreety-session)})
-Can be either @code{greetd-agreety-session}, @code{greetd-wlgreet-sway-session} or
-@code{gexp->script} like object to use as greeter.
+Can be either @code{greetd-agreety-session},
+@code{greetd-wlgreet-sway-session}, @code{greetd-gtkgreet-sway-session}
+or a file-like object to use as greeter.
@end table
@end deftp
@@ -20717,7 +20718,7 @@ Here is an example of a greetd configuration that uses wlgreet and Sway:
(terminals
(list (greetd-terminal-configuration
;; Sway requires seatd service.
- (extra-shepherd-requirement '(seatd))
+ (shepherd-requirement '(seatd))
(terminal-vt "1")
(terminal-switch #t)
(default-session-command
@@ -20728,6 +20729,50 @@ Here is an example of a greetd configuration that uses wlgreet and Sway:
@end lisp
@end deftp
+@deftp {Data Type} greetd-gtkgreet-sway-session
+Configuration record for the gtkgreet greetd greeter. It can be used as
+follows:
+
+@lisp
+ (greetd-configuration
+ ;; The graphical greeter requires additional groups membership.
+ (greeter-supplementary-groups (list "video" "input" "seat"))
+ (terminals
+ (list (greetd-terminal-configuration
+ ;; Sway requires the seatd service.
+ (shepherd-requirement '(seatd))
+ (terminal-vt "1")
+ (terminal-switch #t)
+ (default-session-command
+ (greetd-gtkgreet-sway-session
+ (command
+ (greetd-user-session
+ ;; Optionally signal to .bashrc that we want the Wayland
+ ;; compositor.
+ (xdg-session-type "wayland")))))))))
+@end lisp
+
+@table @asis
+@item @code{sway} (default: @code{sway})
+The package providing the @command{sway} and @command{swaymsg} commands.
+
+@item @code{sway-configuration} (default: @code{#f})
+Extra file-like configuration for sway to be included before executing
+the greeter.
+
+@item @code{gtkgreet} (default: @code{gtkgreet})
+The package providing the @command{gtkgreet} command.
+
+@item @code{gtkgreet-style} (default: @code{#f})
+Extra file-like CSS stylesheet to customize the GTK look.
+
+@item @code{command} (default: @code{(greetd-user-session)})
+The command to be started by @command{gtkgreet} on successful login, an
+instance of @code{greetd-user-session}.
+
+@end table
+@end deftp
+
@node Scheduled Job Execution
@subsection Scheduled Job Execution
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index fce82094f6..1f31df1d87 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -279,6 +279,7 @@
greetd-wlgreet-session ; deprecated
greetd-wlgreet-configuration
greetd-wlgreet-sway-session
+ greetd-gtkgreet-sway-session
%base-services))
@@ -3710,6 +3711,41 @@ to handle."
sway
(make-greetd-wlgreet-sway-session-sway-config s))))))
+(define-record-type* <greetd-gtkgreet-sway-session>
+ greetd-gtkgreet-sway-session make-greetd-gtkgreet-sway-session
+ greetd-gtkgreet-sway-session?
+ (sway greetd-gtkgreet-sway-session-sway (default sway))
+ (sway-configuration greetd-gtkgreet-sway-session-sway-configuration
+ (default #f))
+ (gtkgreet greetd-gtkgreet-sway-session-gtkgreet (default gtkgreet))
+ (gtkgreet-style greetd-gtkgreet-sway-session-gtkgreet-style (default #f))
+ (command greetd-gtkgreet-sway-session-command
+ (default (greetd-user-session))))
+
+(define (make-greetd-gtkgreet-sway-session-sway-config session)
+ (match-record session <greetd-gtkgreet-sway-session>
+ (sway sway-configuration gtkgreet gtkgreet-style command)
+ (let ((gtkgreet-bin (file-append gtkgreet "/bin/gtkgreet"))
+ (swaymsg-bin (file-append sway "/bin/swaymsg")))
+ (mixed-text-file
+ "gtkgreet-sway-config"
+ (if sway-configuration
+ #~(string-append "include " #$sway-configuration "\n")
+ "")
+ "xwayland disable\n"
+ "exec \"" gtkgreet-bin " -l"
+ (if gtkgreet-style #~(string-append " -s " #$gtkgreet-style) "")
+ " -c " command "; " swaymsg-bin " exit\"\n"))))
+
+(define-gexp-compiler (greetd-gtkgreet-sway-session-compiler
+ (session <greetd-gtkgreet-sway-session>)
+ system target)
+ (match-record session <greetd-gtkgreet-sway-session> (sway)
+ (lower-object
+ (make-greetd-sway-greeter-command
+ sway
+ (make-greetd-gtkgreet-sway-session-sway-config session)))))
+
(define-record-type* <greetd-terminal-configuration>
greetd-terminal-configuration make-greetd-terminal-configuration
greetd-terminal-configuration?