[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] services: xorg: Make SLiM sessions configurable.
From: |
宋文武 |
Subject: |
[PATCH] services: xorg: Make SLiM sessions configurable. |
Date: |
Tue, 16 Dec 2014 00:30:51 +0800 |
* gnu/services/xorg.scm (%default-xsessions): New variable.
(xsessions-directory): New procedure.
(slim-service): Add #:sessions parameter.
[slim.cfg]: Honor #:sessions.
(xinitrc): Adjust accordingly.
---
gnu/services/xorg.scm | 50 +++++++++++++++++++++++++++++++++++---------------
1 file changed, 35 insertions(+), 15 deletions(-)
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index fbf96c7..73f669d 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -36,7 +36,7 @@
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (xorg-start-command
-
+ %default-xsessions
%default-slim-theme
%default-slim-theme-name
slim-service))
@@ -135,9 +135,7 @@ EndSection
(gexp->script "start-xorg" script)))
(define* (xinitrc #:key
- (guile (canonical-package guile-2.0))
- (ratpoison ratpoison)
- (windowmaker windowmaker))
+ (guile (canonical-package guile-2.0)))
"Return a system-wide xinitrc script that starts the specified X session."
(define builder
#~(begin
@@ -160,15 +158,8 @@ EndSection
(xsession (string-append home "/.xsession")))
(exec-from-login-shell xsession))
- ;; Then try a pre-configured session type.
- (let ((ratpoison (string-append #$ratpoison "/bin/ratpoison"))
- (wmaker (string-append #$windowmaker "/bin/wmaker")))
- (match (command-line)
- ((_ "ratpoison")
- (exec-from-login-shell ratpoison))
- (_
- (exec-from-login-shell wmaker))))))
-
+ ;; Then run the selected session.
+ (exec-from-login-shell (cadr command-line))))
(gexp->script "xinitrc" builder))
@@ -176,6 +167,33 @@ EndSection
;;; SLiM log-in manager.
;;;
+(define %default-xsessions
+ (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
+")))
+
+(define (xsessions-directory sessions)
+ "Return a directory contains 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)))
+
(define %default-slim-theme
;; Theme based on work by Felipe López.
#~(string-append #$%artwork-repository "/slim"))
@@ -191,6 +209,7 @@ EndSection
(theme %default-slim-theme)
(theme-name %default-slim-theme-name)
(xauth xauth) (dmd dmd) (bash bash)
+ (sessions %default-xsessions)
startx)
"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
@@ -207,7 +226,8 @@ theme."
(define (slim.cfg)
(mlet %store-monad ((startx (or startx (xorg-start-command)))
- (xinitrc (xinitrc)))
+ (xinitrc (xinitrc))
+ (sessiondir (xsessions-directory sessions)))
(text-file* "slim.cfg" "
default_path /run/current-system/profile/bin
default_xserver " startx "
@@ -218,7 +238,7 @@ authfile /var/run/slim.auth
# The login command. '%session' is replaced by the chosen session name, one
# of the names specified in the 'sessions' setting: 'wmaker', 'xfce', etc.
login_cmd exec " xinitrc " %session
-sessions wmaker,ratpoison
+sessiondir " sessiondir "
halt_cmd " dmd "/sbin/halt
reboot_cmd " dmd "/sbin/reboot
--
2.1.2
- [PATCH] services: xorg: Make SLiM sessions configurable.,
宋文武 <=