diff --git a/system/options.nix b/system/options.nix
index 10f6032ad1a0..8987ab2969ae 100644
--- a/system/options.nix
+++ b/system/options.nix
@@ -481,6 +481,17 @@
}
+ {
+ name = ["services" "xserver" "windowManager"];
+ default = "metacity";
+ description = "
+ This option selects the window manager. Available values are
+ twm (extremely primitive),
+ metacity, and compiz.
+ ";
+ }
+
+
{
name = ["services" "httpd" "enable"];
default = false;
diff --git a/system/upstart.nix b/system/upstart.nix
index eea9b26b3b9f..29c55362b15d 100644
--- a/system/upstart.nix
+++ b/system/upstart.nix
@@ -120,6 +120,7 @@ import ../upstart-jobs/gather.nix {
(import ../upstart-jobs/xserver.nix {
inherit config;
inherit (pkgs) stdenv writeText lib xterm slim xorg mesa;
+ inherit (pkgs.gnome) metacity;
fontDirectories = import ./fonts.nix {inherit pkgs;};
})
diff --git a/upstart-jobs/xserver.nix b/upstart-jobs/xserver.nix
index d5270c0273da..b1743cecf935 100644
--- a/upstart-jobs/xserver.nix
+++ b/upstart-jobs/xserver.nix
@@ -1,4 +1,4 @@
-{ stdenv, writeText, lib, xorg, mesa, xterm, slim
+{ stdenv, writeText, lib, xorg, mesa, xterm, slim, metacity
, config
@@ -24,6 +24,8 @@ let
resolutions = map (res: "\"${toString res.x}x${toString res.y}\"") (getCfg "resolutions");
+ windowManager = getCfg "windowManager";
+
modules = [
xorg.xorgserver
@@ -63,7 +65,11 @@ let
clientScript = writeText "xclient" "
+ ${if windowManager == "twm" then "
${xorg.twm}/bin/twm &
+ " else if windowManager == "metacity" then "
+ ${metacity}/bin/metacity &
+ " else abort ("unknown window manager "+ windowManager)}
${xterm}/bin/xterm -ls
";