gnu: base: Add greetd-wlgreet-sway-session.
* gnu/services/base.scm (greetd-wlgreet-session): New data type. (greetd-wlgreet-sway-session): Likewise. * doc/guix.texi ("Base Services")[greetd-service-type]: Document them. Signed-off-by: Christopher Baines <mail@cbaines.net>master
parent
e83b9fe44e
commit
ba6ea435e2
|
@ -18681,6 +18681,81 @@ are set right after mentioned variables, so that they can be overriden.
|
|||
@end table
|
||||
@end deftp
|
||||
|
||||
@deftp {Data Type} greetd-wlgreet-session
|
||||
Generic configuration record for the wlgreet greetd greeter.
|
||||
|
||||
@table @asis
|
||||
@item @code{wlgreet} (default: @code{wlgreet})
|
||||
The package with the @command{/bin/wlgreet} command.
|
||||
|
||||
@item @code{command} (default: @code{(file-append sway "/bin/sway")})
|
||||
Command to be started by @command{/bin/wlgreet} on successful login.
|
||||
|
||||
@item @code{command-args} (default: @code{'()})
|
||||
Command arguments to pass to command.
|
||||
|
||||
@item @code{output-mode} (default: @code{"all"})
|
||||
Option to use for @code{outputMode} in the TOML configuration file.
|
||||
|
||||
@item @code{scale} (default: @code{1})
|
||||
Option to use for @code{scale} in the TOML configuration file.
|
||||
|
||||
@item @code{background} (default: @code{'(0 0 0 0.9)})
|
||||
RGBA list to use as the background colour of the login prompt.
|
||||
|
||||
@item @code{headline} (default: @code{'(1 1 1 1)})
|
||||
RGBA list to use as the headline colour of the UI popup.
|
||||
|
||||
@item @code{prompt} (default: @code{'(1 1 1 1)})
|
||||
RGBA list to use as the prompt colour of the UI popup.
|
||||
|
||||
@item @code{prompt-error} (default: @code{'(1 1 1 1)})
|
||||
RGBA list to use as the error colour of the UI popup.
|
||||
|
||||
@item @code{border} (default: @code{'(1 1 1 1)})
|
||||
RGBA list to use as the border colour of the UI popup.
|
||||
|
||||
@item @code{extra-env} (default: @code{'()})
|
||||
Extra environment variables to set on login.
|
||||
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
@deftp {Data Type} greetd-wlgreet-sway-session
|
||||
Sway-specific configuration record for the wlgreet greetd greeter.
|
||||
|
||||
@table @asis
|
||||
@item @code{wlgreet-session} (default: @code{(greetd-wlgreet-session)})
|
||||
A @code{greetd-wlgreet-session} record for generic wlgreet configuration,
|
||||
on top of the Sway-specific @code{greetd-wlgreet-sway-session}.
|
||||
|
||||
@item @code{sway} (default: @code{sway})
|
||||
The package providing the @command{/bin/sway} command.
|
||||
|
||||
@item @code{sway-configuration} (default: #f)
|
||||
File-like object providing an additional Sway configuration file to be
|
||||
prepended to the mandatory part of the configuration.
|
||||
|
||||
@end table
|
||||
|
||||
Here is an example of a greetd configuration that uses wlgreet and Sway:
|
||||
|
||||
@lisp
|
||||
(greetd-configuration
|
||||
;; We need to give the greeter user these permissions, otherwise
|
||||
;; Sway will crash on launch.
|
||||
(greeter-supplementary-groups (list "video" "input" "seat"))
|
||||
(terminals
|
||||
(list (greetd-terminal-configuration
|
||||
(terminal-vt "1")
|
||||
(terminal-switch #t)
|
||||
(default-session-command
|
||||
(greetd-wlgreet-sway-session
|
||||
(sway-configuration
|
||||
(local-file "sway-greetd.conf"))))))))
|
||||
@end lisp
|
||||
@end deftp
|
||||
|
||||
@node Scheduled Job Execution
|
||||
@subsection Scheduled Job Execution
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
;;; Copyright © 2021 muradm <mail@muradm.net>
|
||||
;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
|
||||
;;; Copyright © 2022 Justin Veilleux <terramorpha@cock.li>
|
||||
;;; Copyright © 2022 ( <paren@disroot.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -71,6 +72,7 @@
|
|||
#:use-module ((gnu packages file-systems)
|
||||
#:select (bcachefs-tools exfat-utils jfsutils zfs))
|
||||
#:use-module (gnu packages terminals)
|
||||
#:use-module ((gnu packages wm) #:select (sway))
|
||||
#:use-module ((gnu build file-systems)
|
||||
#:select (mount-flags->bit-mask
|
||||
swap-space->flags-bit-mask))
|
||||
|
@ -237,6 +239,8 @@
|
|||
greetd-configuration
|
||||
greetd-terminal-configuration
|
||||
greetd-agreety-session
|
||||
greetd-wlgreet-session
|
||||
greetd-wlgreet-sway-session
|
||||
|
||||
%base-services))
|
||||
|
||||
|
@ -2902,6 +2906,109 @@ to handle."
|
|||
"agreety-command"
|
||||
#~(execl #$agreety #$agreety "-c" #$command))))
|
||||
|
||||
(define-record-type* <greetd-wlgreet-session>
|
||||
greetd-wlgreet-session make-greetd-wlgreet-session
|
||||
greetd-wlgreet-session?
|
||||
(wlgreet greetd-wlgreet (default wlgreet))
|
||||
(command greetd-wlgreet-command
|
||||
(default (file-append sway "/bin/sway")))
|
||||
(command-args greetd-wlgreet-command-args (default '()))
|
||||
(output-mode greetd-wlgreet-output-mode (default "all"))
|
||||
(scale greetd-wlgreet-scale (default 1))
|
||||
(background greetd-wlgreet-background (default '(0 0 0 0.9)))
|
||||
(headline greetd-wlgreet-headline (default '(1 1 1 1)))
|
||||
(prompt greetd-wlgreet-prompt (default '(1 1 1 1)))
|
||||
(prompt-error greetd-wlgreet-prompt-error (default '(1 1 1 1)))
|
||||
(border greetd-wlgreet-border (default '(1 1 1 1)))
|
||||
(extra-env greetd-wlgreet-extra-env (default '())))
|
||||
|
||||
(define (greetd-wlgreet-wayland-session-command session)
|
||||
(program-file "wlgreet-session-command"
|
||||
#~(let* ((username (getenv "USER"))
|
||||
(useruid (number->string
|
||||
(passwd:uid (getpwuid username))))
|
||||
(command #$(greetd-wlgreet-command session)))
|
||||
(use-modules (ice-9 match))
|
||||
(setenv "XDG_SESSION_TYPE" "wayland")
|
||||
(setenv "XDG_RUNTIME_DIR" (string-append "/run/user/" useruid))
|
||||
(for-each (lambda (env) (setenv (car env) (cdr env)))
|
||||
'(#$@(greetd-wlgreet-extra-env session)))
|
||||
(apply execl command command
|
||||
(list #$@(greetd-wlgreet-command-args session))))))
|
||||
|
||||
(define (make-wlgreet-config-color section-name color)
|
||||
(match color
|
||||
((red green blue opacity)
|
||||
(string-append
|
||||
"[" section-name "]\n"
|
||||
"red = " (number->string red) "\n"
|
||||
"green = " (number->string green) "\n"
|
||||
"blue = " (number->string blue) "\n"
|
||||
"opacity = " (number->string opacity) "\n"))))
|
||||
|
||||
(define (make-wlgreet-configuration-file session)
|
||||
(let ((command (greetd-wlgreet-wayland-session-command session))
|
||||
(output-mode (greetd-wlgreet-output-mode session))
|
||||
(scale (greetd-wlgreet-scale session))
|
||||
(background (greetd-wlgreet-background session))
|
||||
(headline (greetd-wlgreet-headline session))
|
||||
(prompt (greetd-wlgreet-prompt session))
|
||||
(prompt-error (greetd-wlgreet-prompt-error session))
|
||||
(border (greetd-wlgreet-border session)))
|
||||
(mixed-text-file "wlgreet.toml"
|
||||
"command = \"" command "\"\n"
|
||||
"outputMode = \"" output-mode "\"\n"
|
||||
"scale = " (number->string scale) "\n"
|
||||
(apply string-append
|
||||
(map (match-lambda
|
||||
((section-name . color)
|
||||
(make-wlgreet-config-color section-name color)))
|
||||
`(("background" . ,background)
|
||||
("headline" . ,headline)
|
||||
("prompt" . ,prompt)
|
||||
("prompt-error" . ,prompt-error)
|
||||
("border" . ,border)))))))
|
||||
|
||||
(define-record-type* <greetd-wlgreet-sway-session>
|
||||
greetd-wlgreet-sway-session make-greetd-wlgreet-sway-session
|
||||
greetd-wlgreet-sway-session?
|
||||
(wlgreet-session greetd-wlgreet-sway-session-wlgreet-session ;<greetd-wlgreet-session>
|
||||
(default (greetd-wlgreet-session)))
|
||||
(sway greetd-wlgreet-sway-session-sway (default sway)) ;<package>
|
||||
(sway-configuration greetd-wlgreet-sway-session-sway-configuration ;file-like
|
||||
(default (plain-file "wlgreet-sway-config" ""))))
|
||||
|
||||
(define (make-wlgreet-sway-configuration-file session)
|
||||
(let* ((wlgreet-session (greetd-wlgreet-sway-session-wlgreet-session session))
|
||||
(wlgreet-config (make-wlgreet-configuration-file wlgreet-session))
|
||||
(wlgreet (file-append (greetd-wlgreet wlgreet-session) "/bin/wlgreet"))
|
||||
(sway-config (greetd-wlgreet-sway-session-sway-configuration session))
|
||||
(swaymsg (file-append (greetd-wlgreet-sway-session-sway session)
|
||||
"/bin/swaymsg")))
|
||||
(mixed-text-file "wlgreet-sway.conf"
|
||||
"include " sway-config "\n"
|
||||
"xwayland disable\n"
|
||||
"exec \"" wlgreet " --config " wlgreet-config "; "
|
||||
swaymsg " exit\"\n")))
|
||||
|
||||
(define (greetd-wlgreet-sway-session-command session)
|
||||
(let ((sway (file-append (greetd-wlgreet-sway-session-sway session)
|
||||
"/bin/sway"))
|
||||
(config (make-wlgreet-sway-configuration-file session)))
|
||||
(program-file "wlgreet-sway-session-command"
|
||||
#~(let* ((log-file (open-output-file
|
||||
(string-append "/tmp/sway-greeter."
|
||||
(number->string (getpid))
|
||||
".log")))
|
||||
(username (getenv "USER"))
|
||||
(useruid (number->string (passwd:uid (getpwuid username)))))
|
||||
;; redirect stdout/err to log-file
|
||||
(dup2 (fileno log-file) 1)
|
||||
(dup2 1 2)
|
||||
(sleep 1) ;give seatd/logind some time to start up
|
||||
(setenv "XDG_RUNTIME_DIR" (string-append "/run/user/" useruid))
|
||||
(execl #$sway #$sway "-d" "-c" #$config)))))
|
||||
|
||||
(define (make-greetd-default-session-command config-or-command)
|
||||
(cond ((greetd-agreety-session? config-or-command)
|
||||
(cond ((greetd-agreety-xdg-env? config-or-command)
|
||||
|
@ -2912,6 +3019,8 @@ to handle."
|
|||
(make-greetd-agreety-session-command
|
||||
config-or-command
|
||||
(greetd-agreety-tty-session-command config-or-command)))))
|
||||
((greetd-wlgreet-sway-session? config-or-command)
|
||||
(greetd-wlgreet-sway-session-command config-or-command))
|
||||
(#t config-or-command)))
|
||||
|
||||
(define-record-type* <greetd-terminal-configuration>
|
||||
|
|
Reference in New Issue