M doc/guix.texi => doc/guix.texi +13 -3
@@ 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{<xorg-configuration>} 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
M gnu/services/xorg.scm => gnu/services/xorg.scm +33 -0
@@ 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 <package> 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