summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi14
-rw-r--r--gnu/services/xorg.scm54
2 files changed, 62 insertions, 6 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index c0bad3c7fa..3a5e4be837 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -3964,7 +3964,9 @@ there is no @code{xorg-service} procedure. Instead, the X server is
started by the @dfn{login manager}, currently SLiM.
@deffn {Monadic Procedure} slim-service [#:allow-empty-passwords? #f] @
- [#:auto-login? #f] [#:default-user ""] [#:startx]
+ [#:auto-login? #f] [#:default-user ""] [#:startx] @
+ [#:theme @var{%default-slim-theme}] @
+ [#:theme-name @var{%default-slim-theme-name}]
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}.
@@ -3972,8 +3974,18 @@ turn starts the X display server with @var{startx}, a command as returned by
When @var{allow-empty-passwords?} is true, allow logins with an empty
password. When @var{auto-login?} is true, log in automatically as
@var{default-user}.
+
+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.
@end deffn
+@defvr {Scheme Variable} %default-theme
+@defvrx {Scheme Variable} %default-theme-name
+The G-Expression denoting the default SLiM theme and its name.
+@end defvr
+
@deffn {Monadic Procedure} xorg-start-command [#:guile] @
[#:drivers '()] [#:resolutions '()] [#:xorg-server @var{xorg-server}]
Return a derivation that builds a @var{guile} script to start the X server
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index e3506bf8bf..1f00d80042 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -17,6 +17,8 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu services xorg)
+ #:use-module (guix packages)
+ #:use-module (guix git-download)
#:use-module (gnu services)
#:use-module (gnu system linux) ; 'pam-service'
#:use-module ((gnu packages base) #:select (canonical-package))
@@ -35,6 +37,9 @@
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (xorg-start-command
+
+ %default-slim-theme
+ %default-slim-theme-name
slim-service))
;;; Commentary:
@@ -152,9 +157,35 @@ EndSection
(gexp->script "xinitrc" builder))
+
+;;;
+;;; SLiM log-in manager.
+;;;
+
+(define %artwork-repository
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://git.savannah.gnu.org/guix/guix-artwork.git")
+ (commit "71d77b1")))
+ (sha256
+ (base32
+ "03j0fwh6j5knzbfjj3cs0a30cssy706p18b8x7d1p91p29hlzjif"))))
+
+(define %default-slim-theme
+ ;; Theme based on work by Felipe López.
+ #~(string-append #$%artwork-repository "/slim"))
+
+(define %default-slim-theme-name
+ ;; This must be the name of the sub-directory in %DEFAULT-SLIM-THEME that
+ ;; contains the actual theme files.
+ "0.8")
+
(define* (slim-service #:key (slim slim)
(allow-empty-passwords? #t) auto-login?
(default-user "")
+ (theme %default-slim-theme)
+ (theme-name %default-slim-theme-name)
(xauth xauth) (dmd dmd) (bash bash)
startx)
"Return a service that spawns the SLiM graphical login manager, which in
@@ -163,7 +194,13 @@ turn starts the X display server with @var{startx}, a command as returned by
When @var{allow-empty-passwords?} is true, allow logins with an empty
password. When @var{auto-login?} is true, log in automatically as
-@var{default-user}."
+@var{default-user}.
+
+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."
+
(define (slim.cfg)
(mlet %store-monad ((startx (or startx (xorg-start-command)))
(xinitrc (xinitrc)))
@@ -181,9 +218,13 @@ sessions wmaker,ratpoison
halt_cmd " dmd "/sbin/halt
reboot_cmd " dmd "/sbin/reboot
-" (if auto-login?
- (string-append "auto_login yes\ndefault_user " default-user)
- ""))))
+"
+(if auto-login?
+ (string-append "auto_login yes\ndefault_user " default-user "\n")
+ "")
+(if theme-name
+ (string-append "current_theme " theme-name "\n")
+ ""))))
(mlet %store-monad ((slim.cfg (slim.cfg)))
(return
@@ -200,7 +241,10 @@ reboot_cmd " dmd "/sbin/reboot
(fork+exec-command
(list (string-append #$slim "/bin/slim") "-nodaemon")
#:environment-variables
- (list (string-append "SLIM_CFGFILE=" #$slim.cfg)))))
+ (list (string-append "SLIM_CFGFILE=" #$slim.cfg)
+ #$@(if theme
+ (list #~(string-append "SLIM_THEMESDIR=" #$theme))
+ #~())))))
(stop #~(make-kill-destructor))
(respawn? #t)
(pam-services