summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi16
-rw-r--r--gnu/services/xorg.scm33
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{<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
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 <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