about summary refs log tree commit diff
path: root/pkgs/desktops/xfce
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/desktops/xfce')
-rw-r--r--pkgs/desktops/xfce/4_08.nix37
-rw-r--r--pkgs/desktops/xfce/4_10.nix35
-rw-r--r--pkgs/desktops/xfce/applications/gigolo.nix19
-rw-r--r--pkgs/desktops/xfce/applications/mousepad.nix18
-rw-r--r--pkgs/desktops/xfce/applications/ristretto.nix21
-rw-r--r--pkgs/desktops/xfce/applications/terminal.nix16
-rw-r--r--pkgs/desktops/xfce/applications/xfce4-mixer.nix35
-rw-r--r--pkgs/desktops/xfce/applications/xfce4-notifyd.nix21
-rw-r--r--pkgs/desktops/xfce/applications/xfce4-taskmanager.nix14
-rw-r--r--pkgs/desktops/xfce/art/xfce4-icon-theme.nix15
-rw-r--r--pkgs/desktops/xfce/common.nix72
-rw-r--r--pkgs/desktops/xfce/core/exo.nix16
-rw-r--r--pkgs/desktops/xfce/core/garcon.nix14
-rw-r--r--pkgs/desktops/xfce/core/gtk-xfce-engine.nix17
-rw-r--r--pkgs/desktops/xfce/core/libxfce4ui.nix28
-rw-r--r--pkgs/desktops/xfce/core/libxfce4util.nix14
-rw-r--r--pkgs/desktops/xfce/core/libxfcegui4.nix28
-rw-r--r--pkgs/desktops/xfce/core/thunar-volman.nix27
-rw-r--r--pkgs/desktops/xfce/core/thunar.nix25
-rw-r--r--pkgs/desktops/xfce/core/tumbler.nix14
-rw-r--r--pkgs/desktops/xfce/core/xfce-utils.nix20
-rw-r--r--pkgs/desktops/xfce/core/xfce4-appfinder.nix20
-rw-r--r--pkgs/desktops/xfce/core/xfce4-panel-datadir.patch24
-rw-r--r--pkgs/desktops/xfce/core/xfce4-panel.nix28
-rw-r--r--pkgs/desktops/xfce/core/xfce4-power-manager.nix21
-rw-r--r--pkgs/desktops/xfce/core/xfce4-session.nix26
-rw-r--r--pkgs/desktops/xfce/core/xfce4-settings.nix24
-rw-r--r--pkgs/desktops/xfce/core/xfconf.nix16
-rw-r--r--pkgs/desktops/xfce/core/xfdesktop.nix23
-rw-r--r--pkgs/desktops/xfce/core/xfwm4.nix24
-rw-r--r--pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix19
-rw-r--r--pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix18
-rw-r--r--pkgs/desktops/xfce/support/gvfs.nix22
-rw-r--r--pkgs/desktops/xfce/support/libgdu-only.patch144
-rw-r--r--pkgs/desktops/xfce/support/libgdu.nix34
35 files changed, 949 insertions, 0 deletions
diff --git a/pkgs/desktops/xfce/4_08.nix b/pkgs/desktops/xfce/4_08.nix
new file mode 100644
index 000000000000..d29e3ac51ef0
--- /dev/null
+++ b/pkgs/desktops/xfce/4_08.nix
@@ -0,0 +1,37 @@
+{ pkgs, newScope }: let
+
+common = (import ./common.nix) { inherit pkgs newScope xfce_self; };
+callPackage = common.callPackage;
+
+xfce_self = common.xfce_common // rec { # the lines are very long but it seems better than the even-odd line approach
+
+  #### CORE
+
+  exo           = callPackage ./core/exo.nix                { v= "0.6.2"; h= "0f8zh5y057l7xffskjvky6k88hrnz6jyk35mvlfpmx26anlgd77l"; };
+  libxfce4ui    = callPackage ./core/libxfce4ui.nix         { v= "4.8.1"; h= "0mlrcr8rqmv047xrb2dbh7f4knsppb1anx2b05s015h6v8lyvjrr"; };
+  libxfce4util  = callPackage ./core/libxfce4util.nix       { v= "4.8.2"; h= "05n8586h2fwkibfld5fm4ygx1w66jnbqqb3li0ardjvm2n24k885"; };
+  libxfcegui4   = callPackage ./core/libxfcegui4.nix        { v= "4.8.1"; h= "0hr4h6a9p6w3qw1976p8v9c9pwhd9zhrjlbaph0p7nyz7j1836ih"; };
+  thunar        = callPackage ./core/thunar.nix             { v= "1.2.3"; h= "19mczys6xr683r68g3s2njrrmnk1p73zypvwrhajw859c6nsjsp6"; };
+  xfce4panel    = callPackage ./core/xfce4-panel.nix        { v= "4.8.6"; h= "00zdkg1jg4n2n109nxan8ji2m06r9mc4lnlrvb55xvj229m2dwb6"; };
+  xfce4session  = callPackage ./core/xfce4-session.nix      { v= "4.8.2"; h= "1l608kik98jxbjl73waf8515hzji06lr80qmky2qlnp0b6js5g1i"; };
+  xfce4settings = callPackage ./core/xfce4-settings.nix     { v= "4.8.3"; h= "0bmw0s6jp2ws4n0f3387zwsyv46b0w89m6r70yb7wrqy9r3wqy6q"; };
+  xfceutils     = callPackage ./core/xfce-utils.nix         { v= "4.8.3"; h= "09mr0amp2f632q9i3vykaa0x5nrfihfm9v5nxsx9vch8wvbp0l03"; };
+  xfconf        = callPackage ./core/xfconf.nix             { v= "4.8.1"; h= "1jwkb73xcgqfly449jwbn2afiyx50p150z60x19bicps75sp6q4q"; };
+  xfdesktop     = callPackage ./core/xfdesktop.nix          { v= "4.8.3"; h= "097lc9djmay0jyyl42jmvcfda75ndp265nzn0aa3hv795bsn1175"; };
+  xfwm4         = callPackage ./core/xfwm4.nix              { v= "4.8.3"; h= "0zi2g1d2jdgw5armlk9xjh4ykmydy266gdba86nmhy951gm8n3hb"; };
+
+  xfce4_appfinder = callPackage ./core/xfce4-appfinder.nix  { v= "4.8.0"; h= "0zy7i9x4qjchmyb8nfpb7m2ply5n2aq35p9wrhb8lpz4am1ihx7x"; };
+
+  #### APPLICATIONS
+
+  terminal      = null; # newer versions don't build with 4.8
+
+    # versions > 0.3* don't build with xfce-4.8.*
+  ristretto     = callPackage ./applications/ristretto.nix    { v= "0.3.7"; h= "19mzy159j4qhd7pd1b83gimxfdg3mwdab9lq9kk505d21r7iqc9b"; };
+
+  xfce4mixer    = callPackage ./applications/xfce4-mixer.nix  { v= "4.8.0"; h= "1aqgjxvck6hx26sk3n4n5avhv02vs523mfclcvjb3xnks3yli7wz"; };
+
+}; # xfce_self
+
+in xfce_self
+
diff --git a/pkgs/desktops/xfce/4_10.nix b/pkgs/desktops/xfce/4_10.nix
new file mode 100644
index 000000000000..3f846198e3f5
--- /dev/null
+++ b/pkgs/desktops/xfce/4_10.nix
@@ -0,0 +1,35 @@
+{ pkgs, newScope }: let
+
+common = (import ./common.nix) { inherit pkgs newScope xfce_self; };
+callPackage = common.callPackage;
+
+xfce_self = common.xfce_common // rec { # the lines are very long but it seems better than the even-odd line approach
+
+  #### CORE
+
+  exo             = callPackage ./core/exo.nix              { v= "0.10.2"; h= "1kknxiz703q4snmry65ajm26jwjslbgpzdal6bd090m3z25q51dk"; };
+  libxfce4ui      = callPackage ./core/libxfce4ui.nix       { v= "4.10.0"; h= "1qm31s6568cz4c8rl9fsfq0xmf7pldxm0ki62gx1cpybihlgmfd2"; };
+  libxfce4util    = callPackage ./core/libxfce4util.nix     { v= "4.10.0"; h= "13k0wwbbqvdmbj4xmk4nxdlgvrdgr5y6r3dk380mzfw053hzwy89"; };
+  libxfcegui4     = callPackage ./core/libxfcegui4.nix      { v= "4.10.0"; h= "0cs5im0ib0cmr1lhr5765yliqjfyxvk4kwy8h1l8bn3mj6bzk0ib"; };
+  thunar          = callPackage ./core/thunar.nix           { v= "1.6.2";  h= "11dx38rvkfbp91pxrprymxhimsm90gvizp277x9s5rwnwcm1ggbx"; };
+  xfce4panel      = callPackage ./core/xfce4-panel.nix      { v= "4.10.0"; h= "1f8903nx6ivzircl8d8s9zna4vjgfy0qhjk5d2x19g9bmycgj89k"; };
+  xfce4session    = callPackage ./core/xfce4-session.nix    { v= "4.10.0"; h= "1kj65jkjhd0ysf0yxsf88wzpyv6n8i8qgd3gb502hf1x9jksk2mv"; };
+  xfce4settings   = callPackage ./core/xfce4-settings.nix   { v= "4.10.0"; h= "0zppq747z9lrxyv5zrrvpalq7hb3gfhy9p7qbldisgv7m6dz0hq8"; };
+  xfceutils       = null; # removed in 4.10
+  xfconf          = callPackage ./core/xfconf.nix           { v= "4.10.0"; h= "0xh520z0qh0ib0ijgnyrgii9h5d4pc53n6mx1chhyzfc86j1jlhp"; };
+  xfdesktop       = callPackage ./core/xfdesktop.nix        { v= "4.10.0"; h= "0yrddj1lgk3xn4w340y89z7x2isks72ia36pka08kk2x8gpfcyl9"; };
+  xfwm4           = callPackage ./core/xfwm4.nix            { v= "4.10.0"; h= "170zzs7adj47srsi2cl723w9pl8k8awd7w1bpzxby7hj92zmf8s9"; };
+
+  xfce4_appfinder = callPackage ./core/xfce4-appfinder.nix  { v= "4.9.4";  h= "12lgrbd1n50w9n8xkpai98s2aw8vmjasrgypc57sp0x0qafsqaxq"; };
+
+  #### APPLICATIONS
+
+  ristretto     = callPackage ./applications/ristretto.nix    { v= "0.6.3";  h= "0y9d8w1plwp4vmxs44y8k8x15i0k0xln89k6jndhv6lf57g1cs1b"; };
+  terminal      = xfce4terminal; # it has changed its name
+  xfce4mixer    = callPackage ./applications/xfce4-mixer.nix  { v= "4.10.0"; h= "1pnsd00583l7p5d80rxbh58brzy3jnccwikbbbm730a33c08kid8"; };
+  xfce4terminal = callPackage ./applications/terminal.nix     { v= "0.6.1";  h= "1j6lpkq952mrl5p24y88f89wn9g0namvywhma639xxsswlkn8d31"; };
+
+};
+
+in xfce_self
+
diff --git a/pkgs/desktops/xfce/applications/gigolo.nix b/pkgs/desktops/xfce/applications/gigolo.nix
new file mode 100644
index 000000000000..94b6392e068d
--- /dev/null
+++ b/pkgs/desktops/xfce/applications/gigolo.nix
@@ -0,0 +1,19 @@
+{ h, v, stdenv, fetchXfce, python, gettext, intltool, pkgconfig, gtk, gvfs }:
+
+stdenv.mkDerivation rec {
+  name = "gigolo-${v}";
+
+  src = fetchXfce.app name h;
+
+  buildInputs = [ python gettext intltool gtk pkgconfig gvfs];
+
+  preConfigure = ''
+    sed -i "waf" -e "1 s^.*/env[ ]*python^#!${python}/bin/python^";
+  '';
+
+  meta = {
+    homepage = http://goodies.xfce.org/projects/applications/gigolo;
+    description = "A frontend to easily manage connections to remote filesystems";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/desktops/xfce/applications/mousepad.nix b/pkgs/desktops/xfce/applications/mousepad.nix
new file mode 100644
index 000000000000..3d5c14e84d45
--- /dev/null
+++ b/pkgs/desktops/xfce/applications/mousepad.nix
@@ -0,0 +1,18 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, libxfce4util, libxfcegui4
+, gtk, gtksourceview, dbus, dbus_glib }:
+
+stdenv.mkDerivation rec {
+  name = "mousepad-${v}";
+  src = fetchXfce.app name h;
+
+  buildInputs = [
+    pkgconfig intltool libxfce4util libxfcegui4
+    gtk gtksourceview dbus dbus_glib
+  ];
+
+  meta = {
+    homepage = http://www.xfce.org/projects/mousepad/;
+    description = "A simple text editor for Xfce";
+    license = "GPLv2+";
+  };
+}
diff --git a/pkgs/desktops/xfce/applications/ristretto.nix b/pkgs/desktops/xfce/applications/ristretto.nix
new file mode 100644
index 000000000000..bfe7932cdf3c
--- /dev/null
+++ b/pkgs/desktops/xfce/applications/ristretto.nix
@@ -0,0 +1,21 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, libexif, gtk
+, exo, dbus_glib, libxfce4util, libxfce4ui, xfconf }:
+
+stdenv.mkDerivation rec {
+  name = "ristretto-${v}";
+  src = fetchXfce.app name h;
+
+  buildInputs =
+    [ pkgconfig intltool libexif gtk dbus_glib exo libxfce4util
+      libxfce4ui xfconf
+    ];
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://goodies.xfce.org/projects/applications/ristretto;
+    description = "A fast and lightweight picture-viewer for the Xfce desktop environment";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/applications/terminal.nix b/pkgs/desktops/xfce/applications/terminal.nix
new file mode 100644
index 000000000000..f217995d0066
--- /dev/null
+++ b/pkgs/desktops/xfce/applications/terminal.nix
@@ -0,0 +1,16 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, ncurses, gtk, vte, dbus_glib
+, exo, libxfce4util, libxfce4ui
+}:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-terminal-${v}";
+  src = fetchXfce.app name h;
+
+  buildInputs = [ pkgconfig intltool exo gtk vte libxfce4util ncurses dbus_glib libxfce4ui ];
+
+  meta = {
+    homepage = http://www.xfce.org/projects/terminal;
+    description = "A modern terminal emulator primarily for the Xfce desktop environment";
+    license = "GPLv2+";
+  };
+}
diff --git a/pkgs/desktops/xfce/applications/xfce4-mixer.nix b/pkgs/desktops/xfce/applications/xfce4-mixer.nix
new file mode 100644
index 000000000000..1236d38f59eb
--- /dev/null
+++ b/pkgs/desktops/xfce/applications/xfce4-mixer.nix
@@ -0,0 +1,35 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, glib, gstreamer, gst_plugins_base, gtk
+, libxfce4util, libxfce4ui, xfce4panel, xfconf, libunique?null }:
+
+let
+  # The usual Gstreamer plugins package has a zillion dependencies
+  # that we don't need for a simple mixer, so build a minimal package.
+  gst_plugins_minimal = gst_plugins_base.override {
+    minimalDeps = true;
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  name = "xfce4-mixer-${v}";
+  src = fetchXfce.app name h;
+
+  buildInputs =
+    [ pkgconfig intltool glib gstreamer gst_plugins_minimal gtk
+      libxfce4util libxfce4ui xfce4panel xfconf libunique
+    ];
+
+  postInstall =
+    ''
+      mkdir -p $out/nix-support
+      echo ${gst_plugins_minimal} > $out/nix-support/propagated-user-env-packages
+    '';
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfce4-mixer; # referenced but inactive
+    description = "A volume control application for the Xfce desktop environment";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/applications/xfce4-notifyd.nix b/pkgs/desktops/xfce/applications/xfce4-notifyd.nix
new file mode 100644
index 000000000000..b7cd3b0e638a
--- /dev/null
+++ b/pkgs/desktops/xfce/applications/xfce4-notifyd.nix
@@ -0,0 +1,21 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool
+, gtk , libxfce4util, libxfce4ui, xfconf }:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-notifyd-${v}";
+  src = fetchXfce.app name h;
+
+  buildInputs = [ pkgconfig intltool gtk libxfce4util libxfce4ui xfconf ];
+
+  preFixup = ''
+    rm $out/share/icons/hicolor/icon-theme.cache
+    # to be able to run the daemon we need it in PATH
+    cp -l $out/lib/xfce4/notifyd/xfce4-notifyd $out/bin
+  '';
+
+  meta = {
+    homepage = http://goodies.xfce.org/projects/applications/xfce4-notifyd;
+    description = "Notification daemon for Xfce";
+    license = "GPLv2+";
+  };
+}
diff --git a/pkgs/desktops/xfce/applications/xfce4-taskmanager.nix b/pkgs/desktops/xfce/applications/xfce4-taskmanager.nix
new file mode 100644
index 000000000000..4653a678a991
--- /dev/null
+++ b/pkgs/desktops/xfce/applications/xfce4-taskmanager.nix
@@ -0,0 +1,14 @@
+{ stdenv, v, h, fetchXfce, intltool, pkgconfig, gtk, libwnck }:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-taskmanager-${v}";
+  src = fetchXfce.app name h;
+
+  buildInputs = [ intltool pkgconfig gtk libwnck ];
+
+  meta = {
+    homepage = http://goodies.xfce.org/projects/applications/xfce4-taskmanager;
+    description = "Easy to use task manager for XFCE";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/desktops/xfce/art/xfce4-icon-theme.nix b/pkgs/desktops/xfce/art/xfce4-icon-theme.nix
new file mode 100644
index 000000000000..dd170f8ebdbf
--- /dev/null
+++ b/pkgs/desktops/xfce/art/xfce4-icon-theme.nix
@@ -0,0 +1,15 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk }:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-icon-theme-${v}";
+  src = fetchXfce.art name h;
+
+  buildInputs = [ pkgconfig intltool gtk ];
+
+  meta = {
+    homepage = http://www.xfce.org/;
+    description = "Icons for Xfce";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/common.nix b/pkgs/desktops/xfce/common.nix
new file mode 100644
index 000000000000..8be4ac09e145
--- /dev/null
+++ b/pkgs/desktops/xfce/common.nix
@@ -0,0 +1,72 @@
+{ pkgs, newScope, xfce_self }: rec {
+
+  callPackage = newScope (deps // xfce_self);
+
+  deps = rec { # xfce-global dependency overrides should be here
+    inherit (pkgs.gnome) libglade libwnck vte gtksourceview;
+    inherit (pkgs.perlPackages) URI;
+
+    # The useful bits from ‘gnome-disk-utility’.
+    libgdu = callPackage ./support/libgdu.nix { };
+
+    # Gvfs is required by Thunar for the trash feature and for volume
+    # mounting.  Should use the one from Gnome, but I don't want to mess
+    # with the Gnome packages (or pull in a zillion Gnome dependencies).
+    gvfs = callPackage ./support/gvfs.nix { };
+
+    # intelligent fetcher for Xfce
+    fetchXfce = rec {
+      generic = prepend : name : hash :
+        let lib = pkgs.lib;
+            p = builtins.parseDrvName name;
+            versions = lib.splitString "." p.version;
+            ver_maj = lib.concatStrings (lib.intersperse "." (lib.take 2 versions));
+            name_low = lib.toLower p.name;
+        in pkgs.fetchurl {
+          url = "mirror://xfce/src/${prepend}/${name_low}/${ver_maj}/${name}.tar.bz2";
+          sha256 = hash;
+        };
+      core = generic "xfce";
+      app = generic "apps";
+      art = generic "art";
+    };
+  };
+
+  xfce_common = rec {
+
+    inherit (deps) gvfs; # used by NixOS
+
+    #### CORE
+
+    garcon  = callPackage ./core/garcon.nix { v= "0.2.0";   h= "0v7pkvxcayi86z4f173z5l7w270f3g369sa88z59w0y0p7ns7ph2"; };
+
+    # not used anymore TODO: really? Update to 2.99.2?
+    gtk_xfce_engine = callPackage ./core/gtk-xfce-engine.nix { };
+
+    # ToDo: segfaults after some work
+    tumbler = callPackage ./core/tumbler.nix  { v= "0.1.27"; h= "0s9qj99b81asmlqa823nzykq8g6p9azcp2niak67y9bp52wv6q2c"; };
+
+    xfce4_power_manager = callPackage ./core/xfce4-power-manager.nix  { v= "1.0.10"; h= "1w120k1sl4s459ijaxkqkba6g1p2sqrf9paljv05wj0wz12bpr40"; };
+
+
+    #### APPLICATIONS
+    #TODO: correct links; more stuff
+
+    xfce4notifyd      = callPackage ./applications/xfce4-notifyd.nix      { v= "0.2.2"; h= "0s4ilc36sl5k5mg5727rmqims1l3dy5pwg6dk93wyjqnqbgnhvmn"; };
+    gigolo            = callPackage ./applications/gigolo.nix             { v= "0.4.1"; h= "1y8p9bbv1a4qgbxl4vn6zbag3gb7gl8qj75cmhgrrw9zrvqbbww2"; };
+    xfce4taskmanager  = callPackage ./applications/xfce4-taskmanager.nix  { v= "1.0.0"; h= "1vm9gw7j4ngjlpdhnwdf7ifx6xrrn21011almx2vwidhk2f9zvy0"; };
+    mousepad          = callPackage ./applications/mousepad.nix           { v= "0.3.0"; h= "0v84zwhjv2xynvisn5vmp7dbxfj4l4258m82ks7hn3adk437bwhh"; };
+    thunar_volman     = callPackage ./core/thunar-volman.nix              { };
+
+    #### ART
+
+    xfce4icontheme  = callPackage ./art/xfce4-icon-theme.nix  { v= "4.4.3"; h= "1yk6rx3zr9grm4jwpjvqdkl13pisy7qn1wm5cqzmd2kbsn96cy6l"; };
+
+    #### PANEL PLUGINS
+
+    xfce4_systemload_plugin = callPackage ./panel-plugins/xfce4-systemload-plugin.nix { };
+    xfce4_cpufreq_plugin    = callPackage ./panel-plugins/xfce4-cpufreq-plugin.nix    { };
+
+  };
+}
+
diff --git a/pkgs/desktops/xfce/core/exo.nix b/pkgs/desktops/xfce/core/exo.nix
new file mode 100644
index 000000000000..03a0d5872b54
--- /dev/null
+++ b/pkgs/desktops/xfce/core/exo.nix
@@ -0,0 +1,16 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, URI, glib, gtk, libxfce4ui, libxfce4util }:
+
+stdenv.mkDerivation rec {
+  name = "exo-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs = [ pkgconfig intltool URI glib gtk libxfce4ui libxfce4util ];
+
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://www.xfce.org/projects/exo;
+    description = "Application library for the Xfce desktop environment";
+    license = "GPLv2+";
+  };
+}
diff --git a/pkgs/desktops/xfce/core/garcon.nix b/pkgs/desktops/xfce/core/garcon.nix
new file mode 100644
index 000000000000..d6480c54cc41
--- /dev/null
+++ b/pkgs/desktops/xfce/core/garcon.nix
@@ -0,0 +1,14 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, glib, libxfce4util }:
+
+stdenv.mkDerivation rec {
+  name = "garcon-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs = [ pkgconfig intltool glib libxfce4util ];
+
+  meta = {
+    homepage = http://www.xfce.org/;
+    description = "Xfce menu support library";
+    license = "GPLv2+";
+  };
+}
diff --git a/pkgs/desktops/xfce/core/gtk-xfce-engine.nix b/pkgs/desktops/xfce/core/gtk-xfce-engine.nix
new file mode 100644
index 000000000000..8bd6bc5bde25
--- /dev/null
+++ b/pkgs/desktops/xfce/core/gtk-xfce-engine.nix
@@ -0,0 +1,17 @@
+{ stdenv, fetchXfce, pkgconfig, intltool, gtk }:
+
+stdenv.mkDerivation rec {
+  name = "gtk-xfce-engine-3.0.1";
+  src = fetchXfce.core name "0vd0ly81540f9133abza56mlqqx1swp0j70ll8kf948sva0wy0zb";
+
+  #TODO: gtk3
+  buildInputs = [ pkgconfig intltool gtk ];
+
+  meta = {
+    homepage = http://www.xfce.org/;
+    description = "GTK+ theme engine for Xfce";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/libxfce4ui.nix b/pkgs/desktops/xfce/core/libxfce4ui.nix
new file mode 100644
index 000000000000..e9f6fe3a3f90
--- /dev/null
+++ b/pkgs/desktops/xfce/core/libxfce4ui.nix
@@ -0,0 +1,28 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk, libxfce4util, xfconf
+, libglade, libstartup_notification }:
+
+stdenv.mkDerivation rec {
+  name = "libxfce4ui-${v}";
+  src = fetchXfce.core name h;
+
+  #TODO: gladeui
+  # Install into our own prefix instead.
+  preConfigure =
+    ''
+      configureFlags="--with-libglade-module-path=$out/lib/libglade/2.0"
+    '';
+
+  buildInputs =
+    [ pkgconfig intltool gtk libxfce4util xfconf libglade
+      libstartup_notification
+    ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://www.xfce.org/projects/libxfce4;
+#TODO
+    description = "Basic GUI library for Xfce";
+    license = "LGPLv2+";
+  };
+}
diff --git a/pkgs/desktops/xfce/core/libxfce4util.nix b/pkgs/desktops/xfce/core/libxfce4util.nix
new file mode 100644
index 000000000000..6b16d890a3e0
--- /dev/null
+++ b/pkgs/desktops/xfce/core/libxfce4util.nix
@@ -0,0 +1,14 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, glib, intltool }:
+
+stdenv.mkDerivation rec {
+  name = "libxfce4util-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs = [ pkgconfig glib intltool ];
+
+  meta = {
+    homepage = http://www.xfce.org/projects/libxfce4;
+    description = "Basic utility non-GUI functions for Xfce";
+    license = "bsd";
+  };
+}
diff --git a/pkgs/desktops/xfce/core/libxfcegui4.nix b/pkgs/desktops/xfce/core/libxfcegui4.nix
new file mode 100644
index 000000000000..6fcc1c754c86
--- /dev/null
+++ b/pkgs/desktops/xfce/core/libxfcegui4.nix
@@ -0,0 +1,28 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk
+, libxfce4util, xfconf, libglade, libstartup_notification }:
+
+stdenv.mkDerivation rec {
+  name = "libxfcegui4-${v}";
+  src = fetchXfce.core name h;
+
+  #TODO: gladeui
+  # By default, libxfcegui4 tries to install into libglade's prefix.
+  # Install into our own prefix instead.
+  preConfigure =
+    ''
+      configureFlags="--with-libglade-module-path=$out/lib/libglade/2.0"
+    '';
+  #NOTE: missing keyboard library support is OK according to the mailing-list
+
+  buildInputs =
+    [ pkgconfig intltool gtk libxfce4util xfconf libglade
+      libstartup_notification
+    ];
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://www.xfce.org/;
+    description = "Basic GUI library for Xfce";
+    license = "LGPLv2+";
+  };
+}
diff --git a/pkgs/desktops/xfce/core/thunar-volman.nix b/pkgs/desktops/xfce/core/thunar-volman.nix
new file mode 100644
index 000000000000..92f4739b540a
--- /dev/null
+++ b/pkgs/desktops/xfce/core/thunar-volman.nix
@@ -0,0 +1,27 @@
+{ stdenv, fetchurl, pkgconfig, intltool, exo, gtk, libxfce4util, libxfce4ui
+, xfconf, udev, libnotify }:
+
+stdenv.mkDerivation rec {
+  name = "thunar-volman-0.6.0";
+
+  src = fetchurl {
+    url = "http://archive.xfce.org/src/xfce/thunar-volman/0.6/${name}.tar.bz2";
+    sha1 = "dcda936948623b342b290a78c294f71c038e832e";
+  };
+
+  buildInputs =
+    [ pkgconfig intltool exo gtk udev libxfce4ui libxfce4util
+      xfconf libnotify
+    ];
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://thunar.xfce.org/;
+    description = "Thunar extension for automatic management of removable drives and media";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/thunar.nix b/pkgs/desktops/xfce/core/thunar.nix
new file mode 100644
index 000000000000..8cd47d787c62
--- /dev/null
+++ b/pkgs/desktops/xfce/core/thunar.nix
@@ -0,0 +1,25 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, exo, gtk, libxfce4util
+, dbus_glib, libstartup_notification, libnotify, xfconf, xfce4panel, gamin, libexif, pcre }:
+
+stdenv.mkDerivation rec {
+  name = "Thunar-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs =
+    [ pkgconfig intltool exo gtk libxfce4util
+      dbus_glib libstartup_notification libnotify xfconf xfce4panel gamin libexif pcre
+    ];
+  # TODO: gudev, optionality
+
+  enableParallelBuilding = true;
+
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://thunar.xfce.org/;
+    description = "Xfce file manager";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/tumbler.nix b/pkgs/desktops/xfce/core/tumbler.nix
new file mode 100644
index 000000000000..c9bcb9aeb9af
--- /dev/null
+++ b/pkgs/desktops/xfce/core/tumbler.nix
@@ -0,0 +1,14 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, dbus_glib, gdk_pixbuf }:
+
+stdenv.mkDerivation rec {
+  name = "tumbler-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs = [ pkgconfig intltool dbus_glib gdk_pixbuf ];
+
+  meta = {
+    homepage = http://git.xfce.org/xfce/tumbler/;
+    description = "A D-Bus thumbnailer service";
+    license = "GPLv2";
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfce-utils.nix b/pkgs/desktops/xfce/core/xfce-utils.nix
new file mode 100644
index 000000000000..625780adb313
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfce-utils.nix
@@ -0,0 +1,20 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk, libxfce4util, libxfce4ui, dbus_glib }:
+
+stdenv.mkDerivation rec {
+  name = "xfce-utils-${v}";
+  src = fetchXfce.core name h;
+
+  configureFlags = "--with-xsession-prefix=$(out)/share/xsessions --with-vendor-info=NixOS.org";
+
+  buildInputs = [ pkgconfig intltool gtk libxfce4util libxfce4ui dbus_glib ];
+
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfce-utils;
+    description = "Utilities and scripts for Xfce";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfce4-appfinder.nix b/pkgs/desktops/xfce/core/xfce4-appfinder.nix
new file mode 100644
index 000000000000..b37cbd95b996
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfce4-appfinder.nix
@@ -0,0 +1,20 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, glib, gtk, libxfce4util
+, libxfce4ui, garcon, xfconf }:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-appfinder-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs =
+    [ pkgconfig intltool glib gtk libxfce4util libxfce4ui garcon xfconf ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://docs.xfce.org/xfce/xfce4-appfinder/;
+    description = "Xfce application finder, a tool to locate and launch programs on your system";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfce4-panel-datadir.patch b/pkgs/desktops/xfce/core/xfce4-panel-datadir.patch
new file mode 100644
index 000000000000..ed9df9ef36f3
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfce4-panel-datadir.patch
@@ -0,0 +1,24 @@
+diff --git a/panel/panel-module-factory.c b/panel/panel-module-factory.c
+index 529fe85..8c792b7 100644
+--- a/panel/panel-module-factory.c
++++ b/panel/panel-module-factory.c
+@@ -39,6 +39,7 @@
+ #include <panel/panel-module.h>
+ #include <panel/panel-module-factory.h>
+ 
++#define DATADIR "/run/current-system/sw/share/xfce4"
+ #define PANEL_PLUGINS_DATA_DIR     (DATADIR G_DIR_SEPARATOR_S "panel" G_DIR_SEPARATOR_S "plugins")
+ #define PANEL_PLUGINS_DATA_DIR_OLD (DATADIR G_DIR_SEPARATOR_S "panel-plugins")
+ 
+diff --git a/panel/panel-module.c b/panel/panel-module.c
+index ba39320..519440b 100644
+--- a/panel/panel-module.c
++++ b/panel/panel-module.c
+@@ -35,6 +35,7 @@
+ #include <panel/panel-plugin-external-wrapper.h>
+ #include <panel/panel-plugin-external-46.h>
+ 
++#define LIBDIR "/run/current-system/sw/lib/xfce4"
+ #define PANEL_PLUGINS_LIB_DIR (LIBDIR G_DIR_SEPARATOR_S "panel" G_DIR_SEPARATOR_S "plugins")
+ #define PANEL_PLUGINS_LIB_DIR_OLD (LIBDIR G_DIR_SEPARATOR_S "panel-plugins")
+ 
diff --git a/pkgs/desktops/xfce/core/xfce4-panel.nix b/pkgs/desktops/xfce/core/xfce4-panel.nix
new file mode 100644
index 000000000000..cfce1a57780a
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfce4-panel.nix
@@ -0,0 +1,28 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk, libxfce4util, libxfce4ui
+, libwnck, exo, garcon, xfconf, libstartup_notification }:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-panel-${v}";
+  src = fetchXfce.core name h;
+
+  patches = [ ./xfce4-panel-datadir.patch ];
+  patchFlags = "-p1";
+
+  buildInputs =
+    [ pkgconfig intltool gtk libxfce4util exo libwnck
+      garcon xfconf libstartup_notification
+    ];
+  propagatedBuildInputs = [ libxfce4ui ];
+
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfce4-panel;
+    description = "Xfce panel";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfce4-power-manager.nix b/pkgs/desktops/xfce/core/xfce4-power-manager.nix
new file mode 100644
index 000000000000..3928b43eb0ba
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfce4-power-manager.nix
@@ -0,0 +1,21 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk, dbus_glib, xfconf
+, libxfce4ui, libxfce4util, libnotify, xfce4panel }:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-power-manager-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs =
+    [ pkgconfig intltool gtk dbus_glib xfconf libxfce4ui libxfce4util
+      libnotify xfce4panel
+    ];
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://goodies.xfce.org/projects/applications/xfce4-power-manager;
+    description = "A power manager for the Xfce Desktop Environment";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfce4-session.nix b/pkgs/desktops/xfce/core/xfce4-session.nix
new file mode 100644
index 000000000000..00d3e6d27833
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfce4-session.nix
@@ -0,0 +1,26 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk, libxfce4util, libxfce4ui, xfce4panel
+, libwnck, dbus_glib, xfconf, libglade, xorg }:
+
+#TODO: gnome stuff: gconf (assistive?), keyring
+
+stdenv.mkDerivation rec {
+  name = "xfce4-session-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs =
+    [ pkgconfig intltool gtk libxfce4util libxfce4ui libwnck dbus_glib
+      xfconf xfce4panel libglade xorg.iceauth
+    ];
+
+  configureFlags = [ "--with-xsession-prefix=$$out" ];
+
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfce4-session;
+    description = "Session manager for Xfce";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfce4-settings.nix b/pkgs/desktops/xfce/core/xfce4-settings.nix
new file mode 100644
index 000000000000..c228e90bcaef
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfce4-settings.nix
@@ -0,0 +1,24 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, exo, gtk, libxfce4util, libxfce4ui
+, libglade, xfconf, xorg, libwnck, libnotify, libxklavier, garcon }:
+
+#TODO: optional packages
+stdenv.mkDerivation rec {
+  name = "xfce4-settings-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs =
+    [ pkgconfig intltool exo gtk libxfce4util libxfce4ui libglade
+      xfconf xorg.libXi xorg.libXcursor libwnck libnotify libxklavier garcon
+    #gtk libxfce4util libxfcegui4 libwnck dbus_glib
+      #xfconf libglade xorg.iceauth
+    ];
+  configureFlags = "--enable-pluggable-dialogs --enable-sound-settings";
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfce4-settings;
+    description = "Settings manager for Xfce";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfconf.nix b/pkgs/desktops/xfce/core/xfconf.nix
new file mode 100644
index 000000000000..7e7059bf3dc6
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfconf.nix
@@ -0,0 +1,16 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, glib, libxfce4util, dbus_glib }:
+
+stdenv.mkDerivation rec {
+  name = "xfconf-${v}";
+  src = fetchXfce.core name h;
+
+  #TODO: no perl bingings yet (ExtUtils::Depends, ExtUtils::PkgConfig, Glib)
+  buildInputs = [ pkgconfig intltool glib libxfce4util ];
+  propagatedBuildInputs = [ dbus_glib ];
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfconf;
+    description = "Simple client-server configuration storage and query system for Xfce";
+    license = "GPLv2";
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfdesktop.nix b/pkgs/desktops/xfce/core/xfdesktop.nix
new file mode 100644
index 000000000000..0a9bdecd738c
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfdesktop.nix
@@ -0,0 +1,23 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, intltool, gtk, libxfce4util, libxfce4ui
+, libwnck, xfconf, libglade, xfce4panel, thunar, exo, garcon, libnotify }:
+
+stdenv.mkDerivation rec {
+  name = "xfdesktop-${v}";
+  src = fetchXfce.core name h;
+
+  buildInputs =
+    [ pkgconfig intltool gtk libxfce4util libxfce4ui libwnck xfconf
+      libglade xfce4panel thunar exo garcon libnotify
+    ];
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfdesktop;
+    description = "Xfce desktop manager";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/core/xfwm4.nix b/pkgs/desktops/xfce/core/xfwm4.nix
new file mode 100644
index 000000000000..e30b83d4e27d
--- /dev/null
+++ b/pkgs/desktops/xfce/core/xfwm4.nix
@@ -0,0 +1,24 @@
+{ v, h, stdenv, fetchXfce, pkgconfig, gtk, intltool, libglade, libxfce4util
+, libxfce4ui, xfconf, libwnck, libstartup_notification, xorg }:
+
+stdenv.mkDerivation rec {
+  name = "xfwm4-${v}";
+  src = fetchXfce.core name h;
+
+  #TODO: kde systray, docs
+  buildInputs =
+    [ pkgconfig intltool gtk libglade libxfce4util libxfce4ui xfconf
+      libwnck libstartup_notification
+      xorg.libXcomposite xorg.libXfixes xorg.libXdamage
+    ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = http://www.xfce.org/projects/xfwm4;
+    description = "Window manager for Xfce";
+    license = "GPLv2+";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix b/pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix
new file mode 100644
index 000000000000..9fbeb8a76eab
--- /dev/null
+++ b/pkgs/desktops/xfce/panel-plugins/xfce4-cpufreq-plugin.nix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4panel, libxfce4ui, libxfcegui4, xfconf, gtk}:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-cpufreq-plugin-1.0.0";
+
+  src = fetchurl {
+    url = "http://archive.xfce.org/src/panel-plugins/xfce4-cpufreq-plugin/1.0/${name}.tar.bz2";
+    sha256 = "0q2lj8a25iq9w3dynh6qvsmh19y1v7i82g46yza6gvw7fjcrmcz1";
+  };
+
+  buildInputs = [ pkgconfig intltool libxfce4util libxfce4ui xfce4panel libxfcegui4 xfconf gtk ];
+  preFixup = "rm $out/share/icons/hicolor/icon-theme.cache";
+
+  meta = {
+    homepage = http://www.xfce.org/;
+    description = "CPU Freq load panel plugin for Xfce";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix b/pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix
new file mode 100644
index 000000000000..6d0f997500cd
--- /dev/null
+++ b/pkgs/desktops/xfce/panel-plugins/xfce4-systemload-plugin.nix
@@ -0,0 +1,18 @@
+{ stdenv, fetchurl, pkgconfig, intltool, libxfce4util, xfce4panel, libxfce4ui, gtk}:
+
+stdenv.mkDerivation rec {
+  name = "xfce4-systemload-plugin-1.1.1";
+  
+  src = fetchurl {
+    url = "http://archive.xfce.org/src/panel-plugins/xfce4-systemload-plugin/1.1/${name}.tar.bz2";
+    sha256 = "1bnrr30h6kgb37ixcq7frx2gvj2p99bpa1jyzppwjxp5x7xkxh8s";
+  };
+
+  buildInputs = [ pkgconfig intltool libxfce4util libxfce4ui xfce4panel gtk ];
+
+  meta = {
+    homepage = http://www.xfce.org/;
+    description = "System load panel plugin for Xfce";
+    platforms = stdenv.lib.platforms.linux;
+  };
+}
diff --git a/pkgs/desktops/xfce/support/gvfs.nix b/pkgs/desktops/xfce/support/gvfs.nix
new file mode 100644
index 000000000000..af70aea755af
--- /dev/null
+++ b/pkgs/desktops/xfce/support/gvfs.nix
@@ -0,0 +1,22 @@
+{ stdenv, fetchurl, pkgconfig, glib, dbus, intltool, udev, libgdu, fuse
+, libxml2, libxslt, docbook_xsl, libgphoto2, libtool }:
+
+stdenv.mkDerivation rec {
+  name = "gvfs-1.14.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gvfs/1.14/${name}.tar.xz";
+    sha256 = "1g4ghyf45jg2ajdkv2d972hbckyjh3d9jdrppai85pl9pk2dmfy3";
+  };
+
+  buildInputs =
+    [ pkgconfig glib dbus.libs intltool udev libgdu fuse libxml2 libxslt
+      docbook_xsl libgphoto2 libtool
+    ];
+
+  meta = {
+    description = "Virtual Filesystem support library (for Xfce)";
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.eelco ];
+  };
+}
diff --git a/pkgs/desktops/xfce/support/libgdu-only.patch b/pkgs/desktops/xfce/support/libgdu-only.patch
new file mode 100644
index 000000000000..c5873c716811
--- /dev/null
+++ b/pkgs/desktops/xfce/support/libgdu-only.patch
@@ -0,0 +1,144 @@
+diff -ru -x '*~' gnome-disk-utility-2.30.1-orig/configure.ac gnome-disk-utility-2.30.1/configure.ac
+--- gnome-disk-utility-2.30.1-orig/configure.ac	2010-03-22 16:54:09.000000000 +0100
++++ gnome-disk-utility-2.30.1/configure.ac	2011-09-06 02:52:09.000000000 +0200
+@@ -106,17 +106,6 @@
+ # GNOME
+ # *****
+ 
+-GNOME_COMMON_INIT
+-GNOME_DOC_INIT
+-GNOME_DEBUG_CHECK
+-GNOME_COMPILE_WARNINGS([maximum])
+-GNOME_MAINTAINER_MODE_DEFINES
+-
+-AC_ARG_ENABLE(gtk-doc, AS_HELP_STRING([--enable-gtk-doc],
+-  [use gtk-doc to build documentation [default=yes]]),,
+-  enable_gtk_doc=yes)
+-GTK_DOC_CHECK([1.3])
+-
+ # ***************************
+ # Check for required packages
+ # ***************************
+@@ -130,7 +119,6 @@
+ UNIQUE_REQUIRED=1.0
+ LIBNOTIFY_REQUIRED=0.3.0
+ NAUTILUS_REQUIRED=2.24.0
+-AVAHI_UI_REQUIRED=0.6.25
+ 
+ UDISKS_REQUIRED=1.0.0
+ UDISKS_NEXT_ABI_INCOMPATIBLE_VERSION=1.1.0
+@@ -144,13 +132,7 @@
+ PKG_CHECK_MODULES(GIO_UNIX2, [gio-unix-2.0 >= $GIO2_REQUIRED])
+ PKG_CHECK_MODULES(GTHREAD2, [gthread-2.0 >= $GLIB2_REQUIRED])
+ PKG_CHECK_MODULES(DBUS_GLIB, [dbus-glib-1 >= $DBUS_GLIB_REQUIRED])
+-PKG_CHECK_MODULES(GTK2, [gtk+-2.0 >= $GTK2_REQUIRED])
+-PKG_CHECK_MODULES(UNIQUE, [unique-1.0 >= $UNIQUE_REQUIRED])
+-PKG_CHECK_MODULES(LIBNOTIFY, [libnotify  >= $LIBNOTIFY_REQUIRED])
+ PKG_CHECK_MODULES(UDISKS, [udisks  >= $UDISKS_REQUIRED udisks < $UDISKS_NEXT_ABI_INCOMPATIBLE_VERSION])
+-PKG_CHECK_MODULES(X11, [x11])
+-PKG_CHECK_MODULES(LIBATASMART, [libatasmart >= 0.14])
+-PKG_CHECK_MODULES(AVAHI_UI, [avahi-ui >= $AVAHI_UI_REQUIRED])
+ 
+ # *************
+ # Remote Access
+@@ -183,21 +165,10 @@
+ AC_SUBST(GNOME_KEYRING_CFLAGS)
+ AM_CONDITIONAL(ENABLE_GNOME_KEYRING, [test "$have_gnome_keyring" = "yes"])
+ 
+-# *************
+-# Documentation
+-# *************
+-
+-AC_PATH_PROG(SCROLLKEEPER_CONFIG, scrollkeeper-config,no)
+-if test x$SCROLLKEEPER_CONFIG = xno; then
+-  AC_MSG_ERROR(Couldn't find scrollkeeper-config, please install the scrollkeeper package)
+-fi
+-
+ # ********************
+ # Internationalization
+ # ********************
+ 
+-IT_PROG_INTLTOOL([$INTLTOOL_REQUIRED])
+-
+ GETTEXT_PACKAGE=gnome-disk-utility
+ AC_SUBST([GETTEXT_PACKAGE])
+ AM_GLIB_GNU_GETTEXT
+diff -ru -x '*~' gnome-disk-utility-2.30.1-orig/doc/Makefile.am gnome-disk-utility-2.30.1/doc/Makefile.am
+--- gnome-disk-utility-2.30.1-orig/doc/Makefile.am	2009-12-02 20:52:38.000000000 +0100
++++ gnome-disk-utility-2.30.1/doc/Makefile.am	2011-09-06 02:17:15.000000000 +0200
+@@ -70,9 +70,7 @@
+ 	Makefile.in			\
+ 	$(NULL)
+ 
+-include $(top_srcdir)/gtk-doc.make
+-
+-CLEANFILES +=   *~						\
++CLEANFILES =   *~						\
+ 		gnome-disk-utility-scan*			\
+ 		gnome-disk-utility.args				\
+ 		gnome-disk-utility.hierarchy			\
+@@ -91,4 +89,4 @@
+ 		$(NULL)
+ 
+ # Version information for marking the documentation
+-EXTRA_DIST += version.xml.in
++EXTRA_DIST = version.xml.in
+diff -ru -x '*~' gnome-disk-utility-2.30.1-orig/gtk-doc.make gnome-disk-utility-2.30.1/gtk-doc.make
+--- gnome-disk-utility-2.30.1-orig/gtk-doc.make	2010-03-16 00:08:20.000000000 +0100
++++ gnome-disk-utility-2.30.1/gtk-doc.make	2011-09-06 02:15:33.000000000 +0200
+@@ -4,15 +4,9 @@
+ # Everything below here is generic #
+ ####################################
+ 
+-if GTK_DOC_USE_LIBTOOL
+-GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+-GTKDOC_RUN = $(LIBTOOL) --mode=execute
+-else
+ GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+ GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+ GTKDOC_RUN =
+-endif
+ 
+ # We set GPATH here; this gives us semantics for GNU make
+ # which are more like other make's VPATH, when it comes to
+@@ -49,22 +43,7 @@
+ 
+ CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+ 
+-if ENABLE_GTK_DOC
+-if GTK_DOC_BUILD_HTML
+-HTML_BUILD_STAMP=html-build.stamp
+-else
+-HTML_BUILD_STAMP=
+-endif
+-if GTK_DOC_BUILD_PDF
+-PDF_BUILD_STAMP=pdf-build.stamp
+-else
+-PDF_BUILD_STAMP=
+-endif
+-
+-all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+-else
+ all-local:
+-endif
+ 
+ docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+ 
+diff -ru -x '*~' gnome-disk-utility-2.30.1-orig/help/Makefile.am gnome-disk-utility-2.30.1/help/Makefile.am
+--- gnome-disk-utility-2.30.1-orig/help/Makefile.am	2009-09-23 20:35:01.000000000 +0200
++++ gnome-disk-utility-2.30.1/help/Makefile.am	2011-09-06 02:18:13.000000000 +0200
+@@ -1,4 +1,3 @@
+-include $(top_srcdir)/gnome-doc-utils.make
+ dist-hook: doc-dist-hook
+ 
+ DOC_MODULE = palimpsest
+diff -ru -x '*~' gnome-disk-utility-2.30.1-orig/Makefile.am gnome-disk-utility-2.30.1/Makefile.am
+--- gnome-disk-utility-2.30.1-orig/Makefile.am	2010-03-16 00:12:39.000000000 +0100
++++ gnome-disk-utility-2.30.1/Makefile.am	2011-09-06 02:17:34.000000000 +0200
+@@ -1,4 +1,4 @@
+-SUBDIRS = src data doc help po
++SUBDIRS = src data
+ 
+ EXTRA_DIST = \
+ 	autogen.sh		\
diff --git a/pkgs/desktops/xfce/support/libgdu.nix b/pkgs/desktops/xfce/support/libgdu.nix
new file mode 100644
index 000000000000..32835f0434ab
--- /dev/null
+++ b/pkgs/desktops/xfce/support/libgdu.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, gnome, pkgconfig, glib, dbus_glib, intltool, udev, gtk
+, libnotify, udisks, libatasmart, avahi
+, autoconf, automake, libtool }:
+
+let version = "2.30.1"; in
+
+stdenv.mkDerivation rec {
+  name = "libgdu-${version}";
+  
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-disk-utility/2.30/gnome-disk-utility-${version}.tar.bz2";
+    sha256 = "df9b336c780b5d77ceda54e96f7c37c67645f5e73d48754ba0a8efba7c1836d7";
+  };
+
+  # Only build libgdu, not all that Gnome crap.
+  patches = [ ./libgdu-only.patch ];
+
+  buildInputs =
+    [ pkgconfig glib dbus_glib udisks
+      autoconf automake libtool
+    ];
+
+  preConfigure =
+    ''
+      substituteInPlace src/gdu/Makefile.am --replace /usr/share/dbus-1/interfaces ${udisks}/share/dbus-1/interfaces
+      autoreconf -f -i
+    '';
+
+  postConfigure = "cd src/gdu";
+
+  meta = {
+    description = "Xfce/Gvfs support library for mounting filesystems";
+  };
+}