~ruther/guix-local

220ef58440668c39ddf7c6434c0fbfc82d3dd507 — muradm 1 year, 25 days ago 447207d
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>
2 files changed, 84 insertions(+), 3 deletions(-)

M doc/guix.texi
M gnu/services/base.scm
M doc/guix.texi => doc/guix.texi +48 -3
@@ 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


M gnu/services/base.scm => gnu/services/base.scm +36 -0
@@ 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?