From e51a930c5c5a8609b8656bf997ec853cc04391e7 Mon Sep 17 00:00:00 2001 From: Tomas Volf <~@wolfsden.cz> Date: Thu, 30 May 2024 20:29:53 +0200 Subject: [PATCH] services: xorg: Add startx-command-service-type. * gnu/services/xorg.scm (startx-command-profile-service, startx-command-service-type): New variables. * doc/guix.texi (X Window): Document startx-command-service-type. Change-Id: Ia2a7c3b2d5ebf6bcfff40cb2640b17d3baf6eba0 Signed-off-by: Arun Isaac --- doc/guix.texi | 16 +++++++++++++--- gnu/services/xorg.scm | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index e59827d2bb..77521a3542 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -23627,9 +23627,11 @@ Usually the X server is started by a login manager. Return a @code{startx} script in which the modules, fonts, etc. specified in @var{config} are available. The result should be used in place of @code{startx} and should be invoked by the user from a tty -after login. Unlike @code{xorg-start-command}, this script calls -xinit. Therefore it works well when executed from a tty. If you are -using a desktop environment, you are unlikely to need this procedure. +after login. Unlike @code{xorg-start-command}, this script calls xinit. +Therefore it works well when executed from a tty. This script can be +set up as @code{startx} using @code{startx-command-service-type}. If +you are using a desktop environment, you are unlikely to need this +procedure. @end deffn @@ -23691,6 +23693,14 @@ Whether to setup program as setuid binary. @end deftp +@defvar startx-command-service-type +Add @command{startx} to the system profile putting it onto @env{PATH}. + +The value for this service is a @code{} object which +is passed to the @code{xorg-start-command-xinit} procedure producing the +@command{startx} used. Default value is @code{(xorg-configuration)}. +@end defvar + @node Printing Services @subsection Printing Services diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 0b9803c425..e7d8922d76 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -92,6 +92,7 @@ xorg-start-command-xinit xinitrc xorg-server-service-type + startx-command-service-type %default-slim-theme %default-slim-theme-name @@ -496,6 +497,38 @@ therefore it works well when executed from tty." (program-file "startx" exp)) +(define (startx-command-profile-service config) + ;; XXX: profile-service-type only accepts objects. + (package + (name "startx-profile-package") + (version "0") + (source (xorg-start-command-xinit config)) + (build-system trivial-build-system) + (arguments + (list + #:modules '((guix build utils)) + #:builder + #~(begin + (use-modules (guix build utils)) + (let ((bin (string-append #$output "/bin"))) + (mkdir-p bin) + (symlink #$source (string-append bin "/startx")))))) + (home-page #f) + (synopsis #f) + (description #f) + (license #f))) + +(define startx-command-service-type + (service-type + (name 'startx-command) + (extensions + (list (service-extension profile-service-type + (compose list startx-command-profile-service)))) + (default-value (xorg-configuration)) + (description "Add @command{startx} to the system profile."))) + + + (define* (xinitrc #:key fallback-session) "Return a system-wide xinitrc script that starts the specified X session, which should be passed to this script as the first argument. If not, the