summary refs log tree commit diff
path: root/modules
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2010-08-08 14:05:32 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2010-08-08 14:05:32 +0000
commit6e118cd66bad40207e1a85b5c703cb27bbdc655a (patch)
tree2c6c3b5b1f1e376dc5a23aecc5c452cc727ee7e5 /modules
parent87dcdc05feed09169250ad51832ee76acd686770 (diff)
downloadnixlib-6e118cd66bad40207e1a85b5c703cb27bbdc655a.tar
nixlib-6e118cd66bad40207e1a85b5c703cb27bbdc655a.tar.gz
nixlib-6e118cd66bad40207e1a85b5c703cb27bbdc655a.tar.bz2
nixlib-6e118cd66bad40207e1a85b5c703cb27bbdc655a.tar.lz
nixlib-6e118cd66bad40207e1a85b5c703cb27bbdc655a.tar.xz
nixlib-6e118cd66bad40207e1a85b5c703cb27bbdc655a.tar.zst
nixlib-6e118cd66bad40207e1a85b5c703cb27bbdc655a.zip
* Change the default desktop manager from "xterm" to the last imported
  and enabled desktop manager (e.g. "kde" if KDE is enabled, and
  "xterm" if nothing is explicitly enabled).  This means that you
  don't have to write

    services.xserver.desktopManager.default = "kde4";

  anymore in addition to

    services.xserver.desktopManager.kde4.enable = true;

  to make KDE the default desktop environment.
  
* Remove the "none + none" session type.

* Remove the "+ none" string at the end of session types.  I.e. now
  it's "kde", not "kde + none".

* In kdm, add coreutils to its SystemPath so that it can remove the
  temporary directories in /tmp that it creates.

svn path=/nixos/trunk/; revision=23036
Diffstat (limited to 'modules')
-rw-r--r--modules/module-list.nix4
-rw-r--r--modules/services/x11/desktop-managers/default.nix38
-rw-r--r--modules/services/x11/display-managers/default.nix6
-rw-r--r--modules/services/x11/display-managers/kdm.nix2
4 files changed, 25 insertions, 25 deletions
diff --git a/modules/module-list.nix b/modules/module-list.nix
index 537e61814690..f0a17bcd8705 100644
--- a/modules/module-list.nix
+++ b/modules/module-list.nix
@@ -117,10 +117,6 @@
   ./services/web-servers/jboss.nix
   ./services/web-servers/tomcat.nix
   ./services/x11/desktop-managers/default.nix
-  ./services/x11/desktop-managers/gnome.nix
-  ./services/x11/desktop-managers/kde4.nix
-  ./services/x11/desktop-managers/none.nix
-  ./services/x11/desktop-managers/xterm.nix
   ./services/x11/display-managers/default.nix
   ./services/x11/display-managers/auto.nix
   ./services/x11/display-managers/kdm.nix
diff --git a/modules/services/x11/desktop-managers/default.nix b/modules/services/x11/desktop-managers/default.nix
index 8afe14b743db..04fda6d22326 100644
--- a/modules/services/x11/desktop-managers/default.nix
+++ b/modules/services/x11/desktop-managers/default.nix
@@ -1,22 +1,23 @@
-{pkgs, config, ...}:
+{ config, pkgs, ... }:
+
+with pkgs.lib;
 
 let
-  inherit (pkgs.lib) mkOption mergeOneOption mkIf filter optionalString any;
+
   xcfg = config.services.xserver;
   cfg = xcfg.desktopManager;
 
   # Whether desktop manager `d' is capable of setting a background.
   # If it isn't, the `feh' program is used as a fallback.
   needBGCond = d: ! (d ? bgSupport && d.bgSupport);
+  
 in
 
 {
-  imports = [
-    ./kde4.nix
-    ./gnome.nix
-    ./xterm.nix
-    ./none.nix
-  ];
+  # Note: the order in which desktop manager modules are imported here
+  # determines the default: later modules (if enabled) are preferred.
+  # E.g., if KDE is enabled, it supersedes xterm.
+  imports = [ ./none.nix ./xterm.nix ./gnome.nix ./kde4.nix ];
 
   options = {
   
@@ -24,11 +25,11 @@ in
 
       session = mkOption {
         default = [];
-        example = [{
-          name = "kde";
-          bgSupport = true;
-          start = "...";
-        }];
+        example = singleton
+          { name = "kde";
+            bgSupport = true;
+            start = "...";
+          };
         description = "
           Internal option used to add some common line to desktop manager
           scripts before forwarding the value to the
@@ -48,16 +49,15 @@ in
         };
       };
 
-
       default = mkOption {
-        default = "xterm";
+        default = "";
         example = "none";
-        description = "
-          Default desktop manager loaded if none have been chosen.
-        ";
+        description = "Default desktop manager loaded if none have been chosen.";
         merge = mergeOneOption;
         apply = defaultDM:
-          if any (w: w.name == defaultDM) cfg.session.list then
+          if defaultDM == "" && cfg.session.list != [] then
+            (head cfg.session.list).name
+          else if any (w: w.name == defaultDM) cfg.session.list then
             defaultDM
           else
             throw "Default desktop manager ($(defaultDM)) not found.";
diff --git a/modules/services/x11/display-managers/default.nix b/modules/services/x11/display-managers/default.nix
index 197ba7631e9e..d2b01a61ba8e 100644
--- a/modules/services/x11/display-managers/default.nix
+++ b/modules/services/x11/display-managers/default.nix
@@ -23,7 +23,7 @@ let
 
       # The first argument of this script is the session type.
       sessionType="$1"
-      if test "$sessionType" = default; then sessionType=""; fi
+      if [ "$sessionType" = default ]; then sessionType=""; fi
 
       ${optionalString (!cfg.displayManager.job.logsXsession) ''
         exec > ~/.xsession-errors 2>&1
@@ -180,7 +180,9 @@ in
         apply = list: rec {
           wm = filter (s: s.manage == "window") list;
           dm = filter (s: s.manage == "desktop") list;
-          names = concatMap (d: map (w: d.name + " + " + w.name) wm) dm;
+          names = flip concatMap dm
+            (d: map (w: d.name + optionalString (w.name != "none") (" + " + w.name))
+              (filter (w: d.name != "none" || w.name != "none") wm));
           desktops = mkDesktops names;
           script = xsession wm dm;
         };
diff --git a/modules/services/x11/display-managers/kdm.nix b/modules/services/x11/display-managers/kdm.nix
index 74b430e298c7..7dd979376d64 100644
--- a/modules/services/x11/display-managers/kdm.nix
+++ b/modules/services/x11/display-managers/kdm.nix
@@ -26,6 +26,8 @@ let
 
       [X-:*-Core]
       ServerCmd=${dmcfg.xserverBin} ${dmcfg.xserverArgs}
+      # KDM calls `rm' somewhere to clean up some temporary directory.
+      SystemPath=${pkgs.coreutils}/bin
       # The default timeout (15) is too short in a heavily loaded boot process.
       ServerTimeout=60
       # Needed to prevent the X server from dying on logout and not coming back: