summary refs log tree commit diff
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