diff options
author | muradm <mail@muradm.net> | 2025-02-05 16:09:33 +0300 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2025-02-06 22:26:45 +0900 |
commit | 220ef58440668c39ddf7c6434c0fbfc82d3dd507 (patch) | |
tree | 87db4469041022fff2635c4ef05ee47fdac29cc1 | |
parent | 447207d27b6b83c63c8bd9d5c0aa63bccf8dc6d8 (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.texi | 51 | ||||
-rw-r--r-- | gnu/services/base.scm | 36 |
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? |