summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-01-26 23:33:24 +0100
committerLudovic Courtès <ludo@gnu.org>2015-01-26 23:33:24 +0100
commitffc3a02b5ac0196d7e84d4ba9cdfbfcaaca21382 (patch)
tree6a9bd4f455ceadf0ee8583626c9c1f910bc0697b
parent3bcfe23cfcb17e4495020fce7744a68c2daaf5fb (diff)
services: xorg: Define the <session-type> record type.
* gnu/services/xorg.scm (<session-type>): New record type. (%windowmaker-session-type, %ratpoison-session-type): New variables. (%default-xsessions): Use them. (xsessions-directory): Expect SESSIONS to be a list of <session-type> and rewrite accordingly. (slim-service): Adjust docstring. * doc/guix.texi (X Window): Update accordingly.
-rw-r--r--doc/guix.texi18
-rw-r--r--gnu/services/xorg.scm73
2 files changed, 64 insertions, 27 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 0d2a61347f..7eed637c26 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -4531,7 +4531,8 @@ started by the @dfn{login manager}, currently SLiM.
@deffn {Monadic Procedure} slim-service [#:allow-empty-passwords? #f] @
[#:auto-login? #f] [#:default-user ""] [#:startx] @
[#:theme @var{%default-slim-theme}] @
- [#:theme-name @var{%default-slim-theme-name}]
+ [#:theme-name @var{%default-slim-theme-name}] @
+ [#:sessions @var{%default-sessions}]
Return a service that spawns the SLiM graphical login manager, which in
turn starts the X display server with @var{startx}, a command as returned by
@code{xorg-start-command}.
@@ -4544,8 +4545,23 @@ If @var{theme} is @code{#f}, the use the default log-in theme; otherwise
@var{theme} must be a gexp denoting the name of a directory containing the
theme to use. In that case, @var{theme-name} specifies the name of the
theme.
+
+Last, @var{session} is a list of @code{<session-type>} objects denoting the
+available session types that can be chosen from the log-in screen.
@end deffn
+@defvr {Scheme Variable} %default-sessions
+The list of default session types used by SLiM.
+@end defvr
+
+@defvr {Scheme Variable} %ratpoison-session-type
+Session type using the Ratpoison window manager.
+@end defvr
+
+@defvr {Scheme Variable} %windowmaker-session-type
+Session type using the WindowMaker window manager.
+@end defvr
+
@defvr {Scheme Variable} %default-theme
@defvrx {Scheme Variable} %default-theme-name
The G-Expression denoting the default SLiM theme and its name.
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 6820456698..ba9731695e 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -33,11 +33,18 @@
#:use-module (guix store)
#:use-module (guix monads)
#:use-module (guix derivations)
+ #:use-module (guix records)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (xorg-start-command
%default-xsessions
+ %ratpoison-session-type
+ %windowmaker-session-type
+
+ session-type?
+ session-type-name
+
%default-slim-theme
%default-slim-theme-name
slim-service))
@@ -172,34 +179,45 @@ which should be passed to this script as the first argument. If not, the
;;; SLiM log-in manager.
;;;
+(define-record-type* <session-type> session-type make-session-type
+ session-type?
+ (name session-type-name) ;string
+ (executable session-type-executable)) ;string-valued gexp
+
+(define %windowmaker-session-type
+ (session-type
+ (name "WindowMaker")
+ (executable #~(string-append #$windowmaker "/bin/wmaker"))))
+
+(define %ratpoison-session-type
+ (session-type
+ (name "Ratpoison")
+ (executable #~(string-append #$ratpoison "/bin/ratpoison"))))
+
(define %default-xsessions
- ;; Default xsessions available for log-in manager, representing as a list of
- ;; monadic desktop entries.
- (list (text-file* "wmaker.desktop" "
-[Desktop Entry]
-Name=Window Maker
-Exec=" windowmaker "/bin/wmaker
-Type=Application
-")
- (text-file* "ratpoison.desktop" "
-[Desktop Entry]
-Name=Ratpoison
-Exec=" ratpoison "/bin/ratpoison
-Type=Application
-")))
+ ;; Default session types available to the log-in manager.
+ (list %windowmaker-session-type %ratpoison-session-type))
(define (xsessions-directory sessions)
- "Return a directory containing SESSIONS, which should be a list of monadic
-desktop entries."
- (mlet %store-monad ((sessions (sequence %store-monad sessions)))
- (define builder
- #~(begin
- (mkdir #$output)
- (for-each (lambda (session)
- (symlink session (string-append #$output "/"
- (basename session))))
- '#$sessions)))
- (gexp->derivation "xsessions-dir" builder)))
+ "Return a directory containing SESSIONS, a list of <session-type> objects."
+ (define builder
+ #~(begin
+ (mkdir #$output)
+ (chdir #$output)
+ (for-each (lambda (name executable)
+ (let ((file (string-append (string-downcase name)
+ ".desktop")))
+ (call-with-output-file file
+ (lambda (port)
+ (format port "[Desktop Entry]
+Name=~a
+Exec=~a
+Type=Application~%"
+ name executable)))))
+ '#$(map session-type-name sessions)
+ (list #$@(map session-type-executable sessions)))))
+
+ (gexp->derivation "xsessions-dir" builder))
(define %default-slim-theme
;; Theme based on work by Felipe López.
@@ -231,7 +249,10 @@ password. When @var{auto-login?} is true, log in automatically as
If @var{theme} is @code{#f}, the use the default log-in theme; otherwise
@var{theme} must be a gexp denoting the name of a directory containing the
theme to use. In that case, @var{theme-name} specifies the name of the
-theme."
+theme.
+
+Last, @var{session} is a list of @code{<session-type>} objects denoting the
+available session types that can be chosen from the log-in screen."
(define (slim.cfg)
(mlet %store-monad ((startx (or startx (xorg-start-command)))