diff --git a/nixos/modules/services/x11/display-managers/slim.nix b/nixos/modules/services/x11/display-managers/slim.nix
index b4f42ec7649..cfe3ee53224 100644
--- a/nixos/modules/services/x11/display-managers/slim.nix
+++ b/nixos/modules/services/x11/display-managers/slim.nix
@@ -7,8 +7,6 @@ let
   dmcfg = config.services.xserver.displayManager;
 
   cfg = dmcfg.slim;
-  
-  slimPackage = cfg.package;
 
   slimConfig = pkgs.writeText "slim.cfg"
     ''
@@ -35,7 +33,7 @@ let
           ln -s * default
         '';
       };
-    in if cfg.theme == null then "${slimPackage}/share/slim/themes" else unpackedTheme;
+    in if cfg.theme == null then "${pkgs.slim}/share/slim/themes" else unpackedTheme;
 
 in
 
@@ -82,22 +80,6 @@ in
           the focus is placed on the password.
         '';
       };
-      
-      package = mkOption {
-        type = types.package;
-        default = pkgs.slim;
-        description = ''
-          Configure slim package.
-        '';
-        example = ''
-          pkgs.slim.override { 
-            theme = pkgs.fetchurl {
-              url = http://download.berlios.de/slim/slim-wave.tar.gz;
-              sha256 = "0ndr419i5myzcylvxb89m9grl2xyq6fbnyc3lkd711mzlmnnfxdy";
-            }; 
-          };
-        '';
-      };
 
       autoLogin = mkOption {
         type = types.bool;
@@ -125,9 +107,15 @@ in
           { SLIM_CFGFILE = slimConfig;
             SLIM_THEMESDIR = slimThemesDir;
           };
-        execCmd = "exec ${slimPackage}/bin/slim";
+        execCmd = "exec ${pkgs.slim}/bin/slim";
       };
 
+    services.xserver.displayManager.sessionCommands =
+      ''
+        # Export the config/themes for slimlock.
+        export SLIM_THEMESDIR=${slimThemesDir}
+      '';
+
     # Allow null passwords so that the user can login as root on the
     # installation CD.
     security.pam.services.slim = { allowNullPassword = true; startSession = true; };
@@ -135,7 +123,7 @@ in
     # Allow slimlock to work.
     security.pam.services.slimlock = {};
 
-    environment.systemPackages = [ slimPackage ];
+    environment.systemPackages = [ pkgs.slim ];
 
   };
 
diff --git a/pkgs/applications/display-managers/slim/default.nix b/pkgs/applications/display-managers/slim/default.nix
index caf8a7c4222..bf2c34b9318 100644
--- a/pkgs/applications/display-managers/slim/default.nix
+++ b/pkgs/applications/display-managers/slim/default.nix
@@ -1,20 +1,5 @@
 { stdenv, fetchurl, cmake, pkgconfig, xorg, libjpeg, libpng
-, fontconfig, freetype, pam, dbus_libs, makeWrapper, pkgs, theme ? null }:
-
-let 
-  slimThemesDir =
-      let
-        unpackedTheme = pkgs.stdenv.mkDerivation {
-          name = "slim-theme";
-          buildCommand = ''
-            ensureDir $out
-            cd $out
-            unpackFile ${theme}
-            ln -s * default
-          '';
-        };
-    in if theme == null then "$out/share/slim/themes" else unpackedTheme;
-in
+, fontconfig, freetype, pam, dbus_libs, makeWrapper, pkgs }:
 
 stdenv.mkDerivation rec {
   name = "slim-1.3.6";
@@ -35,7 +20,7 @@ stdenv.mkDerivation rec {
       ./run-once.patch
     ];
 
-  preConfigure = "substituteInPlace CMakeLists.txt --replace /etc $out/etc --replace /lib $out/lib";
+  preConfigure = "substituteInPlace CMakeLists.txt --replace /lib $out/lib";
 
   cmakeFlags = [ "-DUSE_PAM=1" ];
 
@@ -47,10 +32,6 @@ stdenv.mkDerivation rec {
       xorg.libX11 xorg.libXext xorg.libXrandr xorg.libXrender xorg.libXmu xorg.libXft makeWrapper
     ];
 
-  postInstall = ''
-    wrapProgram $out/bin/slimlock --set SLIM_THEMESDIR "${slimThemesDir}" --set SLIM_CFGFILE "$out/etc/slim.cfg"
-  '';
-
   NIX_CFLAGS_LINK = "-lXmu";
 
   meta = {
diff --git a/pkgs/applications/display-managers/slim/runtime-paths.patch b/pkgs/applications/display-managers/slim/runtime-paths.patch
index 2e4868092e5..5a8e07bfbf0 100644
--- a/pkgs/applications/display-managers/slim/runtime-paths.patch
+++ b/pkgs/applications/display-managers/slim/runtime-paths.patch
@@ -1,6 +1,6 @@
-diff -ru -x '*~' slim-1.3.6-orig/app.cpp slim-1.3.6/app.cpp
+diff -ru slim-1.3.6-orig/app.cpp slim-1.3.6/app.cpp
 --- slim-1.3.6-orig/app.cpp	2013-10-02 00:38:05.000000000 +0200
-+++ slim-1.3.6/app.cpp	2013-10-15 11:02:55.629263422 +0200
++++ slim-1.3.6/app.cpp	2014-03-30 19:01:04.115414201 +0200
 @@ -200,7 +200,9 @@
  
  	/* Read configuration and theme */
@@ -23,8 +23,31 @@ diff -ru -x '*~' slim-1.3.6-orig/app.cpp slim-1.3.6/app.cpp
  		themeName = cfg->getOption("current_theme");
  		string::size_type pos;
  		if ((pos = themeName.find(",")) != string::npos) {
---- slim-1.3.6-orig/slimlock.cpp	2014-02-05 01:58:01.576560731 +0400
-+++ slim-1.3.6/slimlock.cpp	2014-02-05 02:11:16.587634246 +0400
+diff -ru slim-1.3.6-orig/CMakeLists.txt slim-1.3.6/CMakeLists.txt
+--- slim-1.3.6-orig/CMakeLists.txt	2013-10-02 00:38:05.000000000 +0200
++++ slim-1.3.6/CMakeLists.txt	2014-03-30 19:16:48.445069729 +0200
+@@ -23,7 +23,7 @@
+ 
+ set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory")
+ set(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/slim")
+-set(SYSCONFDIR "/etc")
++set(SYSCONFDIR "$ENV{out}/etc")
+ set(LIBDIR "/lib")
+ set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man")
+ 
+@@ -40,7 +40,7 @@
+ set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DPACKAGE=\"slim\"")
+ set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DVERSION=\"${SLIM_VERSION}\"")
+ set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DPKGDATADIR=\"${PKGDATADIR}\"")
+-set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DSYSCONFDIR=\"${SYSCONFDIR}\"")
++set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DSYSCONFDIR=\"/etc\"")
+ 
+ # Flags
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g -O2")
+Only in slim-1.3.6: CMakeLists.txt~
+diff -ru slim-1.3.6-orig/slimlock.cpp slim-1.3.6/slimlock.cpp
+--- slim-1.3.6-orig/slimlock.cpp	2013-10-02 00:38:05.000000000 +0200
++++ slim-1.3.6/slimlock.cpp	2014-03-30 19:01:04.115414201 +0200
 @@ -106,13 +106,17 @@
  	unsigned int cfg_passwd_timeout;
  	// Read user's current theme