about summary refs log tree commit diff
path: root/pkgs/applications/window-managers
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/window-managers')
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/bcop/0.7.8.nix34
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/ccsm-simple/0.7.8.nix29
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/ccsm/0.7.8.nix29
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.7.8.nix23
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/config-backend/0.7.8.nix24
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/default.nix15
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/extra/0.7.8.nix32
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix10
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.7.8.nix23
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/main/0.7.8.nix29
-rw-r--r--pkgs/applications/window-managers/compiz/0.8.0.nix44
-rw-r--r--pkgs/applications/window-managers/compiz/bcop.nix17
-rw-r--r--pkgs/applications/window-managers/compiz/ccsm.nix31
-rw-r--r--pkgs/applications/window-managers/compiz/config-python.nix20
-rw-r--r--pkgs/applications/window-managers/compiz/core.nix37
-rw-r--r--pkgs/applications/window-managers/compiz/extra.nix17
-rw-r--r--pkgs/applications/window-managers/compiz/libcompizconfig.nix22
-rw-r--r--pkgs/applications/window-managers/compiz/plugindir-core.patch39
-rw-r--r--pkgs/applications/window-managers/compiz/plugindir-libcompizconfig.patch39
-rw-r--r--pkgs/applications/window-managers/compiz/plugins-extra.nix30
-rw-r--r--pkgs/applications/window-managers/compiz/plugins-main.nix22
-rw-r--r--pkgs/applications/window-managers/compiz/wallpaper-maxpect.patch58
22 files changed, 315 insertions, 309 deletions
diff --git a/pkgs/applications/window-managers/compiz-fusion/bcop/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/bcop/0.7.8.nix
deleted file mode 100644
index 07ba60cd8333..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/bcop/0.7.8.nix
+++ /dev/null
@@ -1,34 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/compiz-bcop-0.7.8.tar.bz2;
-		sha256 ="1rs5r5b6rl39vlw68i8bwm5izs5dm666kygmg1c8dy2dab0xsnkq";
-	};
-		buildInputs = (import ../general-dependencies.nix args);
-		propagatedBuildInputs = [getopt libxslt];
-		configureFlags = [];
-	} ;
-	in with localDefs;
-let 
-	fixPkgconfig = fullDepEntry ("
-		ensureDir \$out/lib
-		ln -fs \$out/share/pkgconfig \$out/lib/pkgconfig
-	") [minInit doMakeInstall defEnsureDir];
-	fixInterpreter = fullDepEntry ("
-		sed -e 's@^#!/bin/bash@#! ${stdenv.bash}/bin/bash@' -i \$out/bin/bcop
-	") [minInit doMakeInstall];
-in
-stdenv.mkDerivation rec {
-	name = "compiz-bcop-"+version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [doAutotools doConfigure doMakeInstall fixPkgconfig fixInterpreter doForceShare 
-			doPropagate]);
-	inherit propagatedBuildInputs;
-	meta = {
-		description = "
-	Compiz BCOP.
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/ccsm-simple/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/ccsm-simple/0.7.8.nix
deleted file mode 100644
index d739b54a5341..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/ccsm-simple/0.7.8.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/simple-ccsm-0.7.8.tar.bz2;
-		sha256 ="0djdzz1m9nvwzxfaywdm90bi816nig2ybfynf48394a5hpsng3l9";
-	};
-		buildInputs = (import ../general-dependencies.nix args) ++
-			[libcompizconfig bcop compizConfigPython python gettext pygtk 
-			pycairo configBackendGConf];
-		configureFlags = [];
-		wrappedEnv = [
-			"PYTHONPATH" "$(toPythonPath \$out)"
-			"PYTHONPATH" "\$PYTHONPATH"
-			"PYTHONPATH" "$(toPythonPath ${pygtk})/gtk-2.0"
-		];
-	} ;
-	in with localDefs;
-stdenv.mkDerivation rec {
-	name = "compizconfig-settings-"+args.version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [installPythonPackage (doWrap "\$out/bin/simple-ccsm")]);
-	meta = {
-		description = "
-	Compiz Settings Manager (simplified)
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/ccsm/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/ccsm/0.7.8.nix
deleted file mode 100644
index 385819afd4c3..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/ccsm/0.7.8.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/ccsm-0.7.8.tar.bz2;
-		sha256 ="0s8difywj0ghc8c5xjxihfp8qhlhv5kyh00c2br1jh2ap5rrdfgc";
-	};
-		buildInputs = (import ../general-dependencies.nix args) ++
-			[libcompizconfig bcop compizConfigPython python gettext pygtk 
-			pycairo configBackendGConf];
-		configureFlags = [];
-		wrappedEnv = [
-			"PYTHONPATH" "$(toPythonPath \$out)"
-			"PYTHONPATH" "\$PYTHONPATH"
-			"PYTHONPATH" "$(toPythonPath ${pygtk})/gtk-2.0"
-		];
-	} ;
-	in with localDefs;
-stdenv.mkDerivation rec {
-	name = "compizconfig-settings-"+args.version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [installPythonPackage (doWrap "\$out/bin/ccsm")]);
-	meta = {
-		description = "
-	Compiz Settings Manager
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.7.8.nix
deleted file mode 100644
index d92349e238b2..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.7.8.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/compizconfig-python-0.7.8.tar.bz2;
-		sha256 ="13g8vpgkimrbp19pd475ijiwbqx3zin0nzq8636l71yaqb0kjfjn";
-	};
-		buildInputs = (import ../general-dependencies.nix args) ++
-			[libcompizconfig bcop python pyrex configBackendGConf];
-		configureFlags = [];
-	} ;
-	in with localDefs;
-stdenv.mkDerivation rec {
-	name = "compizconfig-python-"+args.version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare]);
-	meta = {
-		description = "
-	Compiz configuration - Python part.
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/config-backend/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/config-backend/0.7.8.nix
deleted file mode 100644
index f6f1f1545b03..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/config-backend/0.7.8.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/compizconfig-backend-gconf-0.7.8.tar.bz2;
-		sha256 ="18bcfx3c2ipj3spfr8dg07h98pw77jh28w91w6n2fd5ffr6ja9q5";
-	};
-		buildInputs = (import ../general-dependencies.nix args) ++
-			[bcop libcompizconfig];
-		configureFlags = [];
-		forceShare = ["man" "doc" "info" "lib/compizconfig"];
-	} ;
-	in with localDefs;
-stdenv.mkDerivation rec {
-	name = "compizconfig-backend-GConf-"+version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare doPropagate]);
-	meta = {
-		description = "
-	Compiz configuration backend (GConf).
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/default.nix b/pkgs/applications/window-managers/compiz-fusion/default.nix
deleted file mode 100644
index bfd0810facf0..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/default.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-args : with args;
-rec
-{
-        selectVersion = dir: import (dir + "/${args.version}.nix");
-	bcop = selectVersion ./bcop args;
-	libcompizconfig = selectVersion ./libcompizconfig (args // {inherit bcop;});
-	configBackendGConf = selectVersion ./config-backend (args // {inherit bcop libcompizconfig;});
-	compizConfigPython = selectVersion ./compizconfig-python (args // {inherit libcompizconfig 
-		bcop pyrex configBackendGConf;});
-	ccsm = selectVersion ./ccsm (args // {inherit libcompizconfig bcop compizConfigPython configBackendGConf;});
-	pluginsMain = selectVersion ./main (args //{inherit bcop ;});
-	pluginsExtra = selectVersion ./extra (args //{inherit bcop pluginsMain;});
-	compizManager = (import ./compiz-manager/0.6.0.nix) (args // {inherit bcop ccsm;});
-	ccsmSimple = selectVersion ./ccsm-simple (args // {inherit libcompizconfig bcop compizConfigPython configBackendGConf;});
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/extra/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/extra/0.7.8.nix
deleted file mode 100644
index 7ea173e15611..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/extra/0.7.8.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/compiz-fusion-plugins-extra-0.7.8.tar.bz2;
-		sha256 ="0hdnabq1bxln5cf6k9532iszj5qbhwkyl3b5d1gwfr80i01qxzy9";
-	};
-		buildInputs = (import ../general-dependencies.nix args)++
-		[bcop libjpeg gettext pluginsMain];
-		configureFlags = [];
-	} ;
-	in with localDefs;
-let
-	sharePlugins = fullDepEntry ("
-		ensureDir \$out/share/compiz-plugins
-		ln -vsf \$out/lib/compiz \$out/share/compiz-plugins
-	") [minInit doMakeInstall defEnsureDir];
-	fixIncludes = fullDepEntry (''
-		export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${pluginsMain}/include/compiz"
-	'') [minInit doUnpack];
-in
-stdenv.mkDerivation rec {
-	name = "compiz-fusion-plugins-extra-"+version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [fixIncludes doConfigure doMakeInstall sharePlugins doForceShare]);
-	meta = {
-		description = "
-	Extra Compiz Fusion plugins.
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix b/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix
deleted file mode 100644
index f83ae7d1c8bf..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Ubuntu dependencies
-build-essential libxcomposite-dev libpng12-dev libsm-dev libxrandr-dev libxdamage-dev libxinerama-dev libstartup-notification0-dev libgconf2-dev libgl1-mesa-dev libglu1-mesa-dev libmetacity-dev librsvg2-dev libdbus-1-dev libdbus-glib-1-dev libgnome-desktop-dev libgnome-window-settings-dev gitweb curl autoconf automake automake1.9 libtool intltool libxslt1-dev xsltproc libwnck-dev
-*/
-args: with args;
-[
-	libpng 
-	GConf mesa metacity librsvg dbus.libs dbus_glib gnomedesktop git autoconf automake
-	libtool libxslt libwnck intltool perl perlXMLParser compiz pkgconfig libxml2
-	gettext 
-]
diff --git a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.7.8.nix
deleted file mode 100644
index 0ea38bd45202..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.7.8.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/libcompizconfig-0.7.8.tar.bz2;
-		sha256 ="1026icgzyjxnn68gbkd85n9p8pxlwbc3h0dqqvpqmr93q1nhdmjr";
-	};
-		buildInputs = (import ../general-dependencies.nix args)++
-			[bcop];
-		configureFlags = [];
-	} ;
-	in with localDefs;
-stdenv.mkDerivation rec {
-	name = "libcompizconfig-"+version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [doIntltool doAutotools doConfigure doMakeInstall doForceShare]);
-	meta = {
-		description = "
-	Compiz configuration backend library.
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz-fusion/main/0.7.8.nix b/pkgs/applications/window-managers/compiz-fusion/main/0.7.8.nix
deleted file mode 100644
index fd4bb896c0ce..000000000000
--- a/pkgs/applications/window-managers/compiz-fusion/main/0.7.8.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-args : with args;
-	let localDefs = builderDefs.passthru.function {
-		src = /* put a fetchurl here */
-	fetchurl {
-		url = http://releases.compiz-fusion.org/0.7.8/compiz-fusion-plugins-main-0.7.8.tar.bz2;
-		sha256 ="0lrvqi8kc8m6yap8pqbdg0wksckd3v3rp3k48q82pyvcwhaaf817";
-	};
-		buildInputs = (import ../general-dependencies.nix args)++
-		[bcop libjpeg gettext];
-		configureFlags = [];
-	} ;
-	in with localDefs;
-let
-	sharePlugins = fullDepEntry ("
-		ensureDir \$out/share/compiz-plugins
-		ln -vsf \$out/lib/compiz \$out/share/compiz-plugins
-	") [minInit doMakeInstall defEnsureDir];
-in
-stdenv.mkDerivation rec {
-	name = "compiz-fusion-plugins-main-"+version;
-	builder = writeScript (name + "-builder")
-		(textClosure localDefs [doConfigure doMakeInstall sharePlugins doForceShare]);
-	meta = {
-		description = "
-	Main Compiz Fusion plugins.
-";
-		inherit src;
-	};
-}
diff --git a/pkgs/applications/window-managers/compiz/0.8.0.nix b/pkgs/applications/window-managers/compiz/0.8.0.nix
deleted file mode 100644
index 40215b2b5495..000000000000
--- a/pkgs/applications/window-managers/compiz/0.8.0.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-args : with args;
-rec {
-  src = fetchurl {
-      url = "http://releases.compiz-fusion.org/core/compiz-0.8.0.tar.gz";
-      sha256 = "0xhyilfz2cfbdwni774b54171addjqw7hda6j6snzxb1igny7iry";
-    };
-
-  buildInputs = [
-    pkgconfig gtk libwnck GConf libgnome
-    libgnomeui metacity gnomegtk glib pango libglade libgtkhtml
-    gtkhtml libgnomecanvas libgnomeprint libgnomeprintui gnomepanel
-    librsvg fuse gettext intltool binutils
-  ];
-  propagatedBuildInputs = [
-    libpng libXcomposite libXfixes libXdamage libXrandr libXinerama
-    libICE libSM startupnotification mesa GConf perl perlXMLParser libxslt
-    dbus.libs dbus_glib compositeproto fixesproto damageproto randrproto
-    xineramaproto renderproto kbproto xextproto libXrender xproto libX11
-    libxcb
-  ];
-
-  postAll = fullDepEntry ("
-    for i in $out/bin/*; do
-     patchelf --set-rpath /var/run/opengl-driver/lib:$(patchelf --print-rpath $i) $i
-    done
-    ensureDir \$out/share/compiz-plugins/
-    ln -sfv \$out/lib/compiz \$out/share/compiz-plugins/
-  ") ["minInit" "doMakeInstall" "defEnsureDir"];
-
-  configureFlags = ["--enable-gtk" "--enable-fuse"
-          "--enable-annotate" "--enable-librsvg"] ++
-          (if args ? extraConfigureFlags then args.extraConfigureFlags else []);
-
-  /* doConfigure should be specified separately */
-  phaseNames = [ "doPatch" "doConfigure" "doMakeInstall" "doPropagate"
-			"doForceShare" "postAll" ];
-
-  name = "compiz-0.8.0";
-
-  meta = {
-          description = "Compiz window manager";
-          inherit src;
-  };
-}
diff --git a/pkgs/applications/window-managers/compiz/bcop.nix b/pkgs/applications/window-managers/compiz/bcop.nix
new file mode 100644
index 000000000000..254393d4c7fc
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/bcop.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchurl, pkgconfig, libxslt }:
+
+stdenv.mkDerivation rec {
+  name = "compiz-bcop-0.8.4";
+
+  src = fetchurl {
+    url = "http://releases.compiz.org/components/compiz-bcop/${name}.tar.bz2";
+    sha256 = "0kwcvalmx2aab7j3x7s0xqm102i3kr5gh1z8mfws9q4qkqdclnfk";
+  };
+
+  buildInputs = [ pkgconfig libxslt ];
+    
+  meta = {
+    homepage = http://www.compiz.org/;
+    description = "Code generator for Compiz plugins";
+  };
+}
diff --git a/pkgs/applications/window-managers/compiz/ccsm.nix b/pkgs/applications/window-managers/compiz/ccsm.nix
new file mode 100644
index 000000000000..0406a170d190
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/ccsm.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, makeWrapper, intltool, gtk
+, python, pygtk, pygobject, pycairo, compizconfig_python }:
+
+stdenv.mkDerivation rec {
+  name = "ccsm-0.8.4";
+
+  src = fetchurl {
+    url = "http://releases.compiz.org/components/ccsm/${name}.tar.bz2";
+    sha256 = "0vf16a2nmb0qwwxymvgl86nkfscj3n39jdw2q2p737pj5h1xmfa6";
+  };
+
+  buildInputs = [ makeWrapper python intltool gtk ];
+
+  buildPhase = "python setup.py build --prefix=$out";
+
+  pythonDeps = [ pygtk pygobject pycairo compizconfig_python ];
+
+  installPhase =
+    ''
+      python setup.py install --prefix=$out
+
+      wrapProgram $out/bin/ccsm --prefix PYTHONPATH ":" \
+          "$(toPythonPath "$pythonDeps $out")"
+    '';
+    
+  meta = {
+    homepage = http://www.compiz.org/;
+    description = "Compiz settings manager";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/compiz/config-python.nix b/pkgs/applications/window-managers/compiz/config-python.nix
new file mode 100644
index 000000000000..4de7fb41a488
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/config-python.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, pkgconfig, xlibs, libcompizconfig, glib
+, python, pyrex }:
+
+stdenv.mkDerivation rec {
+  name = "compizconfig-python-0.8.4";
+
+  src = fetchurl {
+    url = "http://releases.compiz.org/components/compizconfig-python/${name}.tar.bz2";
+    sha256 = "0nkgqxddjw324aymzcy5nx6ilhfbpk9rra4qbzrq3l39xqsswd37";
+  };
+
+  buildInputs = [ pkgconfig libcompizconfig glib python pyrex xlibs.xlibs ];
+
+  NIX_LDFLAGS = "-lcompizconfig";
+
+  meta = {
+    homepage = http://www.compiz.org/;
+    description = "Python interface to the Compiz configuration";
+  };
+}
diff --git a/pkgs/applications/window-managers/compiz/core.nix b/pkgs/applications/window-managers/compiz/core.nix
new file mode 100644
index 000000000000..ef5279613d09
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/core.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchurl, intltool, pkgconfig, xlibs, mesa, libxml2, libxslt
+, libstartup_notification, libpng, glib, gtk, gnome, dbus_glib, librsvg, bzip2 }:
+
+let version = "0.8.6"; in
+
+stdenv.mkDerivation {
+  name = "compiz-${version}";
+
+  src = fetchurl {
+    url = "http://releases.compiz.org/${version}/compiz-${version}.tar.bz2";
+    sha256 = "132gmdawjmrmvazm31h3r3wwq97h58hz17yyc9sa6q2nkfsnkpy4";
+  };
+
+  patches =
+    [ # Allow the path to the Compiz plugin library and metadata
+      # directories to be overriden through $COMPIZ_PLUGINDIR and
+      # $COMPIZ_METADATADIR, respectively.
+      ./plugindir-core.patch
+    ];
+
+  buildInputs =
+    [ intltool pkgconfig libpng glib
+      gtk gnome.libwnck gnome.GConf dbus_glib librsvg bzip2
+    ];
+
+  propagatedBuildInputs =
+    [ xlibs.xlibs xlibs.libXfixes xlibs.libXrandr xlibs.libXrender
+      xlibs.libXdamage xlibs.libXcomposite xlibs.libXinerama
+      libstartup_notification mesa libxml2 libxslt 
+    ];
+
+  meta = {
+    homepage = http://www.compiz.org/;
+    description = "A compositing window manager";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/compiz/extra.nix b/pkgs/applications/window-managers/compiz/extra.nix
deleted file mode 100644
index 70f4e5dd8c38..000000000000
--- a/pkgs/applications/window-managers/compiz/extra.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, compiz, perl, perlXMLParser, GConf, dbus, gtk
-}:
-
-stdenv.mkDerivation {
-  name = "compiz-extra-20070305";
-  src = fetchurl {
-    url = http://gandalfn.club.fr/ubuntu/compiz-extra/compiz-extra-latest.tar.bz2;
-    sha256 = "7fc7faafccfdf22dea7ac1de6629dcb55ec63d84fcb57a14559309cf284fa94f";
-  };
-  buildInputs = [
-    pkgconfig compiz perl perlXMLParser GConf dbus.libs gtk
-  ];
-  preBuild = "
-    makeFlagsArray=(moduledir=$out/lib/compiz)
-  ";
-  preConfigure = "touch m4/Makefile.in";
-}
diff --git a/pkgs/applications/window-managers/compiz/libcompizconfig.nix b/pkgs/applications/window-managers/compiz/libcompizconfig.nix
new file mode 100644
index 000000000000..51d459e7a366
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/libcompizconfig.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl,intltool, pkgconfig, xlibs, libxml2, libxslt, compiz }:
+
+stdenv.mkDerivation rec {
+  name = "libcompizconfig-0.8.4";
+
+  src = fetchurl {
+    url = "http://releases.compiz.org/components/libcompizconfig/${name}.tar.bz2";
+    sha256 = "0adhl2nc2zrswl5n4a8ipymffq6yjwnxgpkv6rsk7sqvby9kwca1";
+  };
+
+  patches =
+    [ # See ./core.nix.
+      ./plugindir-libcompizconfig.patch
+    ];
+
+  buildInputs = [ pkgconfig intltool xlibs.libX11 compiz libxml2 libxslt ];
+
+  meta = {
+    homepage = http://www.compiz.org/;
+    description = "Compiz configuration library";
+  };
+}
diff --git a/pkgs/applications/window-managers/compiz/plugindir-core.patch b/pkgs/applications/window-managers/compiz/plugindir-core.patch
new file mode 100644
index 000000000000..5a242e66088f
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/plugindir-core.patch
@@ -0,0 +1,39 @@
+diff -ru -x '*~' compiz-0.8.6-orig/src/metadata.c compiz-0.8.6/src/metadata.c
+--- compiz-0.8.6-orig/src/metadata.c	2010-03-28 14:15:35.000000000 +0200
++++ compiz-0.8.6/src/metadata.c	2010-10-20 00:22:47.000000000 +0200
+@@ -146,7 +146,7 @@
+ compAddMetadataFromFile (CompMetadata *metadata,
+ 			 const char   *file)
+ {
+-    char *home;
++    char *home, *metadatadir;
+     Bool status = FALSE;
+ 
+     home = getenv ("HOME");
+@@ -163,7 +163,10 @@
+ 	}
+     }
+ 
+-    status |= addMetadataFromFilename (metadata, METADATADIR, file);
++    metadatadir = getenv("COMPIZ_METADATADIR");
++    if (!metadatadir) metadatadir = METADATADIR;
++
++    status |= addMetadataFromFilename (metadata, metadatadir, file);
+     if (!status)
+     {
+ 	compLogMessage ("core", CompLogLevelWarn,
+diff -ru -x '*~' compiz-0.8.6-orig/src/plugin.c compiz-0.8.6/src/plugin.c
+--- compiz-0.8.6-orig/src/plugin.c	2010-03-28 14:15:35.000000000 +0200
++++ compiz-0.8.6/src/plugin.c	2010-10-20 00:25:16.000000000 +0200
+@@ -579,7 +579,10 @@
+ 	}
+     }
+ 
+-    status = (*loaderLoadPlugin) (p, PLUGINDIR, name);
++    plugindir = getenv("COMPIZ_PLUGINDIR");
++    if (!plugindir) plugindir = PLUGINDIR;
++
++    status = (*loaderLoadPlugin) (p, plugindir, name);
+     if (status)
+ 	return p;
+ 
diff --git a/pkgs/applications/window-managers/compiz/plugindir-libcompizconfig.patch b/pkgs/applications/window-managers/compiz/plugindir-libcompizconfig.patch
new file mode 100644
index 000000000000..207816a3c518
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/plugindir-libcompizconfig.patch
@@ -0,0 +1,39 @@
+diff -ru -x '*~' libcompizconfig-0.8.4-orig/src/compiz.cpp libcompizconfig-0.8.4/src/compiz.cpp
+--- libcompizconfig-0.8.4-orig/src/compiz.cpp	2009-10-14 02:36:04.000000000 +0200
++++ libcompizconfig-0.8.4/src/compiz.cpp	2010-10-20 00:35:28.000000000 +0200
+@@ -3004,7 +3004,10 @@
+ 	    }
+ 	}
+ 
+-	loadPluginFromXMLFile (context, xmlName, (char *) METADATADIR);
++        char *metadatadir = getenv("COMPIZ_METADATADIR");
++        if (!metadatadir) metadatadir = METADATADIR;
++
++	loadPluginFromXMLFile (context, xmlName, metadatadir);
+ 	free (xmlName);
+     }
+ 
+@@ -3031,7 +3034,10 @@
+ 	    free (homeplugins);
+ 	}
+     }
+-    loadPluginsFromXMLFiles (context, (char *)METADATADIR);
++    
++    char *metadatadir = getenv("COMPIZ_METADATADIR");
++    if (!metadatadir) metadatadir = METADATADIR;
++    loadPluginsFromXMLFiles (context, metadatadir);
+ 
+     if (home && strlen (home))
+     {
+@@ -3043,7 +3049,10 @@
+ 	    free (homeplugins);
+ 	}
+     }
+-    loadPluginsFromName (context, (char *)PLUGINDIR);
++
++    char *plugindir = getenv("COMPIZ_PLUGINDIR");
++    if (!plugindir) plugindir = PLUGINDIR;
++    loadPluginsFromName (context, plugindir);
+ }
+ 
+ static void
diff --git a/pkgs/applications/window-managers/compiz/plugins-extra.nix b/pkgs/applications/window-managers/compiz/plugins-extra.nix
new file mode 100644
index 000000000000..8852ebd474ed
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/plugins-extra.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, intltool, pkgconfig, compiz, compiz_bcop
+, compiz_plugins_main, getopt, libjpeg, cairo, pango, gnome }:
+
+let version = "0.8.6"; in
+
+stdenv.mkDerivation rec {
+  name = "compiz-plugins-extra-${version}";
+
+  src = fetchurl {
+    url = "http://releases.compiz.org/${version}/${name}.tar.bz2";
+    sha256 = "1qbxfi332bbadm0ah48frnrl9dkczl111s5a91a0cqz5v7nbw4g1";
+  };
+
+  patches =
+    [ # Support scaling wallpapers to the maximum size while still
+      # respecting the aspect ratio.
+      ./wallpaper-maxpect.patch
+    ];
+
+  NIX_CFLAGS_COMPILE = "-I${compiz_plugins_main}/include/compiz";
+
+  buildInputs =
+    [ intltool pkgconfig compiz compiz_bcop compiz_plugins_main getopt gnome.GConf ];
+
+  meta = {
+    homepage = http://www.compiz.org/;
+    description = "Extra plugins for Compiz";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/compiz/plugins-main.nix b/pkgs/applications/window-managers/compiz/plugins-main.nix
new file mode 100644
index 000000000000..ea1c01e7414b
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/plugins-main.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, intltool, pkgconfig, compiz, compiz_bcop
+, getopt, libjpeg, cairo, pango, gnome }:
+
+let version = "0.8.6"; in
+
+stdenv.mkDerivation rec {
+  name = "compiz-plugins-main-${version}";
+
+  src = fetchurl {
+    url = "http://releases.compiz.org/${version}/${name}.tar.bz2";
+    sha256 = "1nfn3r4q7wvzfkdh9hrm5zc816xa8cs2s7cliz0fmnqikcs4zp36";
+  };
+
+  buildInputs =
+    [ intltool pkgconfig compiz compiz_bcop getopt libjpeg cairo pango gnome.GConf ];
+
+  meta = {
+    homepage = http://www.compiz.org/;
+    description = "Main plugins for Compiz";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/applications/window-managers/compiz/wallpaper-maxpect.patch b/pkgs/applications/window-managers/compiz/wallpaper-maxpect.patch
new file mode 100644
index 000000000000..8130dff1dba4
--- /dev/null
+++ b/pkgs/applications/window-managers/compiz/wallpaper-maxpect.patch
@@ -0,0 +1,58 @@
+diff -x '*~' -ru compiz-plugins-extra-0.8.6-orig/metadata/wallpaper.xml.in compiz-plugins-extra-0.8.6/metadata/wallpaper.xml.in
+--- compiz-plugins-extra-0.8.6-orig/metadata/wallpaper.xml.in	2010-03-29 16:09:17.000000000 +0200
++++ compiz-plugins-extra-0.8.6/metadata/wallpaper.xml.in	2010-10-21 00:23:18.000000000 +0200
+@@ -24,7 +24,7 @@
+ 					<_long>Image position.</_long>
+ 					<type>int</type>
+ 					<min>0</min>
+-					<max>4</max>
++					<max>5</max>
+ 					<desc>
+ 						<value>0</value>
+ 						<_name>Scale and Crop</_name>
+@@ -45,6 +45,10 @@
+ 						<value>4</value>
+ 						<_name>Center Tiled</_name>
+ 					</desc>
++					<desc>
++						<value>5</value>
++						<_name>Centered Maxpect</_name>
++					</desc>
+ 				</option>
+ 				<option name="bg_fill_type" type="list">
+ 					<_short>Fill type</_short>
+diff -x '*~' -ru compiz-plugins-extra-0.8.6-orig/src/wallpaper/wallpaper.c compiz-plugins-extra-0.8.6/src/wallpaper/wallpaper.c
+--- compiz-plugins-extra-0.8.6-orig/src/wallpaper/wallpaper.c	2010-03-29 16:09:18.000000000 +0200
++++ compiz-plugins-extra-0.8.6/src/wallpaper/wallpaper.c	2010-10-21 01:09:10.000000000 +0200
+@@ -697,12 +697,12 @@
+ 	    tmpMatrix = back->imgTex.matrix;
+ 
+ 
+-	    if (back->imagePos == BgImagePosScaleAndCrop)
++	    if ((back->imagePos == BgImagePosScaleAndCrop) || (back->imagePos == BgImagePosCenteredMaxpect))
+ 	    {
+ 		s1 = (float) s->width / back->width;
+ 		s2 = (float) s->height / back->height;
+ 		
+-		s1 = MAX (s1, s2);
++		s1 = back->imagePos == BgImagePosScaleAndCrop ? MAX (s1, s2) : MIN (s1, s2);
+ 
+ 		tmpMatrix.xx /= s1;
+ 		tmpMatrix.yy /= s1;
+@@ -711,6 +711,16 @@
+ 		tmpMatrix.x0 -= x * tmpMatrix.xx;
+ 		y = (s->height - ((int)back->height * s1)) / 2.0;
+ 		tmpMatrix.y0 -= y * tmpMatrix.yy;
++
++                if (back->imagePos == BgImagePosCenteredMaxpect)
++                {
++                    reg = &tmpRegion;
++		
++                    tmpRegion.extents.x1 = MAX (0, x);
++                    tmpRegion.extents.y1 = MAX (0, y);
++                    tmpRegion.extents.x2 = MIN (s->width, x + ((int) back->width * s1));
++                    tmpRegion.extents.y2 = MIN (s->height, y + ((int) back->height * s1));
++                }
+ 	    }
+ 	    else if (back->imagePos == BgImagePosScaled)
+ 	    {