summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--maintainers/docs/coding-conventions.txt97
-rw-r--r--pkgs/applications/audio/audacity/default.nix12
-rw-r--r--pkgs/applications/audio/aumix/default.nix24
-rw-r--r--pkgs/applications/audio/cdparanoia/default.nix4
-rw-r--r--pkgs/applications/audio/flac/default.nix30
-rw-r--r--pkgs/applications/audio/ladspa-plugins/default.nix7
-rw-r--r--pkgs/applications/audio/ladspa-plugins/ladspah.nix5
-rw-r--r--pkgs/applications/audio/lame/default.nix2
-rw-r--r--pkgs/applications/audio/mpg321/default.nix17
-rw-r--r--pkgs/applications/audio/snd/default.nix10
-rw-r--r--pkgs/applications/audio/vorbis-tools/default.nix24
-rw-r--r--pkgs/applications/audio/vorbis-tools/ogg123-curlopt-mute.patch13
-rw-r--r--pkgs/applications/audio/xmms/default.nix1
-rw-r--r--pkgs/applications/display-managers/slim/default.nix4
-rw-r--r--pkgs/applications/editors/bvi/default.nix17
-rwxr-xr-xpkgs/applications/editors/eclipse/builder.sh1
-rw-r--r--pkgs/applications/editors/eclipse/default.nix3
-rw-r--r--pkgs/applications/editors/emacs-22/default.nix3
-rw-r--r--pkgs/applications/editors/emacs-22/makefile-pwd.patch129
-rw-r--r--pkgs/applications/editors/emacs-modes/bbdb/builder.sh12
-rw-r--r--pkgs/applications/editors/emacs-modes/bbdb/default.nix22
-rw-r--r--pkgs/applications/editors/emacs-modes/bbdb/install-infodir.patch28
-rw-r--r--pkgs/applications/editors/joe/default.nix14
-rw-r--r--pkgs/applications/editors/nano/default.nix32
-rw-r--r--pkgs/applications/editors/nedit/default.nix4
-rw-r--r--pkgs/applications/editors/vim-diet/default.nix4
-rw-r--r--pkgs/applications/editors/vim/default.nix3
-rw-r--r--pkgs/applications/graphics/ImageMagick/6.3.8-5.nix (renamed from pkgs/applications/graphics/ImageMagick/default.nix)17
-rw-r--r--pkgs/applications/graphics/PythonMagick/default.nix3
-rw-r--r--pkgs/applications/graphics/dia/default.nix1
-rw-r--r--pkgs/applications/graphics/exrdisplay/default.nix14
-rw-r--r--pkgs/applications/graphics/f-spot/default.nix4
-rw-r--r--pkgs/applications/graphics/gimp/default.nix6
-rw-r--r--pkgs/applications/graphics/gocr/0.44.nix5
-rw-r--r--pkgs/applications/graphics/gqview/default.nix1
-rw-r--r--pkgs/applications/graphics/inkscape/default.nix37
-rw-r--r--pkgs/applications/graphics/xara/default.nix2
-rw-r--r--pkgs/applications/graphics/xfig/builder.sh5
-rw-r--r--pkgs/applications/graphics/xfig/default.nix5
-rw-r--r--pkgs/applications/graphics/xscreensaver/5.04.nix5
-rw-r--r--pkgs/applications/jedit/default.nix12
-rw-r--r--pkgs/applications/jedit/wrapper.nix14
-rw-r--r--pkgs/applications/misc/acrobat-reader/default.nix4
-rw-r--r--pkgs/applications/misc/blender/default.nix12
-rw-r--r--pkgs/applications/misc/bluez-firmware/default.nix4
-rw-r--r--pkgs/applications/misc/bluez-utils/default.nix4
-rw-r--r--pkgs/applications/misc/d4x/default.nix10
-rw-r--r--pkgs/applications/misc/djvulibre/default.nix6
-rw-r--r--pkgs/applications/misc/fetchmail/default.nix9
-rw-r--r--pkgs/applications/misc/fetchmail/security-fix.patch11
-rw-r--r--pkgs/applications/misc/flite/default.nix8
-rw-r--r--pkgs/applications/misc/freemind/default.nix10
-rw-r--r--pkgs/applications/misc/gkrellm/default.nix33
-rw-r--r--pkgs/applications/misc/gphoto2/default.nix4
-rw-r--r--pkgs/applications/misc/gv/default.nix4
-rw-r--r--pkgs/applications/misc/hello/ex-1/default.nix1
-rw-r--r--pkgs/applications/misc/lyx/default.nix18
-rw-r--r--pkgs/applications/misc/maxima/default.nix7
-rw-r--r--pkgs/applications/misc/mrxvt/default.nix4
-rw-r--r--pkgs/applications/misc/pgadmin/default.nix18
-rw-r--r--pkgs/applications/misc/procmail/default.nix3
-rw-r--r--pkgs/applications/misc/pstree/default.nix7
-rw-r--r--pkgs/applications/misc/rxvt/default.nix8
-rw-r--r--pkgs/applications/misc/rxvt_unicode/default.nix25
-rw-r--r--pkgs/applications/misc/sbagen/default.nix6
-rw-r--r--pkgs/applications/misc/synergy/default.nix10
-rw-r--r--pkgs/applications/misc/wordnet/default.nix25
-rw-r--r--pkgs/applications/misc/xchm/default.nix1
-rw-r--r--pkgs/applications/misc/xterm/default.nix7
-rw-r--r--pkgs/applications/networking/browsers/firefox-3/binary.nix (renamed from pkgs/applications/networking/browsers/firefox3b1/binary.nix)0
-rw-r--r--pkgs/applications/networking/browsers/firefox-3/builder.sh (renamed from pkgs/applications/networking/browsers/firefox3b1/builder.sh)0
-rw-r--r--pkgs/applications/networking/browsers/firefox-3/default.nix64
-rw-r--r--pkgs/applications/networking/browsers/firefox/default.nix6
-rw-r--r--pkgs/applications/networking/browsers/firefox3b1/3b2.nix57
-rw-r--r--pkgs/applications/networking/browsers/firefox3b1/default.nix57
-rw-r--r--pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch23
-rw-r--r--pkgs/applications/networking/browsers/firefox3b1/xlibs.patch10
-rw-r--r--pkgs/applications/networking/browsers/mozilla/default.nix3
-rw-r--r--pkgs/applications/networking/browsers/opera/default.nix13
-rw-r--r--pkgs/applications/networking/browsers/w3m/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/amsn/default.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/bitlbee/default.nix17
-rw-r--r--pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix1
-rw-r--r--pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix1
-rw-r--r--pkgs/applications/networking/instant-messengers/pidgin/default.nix1
-rw-r--r--pkgs/applications/networking/instant-messengers/teamspeak/client.nix8
-rw-r--r--pkgs/applications/networking/irc/irssi/default.nix4
-rw-r--r--pkgs/applications/networking/irc/xchat/default.nix4
-rw-r--r--pkgs/applications/networking/mailreaders/mutt/default.nix4
-rw-r--r--pkgs/applications/networking/msmtp/default.nix8
-rw-r--r--pkgs/applications/networking/remote/rdesktop/default.nix20
-rw-r--r--pkgs/applications/networking/skype/default.nix10
-rw-r--r--pkgs/applications/networking/sync/unison/default.nix22
-rw-r--r--pkgs/applications/version-management/arch/configure-tmpdir.patch11
-rw-r--r--pkgs/applications/version-management/arch/default.nix29
-rw-r--r--pkgs/applications/version-management/bazaar/default.nix22
-rw-r--r--pkgs/applications/version-management/cvs2svn/default.nix28
-rw-r--r--pkgs/applications/version-management/darcs_2_pre.nix16
-rw-r--r--pkgs/applications/version-management/git/default.nix24
-rw-r--r--pkgs/applications/version-management/mercurial/default.nix21
-rw-r--r--pkgs/applications/version-management/monotone/default.nix10
-rw-r--r--pkgs/applications/version-management/subversion-1.4.x/builder.sh4
-rw-r--r--pkgs/applications/video/kino/default.nix10
-rw-r--r--pkgs/applications/video/xine-ui/default.nix9
-rw-r--r--pkgs/applications/virtualization/qemu/0.9.0.nix5
-rw-r--r--pkgs/applications/virtualization/qemu/linux-img/0.2.nix5
-rw-r--r--pkgs/applications/virtualization/virtualbox/1.5.2.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix2
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix5
-rw-r--r--pkgs/applications/window-managers/compiz/0.6.2.nix7
-rw-r--r--pkgs/applications/window-managers/compiz/extra.nix2
-rw-r--r--pkgs/applications/window-managers/fbpanel/4.12.nix5
-rw-r--r--pkgs/applications/window-managers/xmonad/default.nix42
-rw-r--r--pkgs/build-support/fetchurl/mirrors.nix62
-rw-r--r--pkgs/build-support/gcc-wrapper/builder.sh27
-rw-r--r--pkgs/build-support/make-wrapper/make-wrapper.sh19
-rw-r--r--pkgs/build-support/substitute/substitute-all.sh4
-rw-r--r--pkgs/data/documentation/man-pages/default.nix11
-rw-r--r--pkgs/data/fonts/fontWrap/default.nix7
-rw-r--r--pkgs/data/fonts/freefont-ttf/default.nix8
-rw-r--r--pkgs/data/misc/shared-mime-info/0.22.nix2
-rw-r--r--pkgs/data/misc/shared-mime-info/0.23.nix2
-rw-r--r--pkgs/data/misc/shared-mime-info/common.nix16
-rw-r--r--pkgs/data/misc/shared-mime-info/default.nix12
-rw-r--r--pkgs/data/misc/xkeyboard-config/0.9.nix23
-rw-r--r--pkgs/data/misc/xkeyboard-config/1.2.nix22
-rw-r--r--pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl2
-rw-r--r--pkgs/desktops/gnome/default.nix10
-rw-r--r--pkgs/desktops/gnome/gnome-vfs.nix7
-rwxr-xr-xpkgs/desktops/kde-4/base/builder.sh12
-rw-r--r--pkgs/desktops/kde-4/base/default.nix8
-rw-r--r--pkgs/desktops/kde-4/default.nix8
-rw-r--r--pkgs/desktops/kde-4/edu/default.nix7
-rw-r--r--pkgs/desktops/kde-4/extragear/default.nix6
-rw-r--r--pkgs/desktops/kde-4/games/default.nix6
-rw-r--r--pkgs/desktops/kde-4/graphics/default.nix6
-rw-r--r--pkgs/desktops/kde-4/libs/default.nix4
-rwxr-xr-xpkgs/desktops/kde-4/libs/setup.sh9
-rw-r--r--pkgs/desktops/kde-4/multimedia/default.nix4
-rw-r--r--pkgs/desktops/kde-4/network/default.nix4
-rwxr-xr-xpkgs/desktops/kde-4/pim/builder.sh10
-rw-r--r--pkgs/desktops/kde-4/pim/default.nix6
-rw-r--r--pkgs/desktops/kde-4/pimlibs/default.nix4
-rwxr-xr-xpkgs/desktops/kde-4/runtime/builder.sh12
-rw-r--r--pkgs/desktops/kde-4/runtime/default.nix9
-rw-r--r--pkgs/desktops/kde-4/support/default.nix2
-rw-r--r--pkgs/desktops/kde-4/support/eigen.nix2
-rw-r--r--pkgs/desktops/kde-4/support/gmm.nix2
-rw-r--r--pkgs/desktops/kde-4/support/qca.nix2
-rw-r--r--pkgs/desktops/kde-4/support/qimageblitz.nix2
-rw-r--r--pkgs/desktops/kde-4/support/soprano.nix2
-rw-r--r--pkgs/desktops/kde-4/support/strigi.nix2
-rw-r--r--pkgs/desktops/kde-4/support/taglib.nix2
-rw-r--r--pkgs/desktops/kde-4/toys/default.nix4
-rw-r--r--pkgs/desktops/kde-4/utils/default.nix5
-rwxr-xr-xpkgs/desktops/kde-4/workspace/builder.sh5
-rw-r--r--pkgs/desktops/kde-4/workspace/default.nix8
-rw-r--r--pkgs/development/compilers/bigloo/default.nix130
-rw-r--r--pkgs/development/compilers/fpc/binary.nix7
-rw-r--r--pkgs/development/compilers/fpc/default.nix8
-rw-r--r--pkgs/development/compilers/gcc-4.2/default.nix16
-rw-r--r--pkgs/development/compilers/ghc-6.8/default.nix3
-rw-r--r--pkgs/development/compilers/ghc/boot.nix2
-rw-r--r--pkgs/development/compilers/ghc/createGhcWrapper/default.nix17
-rw-r--r--pkgs/development/compilers/ghcs/default.nix198
-rw-r--r--pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs48
-rw-r--r--pkgs/development/compilers/ghcs/splitpackagedb.hs25
-rw-r--r--pkgs/development/compilers/gwt/builder.sh33
-rw-r--r--pkgs/development/compilers/gwt/default.nix14
-rw-r--r--pkgs/development/compilers/java-front/builder.sh4
-rw-r--r--pkgs/development/compilers/java-front/default.nix14
-rw-r--r--pkgs/development/compilers/jdk/builder.sh1
-rw-r--r--pkgs/development/compilers/jdk/default-5.nix9
-rw-r--r--pkgs/development/compilers/jdk/jdk5-sun-linux.nix23
-rw-r--r--pkgs/development/compilers/jdk/jdk6-linux.nix10
-rw-r--r--pkgs/development/compilers/ocaml/default.nix4
-rw-r--r--pkgs/development/compilers/qi/9.1.nix5
-rw-r--r--pkgs/development/compilers/roadsend/default.nix33
-rw-r--r--pkgs/development/compilers/strategoxt/strategoxt-0.17.nix15
-rw-r--r--pkgs/development/compilers/webdsl/builder.sh8
-rw-r--r--pkgs/development/compilers/webdsl/default.nix14
-rw-r--r--pkgs/development/guile-modules/guile-lib/default.nix38
-rw-r--r--pkgs/development/interpreters/clisp/builder.sh22
-rw-r--r--pkgs/development/interpreters/clisp/default.nix30
-rw-r--r--pkgs/development/interpreters/erlang/R11B-5.nix12
-rw-r--r--pkgs/development/interpreters/erlang/R12B-1.nix12
-rw-r--r--pkgs/development/interpreters/guile/default.nix28
-rw-r--r--pkgs/development/interpreters/guile/setup-hook.sh8
-rw-r--r--pkgs/development/interpreters/perl/perl-5.10.nix21
-rw-r--r--pkgs/development/interpreters/perl/setup-hook.sh2
-rw-r--r--pkgs/development/interpreters/php_configurable/default.nix73
-rw-r--r--pkgs/development/interpreters/pyrex/0.9.6.nix5
-rw-r--r--pkgs/development/interpreters/python/2.5/default.nix2
-rw-r--r--pkgs/development/interpreters/python/2.5/setup-hook.sh2
-rw-r--r--pkgs/development/libraries/SDL_image/default.nix24
-rw-r--r--pkgs/development/libraries/SDL_mixer/default.nix25
-rw-r--r--pkgs/development/libraries/SDL_net/default.nix22
-rw-r--r--pkgs/development/libraries/SDL_ttf/default.nix9
-rw-r--r--pkgs/development/libraries/a52dec/default.nix14
-rw-r--r--pkgs/development/libraries/apr-util/default.nix26
-rw-r--r--pkgs/development/libraries/apr/default.nix12
-rw-r--r--pkgs/development/libraries/aspell/default.nix14
-rw-r--r--pkgs/development/libraries/aspell/dict-path.patch30
-rw-r--r--pkgs/development/libraries/aspell/dictionaries.nix17
-rw-r--r--pkgs/development/libraries/aterm/2.4.2-fixes.nix1
-rw-r--r--pkgs/development/libraries/aterm/2.5.nix14
-rw-r--r--pkgs/development/libraries/avahi/0.6.21.nix2
-rw-r--r--pkgs/development/libraries/avahi/0.6.22.nix2
-rw-r--r--pkgs/development/libraries/avahi/common.nix18
-rw-r--r--pkgs/development/libraries/avahi/default.nix14
-rw-r--r--pkgs/development/libraries/cairomm/default.nix15
-rw-r--r--pkgs/development/libraries/cfitsio/default.nix13
-rw-r--r--pkgs/development/libraries/ctl/default.nix12
-rw-r--r--pkgs/development/libraries/dbus-glib/default.nix11
-rw-r--r--pkgs/development/libraries/dbus/default.nix52
-rw-r--r--pkgs/development/libraries/dbus_x/default.nix13
-rw-r--r--pkgs/development/libraries/enchant/1.3.0.nix14
-rw-r--r--pkgs/development/libraries/enchant/default.nix10
-rw-r--r--pkgs/development/libraries/fcgi/default.nix18
-rw-r--r--pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix16
-rw-r--r--pkgs/development/libraries/fftw/default.nix5
-rw-r--r--pkgs/development/libraries/gamin/default.nix12
-rw-r--r--pkgs/development/libraries/gettext/default.nix8
-rw-r--r--pkgs/development/libraries/glew/default.nix19
-rw-r--r--pkgs/development/libraries/glibc-2.7/builder.sh5
-rw-r--r--pkgs/development/libraries/glibc-2.7/default.nix2
-rw-r--r--pkgs/development/libraries/gpgme/default.nix4
-rw-r--r--pkgs/development/libraries/gsl/default.nix8
-rw-r--r--pkgs/development/libraries/gtk-libs-2.10/default.nix26
-rw-r--r--pkgs/development/libraries/gtk-libs-2.10/gtk+/default.nix22
-rw-r--r--pkgs/development/libraries/gtk-libs-2.2/atk/default.nix13
-rw-r--r--pkgs/development/libraries/gtk-libs-2.2/glib/default.nix12
-rw-r--r--pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix21
-rw-r--r--pkgs/development/libraries/gtk-libs-2.2/pango/default.nix14
-rw-r--r--pkgs/development/libraries/gtk-libs-2.4/atk/default.nix13
-rw-r--r--pkgs/development/libraries/gtk-libs-2.4/default.nix23
-rw-r--r--pkgs/development/libraries/gtk-libs-2.4/glib/default.nix12
-rw-r--r--pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix21
-rw-r--r--pkgs/development/libraries/gtk-libs-2.4/pango/default.nix14
-rw-r--r--pkgs/development/libraries/gtk-libs-2.6/default.nix23
-rw-r--r--pkgs/development/libraries/gtk-libs/1.x/default.nix (renamed from pkgs/development/libraries/gtk-libs-1.x/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/1.x/gdk-pixbuf/default.nix (renamed from pkgs/development/libraries/gtk-libs-1.x/gdk-pixbuf/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/1.x/glib/default.nix (renamed from pkgs/development/libraries/gtk-libs-1.x/glib/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/1.x/glib/gcc34.patch (renamed from pkgs/development/libraries/gtk-libs-1.x/glib/gcc34.patch)0
-rw-r--r--pkgs/development/libraries/gtk-libs/1.x/gtk+/builder.sh (renamed from pkgs/development/libraries/gtk-libs-1.x/gtk+/builder.sh)0
-rw-r--r--pkgs/development/libraries/gtk-libs/1.x/gtk+/default.nix (renamed from pkgs/development/libraries/gtk-libs-1.x/gtk+/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.10/atk/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.10/atk/default.nix)4
-rw-r--r--pkgs/development/libraries/gtk-libs/2.10/default.nix16
-rw-r--r--pkgs/development/libraries/gtk-libs/2.10/glib/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.10/glib/default.nix)4
-rw-r--r--pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.10/glibmm/default.nix)5
-rw-r--r--pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix13
-rw-r--r--pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.10/gtkmm/default.nix)5
-rw-r--r--pkgs/development/libraries/gtk-libs/2.10/pango/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.10/pango/default.nix)8
-rw-r--r--pkgs/development/libraries/gtk-libs/2.6/atk/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.6/atk/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.6/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.2/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.6/glib/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.6/glib/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.6/glibmm/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.6/gtk+/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.6/gtkmm/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.6/pango/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.6/pango/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.8/atk/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.8/atk/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.8/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.8/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.8/glib/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.8/glib/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.8/glibmm/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.8/gtk+/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.8/gtkmm/default.nix)0
-rw-r--r--pkgs/development/libraries/gtk-libs/2.8/pango/default.nix (renamed from pkgs/development/libraries/gtk-libs-2.8/pango/default.nix)0
-rw-r--r--pkgs/development/libraries/haskell/Crypto/default.nix11
-rw-r--r--pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix10
-rw-r--r--pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix12
-rw-r--r--pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix12
-rw-r--r--pkgs/development/libraries/haskell/X11/default.nix13
-rw-r--r--pkgs/development/libraries/haskell/binary/default.nix11
-rw-r--r--pkgs/development/libraries/haskell/cabal/cabal.nix95
-rw-r--r--pkgs/development/libraries/haskell/gtk2hs/default.nix14
-rw-r--r--pkgs/development/libraries/haskell/pcre-light/default.nix12
-rw-r--r--pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh21
-rw-r--r--pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix11
-rw-r--r--pkgs/development/libraries/haskell/uulib/builder.sh51
-rw-r--r--pkgs/development/libraries/haskell/uulib/default.nix18
-rw-r--r--pkgs/development/libraries/haskell/vty/default.nix13
-rw-r--r--pkgs/development/libraries/haskell/zlib/default.nix11
-rw-r--r--pkgs/development/libraries/ilbc/default.nix17
-rw-r--r--pkgs/development/libraries/indilib/default.nix16
-rw-r--r--pkgs/development/libraries/iniparser/default.nix34
-rw-r--r--pkgs/development/libraries/iniparser/no-usr.patch14
-rw-r--r--pkgs/development/libraries/jasper/default.nix18
-rw-r--r--pkgs/development/libraries/kerberos/heimdal.nix12
-rw-r--r--pkgs/development/libraries/libaal/default.nix19
-rw-r--r--pkgs/development/libraries/libao/default.nix19
-rw-r--r--pkgs/development/libraries/libarchive/2.4.11.nix2
-rw-r--r--pkgs/development/libraries/libarchive/2.4.12.nix2
-rw-r--r--pkgs/development/libraries/libarchive/common.nix18
-rw-r--r--pkgs/development/libraries/libassuan/default.nix16
-rw-r--r--pkgs/development/libraries/libavc1394/default.nix9
-rw-r--r--pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix5
-rw-r--r--pkgs/development/libraries/libdbi/0.8.2.nix5
-rw-r--r--pkgs/development/libraries/libextractor/0.5.18.nix5
-rw-r--r--pkgs/development/libraries/libid3tag/default.nix17
-rw-r--r--pkgs/development/libraries/libiec61883/default.nix13
-rw-r--r--pkgs/development/libraries/libjingle/0.3.11.nix10
-rw-r--r--pkgs/development/libraries/libjingle/0.4.0.nix10
-rw-r--r--pkgs/development/libraries/libksba/default.nix19
-rw-r--r--pkgs/development/libraries/libmad/default.nix11
-rw-r--r--pkgs/development/libraries/libnotify/default.nix7
-rw-r--r--pkgs/development/libraries/libnova/default.nix15
-rw-r--r--pkgs/development/libraries/liboop/default.nix17
-rw-r--r--pkgs/development/libraries/libraw1394/default.nix16
-rw-r--r--pkgs/development/libraries/libsigsegv/2.5.nix14
-rw-r--r--pkgs/development/libraries/libsigsegv/default.nix9
-rw-r--r--pkgs/development/libraries/libunwind/default.nix14
-rw-r--r--pkgs/development/libraries/libwmf/default.nix11
-rw-r--r--pkgs/development/libraries/libxklavier/3.4.nix21
-rw-r--r--pkgs/development/libraries/log4cxx/default.nix2
-rw-r--r--pkgs/development/libraries/loudmouth/default.nix14
-rw-r--r--pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix22
-rw-r--r--pkgs/development/libraries/mediastreamer/h264.patch12
-rw-r--r--pkgs/development/libraries/mediastreamer/plugins.patch49
-rw-r--r--pkgs/development/libraries/msilbc/2.0.0.nix24
-rw-r--r--pkgs/development/libraries/openexr_ctl/default.nix14
-rw-r--r--pkgs/development/libraries/ortp/0.13.1.nix16
-rw-r--r--pkgs/development/libraries/ortp/0.7.1.nix16
-rw-r--r--pkgs/development/libraries/proj.4/default.nix8
-rw-r--r--pkgs/development/libraries/pth/default.nix14
-rw-r--r--pkgs/development/libraries/qt-4/default.nix2
-rw-r--r--pkgs/development/libraries/readline/readline5.nix5
-rw-r--r--pkgs/development/libraries/redland/default.nix8
-rw-r--r--pkgs/development/libraries/tapioca-qt/default.nix16
-rw-r--r--pkgs/development/libraries/telepathy-gabble/default.nix17
-rw-r--r--pkgs/development/libraries/telepathy-glib/default.nix17
-rw-r--r--pkgs/development/libraries/telepathy-qt/default.nix16
-rw-r--r--pkgs/development/libraries/tk/8.4.16.nix18
-rw-r--r--pkgs/development/libraries/tk/builder.sh10
-rw-r--r--pkgs/development/libraries/tk/default.nix12
-rw-r--r--pkgs/development/libraries/xine-lib/default.nix37
-rw-r--r--pkgs/development/perl-modules/DB_File/default.nix11
-rw-r--r--pkgs/development/perl-modules/DB_File/hook.sh11
-rw-r--r--pkgs/development/python-modules/ZopeInterface/default.nix6
-rw-r--r--pkgs/development/python-modules/pil/default.nix12
-rw-r--r--pkgs/development/python-modules/pygame/default.nix12
-rw-r--r--pkgs/development/python-modules/twisted/default.nix6
-rwxr-xr-xpkgs/development/tools/build-managers/cmake/setup-hook.sh48
-rw-r--r--pkgs/development/tools/build-managers/gnumake/log.patch27
-rw-r--r--pkgs/development/tools/documentation/haddock/default.nix11
-rw-r--r--pkgs/development/tools/guile/guile-lint/default.nix26
-rw-r--r--pkgs/development/tools/haskell/uuagc/default.nix26
-rw-r--r--pkgs/development/tools/misc/automake/setup-hook.sh2
-rw-r--r--pkgs/development/tools/misc/avrdude/default.nix2
-rw-r--r--pkgs/development/tools/misc/ccache/default.nix15
-rw-r--r--pkgs/development/tools/misc/elfutils/0.127.nix1
-rw-r--r--pkgs/development/tools/misc/hasktags/default.nix24
-rw-r--r--pkgs/development/tools/misc/indent/2.2.9.nix5
-rw-r--r--pkgs/development/tools/misc/intltool/0.36.2.nix5
-rw-r--r--pkgs/development/tools/misc/libtool/default.nix8
-rw-r--r--pkgs/development/tools/misc/ltrace/0.5-3deb.nix (renamed from pkgs/development/tools/misc/ltrace/default.nix)16
-rw-r--r--pkgs/development/tools/misc/pkgconfig/setup-hook.sh2
-rw-r--r--pkgs/development/tools/misc/uisp/default.nix8
-rw-r--r--pkgs/development/tools/parsing/alex/default.nix33
-rw-r--r--pkgs/development/tools/parsing/flex-iputils/builder.sh10
-rw-r--r--pkgs/development/tools/parsing/flex-iputils/default.nix13
-rw-r--r--pkgs/development/tools/parsing/flex-iputils/flex-new.nix16
-rw-r--r--pkgs/development/tools/parsing/flex/flex-2.5.34.nix19
-rw-r--r--pkgs/development/tools/parsing/happy/happy-1.17.nix12
-rw-r--r--pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix12
-rw-r--r--pkgs/development/tools/selenium/remote-control/default.nix8
-rw-r--r--pkgs/games/construo/0.2.2.nix5
-rw-r--r--pkgs/games/fsg/alt-builder.nix8
-rw-r--r--pkgs/games/orbit/1.01.nix43
-rw-r--r--pkgs/games/scummvm/default.nix6
-rw-r--r--pkgs/games/thePenguinMachine/default.nix17
-rw-r--r--pkgs/games/wesnoth/default.nix22
-rw-r--r--pkgs/lib/annotatedDerivations.nix56
-rw-r--r--pkgs/lib/default-unstable.nix478
-rw-r--r--pkgs/lib/default.nix339
-rw-r--r--pkgs/lib/strings-with-deps.nix36
-rw-r--r--pkgs/misc/emulators/wine/default.nix22
-rw-r--r--pkgs/misc/emulators/wine/opengl-child-window.patch1286
-rw-r--r--pkgs/misc/gxemul/default.nix2
-rw-r--r--pkgs/misc/maven/maven-2.nix8
-rw-r--r--pkgs/misc/ntfsprogs/default.nix6
-rw-r--r--pkgs/misc/screensavers/xlockmore/default.nix30
-rw-r--r--pkgs/misc/screensavers/xlockmore/makefile-libcrypt.patch11
-rw-r--r--pkgs/misc/tex/nix/find-includes.pl1
-rw-r--r--pkgs/misc/trac/builder.sh6
-rw-r--r--pkgs/misc/trac/default.nix17
-rw-r--r--pkgs/os-specific/linux/alsa/library/default.nix4
-rw-r--r--pkgs/os-specific/linux/alsa/utils/default.nix4
-rw-r--r--pkgs/os-specific/linux/atheros/0.9.3.3.nix5
-rw-r--r--pkgs/os-specific/linux/atheros/r2756.nix5
-rw-r--r--pkgs/os-specific/linux/atheros/r3122.nix5
-rw-r--r--pkgs/os-specific/linux/aufs/default.nix38
-rw-r--r--pkgs/os-specific/linux/bridge_utils/default.nix10
-rw-r--r--pkgs/os-specific/linux/dmidecode/2.9.nix5
-rw-r--r--pkgs/os-specific/linux/dvd+rw-tools/7.0.nix6
-rw-r--r--pkgs/os-specific/linux/firmware/iwlwifi-4965-ucode/default.nix19
-rw-r--r--pkgs/os-specific/linux/firmware/zd1211/default.nix21
-rw-r--r--pkgs/os-specific/linux/fxload/default.nix39
-rw-r--r--pkgs/os-specific/linux/hal/default.nix8
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.20.nix37
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.21-ck.nix13
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.21.nix45
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.22-ck.nix13
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.22.nix28
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.23.1.nix41
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.23.12.nix38
-rw-r--r--pkgs/os-specific/linux/kernel/2.6.23.nix17
-rw-r--r--pkgs/os-specific/linux/kernel/acerhk/default.nix12
-rw-r--r--pkgs/os-specific/linux/kernel/builder.sh3
-rw-r--r--pkgs/os-specific/linux/kernel/default.nix31
-rw-r--r--pkgs/os-specific/linux/kernel/linux-2.6.20.nix76
-rw-r--r--pkgs/os-specific/linux/kernel/linux-2.6.21.nix76
-rw-r--r--pkgs/os-specific/linux/kernel/linux-2.6.22.nix (renamed from pkgs/os-specific/linux/kernel/meta.nix)46
-rw-r--r--pkgs/os-specific/linux/kernel/linux-2.6.23.nix84
-rw-r--r--pkgs/os-specific/linux/kqemu/1.3.0pre11.nix6
-rw-r--r--pkgs/os-specific/linux/kvm/57.nix24
-rw-r--r--pkgs/os-specific/linux/module-init-tools/aggregator.nix8
-rw-r--r--pkgs/os-specific/linux/ndiswrapper/default.nix2
-rw-r--r--pkgs/os-specific/linux/nfs-utils/default.nix8
-rw-r--r--pkgs/os-specific/linux/nvidia/default.nix4
-rw-r--r--pkgs/os-specific/linux/radeontools/default.nix8
-rw-r--r--pkgs/os-specific/linux/reiser4progs/default.nix21
-rw-r--r--pkgs/os-specific/linux/reiserfsprogs/default.nix14
-rw-r--r--pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch19
-rw-r--r--pkgs/os-specific/linux/sdparm/1.02.nix5
-rw-r--r--pkgs/os-specific/linux/tcp-wrapper/default.nix8
-rw-r--r--pkgs/os-specific/linux/udev/default.nix24
-rw-r--r--pkgs/os-specific/linux/usbutils/default.nix10
-rw-r--r--pkgs/os-specific/linux/wis-go7007/default.nix59
-rw-r--r--pkgs/servers/fingerd/bsd-fingerd/default.nix17
-rw-r--r--pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch67
-rw-r--r--pkgs/servers/ftp/vsftpd/default.nix20
-rw-r--r--pkgs/servers/http/apache-httpd/builder.sh29
-rw-r--r--pkgs/servers/http/apache-httpd/default.nix40
-rw-r--r--pkgs/servers/http/apache-modules/mod_python/default.nix6
-rw-r--r--pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh8
-rw-r--r--pkgs/servers/http/apache-modules/tomcat-connectors/default.nix14
-rw-r--r--pkgs/servers/http/jboss/builder.sh15
-rw-r--r--pkgs/servers/http/jboss/default.nix20
-rw-r--r--pkgs/servers/http/jboss/jdbc/mysql/builder.sh5
-rw-r--r--pkgs/servers/http/jboss/jdbc/mysql/default.nix9
-rw-r--r--pkgs/servers/http/tomcat/6.0.nix15
-rw-r--r--pkgs/servers/http/tomcat/axis2/builder.sh15
-rw-r--r--pkgs/servers/http/tomcat/axis2/default.nix15
-rw-r--r--pkgs/servers/http/tomcat/builder-6.0.sh6
-rw-r--r--pkgs/servers/irc/ircd-hybrid/default.nix12
-rw-r--r--pkgs/servers/samba/default.nix24
-rw-r--r--pkgs/servers/samba/smb.conf271
-rw-r--r--pkgs/servers/sql/mysql5/default.nix7
-rw-r--r--pkgs/servers/sql/postgresql/8.2.6.nix14
-rw-r--r--pkgs/servers/sql/postgresql/8.3.0.nix14
-rw-r--r--pkgs/servers/sql/postgresql/default.nix15
-rw-r--r--pkgs/servers/x11/xorg/builder.sh10
-rw-r--r--pkgs/servers/x11/xorg/default.nix18
-rwxr-xr-xpkgs/servers/x11/xorg/generate-expr-from-tarballs.pl13
-rw-r--r--pkgs/servers/xmpp/ejabberd/builder.sh9
-rw-r--r--pkgs/servers/xmpp/ejabberd/default.nix11
-rw-r--r--pkgs/shells/bash/default.nix7
-rw-r--r--pkgs/shells/zsh/4.3.4.nix (renamed from pkgs/shells/zsh/default.nix)2
-rw-r--r--pkgs/shells/zsh/4.3.5.nix22
-rw-r--r--pkgs/stdenv/common-path.nix1
-rw-r--r--pkgs/stdenv/cygwin/prehook.sh2
-rw-r--r--pkgs/stdenv/generic/builder.sh29
-rw-r--r--pkgs/stdenv/generic/setup-sh-defs.nix902
-rw-r--r--pkgs/stdenv/generic/setup.sh283
-rwxr-xr-xpkgs/stdenv/linux/bootstrap/powerpc/bunzip2bin86276 -> 0 bytes
-rwxr-xr-xpkgs/stdenv/linux/bootstrap/powerpc/bzip2bin0 -> 85816 bytes
-rwxr-xr-xpkgs/stdenv/linux/bootstrap/powerpc/cpbin64584 -> 64700 bytes
-rwxr-xr-xpkgs/stdenv/linux/bootstrap/powerpc/curl.bz2bin151926 -> 148830 bytes
-rw-r--r--pkgs/stdenv/linux/bootstrap/powerpc/default.nix18
-rwxr-xr-xpkgs/stdenv/linux/bootstrap/powerpc/tar.bz2bin100601 -> 102939 bytes
-rw-r--r--pkgs/stdenv/linux/make-bootstrap-tools.sh17
-rw-r--r--pkgs/tools/X11/xmacro/default.nix9
-rw-r--r--pkgs/tools/archivers/gnutar/default.nix7
-rw-r--r--pkgs/tools/archivers/p7zip/default.nix6
-rw-r--r--pkgs/tools/archivers/sharutils/4.6.3.nix13
-rw-r--r--pkgs/tools/archivers/unzip/default.nix4
-rw-r--r--pkgs/tools/archivers/zip/default.nix4
-rw-r--r--pkgs/tools/backup/rdiff-backup/default.nix8
-rw-r--r--pkgs/tools/compression/bzip2/default.nix3
-rw-r--r--pkgs/tools/compression/gzip/default.nix9
-rw-r--r--pkgs/tools/compression/lzma/default.nix18
-rw-r--r--pkgs/tools/compression/zdelta/default.nix8
-rw-r--r--pkgs/tools/hddtemp/default.nix10
-rw-r--r--pkgs/tools/misc/coreutils/default.nix13
-rw-r--r--pkgs/tools/misc/dosfstools/2.11deb.nix33
-rw-r--r--pkgs/tools/misc/findutils/default.nix11
-rw-r--r--pkgs/tools/misc/grub/default.nix25
-rw-r--r--pkgs/tools/misc/man-db/default.nix32
-rw-r--r--pkgs/tools/misc/man-db/share.patch110
-rw-r--r--pkgs/tools/misc/man/default.nix23
-rw-r--r--pkgs/tools/misc/man/share.patch207
-rw-r--r--pkgs/tools/misc/mc/default.nix20
-rw-r--r--pkgs/tools/misc/mssys/default.nix22
-rw-r--r--pkgs/tools/misc/relfs/cvs.2007.12.01.nix25
-rw-r--r--pkgs/tools/misc/rlwrap/0.28.nix23
-rw-r--r--pkgs/tools/misc/shebangfix/default.nix21
-rw-r--r--pkgs/tools/misc/wv/default.nix11
-rw-r--r--pkgs/tools/misc/xclip/default.nix8
-rw-r--r--pkgs/tools/networking/bsd-finger/default.nix17
-rw-r--r--pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch261
-rw-r--r--pkgs/tools/networking/dnsmasq/default.nix8
-rw-r--r--pkgs/tools/networking/lsh/default.nix17
-rw-r--r--pkgs/tools/networking/nc6/1.0.nix25
-rw-r--r--pkgs/tools/networking/ntp/default.nix10
-rw-r--r--pkgs/tools/networking/p2p/bittorrent/builder.sh8
-rw-r--r--pkgs/tools/networking/p2p/bittorrent/default.nix12
-rw-r--r--pkgs/tools/networking/p2p/ktorrent/default.nix14
-rw-r--r--pkgs/tools/networking/smbfs-fuse/0.8.7.nix29
-rw-r--r--pkgs/tools/networking/socat/1.6.0.0.nix34
-rw-r--r--pkgs/tools/networking/socat/2.0.0-b1.nix25
-rw-r--r--pkgs/tools/networking/vpnc/builder.sh9
-rw-r--r--pkgs/tools/networking/vpnc/default.nix20
-rw-r--r--pkgs/tools/networking/vpnc/makefile.patch22
-rw-r--r--pkgs/tools/networking/wget/1.10.2.nix (renamed from pkgs/tools/networking/wget/default.nix)0
-rw-r--r--pkgs/tools/networking/wget/1.11.nix16
-rw-r--r--pkgs/tools/package-management/nix/unstable.nix9
-rw-r--r--pkgs/tools/package-management/snix/default.nix36
-rw-r--r--pkgs/tools/security/gnupg2/default.nix16
-rw-r--r--pkgs/tools/system/cron/default.nix2
-rw-r--r--pkgs/tools/system/gdmap/0.7.5.nix5
-rw-r--r--pkgs/tools/system/pciutils/default.nix10
-rw-r--r--pkgs/tools/system/which/default.nix10
-rw-r--r--pkgs/tools/text/diffutils/default.nix7
-rw-r--r--pkgs/tools/text/gawk/default.nix6
-rw-r--r--pkgs/tools/text/gnugrep/default.nix7
-rw-r--r--pkgs/tools/text/gnused/default.nix7
-rw-r--r--pkgs/tools/text/replace/default.nix9
-rw-r--r--pkgs/tools/typesetting/lhs2tex/default.nix6
-rwxr-xr-xpkgs/tools/typesetting/lout/builder.sh42
-rw-r--r--pkgs/tools/typesetting/lout/default.nix20
-rw-r--r--pkgs/top-level/all-packages.nix1553
-rw-r--r--pkgs/top-level/build-for-release.nix286
-rw-r--r--pkgs/top-level/builder-defs.nix95
-rw-r--r--pkgs/top-level/template-composing+config.nix5
-rw-r--r--pkgs/top-level/template-composing-builder.nix12
-rw-r--r--pkgs/top-level/template.nix45
543 files changed, 8324 insertions, 5493 deletions
diff --git a/maintainers/docs/coding-conventions.txt b/maintainers/docs/coding-conventions.txt
new file mode 100644
index 00000000000..c95dc3c3600
--- /dev/null
+++ b/maintainers/docs/coding-conventions.txt
@@ -0,0 +1,97 @@
+Some conventions:
+
+* Don't use TABs.  Everybody has different TAB settings so it's asking
+  for trouble.
+
+* Use 2 spaces of indentation per indentation level in Nix
+  expressions, 4 spaces in shell scripts.  (Maybe 2 is too low, but
+  for consistency's sake it should be the same.  Certainly indentation
+  should be consistent within a single file.)
+
+* Use lowerCamelCase for variable names, not UpperCamelCase.
+
+* Function calls with attribute set arguments are written as
+
+    foo {
+      arg = ...;
+    }
+
+  not
+
+    foo
+    {
+      arg = ...;
+    }
+
+  Also fine is
+
+    foo { arg = ...; }
+
+  if it's a short call.
+
+* In attribute sets or lists that span multiple lines, the attribute
+  names or list elements should be aligned:
+
+    # A long list.
+    list = [
+      elem1
+      elem2
+      elem3
+    ];
+
+    # A long attribute set.
+    attrs = {
+      attr1 = short_expr;
+      attr2 =
+        if true then big_expr else big_expr;
+    };
+    
+* Short lists or attribute sets can be written on one line:
+    
+    # A short list.
+    list = [ elem1 elem2 elem3 ];
+
+    # A short set.
+    attrs = { x = 1280; y = 1024; };
+
+* Breaking in the middle of a function argument can give hard-to-read
+  code, like
+
+    someFunction { x = 1280;
+      y = 1024; } otherArg
+      yetAnotherArg
+
+  (especially if the argument is very large, spanning multiple lines).
+
+  Better:
+
+    someFunction
+      { x = 1280; y = 1024; }
+      otherArg
+      yetAnotherArg
+
+  or
+    
+    let res = { x = 1280; y = 1024; };
+    in someFunction res otherArg yetAnotherArg
+
+* The bodies of functions, asserts, and withs are not indented, so
+
+    assert system == "i686-linux";
+    stdenv.mkDerivation { ...
+
+  not
+
+    assert system == "i686-linux";
+      stdenv.mkDerivation { ...
+
+* Function formal arguments are written as:
+
+    {arg1, arg2, arg3}:
+
+  but if they don't fit on one line they're written as:
+
+    { arg1, arg2, arg3
+    , arg4, ...
+    , argN
+    }:
diff --git a/pkgs/applications/audio/audacity/default.nix b/pkgs/applications/audio/audacity/default.nix
index 56ee6a56ccb..159c99c4999 100644
--- a/pkgs/applications/audio/audacity/default.nix
+++ b/pkgs/applications/audio/audacity/default.nix
@@ -1,5 +1,5 @@
 args: with args;
-	with (builderDefs { 
+	let localDefs = builderDefs { 
 	  src = 
 		fetchurl {
 			url = mirror://sourceforge/audacity/audacity-src-1.3.3.tar.gz;
@@ -8,7 +8,8 @@ args: with args;
 
   	buildInputs =[(wxGTK null) libogg libvorbis libsndfile libmad pkgconfig gtk 
 		gettext glib];
-	} null);
+	} null;
+	in with localDefs;
 let 
 	postInstall = FullDepEntry ("
 		old_rpath=$(patchelf --print-rpath \$out/bin/audacity);
@@ -25,11 +26,10 @@ stdenv.mkDerivation {
   name = "audacity-1.3.3";
 
   builder = writeScript "audacity-1.3.3-builder"
-		(textClosure [addInputs (doDump "0") (noDepEntry "echo \$PATH; ar --version") doConfigure preBuild doMakeInstall postInstall doForceShare]);
+		(textClosure localDefs [addInputs (doDump "0") (noDepEntry "echo \$PATH; ar --version") doConfigure preBuild doMakeInstall postInstall doForceShare]);
 
   meta = {
-    description = "
-	Audacity sound editor.
-";
+    description = "Audacity sound editor.";
+    homepage = http://audacity.sourceforge.net;
   };
 }
diff --git a/pkgs/applications/audio/aumix/default.nix b/pkgs/applications/audio/aumix/default.nix
new file mode 100644
index 00000000000..57c690fee9b
--- /dev/null
+++ b/pkgs/applications/audio/aumix/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl, gettext, ncurses
+, gtkGUI ? false
+, pkgconfig ? null
+, gtk ? null}:
+
+assert gtkGUI -> pkgconfig != null && gtk != null;
+
+stdenv.mkDerivation {
+  name = "aumix-2.8";
+  src = fetchurl {
+    url = http://www.jpj.net/~trevor/aumix/aumix-2.8.tar.bz2;
+    sha256 = "636eef7f400c2f3df489c0d2fa21507e88692113561e75a40a26c52bc422d7fc";
+  };
+
+  buildInputs = [ gettext ncurses ]
+    ++ (if gtkGUI then [pkgconfig gtk] else []);
+
+  meta = {
+    description = ''Aumix adjusts an audio mixer from X, the console,
+    		    a terminal, the command line or a script.'';
+    homepage = http://www.jpj.net/~trevor/aumix.html;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/applications/audio/cdparanoia/default.nix b/pkgs/applications/audio/cdparanoia/default.nix
index e8d31772611..6fa69beee20 100644
--- a/pkgs/applications/audio/cdparanoia/default.nix
+++ b/pkgs/applications/audio/cdparanoia/default.nix
@@ -8,4 +8,8 @@ stdenv.mkDerivation {
   };
   
   patches = [./fix.patch];
+
+  meta = {
+    homepage = http://xiph.org/paranoia;
+  };
 }
diff --git a/pkgs/applications/audio/flac/default.nix b/pkgs/applications/audio/flac/default.nix
index e61fd05ce38..6095e59fa07 100644
--- a/pkgs/applications/audio/flac/default.nix
+++ b/pkgs/applications/audio/flac/default.nix
@@ -1,11 +1,19 @@
-{stdenv, fetchurl, libogg}:
-
-stdenv.mkDerivation {
-  name = "flac-1.2.1";
-  src = fetchurl {
-    url = http://downloads.xiph.org/releases/flac/flac-1.2.1.tar.gz;
-    sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn";
-  };
-
-  buildInputs = [libogg] ;
-}
+args: with args;
+let
+	flacFun = version: hash:
+	stdenv.mkDerivation rec {
+		name = "flac-${version}";
+		src = fetchurl ({
+			url = "http://downloads.xiph.org/releases/flac/${name}.tar.gz";
+		} // hash);
+		buildInputs = [libogg];
+    meta = {
+      homepage = http://flac.sourceforge.net;
+    };
+	};
+in
+stdenv.lib.listOfListsToAttrs [
+	[ "default" (flacFun "1.2.1" { sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"; }) ]
+	[ "1.2.1" (flacFun "1.2.1" { sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"; }) ]
+	[ "1.1.2" (flacFun "1.1.2" { md5 = "2bfc127cdda02834d0491ab531a20960"; }) ]
+]
diff --git a/pkgs/applications/audio/ladspa-plugins/default.nix b/pkgs/applications/audio/ladspa-plugins/default.nix
index 70dc36240c6..9f2fcbc0ed0 100644
--- a/pkgs/applications/audio/ladspa-plugins/default.nix
+++ b/pkgs/applications/audio/ladspa-plugins/default.nix
@@ -1,5 +1,5 @@
 args: with args;
-	with (builderDefs {
+	let localDefs = builderDefs {
 		src = 
 		fetchurl {
 			url = http://plugin.org.uk/releases/0.4.15/swh-plugins-0.4.15.tar.gz;
@@ -7,7 +7,8 @@ args: with args;
 		};
 		buildInputs = [fftw ladspaH pkgconfig];
 		configureFlags = [];
-	} null);
+	} null;
+	in with localDefs;
 let
 	postInstall = FullDepEntry ("
 		ensureDir \$out/share/ladspa/
@@ -17,7 +18,7 @@ in
 stdenv.mkDerivation {
 	name = "swh-plugins-0.4.15";
 	builder = writeScript "swh-plugins-0.4.15-builder"
-		(textClosure [doConfigure doMakeInstall 
+		(textClosure localDefs [doConfigure doMakeInstall 
 			postInstall doForceShare]);
 	meta = {
 		description = "
diff --git a/pkgs/applications/audio/ladspa-plugins/ladspah.nix b/pkgs/applications/audio/ladspa-plugins/ladspah.nix
index b526e48b10e..65647cf0a22 100644
--- a/pkgs/applications/audio/ladspa-plugins/ladspah.nix
+++ b/pkgs/applications/audio/ladspa-plugins/ladspah.nix
@@ -6,10 +6,11 @@ let
 		sha256 = "1b908csn85ng9sz5s5d1mqk711cmawain2z8px2ajngihdrynb67";
 	};
 in
-	with builderDefs {
+	let localDefs = builderDefs {
 		buildInputs = [];
 		inherit src;
 	} null;
+	in with localDefs;
 let
 	copyFile = FullDepEntry ("
 		ensureDir \$out/include
@@ -19,7 +20,7 @@ in
 stdenv.mkDerivation {
 	name = "ladspa.h";
 	builder = writeScript "ladspa.h-builder"
-		(textClosure [copyFile]);
+		(textClosure localDefs [copyFile]);
 	meta = {
 		description = "
 	LADSPA format audio plugins.
diff --git a/pkgs/applications/audio/lame/default.nix b/pkgs/applications/audio/lame/default.nix
index fa0fa679079..4a97b25cd60 100644
--- a/pkgs/applications/audio/lame/default.nix
+++ b/pkgs/applications/audio/lame/default.nix
@@ -4,6 +4,6 @@ stdenv.mkDerivation {
   name = "lame-3.97";
   src = fetchurl {
     url = mirror://sourceforge/lame/lame-3.97.tar.gz ;
-	sha256 = "05xy9lv6m9s013lzlvhxwvr1586c239xaiiwka52k18hs6k388qa";
+    sha256 = "05xy9lv6m9s013lzlvhxwvr1586c239xaiiwka52k18hs6k388qa";
   };
 }
diff --git a/pkgs/applications/audio/mpg321/default.nix b/pkgs/applications/audio/mpg321/default.nix
new file mode 100644
index 00000000000..23cc92132b9
--- /dev/null
+++ b/pkgs/applications/audio/mpg321/default.nix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl, libao, libmad, libid3tag, zlib}:
+
+stdenv.mkDerivation {
+  name = "mpg321-0.2.10";
+  src = fetchurl {
+    url = mirror://sourceforge/mpg321/mpg321-0.2.10.tar.gz;
+    sha256 = "db0c299592b8f1f704f41bd3fc3a2bf138658108588d51af61638c551af1b0d4";
+  };
+
+  buildInputs = [libao libid3tag libmad zlib];
+
+  meta = {
+    description = "Command-line MP3 player.";
+    homepage = http://mpg321.sourceforge.net/;
+    license = "GPLv2";
+  };
+}
diff --git a/pkgs/applications/audio/snd/default.nix b/pkgs/applications/audio/snd/default.nix
index 9a650570a6d..38bebb12fd3 100644
--- a/pkgs/applications/audio/snd/default.nix
+++ b/pkgs/applications/audio/snd/default.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = 
 	fetchurl {
 		url = ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-9.4.tar.gz;
@@ -20,6 +20,7 @@ args : with args;
 			++ (lib.optional (args ? sndlib) "--with-midi" )
 			;
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 	let preBuild = FullDepEntry ("
 		cp config.log /tmp/snd-config.log
 	") [minInit doUnpack];
@@ -27,10 +28,9 @@ in
 stdenv.mkDerivation rec {
 	name = "Snd-9.4";
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure preBuild doMakeInstall doForceShare]);
+		(textClosure localDefs [doConfigure preBuild doMakeInstall doForceShare]);
 	meta = {
-		description = "
-		Snd sound editor.
-";
+		description = "Snd sound editor.";
+    homepage = http://ccrma.stanford.edu/software/snd;
 	};
 }
diff --git a/pkgs/applications/audio/vorbis-tools/default.nix b/pkgs/applications/audio/vorbis-tools/default.nix
new file mode 100644
index 00000000000..626dc1c9d96
--- /dev/null
+++ b/pkgs/applications/audio/vorbis-tools/default.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl, libogg, libvorbis, libao, pkgconfig, curl, glibc
+, speex, flac}:
+
+stdenv.mkDerivation {
+  name = "vorbis-tools-1.1.1";
+  src = fetchurl {
+    url = http://downloads.xiph.org/releases/vorbis/vorbis-tools-1.1.1.tar.gz;
+    sha256 = "617b4aa69e600c215b34fa3fd5764bc1d9d205d9d7d9fe7812bde7ec956fcaad";
+  };
+
+  # FIXME: Vorbis-tools expects `libOggFLAC', but this library was
+  # merged with `libFLAC' as of FLAC 1.1.3.
+  buildInputs = [ libogg libvorbis libao pkgconfig curl speex glibc flac ];
+
+  patches = [ ./ogg123-curlopt-mute.patch ];
+
+  meta = {
+    description = ''A set of command-line tools to manipulate Ogg Vorbis
+                    audio files, notably the `ogg123' player and the
+		    `oggenc' encoder.'';
+    homepage = http://xiph.org/vorbis/;
+    license = "GPLv2";
+  };
+}
diff --git a/pkgs/applications/audio/vorbis-tools/ogg123-curlopt-mute.patch b/pkgs/applications/audio/vorbis-tools/ogg123-curlopt-mute.patch
new file mode 100644
index 00000000000..6437909411e
--- /dev/null
+++ b/pkgs/applications/audio/vorbis-tools/ogg123-curlopt-mute.patch
@@ -0,0 +1,13 @@
+--- vorbis-tools-1.1.1/ogg123/http_transport.c	2005-06-13 15:11:44.000000000 +0200
++++ vorbis-tools-1.1.1/ogg123/http_transport.c	2008-02-12 18:38:41.000000000 +0100
+@@ -116,7 +116,9 @@ void set_curl_opts (http_private_t *priv
+   if (inputOpts.ProxyTunnel)
+     curl_easy_setopt (handle, CURLOPT_HTTPPROXYTUNNEL, inputOpts.ProxyTunnel);
+   */
++#ifdef CURLOPT_MUTE
+   curl_easy_setopt(handle, CURLOPT_MUTE, 1);
++#endif
+   curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, private->error);
+   curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION, progress_callback);
+   curl_easy_setopt(handle, CURLOPT_PROGRESSDATA, private);
+
diff --git a/pkgs/applications/audio/xmms/default.nix b/pkgs/applications/audio/xmms/default.nix
index bd5bb53414e..8e2650fd7c0 100644
--- a/pkgs/applications/audio/xmms/default.nix
+++ b/pkgs/applications/audio/xmms/default.nix
@@ -14,5 +14,6 @@ stdenv.mkDerivation {
 
   meta = {
     description = "A music player very similar to Winamp";
+    homepage = http://www.xmms.org;
   };
 }
diff --git a/pkgs/applications/display-managers/slim/default.nix b/pkgs/applications/display-managers/slim/default.nix
index c16582fc388..5b711111c91 100644
--- a/pkgs/applications/display-managers/slim/default.nix
+++ b/pkgs/applications/display-managers/slim/default.nix
@@ -20,4 +20,8 @@ stdenv.mkDerivation {
     substituteInPlace Makefile --replace /usr /no-such-path
     makeFlagsArray=(CC=gcc CXX=g++ PREFIX=$out MANDIR=$out/share/man CFGDIR=$out/etc)
   ";
+
+  meta = {
+    homepage = http://slim.berlios.de;
+  };
 }
diff --git a/pkgs/applications/editors/bvi/default.nix b/pkgs/applications/editors/bvi/default.nix
new file mode 100644
index 00000000000..223aabcdf82
--- /dev/null
+++ b/pkgs/applications/editors/bvi/default.nix
@@ -0,0 +1,17 @@
+args : with args;
+stdenv.mkDerivation {
+  name = "bvi-1.3.2";
+
+  src = fetchurl {
+    url = http://prdownloads.sourceforge.net/bvi/bvi-1.3.2.src.tar.gz;
+    sha256 = "110wxqnyianqamxq4y53drqqxb9vp4k2fcvic45qggvlqkqhlfgz";
+  };
+
+  buildInputs = [ncurses];
+
+  meta = { 
+      description = "hex editor with vim style keybindings";
+      homepage = http://bvi.sourceforge.net/download.html;
+      license = "GPL2";
+  };
+}
diff --git a/pkgs/applications/editors/eclipse/builder.sh b/pkgs/applications/editors/eclipse/builder.sh
index b38befee41a..6e064e1fa9b 100755
--- a/pkgs/applications/editors/eclipse/builder.sh
+++ b/pkgs/applications/editors/eclipse/builder.sh
@@ -1,5 +1,4 @@
 source $stdenv/setup
-source $makeWrapper
 
 unpackFile $src 
 ensureDir $out
diff --git a/pkgs/applications/editors/eclipse/default.nix b/pkgs/applications/editors/eclipse/default.nix
index 71afb07eece..23199bdcc12 100644
--- a/pkgs/applications/editors/eclipse/default.nix
+++ b/pkgs/applications/editors/eclipse/default.nix
@@ -6,7 +6,8 @@ let {
       name = "eclipse-sdk-3.3.3.1";
       builder = ./builder.sh;
       src = bindist;
-      inherit makeWrapper jdk plugins;
+      buildInputs = [makeWrapper];
+      inherit jdk plugins;
       libraries = [gtk glib libXtst];
    };
 
diff --git a/pkgs/applications/editors/emacs-22/default.nix b/pkgs/applications/editors/emacs-22/default.nix
index 0af6f95a344..d527e305154 100644
--- a/pkgs/applications/editors/emacs-22/default.nix
+++ b/pkgs/applications/editors/emacs-22/default.nix
@@ -14,12 +14,13 @@ assert gtkGUI -> pkgconfig != null && gtk != null;
 
 stdenv.mkDerivation {
   name = "emacs-22.1";
+
   builder = ./builder.sh;
   src = fetchurl {
     url = mirror://gnu/emacs/emacs-22.1.tar.gz;
     sha256 = "1l1y3il98pq3cz464p244wz2d3nga5lq8fkw5pwp5r97f7pkpi0y";
   };
-  patches = [./crt.patch];
+  patches = [./crt.patch ./makefile-pwd.patch];
   buildInputs = [
     ncurses x11
     (if xawSupport then if xaw3dSupport then Xaw3d else libXaw else null)
diff --git a/pkgs/applications/editors/emacs-22/makefile-pwd.patch b/pkgs/applications/editors/emacs-22/makefile-pwd.patch
new file mode 100644
index 00000000000..232b881c9a6
--- /dev/null
+++ b/pkgs/applications/editors/emacs-22/makefile-pwd.patch
@@ -0,0 +1,129 @@
+--- emacs-22.1/Makefile.in	2008-02-10 23:56:29.000000000 +0100
++++ emacs-22.1/Makefile.in	2008-02-10 23:55:55.000000000 +0100
+@@ -420,7 +420,7 @@
+ 	-set ${COPYDESTS} ; \
+ 	unset CDPATH; \
+ 	for dir in ${COPYDIR} ; do \
+-	  if [ `(cd $$1 && /bin/pwd)` != `(cd $${dir} && /bin/pwd)` ] ; then \
++	  if [ `(cd $$1 && pwd)` != `(cd $${dir} && pwd)` ] ; then \
+ 	    rm -rf $$1 ; \
+ 	  fi ; \
+ 	  shift ; \
+@@ -432,7 +432,7 @@
+ 	for dir in ${COPYDIR} ; do \
+ 	  dest=$$1 ; shift ; \
+ 	  [ -d $${dir} ] \
+-	  && [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \
++	  && [ `(cd $${dir} && pwd)` != `(cd $${dest} && pwd)` ] \
+ 	  && (echo "Copying $${dir} to $${dest}..." ; \
+ 	      (cd $${dir}; tar -chf - . ) \
+ 		| (cd $${dest}; umask 022; \
+@@ -472,7 +472,7 @@
+ 	fi
+ 	-chmod a+r $(DESTDIR)${datadir}/emacs/site-lisp/subdirs.el
+ 	-unset CDPATH; \
+-	if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \
++	if [ `(cd ./etc; pwd)` != `(cd $(DESTDIR)${docdir}; pwd)` ]; \
+ 	then \
+ 	   echo "Copying etc/DOC-* to $(DESTDIR)${docdir} ..." ; \
+ 	   (cd ./etc; tar -chf - DOC*) \
+@@ -483,8 +483,8 @@
+ 	-unset CDPATH; \
+ 	if [ -r ./lisp ] \
+ 	   && [ -r ./lisp/simple.el ] \
+-	   && [ x`(cd ./lisp; /bin/pwd)` != x`(cd $(DESTDIR)${lispdir}; /bin/pwd)` ] \
+-	   && [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \
++	   && [ x`(cd ./lisp; pwd)` != x`(cd $(DESTDIR)${lispdir}; pwd)` ] \
++	   && [ x`(cd ${srcdir}/lisp; pwd)` != x`(cd ./lisp; pwd)` ]; \
+ 	then \
+ 	   echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
+ 	   (cd lisp; tar -chf - *.el *.elc) \
+@@ -500,8 +500,8 @@
+ 	    done) \
+ 	else true; fi
+ 	-unset CDPATH; \
+-	thisdir=`/bin/pwd`; \
+-	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
++	thisdir=`pwd`; \
++	if [ `(cd ${srcdir}/info && pwd)` != `(cd $(DESTDIR)${infodir} && pwd)` ]; \
+ 	then \
+ 	  (cd $(DESTDIR)${infodir};  \
+ 	   if [ -f dir ]; then true; \
+@@ -519,8 +519,8 @@
+ 	   done); \
+ 	else true; fi
+ 	-unset CDPATH; \
+-	thisdir=`/bin/pwd`; \
+-	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd $(DESTDIR)${infodir} && /bin/pwd)` ]; \
++	thisdir=`pwd`; \
++	if [ `(cd ${srcdir}/info && pwd)` != `(cd $(DESTDIR)${infodir} && pwd)` ]; \
+ 	then \
+ 	  for elt in $(INFO_FILES); do \
+ 	    (cd $${thisdir}; \
+@@ -528,7 +528,7 @@
+ 	  done; \
+ 	else true; fi
+ 	-chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} $(DESTDIR)${datadir}/emacs/site-lisp ${COPYDESTS} $(DESTDIR)${infodir}
+-	thisdir=`/bin/pwd`; \
++	thisdir=`pwd`; \
+ 	cd ${srcdir}/etc; \
+ 	for page in emacs emacsclient etags ctags ; do \
+ 	  (cd $${thisdir}; \
+@@ -575,8 +575,8 @@
+ 	-unset CDPATH; \
+ 	for dir in $(DESTDIR)${lispdir} $(DESTDIR)${etcdir} ; do 	\
+ 	  if [ -d $${dir} ]; then			\
+-	    case `(cd $${dir} ; /bin/pwd)` in		\
+-	      `(cd ${srcdir} ; /bin/pwd)`* ) ;;		\
++	    case `(cd $${dir} ; pwd)` in		\
++	      `(cd ${srcdir} ; pwd)`* ) ;;		\
+ 	      * ) rm -rf $${dir} ;;			\
+ 	    esac ;					\
+ 	    case $${dir} in				\
+--- emacs-22.1/leim/Makefile.in	2008-02-10 23:55:31.000000000 +0100
++++ emacs-22.1/leim/Makefile.in	2008-02-10 23:55:41.000000000 +0100
+@@ -207,7 +207,7 @@
+ leim-list.el: ${SUBDIRS} ${TIT-MISC} changed.tit changed.misc ${srcdir}/leim-ext.el
+ 	${RUN-EMACS}  -l ${buildlisppath}/international/quail \
+ 	  -f batch-byte-compile-if-not-done ${TIT-MISC:.elc=.el}
+-	if [ x`(cd ${srcdir} && /bin/pwd)` = x`(/bin/pwd)` ] ; then \
++	if [ x`(cd ${srcdir} && pwd)` = x`(pwd)` ] ; then \
+ 	  ${RUN-EMACS} -l ${buildlisppath}/international/quail \
+ 	    --eval "(update-leim-list-file \".\")" ; \
+ 	else \
+@@ -220,11 +220,11 @@
+ 	if [ ! -d ${INSTALLDIR} ] ; then \
+           ${srcdir}/${dot}${dot}/mkinstalldirs ${INSTALLDIR}; \
+ 	else true; fi
+-	if [ x`(cd ${INSTALLDIR} && /bin/pwd)` != x`(/bin/pwd)` ] ; then \
++	if [ x`(cd ${INSTALLDIR} && pwd)` != x`(pwd)` ] ; then \
+ 	  rm -rf ${INSTALLDIR}/leim-list.el; \
+ 	  rm -rf ${INSTALLDIR}/quail ${INSTALLDIR}/ja-dic ; \
+ 	  echo "Copying leim files to ${INSTALLDIR} ..." ; \
+-	  if [ x`(cd ${srcdir} && /bin/pwd)` = x`(/bin/pwd)` ] ; then \
++	  if [ x`(cd ${srcdir} && pwd)` = x`(pwd)` ] ; then \
+ 	    tar -chf - leim-list.el quail ja-dic \
+ 		| (cd ${INSTALLDIR}; umask 0; tar -xvf - && cat > /dev/null) ;\
+ 	  else \
+--- emacs-22.1/lib-src/Makefile.in	2008-02-10 23:59:08.000000000 +0100
++++ emacs-22.1/lib-src/Makefile.in	2008-02-10 23:59:13.000000000 +0100
+@@ -306,7 +306,7 @@
+ 	@echo
+ 	@echo "Installing utilities run internally by Emacs."
+ 	$(top_srcdir)/mkinstalldirs $(DESTDIR)${archlibdir}
+-	if [ `(cd $(DESTDIR)${archlibdir} && /bin/pwd)` != `/bin/pwd` ]; then \
++	if [ `(cd $(DESTDIR)${archlibdir} && pwd)` != `pwd` ]; then \
+ 	  for file in ${UTILITIES}; do \
+ 	    $(INSTALL_PROGRAM) $(INSTALL_STRIP) $$file $(DESTDIR)${archlibdir}/$$file ; \
+ 	  done ; \
+@@ -321,8 +321,8 @@
+ 	  chown ${gameuser} $(DESTDIR)${gamedir}; \
+ 	  chmod u=rwx,g=rwx,o=rx $(DESTDIR)${gamedir}; \
+ 	fi
+-        if [ `(cd $(DESTDIR)${archlibdir} && /bin/pwd)` \
+-             != `(cd ${srcdir} && /bin/pwd)` ]; then \
++        if [ `(cd $(DESTDIR)${archlibdir} && pwd)` \
++             != `(cd ${srcdir} && pwd)` ]; then \
+ 	  for file in ${SCRIPTS}; do \
+ 	    $(INSTALL_SCRIPT) ${srcdir}/$$file $(DESTDIR)${archlibdir}/$$file; \
+ 	  done ; \
diff --git a/pkgs/applications/editors/emacs-modes/bbdb/builder.sh b/pkgs/applications/editors/emacs-modes/bbdb/builder.sh
new file mode 100644
index 00000000000..b860adbb745
--- /dev/null
+++ b/pkgs/applications/editors/emacs-modes/bbdb/builder.sh
@@ -0,0 +1,12 @@
+source "$stdenv/setup" || exit 1
+
+unpackPhase &&							\
+cd bbdb-*.* && patchPhase &&					\
+./configure --prefix="$out"					\
+            --with-package-dir="$out/share/emacs/site-lisp" &&	\
+make && make install-pkg &&					\
+mkdir -p "$out/info" &&						\
+make -C texinfo install-pkg &&					\
+mv "$out/share/emacs/site-lisp/lisp/bbdb/"*			\
+   "$out/share/emacs/site-lisp" &&				\
+rm -rf "$out/share/emacs/site-lisp/lisp"
diff --git a/pkgs/applications/editors/emacs-modes/bbdb/default.nix b/pkgs/applications/editors/emacs-modes/bbdb/default.nix
new file mode 100644
index 00000000000..3799d0a0f1b
--- /dev/null
+++ b/pkgs/applications/editors/emacs-modes/bbdb/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, emacs, texinfo, ctags}:
+
+stdenv.mkDerivation {
+  name = "bbdb-2.35";
+
+  src = fetchurl {
+    url = http://bbdb.sourceforge.net/bbdb-2.35.tar.gz;
+    sha256 = "3fb1316e2ed74d47ca61187fada550e58797467bd9e8ad67343ed16da769f916";
+  };
+
+  patches = [ ./install-infodir.patch ];
+
+  buildInputs = [emacs texinfo ctags];
+  builder = ./builder.sh;
+
+  meta = {
+    description = ''The Insidious Big Brother Database (BBDB), a
+                    contact management utility for Emacs.'';
+    homepage = http://bbdb.sourceforge.net/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/applications/editors/emacs-modes/bbdb/install-infodir.patch b/pkgs/applications/editors/emacs-modes/bbdb/install-infodir.patch
new file mode 100644
index 00000000000..31ae6b26698
--- /dev/null
+++ b/pkgs/applications/editors/emacs-modes/bbdb/install-infodir.patch
@@ -0,0 +1,28 @@
+--- bbdb-2.35/texinfo/Makefile.in	2001-11-20 09:00:12.000000000 +0100
++++ bbdb-2.35/texinfo/Makefile.in	2008-02-20 12:07:36.000000000 +0100
+@@ -27,22 +27,22 @@ all: info bbdb.dvi
+ install-pkg: uninstall-pkg info
+ 	@if test "x$(SYMLINKS)" = "xno" ; then                         \
+           for i in `ls bbdb.info* ` ; do                               \
+-            $(INSTALL_DATA) $$i $(PACKAGEDIR)/info/ ;                  \
++            $(INSTALL_DATA) $$i $(infodir)/ ;                  \
+           done ;                                                       \
+         else                                                           \
+           if test "x$(LINKPATH)" = "x" ; then                          \
+             for i in `ls bbdb.info* ` ; do                             \
+-              $(LN_S) `pwd`/$$i $(PACKAGEDIR)/info/$$i ;               \
++              $(LN_S) `pwd`/$$i $(infodir)/$$i ;               \
+             done ;                                                     \
+           else                                                         \
+             for i in `ls bbdb.info* ` ; do                             \
+-              $(LN_S) $(LINKPATH)/texinfo/$$i $(PACKAGEDIR)/info/$$i ; \
++              $(LN_S) $(LINKPATH)/texinfo/$$i $(infodir)/$$i ; \
+             done ;                                                     \
+           fi ;                                                         \
+         fi
+ 
+ uninstall-pkg:
+-	-$(RM) $(PACKAGEDIR)/info/bbdb.info*
++	-$(RM) $(infodir)/bbdb.info*
+ 
+ info: bbdb.info
diff --git a/pkgs/applications/editors/joe/default.nix b/pkgs/applications/editors/joe/default.nix
index 0228beb78d6..b6324e5879c 100644
--- a/pkgs/applications/editors/joe/default.nix
+++ b/pkgs/applications/editors/joe/default.nix
@@ -1,9 +1,13 @@
 {stdenv, fetchurl} :
 
 stdenv.mkDerivation {
-name = "joe-3.3";
-src = fetchurl {
-         url = mirror://sourceforge/joe-editor/joe-3.3.tar.gz;
-         md5 = "02221716679c039c5da00c275d61dbf4";
-   };
+  name = "joe-3.3";
+  src = fetchurl {
+    url = mirror://sourceforge/joe-editor/joe-3.3.tar.gz;
+    md5 = "02221716679c039c5da00c275d61dbf4";
+  };
+
+  meta = {
+    homepage = http://joe-editor.sourceforge.net;
+  };
 }
diff --git a/pkgs/applications/editors/nano/default.nix b/pkgs/applications/editors/nano/default.nix
index 28bc07141a3..5e89d8a5bcd 100644
--- a/pkgs/applications/editors/nano/default.nix
+++ b/pkgs/applications/editors/nano/default.nix
@@ -1,11 +1,29 @@
-{stdenv, fetchurl, ncurses, gettext}:
+args: with args;
+stdenv.mkDerivation (rec {
+  pname = "nano";
+  version = "2.0.7";
+
+  name = "${pname}-${version}";
 
-stdenv.mkDerivation {
-  name = "nano-2.0.6";
   src = fetchurl {
-    url = mirror://gnu/nano/nano-2.0.6.tar.gz;
-    sha256 = "0p2xfs4jzj7dvp208qdrxij7x8gbwxgnrdm7zafgpbbg1bvxh40d";
+    url = "mirror://gnu/nano/${name}.tar.gz";
+    sha256 = "5dc783c412c4d1ff463c450d2a2f9e1ea53a43d9ba1dda92bbf5182f60db532f";
   };
   buildInputs = [ncurses gettext];
-  configureFlags = "--enable-tiny";
-}
+#  configureFlags = "--enable-tiny";
+  configureFlags = "
+    --disable-browser 
+    --disable-help 
+    --disable-justify 
+    --disable-mouse 
+    --disable-operatingdir
+    --disable-speller
+    --disable-tabcomp
+    --disable-wrapping
+  ";
+
+  meta = {
+    homepage = http://www.nano-editor.org/;
+    description = "A small, user-friendly console text editor";
+  };
+})
diff --git a/pkgs/applications/editors/nedit/default.nix b/pkgs/applications/editors/nedit/default.nix
index 345eccb0ff9..41028601da7 100644
--- a/pkgs/applications/editors/nedit/default.nix
+++ b/pkgs/applications/editors/nedit/default.nix
@@ -16,4 +16,8 @@ stdenv.mkDerivation {
   buildInputs = [x11 motif libXpm];
 
   buildFlags = if stdenv.system == "i686-linux" then "linux" else "";
+
+  meta = {
+    homepage = http://www.nedit.org;
+  };
 }
diff --git a/pkgs/applications/editors/vim-diet/default.nix b/pkgs/applications/editors/vim-diet/default.nix
index 76c022896fe..7e56d902282 100644
--- a/pkgs/applications/editors/vim-diet/default.nix
+++ b/pkgs/applications/editors/vim-diet/default.nix
@@ -12,4 +12,8 @@ stdenv.mkDerivation {
   buildInputs = [ncurses];
 
   NIX_CFLAGS_COMPILE="-D_BSD_SOURCE=1";
+
+  meta = {
+    homepage = http://www.vim.org;
+  };
 }
diff --git a/pkgs/applications/editors/vim/default.nix b/pkgs/applications/editors/vim/default.nix
index 5a524d6dabe..2f1677622a9 100644
--- a/pkgs/applications/editors/vim/default.nix
+++ b/pkgs/applications/editors/vim/default.nix
@@ -55,7 +55,10 @@ args.stdenv.mkDerivation {
   preBuild="touch src/auto/link.sed";
   configureFlags = args.lib.condConcat "" configFlags check;
 
+  NIX_LDFLAGS = "-lpthread -lutil";
+
   meta = {
     description = "The most popular clone of the VI editor";
+    homepage = http://www.vim.org;
   };
 }
diff --git a/pkgs/applications/graphics/ImageMagick/default.nix b/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix
index 1795d29e7fb..83c7075f8e5 100644
--- a/pkgs/applications/graphics/ImageMagick/default.nix
+++ b/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix
@@ -1,10 +1,10 @@
 args: with args;
-(stdenv.mkDerivation ({
-  name = "ImageMagick-6.3.7-9";
+stdenv.mkDerivation (rec {
+  name = "ImageMagick-6.3.8-5";
 
   src = fetchurl {
-    url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.7-9.tar.bz2;
-    sha256 = "1s38s78xvzm20ib22zypsb9vvzva0kbqjf0pf4c1q89jzg205pk0";
+    url = "ftp://ftp.imagemagick.org/pub/ImageMagick/${name}.tar.bz2";
+    sha256 = "0lsvi2z5b5zam6yvjzsyjpa36rg1c0kczifz73k9b4v8zz9a9vfl";
   };
 
   configureFlags = " --with-dots --with-gs-font-dir="+ ghostscript +
@@ -14,10 +14,13 @@ args: with args;
 
   buildInputs = [bzip2 freetype ghostscript graphviz libjpeg libpng 
 		libtiff libX11 libxml2 zlib libtool] ++ (if args ? tetex then [args.tetex] else [])
-		 ++ (if args ? librsvg then [args.librsvg] else [])
-		;
+		 ++ (if args ? librsvg then [args.librsvg] else []);
+
+  meta = {
+    homepage = http://www.imagemagick.org;
+  };
 } // (if args ? tetex then {
 	preConfigure = "
 		export DVIDecodeDelegate=${args.tetex}/bin/dvips
 	";
-} else {})))
+} else {}))
diff --git a/pkgs/applications/graphics/PythonMagick/default.nix b/pkgs/applications/graphics/PythonMagick/default.nix
index 9096de6baa1..3e01dc7b2db 100644
--- a/pkgs/applications/graphics/PythonMagick/default.nix
+++ b/pkgs/applications/graphics/PythonMagick/default.nix
@@ -10,4 +10,7 @@ stdenv.mkDerivation {
 
   buildInputs = [python boost pkgconfig imagemagick];
 
+  meta = {
+    homepage = http://www.imagemagick.org/script/api.php;
+  };
 }
diff --git a/pkgs/applications/graphics/dia/default.nix b/pkgs/applications/graphics/dia/default.nix
index 606d58865b8..92bc477036a 100644
--- a/pkgs/applications/graphics/dia/default.nix
+++ b/pkgs/applications/graphics/dia/default.nix
@@ -11,5 +11,6 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Gnome Diagram drawing software.";
+    homepage = http://www.gnome.org/projects/dia;
   };
 }
diff --git a/pkgs/applications/graphics/exrdisplay/default.nix b/pkgs/applications/graphics/exrdisplay/default.nix
index 980f94e95d4..f82f07602f8 100644
--- a/pkgs/applications/graphics/exrdisplay/default.nix
+++ b/pkgs/applications/graphics/exrdisplay/default.nix
@@ -1,25 +1,25 @@
-args:
+args: with args;
 
-assert args.fltk.flag_set_gl;
-args.stdenv.mkDerivation {
+assert fltk.flag_set_gl;
+stdenv.mkDerivation {
 
   name ="openexr_viewers-1.0.1";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url =  "http://download.savannah.nongnu.org/releases/openexr/openexr_viewers-1.0.1.tar.gz";
     sha256 = "1w5qbcdp7sw48z1wk2v07f7p14vqqb1m2ncxyxnbkm9f4ab0ymg6";
   };
 
-  inherit (args) fltk mesa;
+  inherit fltk mesa;
 
   configurePhase = "
     # don't know why.. adding these flags it works
     #export CXXFLAGS=`fltk-config --use-gl --cxxflags --ldflags`
     ./configure --prefix=\$out --with-fltk-config=\$fltk/bin/fltk-config";
 
-  buildInputs =(with args; [openexr fltk pkgconfig mesa which openexr_ctl]);
+  buildInputs = [openexr fltk pkgconfig mesa which openexr_ctl];
 
-  meta = {
+  meta = { 
       description = "tool to view OpenEXR images";
       homepage = http://openexr.com;
       license = "BSD-like";
diff --git a/pkgs/applications/graphics/f-spot/default.nix b/pkgs/applications/graphics/f-spot/default.nix
index 0da1d4fe473..40329412449 100644
--- a/pkgs/applications/graphics/f-spot/default.nix
+++ b/pkgs/applications/graphics/f-spot/default.nix
@@ -23,4 +23,8 @@ stdenv.mkDerivation {
   ];
 
   inherit monoDLLFixer gtksharp sqlite libgnomeui;
+
+  meta = {
+    homepage = http://f-spot.org;
+  };
 }
diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix
index a591091d92f..5ba3c11184d 100644
--- a/pkgs/applications/graphics/gimp/default.nix
+++ b/pkgs/applications/graphics/gimp/default.nix
@@ -4,10 +4,10 @@
 }:
 
 stdenv.mkDerivation {
-  name = "gimp-2.4.3";
+  name = "gimp-2.4.4";
   src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gimp/v2.4/gimp-2.4.3.tar.bz2;
-    sha256 = "1m9gdm6wa33x1bymy3c2d006ks0acq1y8a94rc4401f6mrw8jj8b";
+    url = ftp://ftp.gtk.org/pub/gimp/v2.4/gimp-2.4.4.tar.bz2;
+    sha256 = "1mnl30b4p7c2lxi68z3fhwmganhwppyiw7r0m3r90vnakcawfnfh";
   };
   
   buildInputs = [
diff --git a/pkgs/applications/graphics/gocr/0.44.nix b/pkgs/applications/graphics/gocr/0.44.nix
index 4bf7bda50cb..b415fd6fb12 100644
--- a/pkgs/applications/graphics/gocr/0.44.nix
+++ b/pkgs/applications/graphics/gocr/0.44.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 fetchurl {
 		url = http://prdownloads.sourceforge.net/jocr/gocr-0.44.tar.gz;
@@ -9,10 +9,11 @@ fetchurl {
 		buildInputs = [];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "gocr";
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		GPL Optical Character Recognition
diff --git a/pkgs/applications/graphics/gqview/default.nix b/pkgs/applications/graphics/gqview/default.nix
index 292c3b29bdd..a8132e30c72 100644
--- a/pkgs/applications/graphics/gqview/default.nix
+++ b/pkgs/applications/graphics/gqview/default.nix
@@ -17,5 +17,6 @@ stdenv.mkDerivation {
 
   meta = {
     description = "A fast image viewer";
+    homepage = http://gqview.sourceforge.net;
   };
 }
diff --git a/pkgs/applications/graphics/inkscape/default.nix b/pkgs/applications/graphics/inkscape/default.nix
index d09263576e5..b8ff2486330 100644
--- a/pkgs/applications/graphics/inkscape/default.nix
+++ b/pkgs/applications/graphics/inkscape/default.nix
@@ -1,36 +1,19 @@
-{ stdenv, fetchurl, pkgconfig,
-  perl, perlXMLParser,
-  gtk, libXft, fontconfig,
-  libpng, lcms,
-  zlib, popt,
-  boehmgc,
-  libxml2, libxslt,
-  glib,
-  gtkmm, glibmm, libsigcxx,
-  boost,
-  gettext
-}:
+args: with args;
 
-stdenv.mkDerivation {
-  name = "inkscape-0.45";
+stdenv.mkDerivation rec {
+  name = "inkscape-0.45.1";
 
   src = fetchurl {
-    url = mirror://sourceforge/inkscape/inkscape-0.45.1.tar.gz;
+    url = "mirror://sf/inkscape/${name}.tar.gz";
     sha256 = "1y0b9bm8chn6a2ip99dj4dhg0188yn67v571ha0x38wrlmvn4k0d";
   };
 
   buildInputs = [
-    pkgconfig
-    perl perlXMLParser
-    gtk libXft fontconfig
-    libpng
-    zlib popt
-    boehmgc
-    libxml2 libxslt
-    glib
-    gtkmm glibmm libsigcxx
-    lcms
-    boost
-    gettext
+    pkgconfig perl perlXMLParser gtk libXft fontconfig libpng zlib popt boehmgc
+    libxml2 libxslt glib gtkmm glibmm libsigcxx lcms boost gettext
   ];
+
+  meta = {
+    homepage = http://www.inkscape.org;
+  };
 }
diff --git a/pkgs/applications/graphics/xara/default.nix b/pkgs/applications/graphics/xara/default.nix
index e2fdd33c1a6..89ba789524f 100644
--- a/pkgs/applications/graphics/xara/default.nix
+++ b/pkgs/applications/graphics/xara/default.nix
@@ -7,7 +7,7 @@ stdenv.mkDerivation {
     url = http://downloads2.xara.com/opensource/XaraLX-0.7r1766.tar.bz2;
     sha256 = "1rcl7hqvcai586jky7hvzxhnq8q0ka2rsmgiq5ijwclgr5d4ah7n";
   };
-
+    
   buildInputs = [automake autoconf gettext libtool cvs wxGTK gtk pkgconfig libxml2 zip libpng libjpeg shebangfix perl];
 
   inherit freetype libpng libjpeg libxml2;
diff --git a/pkgs/applications/graphics/xfig/builder.sh b/pkgs/applications/graphics/xfig/builder.sh
index de64fbce78f..dc943180508 100644
--- a/pkgs/applications/graphics/xfig/builder.sh
+++ b/pkgs/applications/graphics/xfig/builder.sh
@@ -1,5 +1,4 @@
 source $stdenv/setup
-source $makeWrapper
 
 makeFlags="XAWLIB=-lXaw3d BINDIR=$out/bin XAPPLOADDIR=$out/etc/X11/app-defaults LIBDIR=$out/lib/X11 XFIGDOCDIR=$out/share/doc/xfig MANPATH=$out/man"
 
@@ -16,9 +15,7 @@ installCommand=myInstall
 myInstall() {
     make install.all $makeFlags
 
-    mv $out/bin/xfig $out/bin/.xfig
-
-    makeWrapper $out/bin/.xfig $out/bin/xfig \
+    wrapProgram $out/bin/xfig \
         --set XAPPLRESDIR $out/etc/X11/app-defaults
 }
 
diff --git a/pkgs/applications/graphics/xfig/default.nix b/pkgs/applications/graphics/xfig/default.nix
index 0d94d4a655d..9b0d009e417 100644
--- a/pkgs/applications/graphics/xfig/default.nix
+++ b/pkgs/applications/graphics/xfig/default.nix
@@ -11,13 +11,12 @@ stdenv.mkDerivation {
 
   builder = ./builder.sh;
 
-  buildInputs = [imake x11 libXpm libXmu libXi libXp Xaw3d libpng libjpeg];
-
-  inherit makeWrapper;
+  buildInputs = [imake x11 libXpm libXmu libXi libXp Xaw3d libpng libjpeg makeWrapper];
 
   NIX_CFLAGS_COMPILE = "-I${libXpm}/include/X11";
 
   meta = {
     description = "An interactive drawing tool for X11";
+    homepage = http://xfig.org;
   };
 }
diff --git a/pkgs/applications/graphics/xscreensaver/5.04.nix b/pkgs/applications/graphics/xscreensaver/5.04.nix
index 132bf997e18..afdab99999f 100644
--- a/pkgs/applications/graphics/xscreensaver/5.04.nix
+++ b/pkgs/applications/graphics/xscreensaver/5.04.nix
@@ -1,4 +1,4 @@
-args : with args; with builderDefs (args // {
+args : with args; let localDefs = builderDefs (args // {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://www.jwz.org/xscreensaver/xscreensaver-5.04.tar.gz;
@@ -20,6 +20,7 @@ args : with args; with builderDefs (args // {
 				" --with-hackdir=\$out/share/xscreensaver-hacks ")
 		];
 	}) null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 	preConfigure = FullDepEntry ("
 		sed -e 's%@GTK_DATADIR@%@datadir@% ; s%@PO_DATADIR@%@datadir@%' "+
@@ -29,7 +30,7 @@ in
 stdenv.mkDerivation rec {
 	name = "xscreensaver-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [preConfigure doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [preConfigure doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	The X screensaver daemon. Run xscreensaver-demo to configure.
diff --git a/pkgs/applications/jedit/default.nix b/pkgs/applications/jedit/default.nix
index 3d694ee3ed7..c43b7f86914 100644
--- a/pkgs/applications/jedit/default.nix
+++ b/pkgs/applications/jedit/default.nix
@@ -1,9 +1,9 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "jedit-4.2";
 
-  src = args.fetchurl {
-    url = http://kent.dl.sourceforge.net/sourceforge/jedit/jedit42source.tar.gz;
+  src = fetchurl {
+    url = mirror://sf/jedit/jedit42source.tar.gz;
     sha256 = "1ckqghsw2r30kfkqfgjl4k47gdwpz8c1h85haw0y0ymq4rqh798j";
   };
 
@@ -18,11 +18,11 @@ args.stdenv.mkDerivation {
     cp modes/catalog \$out/lib/modes
   ";
 
-  buildInputs =(with args; [ant]);
+  buildInputs = [ant];
 
   meta = { 
       description = "really nice programmers editor written in Java. Give it a try";
-      homepage = http://sourceforge.net/project/showfiles.php?group_id=588;
+      homepage = http://www.jedit.org;
       license = "GPL";
   };
 }
diff --git a/pkgs/applications/jedit/wrapper.nix b/pkgs/applications/jedit/wrapper.nix
index ff8f6abacfc..8af3d96918d 100644
--- a/pkgs/applications/jedit/wrapper.nix
+++ b/pkgs/applications/jedit/wrapper.nix
@@ -1,18 +1,18 @@
-args:
-args.stdenv.mkDerivation {
-    name = args.jedit.name+"_startscript";
+args: with args;
+stdenv.mkDerivation {
+    name = jedit.name+"_startscript";
 
-    java = args.jre+"/bin/java";
-    jeditjar = args.jedit+"/lib/jedit.jar";
+    java = jre+"/bin/java";
+    jeditjar = jedit+"/lib/jedit.jar";
 
     phases = "buildPhase";
 
     buildPhase = "
 ensureDir \$out/bin
-cat > \$out/bin/${args.jedit.name} << EOF
+cat > \$out/bin/${jedit.name} << EOF
 #!/bin/sh
 exec $java -jar $jeditjar \\$*
 EOF
-  chmod +x \$out/bin/${args.jedit.name}
+  chmod +x \$out/bin/${jedit.name}
 ";
 }
diff --git a/pkgs/applications/misc/acrobat-reader/default.nix b/pkgs/applications/misc/acrobat-reader/default.nix
index 1cbdd09bc58..3c2e5bafeb2 100644
--- a/pkgs/applications/misc/acrobat-reader/default.nix
+++ b/pkgs/applications/misc/acrobat-reader/default.nix
@@ -18,4 +18,8 @@ stdenv.mkDerivation {
     (if xineramaSupport then libXinerama else null)
   ];
   inherit fastStart;
+
+  meta = {
+    homepage = http://www.adobe.com/products/reader;
+  };
 }
diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix
index e722d4ff9db..aa50f67719c 100644
--- a/pkgs/applications/misc/blender/default.nix
+++ b/pkgs/applications/misc/blender/default.nix
@@ -1,18 +1,18 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "blender-2.45";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://download.blender.org/source/blender-2.45.tar.gz;
     sha256 = "1bi7j1fcvrpb96sjpcbm4sldf359sgskfhv7a8pgcxj0bnhp47wj";
   };
 
   phases="unpackPhase buildPhase";
 
-  inherit (args) scons SDL freetype openal python openexr mesa;
+  inherit scons SDL freetype openal python openexr mesa;
 
-  buildInputs =(with args; [python scons
-         gettext libjpeg libpng zlib freetype /* fmod smpeg */ freealut openal x11 mesa inputproto libtiff libXi ]);
+  buildInputs = [python scons
+         gettext libjpeg libpng zlib freetype /* fmod smpeg */ freealut openal x11 mesa inputproto libtiff libXi ];
 
   # patch SConstruct so that we can pass on additional include.  Either blender
   # or openEXR is broken. I think OpenEXR should use include "" isntead of <> to
diff --git a/pkgs/applications/misc/bluez-firmware/default.nix b/pkgs/applications/misc/bluez-firmware/default.nix
index 91b8dbdf8f4..f38a269408d 100644
--- a/pkgs/applications/misc/bluez-firmware/default.nix
+++ b/pkgs/applications/misc/bluez-firmware/default.nix
@@ -6,4 +6,8 @@ stdenv.mkDerivation {
     url = http://bluez.sf.net/download/bluez-firmware-1.1.tar.gz;
     md5 = "2f1c2d939108c865dd07bae3e819c573";
   };
+
+  meta = {
+    homepage = http://www.bluez.org;
+  };
 }
diff --git a/pkgs/applications/misc/bluez-utils/default.nix b/pkgs/applications/misc/bluez-utils/default.nix
index 7cf88851fc3..06bc2b2555f 100644
--- a/pkgs/applications/misc/bluez-utils/default.nix
+++ b/pkgs/applications/misc/bluez-utils/default.nix
@@ -7,4 +7,8 @@ stdenv.mkDerivation {
     md5 = "ae3729ab5592be06ed01b973d4b3e9fe";
   };
   buildInputs = [bluezLibs];
+
+  meta = {
+    homepage = http://www.bluez.org;
+  };
 }
diff --git a/pkgs/applications/misc/d4x/default.nix b/pkgs/applications/misc/d4x/default.nix
index 5a20893e9f3..f4ad3cc8421 100644
--- a/pkgs/applications/misc/d4x/default.nix
+++ b/pkgs/applications/misc/d4x/default.nix
@@ -1,10 +1,10 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "d4x-2.5.7.1";
   
-  inherit (args) boost;
+  inherit boost;
 
-  src = args.fetchurl {
+  src = fetchurl {
     url =  http://d4x.krasu.ru/files/d4x-2.5.7.1.tar.bz2;
     sha256 = "1i1jj02bxynisqapv31481sz9jpfp3f023ky47spz1v1wlwbs13m";
   };
@@ -12,7 +12,7 @@ args.stdenv.mkDerivation {
   configurePhase = "./configure --prefix=\$out "
     + " --with-boost-libdir=\$boost/lib"
     + " --with-boost-includedir=\$boost/include";
-  buildInputs =(with args; [gtk glib pkgconfig openssl boost]);
+  buildInputs = [gtk glib pkgconfig openssl boost];
 
   meta = { 
       description = "graphical download manager";
diff --git a/pkgs/applications/misc/djvulibre/default.nix b/pkgs/applications/misc/djvulibre/default.nix
index 611f6f08909..81aa12e59f6 100644
--- a/pkgs/applications/misc/djvulibre/default.nix
+++ b/pkgs/applications/misc/djvulibre/default.nix
@@ -1,7 +1,4 @@
-{stdenv, fetchurl,
-qt, libX11, libjpeg, libtiff, libpng, ghostscript, zlib, libungif,
-x11, mesa
-}:
+args: with args;
 stdenv.mkDerivation {
   name = "djvulibre-3.5.19";
 
@@ -18,6 +15,7 @@ stdenv.mkDerivation {
 	DjVu libre - a library and a viewer for djvu format - compression for
 	scanned images.
 ";
+    homepage = http://djvu.sourceforge.net;
   };
 }
 
diff --git a/pkgs/applications/misc/fetchmail/default.nix b/pkgs/applications/misc/fetchmail/default.nix
index 95fc61668fc..9639ff19fb0 100644
--- a/pkgs/applications/misc/fetchmail/default.nix
+++ b/pkgs/applications/misc/fetchmail/default.nix
@@ -1,7 +1,14 @@
-args: with args; stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name="fetchmail-6.3.8";
   src = fetchurl {
     url = http://download.berlios.de/fetchmail/fetchmail-6.3.8.tar.bz2;
     sha256 = "5612f9af367f641e0efd084f44fcf1889669e711dbd8c60f6b7953e494d1b09b";
   };
+
+  patches = [ ./security-fix.patch ];
+
+  meta = {
+    homepage = http://www.fetchmail.info;
+  };
 }
diff --git a/pkgs/applications/misc/fetchmail/security-fix.patch b/pkgs/applications/misc/fetchmail/security-fix.patch
new file mode 100644
index 00000000000..4d48c7aa055
--- /dev/null
+++ b/pkgs/applications/misc/fetchmail/security-fix.patch
@@ -0,0 +1,11 @@
+--- old/sink.c	(revision 5118)
++++ new/sink.c	(revision 5119)
+@@ -262,7 +262,7 @@
+     const char *md1 = "MAILER-DAEMON", *md2 = "MAILER-DAEMON@";
+ 
+     /* don't bounce in reply to undeliverable bounces */
+-    if (!msg->return_path[0] ||
++    if (!msg || !msg->return_path[0] ||
+ 	strcmp(msg->return_path, "<>") == 0 ||
+ 	strcasecmp(msg->return_path, md1) == 0 ||
+ 	strncasecmp(msg->return_path, md2, strlen(md2)) == 0)
diff --git a/pkgs/applications/misc/flite/default.nix b/pkgs/applications/misc/flite/default.nix
index 291cce6c1f9..ad3b9df164d 100644
--- a/pkgs/applications/misc/flite/default.nix
+++ b/pkgs/applications/misc/flite/default.nix
@@ -1,8 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "flite-1.3-release";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://www.speech.cs.cmu.edu/flite/packed/flite-1.3/flite-1.3-release.tar.gz;
     sha256 = "12wanxx57bbqgkag54dlqzv6h2kr9053p0z8mkxs0mqy03vja8lj";
   };
@@ -18,8 +18,6 @@ args.stdenv.mkDerivation {
     cp -r bin \$out
   ";
 
-  buildInputs = (with args; []);
-
   meta = { 
       description = "Flite text to speech engine";
       homepage = http://www.speech.cs.cmu.edu/flite/download.html;
diff --git a/pkgs/applications/misc/freemind/default.nix b/pkgs/applications/misc/freemind/default.nix
index 79b00204fd4..b7bc3f3c8dd 100644
--- a/pkgs/applications/misc/freemind/default.nix
+++ b/pkgs/applications/misc/freemind/default.nix
@@ -1,15 +1,15 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "freemind-0.9.0_Beta_13";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://downloads.sourceforge.net/freemind/freemind-src-0.9.0_Beta_13_icon_butterfly.tar.gz;
     sha256 = "00389bhg73qknydrq0f3bskb5lyrdg2p58mnnp19wdvzzmfbic4w";
   };
 
-  buildInputs =(with args; [jdk ant]);
+  buildInputs = [jdk ant];
 
-  inherit (args) jre;
+  inherit jre;
 
   phases="buildPhase installPhase";
 
diff --git a/pkgs/applications/misc/gkrellm/default.nix b/pkgs/applications/misc/gkrellm/default.nix
new file mode 100644
index 00000000000..ae5386dcd1e
--- /dev/null
+++ b/pkgs/applications/misc/gkrellm/default.nix
@@ -0,0 +1,33 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "gkrellm-2.3.1";
+  src = fetchurl {
+    url = http://members.dslextreme.com/users/billw/gkrellm/gkrellm-2.3.1.tar.bz2;
+    sha256 = "1a2a7e3ee9d1f2d7305da0d33d9be71ffe5d1903ed6a9c69cf77ffe10fc95b4d";
+  };
+
+  buildInputs = [gettext pkgconfig glib gtk libX11 libSM libICE];
+
+  # Makefiles are patched to fix references to `/usr/X11R6' and to add
+  # `-lX11' to make sure libX11's store path is in the RPATH.
+  patchPhase = ''
+     echo "patching makefiles..."
+     for i in Makefile src/Makefile server/Makefile
+     do
+       cat "$i" | sed -e "s|/usr/X11R6|${libX11}|g ;
+                          s|-lICE|-lX11 -lICE|g" > ",,tmp" &&	\
+       mv ",,tmp" "$i"
+     done '';
+
+  buildPhase = ''
+     make PREFIX="$out" '';
+  installPhase = ''
+     make install PREFIX="$out" '';
+
+  meta = {
+    description = "GKrellM, a themeable process stack of system monitors.";
+    homepage = http://members.dslextreme.com/users/billw/gkrellm/gkrellm.html;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/applications/misc/gphoto2/default.nix b/pkgs/applications/misc/gphoto2/default.nix
index ef70b54384a..e6dad337eb3 100644
--- a/pkgs/applications/misc/gphoto2/default.nix
+++ b/pkgs/applications/misc/gphoto2/default.nix
@@ -9,4 +9,8 @@ stdenv.mkDerivation rec {
   buildInputs = [pkgconfig libgphoto2 libexif popt gettext];
 # There is a bug in 2.4.0 configure.ac (in their m4 macroses)
   patchPhase = "sed -e 's@_tmp=true@_tmp=false@' -i configure configure.ac";
+
+  meta = {
+    homepage = http://www.gphoto.org;
+  };
 }
diff --git a/pkgs/applications/misc/gv/default.nix b/pkgs/applications/misc/gv/default.nix
index 2a0603e27c9..4566761e690 100644
--- a/pkgs/applications/misc/gv/default.nix
+++ b/pkgs/applications/misc/gv/default.nix
@@ -13,4 +13,8 @@ stdenv.mkDerivation {
   postConfigure = [ "sed 's|\\<gs\\>|${ghostscriptX}/bin/gs|g' -i src/*.am src/*.ad" ];
 
   inherit ghostscriptX;
+
+  meta = {
+    homepage = http://wwwthep.physik.uni-mainz.de/~plass/gv;
+  };
 }
diff --git a/pkgs/applications/misc/hello/ex-1/default.nix b/pkgs/applications/misc/hello/ex-1/default.nix
index 6411e1a845e..51b2ccb58ed 100644
--- a/pkgs/applications/misc/hello/ex-1/default.nix
+++ b/pkgs/applications/misc/hello/ex-1/default.nix
@@ -11,5 +11,6 @@ stdenv.mkDerivation {
 
   meta = {
     description = "GNU Hello, a classic computer science tool";
+    homepage = http://www.gnu.org/software/hello/;
   };
 }
diff --git a/pkgs/applications/misc/lyx/default.nix b/pkgs/applications/misc/lyx/default.nix
new file mode 100644
index 00000000000..246b8caa3ca
--- /dev/null
+++ b/pkgs/applications/misc/lyx/default.nix
@@ -0,0 +1,18 @@
+# I haven't put much effort into this expressions .. so some optional depencencies may be missing - Marc
+args:
+args.stdenv.mkDerivation {
+  name = "lyx-1.5.3";
+
+  src = args.fetchurl {
+    url = http://lyx.cybermirror.org/stable/lyx-1.5.3.tar.bz2;
+    sha256 = "1q0xlhrvj87iw9rk9z2vfka4jw5pw7n5fsmmiyzram9y4hghavav";
+  };
+
+  buildInputs =(with args; [tetex qt python]);
+
+  meta = { 
+      description = "WYSIWYM frontend for LaTeX, DocBook, etc.";
+      homepage = "http://www.lyx.org";
+      license = "GPL2";
+  };
+}
diff --git a/pkgs/applications/misc/maxima/default.nix b/pkgs/applications/misc/maxima/default.nix
index 9b2fe291310..72770c9a918 100644
--- a/pkgs/applications/misc/maxima/default.nix
+++ b/pkgs/applications/misc/maxima/default.nix
@@ -4,15 +4,14 @@ stdenv.mkDerivation {
 
   src =	fetchurl {
 		name = "maxima-5.13.0.tar.gz";
-		url = http://downloads.sourceforge.net/maxima/maxima-5.13.0.tar.gz?modtime=1188046120&big_mirror=1;
+		url = mirror://sf/maxima/maxima-5.13.0.tar.gz;
 		sha256 = "11zidbbp4cbgsmdfyf9w0j7345ydka469ba0my7p73zqhnby09cn";
 	};
 
   buildInputs =[clisp];
 
   meta = {
-    description = "
-	Maxima computer algebra system
-";
+    description = "Maxima computer algebra system";
+    homepage = http://maxima.sourceforge.net;
   };
 }
diff --git a/pkgs/applications/misc/mrxvt/default.nix b/pkgs/applications/misc/mrxvt/default.nix
index aaabef2b6b8..f58fff56bc0 100644
--- a/pkgs/applications/misc/mrxvt/default.nix
+++ b/pkgs/applications/misc/mrxvt/default.nix
@@ -10,11 +10,11 @@ let
     };
 };
 
-in args.stdenv.mkDerivation {
+in stdenv.mkDerivation {
 
   inherit (co) buildInputs configureFlags;
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = mirror://sourceforge/materm/mrxvt-0.5.3.tar.gz;
     sha256 = "04flnn58hp4qvvk6jzyipsj13v1qyrjabgbw5laz5cqxvxzpncp2";
   };
diff --git a/pkgs/applications/misc/pgadmin/default.nix b/pkgs/applications/misc/pgadmin/default.nix
new file mode 100644
index 00000000000..624c1dfcb61
--- /dev/null
+++ b/pkgs/applications/misc/pgadmin/default.nix
@@ -0,0 +1,18 @@
+args: with args;
+stdenv.mkDerivation {
+  name = "pgadmin3-1.8.1";
+
+  src = fetchurl {
+    name = "pgadmin3-v1.8.1.tar.gz";
+    url = "http://ftp3.de.postgresql.org/pub/Mirrors/ftp.postgresql.org//pgadmin3/release/v1.8.1/src/pgadmin3-1.8.1.tar.gz";
+    sha256 = "1vnpbgb2ksvcgbzab4jjspwvs5cvam53azinfavjad4kpjczdywb";
+  };
+
+  buildInputs = [postgresql wxGTK libxml2 libxslt openssl];
+
+  meta = { 
+      description = "postgresql admin gui tool";
+      homepage = http://www.pgadmin.org;
+      license = "GPL2";
+    };
+}
diff --git a/pkgs/applications/misc/procmail/default.nix b/pkgs/applications/misc/procmail/default.nix
index b1d54ef5fc9..50767a7dde8 100644
--- a/pkgs/applications/misc/procmail/default.nix
+++ b/pkgs/applications/misc/procmail/default.nix
@@ -1,4 +1,5 @@
-args: with args; stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name="procmail-3.22";
   buildInputs = [stdenv.gcc.libc];
   installPhase = "
diff --git a/pkgs/applications/misc/pstree/default.nix b/pkgs/applications/misc/pstree/default.nix
index c59148e854e..c26876f2fcb 100644
--- a/pkgs/applications/misc/pstree/default.nix
+++ b/pkgs/applications/misc/pstree/default.nix
@@ -1,14 +1,13 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "pstree-2.31";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://fresh.t-systems-sfr.com/unix/src/misc/pstree-2.31.tar.gz;
     sha256 = "1zzz29gsyra8csk54cyq0pcdxxg3l4gmksq8q1skv2z84g2yxdhh";
   };
 
   unpackPhase="unpackFile \$src; sourceRoot=.";
-  #buildInputs =(with args; []);
   
   buildPhase="pwd; gcc -o pstree pstree.c";
   installPhase="ensureDir \$out/bin; cp pstree \$out/bin";
diff --git a/pkgs/applications/misc/rxvt/default.nix b/pkgs/applications/misc/rxvt/default.nix
index c875e55a8cb..58366c6aa04 100644
--- a/pkgs/applications/misc/rxvt/default.nix
+++ b/pkgs/applications/misc/rxvt/default.nix
@@ -1,13 +1,13 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "rxvt-2.6.4";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://downloads.sourceforge.net/rxvt/rxvt-2.6.4.tar.gz;
     sha256 = "0hi29whjv8v11nkjbq1i6ms411v6csykghmlpkmayfjn9nxr02xg";
   };
 
-  buildInputs =(with args; [ libX11 libXt ]);
+  buildInputs = [ libX11 libXt ];
 
   meta = { 
       description = "colour vt102 terminal emulator with less features and lower memory consumption";
diff --git a/pkgs/applications/misc/rxvt_unicode/default.nix b/pkgs/applications/misc/rxvt_unicode/default.nix
index c128ca11a5a..6dc6e30b815 100644
--- a/pkgs/applications/misc/rxvt_unicode/default.nix
+++ b/pkgs/applications/misc/rxvt_unicode/default.nix
@@ -1,15 +1,20 @@
-args: with args; stdenv.mkDerivation {
-  name = "rxvt-unicode-8.9";
- 
-  buildInputs = [ libX11 libXt libXft perl ];
- 
-  src = fetchurl {
-    url = http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-8.9.tar.bz2;
-    sha256 = "89858c5bfe72dba037cd3435b2221269580f3c699553fe24ee468ddec8831d27";
+args: with args;
+stdenv.mkDerivation (rec {
+  pname = "rxvt-unicode";
+  version = "9.02";
+
+  name = "${pname}-${version}";
+
+ src = fetchurl {
+    url = "http://dist.schmorp.de/rxvt-unicode/Attic/${name}.tar.bz2";
+    sha256 = "234b9a3e3f88c4984b1e909f8028638fc3b61d801d8afaa9cd08154b1a480a31";
   };
- 
+
+  buildInputs = [ libX11 libXt libXft ];
+  configureFlags = "--disable-perl";
+
   meta = {
     description = "rxvt-unicode is a clone of the well known terminal emulator rxvt.";
     homepage = "http://software.schmorp.de/pkg/rxvt-unicode.html";
   };
-}
+})
diff --git a/pkgs/applications/misc/sbagen/default.nix b/pkgs/applications/misc/sbagen/default.nix
index d78742bfc5b..6bf28580b35 100644
--- a/pkgs/applications/misc/sbagen/default.nix
+++ b/pkgs/applications/misc/sbagen/default.nix
@@ -1,5 +1,5 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "sbagen-1.4.4";
 
   buildPhases="buildPhase installPhase";
@@ -14,7 +14,7 @@ args.stdenv.mkDerivation {
   
    ";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://uazu.net/sbagen/sbagen-1.4.4.tgz;
     sha256 = "0w62yk1b0hq79kl0angma897yqa8p1ww0dwydf3zlwav333prkd2";
   };
diff --git a/pkgs/applications/misc/synergy/default.nix b/pkgs/applications/misc/synergy/default.nix
index 7872c6abaaf..ea3fb6e7a91 100644
--- a/pkgs/applications/misc/synergy/default.nix
+++ b/pkgs/applications/misc/synergy/default.nix
@@ -1,19 +1,19 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "synergy-cvs";
 
-  src = args.fetchcvs {
+  src = fetchcvs {
     url = ":pserver:anonymous@synergy2.cvs.sourceforge.net:/cvsroot/synergy2";
     module = "synergy";
     date = "NOW";
     sha256 = "ef8e2ebfda6e43240051a7af9417092b2af50ece8b5c6c3fbd908ba91c4fe068";
   };
 
-  buildInputs =(with args; [x11 xextproto libXtst inputproto]);
+  buildInputs = [x11 xextproto libXtst inputproto];
 
   meta= { 
       description = "share mouse keyboard and clipboard between computers";
-      homepage = http://synergy2;
+      homepage = http://synergy2.sourceforge.net;
       license = "GPL";
   };
 }
diff --git a/pkgs/applications/misc/wordnet/default.nix b/pkgs/applications/misc/wordnet/default.nix
new file mode 100644
index 00000000000..7300959fde7
--- /dev/null
+++ b/pkgs/applications/misc/wordnet/default.nix
@@ -0,0 +1,25 @@
+{stdenv, fetchurl, tcl, tk, x11, makeWrapper}:
+
+stdenv.mkDerivation {
+  name = "wordnet-3.0";
+  src = fetchurl {
+    url = http://wordnet.princeton.edu/3.0/WordNet-3.0.tar.bz2;
+    sha256 = "6c492d0c7b4a40e7674d088191d3aa11f373bb1da60762e098b8ee2dda96ef22";
+  };
+
+  buildInputs = [tcl tk x11 makeWrapper];
+
+  # Needs the path to `tclConfig.sh' and `tkConfig.sh'.
+  configureFlags = "--with-tcl=" + tcl + "/lib " +
+                   "--with-tk="  + tk  + "/lib";
+
+  postInstall = ''
+    wrapProgram $out/bin/wishwn --set TK_LIBRARY "${tk}/lib/tk8.4"
+    wrapProgram $out/bin/wnb    --prefix PATH : "$out/bin"
+  '';
+
+  meta = {
+    description = "WordNet, a lexical database for the English language.";
+    homepage = http://wordnet.princeton.edu/;
+  };
+}
diff --git a/pkgs/applications/misc/xchm/default.nix b/pkgs/applications/misc/xchm/default.nix
index ccd14b1f652..d9ffe8515db 100644
--- a/pkgs/applications/misc/xchm/default.nix
+++ b/pkgs/applications/misc/xchm/default.nix
@@ -10,5 +10,6 @@ stdenv.mkDerivation {
 
   meta = {
     description = "A viewer for Microsoft HTML Help files";
+    homepage = http://xchm.sourceforge.net;
   };
 }
diff --git a/pkgs/applications/misc/xterm/default.nix b/pkgs/applications/misc/xterm/default.nix
index c1be706b547..30b3e6cbda8 100644
--- a/pkgs/applications/misc/xterm/default.nix
+++ b/pkgs/applications/misc/xterm/default.nix
@@ -4,8 +4,13 @@ stdenv.mkDerivation rec {
   name = "xterm-231";
   src = fetchurl {
     url = "ftp://invisible-island.net/xterm/${name}.tgz";
-	sha256 = "0qlz5nkdqkahdg9kbd1ni96n69srj1pd9yggwrw3z0kghaajb2sr";
+    sha256 = "0qlz5nkdqkahdg9kbd1ni96n69srj1pd9yggwrw3z0kghaajb2sr";
   };
   buildInputs = [libXaw xproto libXt libX11 libSM libICE ncurses];
+  configureFlags = ["--enable-wide-chars"];
+
+  meta = {
+    homepage = http://invisible-island.net/xterm;
+  };
 }
 
diff --git a/pkgs/applications/networking/browsers/firefox3b1/binary.nix b/pkgs/applications/networking/browsers/firefox-3/binary.nix
index 73e002435b8..73e002435b8 100644
--- a/pkgs/applications/networking/browsers/firefox3b1/binary.nix
+++ b/pkgs/applications/networking/browsers/firefox-3/binary.nix
diff --git a/pkgs/applications/networking/browsers/firefox3b1/builder.sh b/pkgs/applications/networking/browsers/firefox-3/builder.sh
index 66f1059d657..66f1059d657 100644
--- a/pkgs/applications/networking/browsers/firefox3b1/builder.sh
+++ b/pkgs/applications/networking/browsers/firefox-3/builder.sh
diff --git a/pkgs/applications/networking/browsers/firefox-3/default.nix b/pkgs/applications/networking/browsers/firefox-3/default.nix
new file mode 100644
index 00000000000..88315aa0c31
--- /dev/null
+++ b/pkgs/applications/networking/browsers/firefox-3/default.nix
@@ -0,0 +1,64 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "firefox-3.0-beta-3";
+
+  src = fetchurl {
+    url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b3/source/firefox-3.0b3-source.tar.bz2;
+    sha1 = "142f28a41077e77d61423a5ca6585a45737ff999";
+  };
+
+  buildInputs = [
+    pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo
+    python curl coreutils dbus dbus_glib pango freetype fontconfig 
+    libX11 libXrender libXft libXt
+  ];
+
+  configureFlags = [
+    "--enable-application=browser"
+    "--enable-optimize"
+    "--disable-debug"
+    "--enable-strip"
+    "--with-system-jpeg"
+    "--with-system-zlib"
+    #"--with-system-png" <-- "--with-system-png won't work because the system's libpng doesn't have APNG support"
+    #"--enable-system-cairo" <-- disabled for now because Firefox needs a alpha version of Cairo
+  ];
+
+  postInstall = ''
+    export dontPatchELF=1;
+
+    # Strip some more stuff
+    strip -S $out/lib/*/* || true
+
+    # Fix some references to /bin paths in the Firefox shell script.
+    substituteInPlace $out/bin/firefox \
+        --replace /bin/pwd "$(type -tP pwd)" \
+        --replace /bin/ls "$(type -tP ls)"
+    
+    # This fixes starting Firefox when there already is a running
+    # instance.  The `firefox' wrapper script actually expects to be
+    # in the same directory as `run-mozilla.sh', apparently.
+    libDir=$(cd $out/lib && ls -d firefox-[0-9]*)
+    test -n "$libDir"
+    cd $out/bin
+    mv firefox ../lib/$libDir/
+    ln -s ../lib/$libDir/firefox .
+
+    # Register extensions etc.
+    echo "running firefox -register..."
+    (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false
+
+    # Put the Firefox icon in the right place.
+    ensureDir $out/lib/$libDir/chrome/icons/default
+    ln -s ../../../icons/default.xpm  $out/lib/$libDir/chrome/icons/default/
+  ''; # */
+
+  meta = {
+    description = "Mozilla Firefox - the browser, reloaded";
+    homepage = http://www.mozilla.com/en-US/firefox/;
+  };
+
+  passthru = {inherit gtk;};
+}
+
diff --git a/pkgs/applications/networking/browsers/firefox/default.nix b/pkgs/applications/networking/browsers/firefox/default.nix
index 17c26cf8f51..81545bc5bd1 100644
--- a/pkgs/applications/networking/browsers/firefox/default.nix
+++ b/pkgs/applications/networking/browsers/firefox/default.nix
@@ -10,12 +10,12 @@
 }:
 
 stdenv.mkDerivation {
-  name = "firefox-2.0.0.11";
+  name = "firefox-2.0.0.12";
 
   builder = ./builder.sh;
   src = fetchurl {
-    url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.11/source/firefox-2.0.0.11-source.tar.bz2;
-    sha1 = "6d070bf04f1a037b621237d02ef9be7802a51bf1";
+    url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.12/source/firefox-2.0.0.12-source.tar.bz2;
+    sha1 = "766f3e945145d9e4d36d5eb3e551b5eb44a1d862";
   };
 
   buildInputs = [
diff --git a/pkgs/applications/networking/browsers/firefox3b1/3b2.nix b/pkgs/applications/networking/browsers/firefox3b1/3b2.nix
deleted file mode 100644
index 29ea90d9d89..00000000000
--- a/pkgs/applications/networking/browsers/firefox3b1/3b2.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-args: with args;
-
-stdenv.mkDerivation {
-  name = "firefox-3b2";
-
-  src = 
-	fetchurl {
-		url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b2/source/firefox-3.0b2-source.tar.bz2;
-		sha256 = "0mszad8j35wvzi67dp3j9sznqkgb9b3in22c5790g9b9pv6xk8jp";
-	};
-
-  buildInputs = [
-    pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo
-    python curl coreutils dbus dbus_glib pango freetype fontconfig 
-    libX11 libXrender libXft libXt
-  ];
-
-  configureFlags = [
-    "--enable-application=browser"
-    "--enable-optimize"
-    "--disable-debug"
-    "--enable-xft"
-    "--disable-freetype2"
-    "--enable-svg"
-    "--enable-canvas"
-    "--enable-strip"
-    "--enable-default-toolkit=cairo-gtk2"
-    "--with-system-jpeg"
-    "--with-system-zlib"
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-*     "--enable-system-cairo"
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-  ]
-;
-
-  postInstall = "
-    export dontPatchELF=1;
-    sed -e 's@moz_libdir=.*@&\\nexport PATH=\$PATH:${coreutils}/bin@' -i \$out/bin/firefox 
-    sed -e 's@`/bin/pwd@`${coreutils}/bin/pwd@' -i \$out/bin/firefox 
-    sed -e 's@`/bin/ls@`${coreutils}/bin/ls@' -i \$out/bin/firefox 
-
-    strip -S \$out/lib/*/* || true
-
-    libDir=\$(cd \$out/lib && ls -d firefox-[0-9]*)
-    test -n \"\$libDir\"
-
-    echo \"running firefox -register...\"
-    (cd \$out/lib/\$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false
-  ";
-
-  meta = {
-    description = "Mozilla Firefox - the browser, reloaded";
-  };
-
-  passthru = {inherit gtk;};
-}
-
diff --git a/pkgs/applications/networking/browsers/firefox3b1/default.nix b/pkgs/applications/networking/browsers/firefox3b1/default.nix
deleted file mode 100644
index 834376bb160..00000000000
--- a/pkgs/applications/networking/browsers/firefox3b1/default.nix
+++ /dev/null
@@ -1,57 +0,0 @@
-args: with args;
-
-stdenv.mkDerivation {
-  name = "firefox-3b1";
-
-  src = 
-	fetchurl {
-		url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b1/source/firefox-3.0b1-source.tar.bz2;
-		sha256 = "02mh87aidr33gp33fasq9xx23jqf7lm7yfsb2a36ijnd3bpnssn9";
-	};
-
-  buildInputs = [
-    pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo
-    python curl coreutils
-  ];
-
-  configureFlags = [
-    "--enable-application=browser"
-    "--enable-optimize"
-    "--disable-debug"
-    "--enable-xft"
-    "--disable-freetype2"
-    "--enable-svg"
-    "--enable-canvas"
-    "--enable-strip"
-    "--enable-default-toolkit=cairo-gtk2"
-    "--with-system-jpeg"
-    "--with-system-zlib"
-    /*"--enable-system-cairo"*/
-  ]
-;
-
-  postConfigure = "
-	cp -r . /tmp/ff3b1-build
-  ";
-
-  postInstall = "
-    sed -e 's@moz_libdir=.*@&\\nexport PATH=\$PATH:${coreutils}/bin@' -i \$out/bin/firefox 
-    sed -e 's@`/bin/pwd@`${coreutils}/bin/pwd@' -i \$out/bin/firefox 
-    sed -e 's@`/bin/ls@`${coreutils}/bin/ls@' -i \$out/bin/firefox 
-
-    strip -S \$out/lib/*/* || true
-
-    libDir=\$(cd \$out/lib && ls -d firefox-[0-9]*)
-    test -n \"\$libDir\"
-
-    echo \"running firefox -register...\"
-    (cd \$out/lib/\$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false
-  ";
-
-  meta = {
-    description = "Mozilla Firefox - the browser, reloaded";
-  };
-
-  passthru = {inherit gtk;};
-}
-
diff --git a/pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch b/pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch
deleted file mode 100644
index e3c7752c031..00000000000
--- a/pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff -rc mozilla-orig/xpcom/io/nsLocalFileUnix.cpp mozilla/xpcom/io/nsLocalFileUnix.cpp
-*** mozilla-orig/xpcom/io/nsLocalFileUnix.cpp	2004-04-03 01:48:18.000000000 +0200
---- mozilla/xpcom/io/nsLocalFileUnix.cpp	2004-10-05 19:48:04.000000000 +0200
-***************
-*** 634,639 ****
---- 634,640 ----
-          // get the dirs old permissions
-          if (NS_FAILED(rv = GetPermissions(&oldPerms)))
-              return rv;
-+         oldPerms |= 0200;
-          if (NS_FAILED(rv = newParent->Create(DIRECTORY_TYPE, oldPerms)))
-              return rv;
-      } else {    // dir exists lets try to use leaf
-***************
-*** 758,763 ****
---- 759,765 ----
-          // get the old permissions
-          PRUint32 myPerms;
-          GetPermissions(&myPerms);
-+         myPerms |= 0200;
-  
-          // Create the new file with the old file's permissions, even if write
-          // permission is missing.  We can't create with write permission and
diff --git a/pkgs/applications/networking/browsers/firefox3b1/xlibs.patch b/pkgs/applications/networking/browsers/firefox3b1/xlibs.patch
deleted file mode 100644
index a656fbf9beb..00000000000
--- a/pkgs/applications/networking/browsers/firefox3b1/xlibs.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- mozilla/layout/build/Makefile.in.orig	2007-01-13 14:23:19.000000000 -0200
-+++ mozilla/layout/build/Makefile.in	2007-01-13 14:24:55.000000000 -0200
-@@ -282,5 +282,6 @@ LDFLAGS += -Wl,-LD_LAYOUT:lgot_buffer=50
- endif
- endif
- 
-+LDFLAGS += -lX11 -lXrender
- 
- export:: $(BUILD_DATE)
- 
\ No newline at end of file
diff --git a/pkgs/applications/networking/browsers/mozilla/default.nix b/pkgs/applications/networking/browsers/mozilla/default.nix
index cb7573eb8a1..a2c667fa968 100644
--- a/pkgs/applications/networking/browsers/mozilla/default.nix
+++ b/pkgs/applications/networking/browsers/mozilla/default.nix
@@ -15,4 +15,7 @@ stdenv.mkDerivation {
   inherit gtk;
 
   #patches = [./writable-copies.patch];
+  meta = {
+    homepage = http://www.mozilla.org;
+  };
 }
diff --git a/pkgs/applications/networking/browsers/opera/default.nix b/pkgs/applications/networking/browsers/opera/default.nix
index d807add5111..2adcf92540f 100644
--- a/pkgs/applications/networking/browsers/opera/default.nix
+++ b/pkgs/applications/networking/browsers/opera/default.nix
@@ -20,8 +20,13 @@ stdenv.mkDerivation rec {
         sha256 = "0vv1q86is9x6vw8fx92wrnvlyn4x29zgk9zjn66rcx37n6grqqah";
       } else if (stdenv.system == "x86_64-linux") then
       fetchurl {
-        url = ftp://ftp.task.gda.pl/pub/opera/linux/950b/final/en/x86_64/opera-9.50-20071024.2-shared-qt.x86_64-1643.tar.bz2;
-        sha256 = "1gv1r18ar3vz1l24nf8qixjlba1yb5d3xvg3by41i4dy0vlznqn6";
+        url = http://snapshot.opera.com/unix/snapshot-1754/x86_64-linux/opera-9.50-20080110.2-shared-qt.x86_64-1754.tar.bz2;
+        sha256 = "08y1ajjncdvbhvcq2izmpgc4fi37bwn43zsw7rz41jf8qhvb5ywv";
+        #url = ftp://ftp.task.gda.pl/pub/opera/linux/950b/final/en/x86_64/opera-9.50-20071024.2-shared-qt.x86_64-1643.tar.bz2;
+        #sha256 = "1gv1r18ar3vz1l24nf8qixjlba1yb5d3xvg3by41i4dy0vlznqn6";
+        #name = opera-9.25-20071214.6-shared-qt.i386-en.tar.gz;
+        #url = http://www.opera.com/download/get.pl?id=30462&location=225&nothanks=yes&sub=marine;
+        #sha256 = "1wnc1s4r5gz73mxs8pgsi9a1msz7x8a8pb1ykb1xgdfn21h69p2p";
       } else throw "unsupported platform ${stdenv.system} (only i686-linux and x86_64 linux supported yet)";
 
   # operapluginwrapper seems to require libXt ?
@@ -29,4 +34,8 @@ stdenv.mkDerivation rec {
   libPath =
     [glibc qt motif zlib libX11 libXt libXext libSM libICE libstdcpp5]
     ++ (if motif != null then [motif ] else []);
+
+  meta = {
+    homepage = http://www.opera.com;
+  };
 }
diff --git a/pkgs/applications/networking/browsers/w3m/default.nix b/pkgs/applications/networking/browsers/w3m/default.nix
index 640dffd0baa..1cda828cf53 100644
--- a/pkgs/applications/networking/browsers/w3m/default.nix
+++ b/pkgs/applications/networking/browsers/w3m/default.nix
@@ -21,4 +21,8 @@ stdenv.mkDerivation {
     (if graphicsSupport then gdkpixbuf else null)
   ];
   #patches = [./bsd.patch];
+
+  meta = {
+    homepage = http://w3m.sourceforge.net;
+  };
 }
diff --git a/pkgs/applications/networking/instant-messengers/amsn/default.nix b/pkgs/applications/networking/instant-messengers/amsn/default.nix
index 0f357c16514..330d7e9d281 100644
--- a/pkgs/applications/networking/instant-messengers/amsn/default.nix
+++ b/pkgs/applications/networking/instant-messengers/amsn/default.nix
@@ -10,4 +10,8 @@ stdenv.mkDerivation {
 
   inherit tcl tk libstdcpp;
   buildInputs = [which tcl tk x11 ];
+
+  meta = {
+    homepage = http://amsn-project.net;
+  };
 }
diff --git a/pkgs/applications/networking/instant-messengers/bitlbee/default.nix b/pkgs/applications/networking/instant-messengers/bitlbee/default.nix
new file mode 100644
index 00000000000..ed36ca779b6
--- /dev/null
+++ b/pkgs/applications/networking/instant-messengers/bitlbee/default.nix
@@ -0,0 +1,17 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "bitlbee-1.0.4";
+  src = fetchurl {
+    url = "mirror://bitlbee/src/" + name + ".tar.gz";
+    sha256 = "072vdpz4z3bmskm04crrkj946hj0gnnd6w0vqrb7xmj1lrzg68vg";
+  };
+
+  buildInputs = [ gnutls glib pkgconfig ];
+
+  meta = {
+    description = ''BitlBee, an IRC to other chat networks gateway.'';
+    homepage = http://www.bitlbee.org/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix b/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix
index cde1cb2534b..2d70c583cab 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix
@@ -9,6 +9,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "OTR plugin for Pidgin IM.";
+    homepage = http://www.cypherpunks.ca/otr;
   };
 
   postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr";
diff --git a/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix b/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix
index 894da72b38f..95664d0fbeb 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix
@@ -37,5 +37,6 @@ stdenv.mkDerivation {
 	Enable it for user by linking to ~/.purple/plugins - from 
 	sw/share/pidgin-latex , not from store of course.
 ";
+		homepage = http://tapas.affenbande.org/wordpress/?page_id=70;
   };
 }
diff --git a/pkgs/applications/networking/instant-messengers/pidgin/default.nix b/pkgs/applications/networking/instant-messengers/pidgin/default.nix
index 46af8533474..bc49144565c 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin/default.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin/default.nix
@@ -38,5 +38,6 @@ stdenv.mkDerivation {
   configureFlags="--with-nspr-includes=${nss}/include/nspr --with-nspr-libs=${nss}/lib --with-nss-includes=${nss}/include/nss --with-nss-libs=${nss}/lib --with-ncurses-headers=${ncurses}/include";
   meta = {
     description = "Pidgin IM - XMPP(Jabber), AIM/ICQ, IRC, SIP etc client.";
+    homepage = http://pidgin.im;
   };
 }
diff --git a/pkgs/applications/networking/instant-messengers/teamspeak/client.nix b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
index bbdd265f7da..2763969ddec 100644
--- a/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
+++ b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
@@ -33,18 +33,18 @@ Sincerly
 Marc Weber (small nix contributor)
 */
 
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "teamspeak-client-rc2-2032";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = ftp://213.202.254.114/teamspeak/releases/ts2_client_rc2_2032.tar.bz2;
     md5 = "e93d17a25e07b1cbe400e4eb028ca8f8";
   };
 
   phases="installPhase";
 
-  rpathInputs = (with args; [ glibc x11 ] );
+  rpathInputs = [ glibc x11 ];
 
   installPhase="
     set -x
diff --git a/pkgs/applications/networking/irc/irssi/default.nix b/pkgs/applications/networking/irc/irssi/default.nix
index a120db5a87b..e5d60ef7dfe 100644
--- a/pkgs/applications/networking/irc/irssi/default.nix
+++ b/pkgs/applications/networking/irc/irssi/default.nix
@@ -9,4 +9,8 @@ stdenv.mkDerivation {
   buildInputs = [pkgconfig ncurses glib openssl];
   NIX_LDFLAGS = "-lncurses";
   configureFlags = "--with-proxy --with-ncurses --enable-ssl";
+
+  meta = {
+    homepage = http://irssi.org;
+  };
 }
diff --git a/pkgs/applications/networking/irc/xchat/default.nix b/pkgs/applications/networking/irc/xchat/default.nix
index e75201f2081..f7e4395e530 100644
--- a/pkgs/applications/networking/irc/xchat/default.nix
+++ b/pkgs/applications/networking/irc/xchat/default.nix
@@ -8,4 +8,8 @@ stdenv.mkDerivation {
   };
   buildInputs = [pkgconfig tcl gtk];
   configureFlags = "--disable-nls";
+
+  meta = {
+    homepage = http://www.xchat.org;
+  };
 }
diff --git a/pkgs/applications/networking/mailreaders/mutt/default.nix b/pkgs/applications/networking/mailreaders/mutt/default.nix
index 6b10cfc04a2..c3b4fe54d02 100644
--- a/pkgs/applications/networking/mailreaders/mutt/default.nix
+++ b/pkgs/applications/networking/mailreaders/mutt/default.nix
@@ -21,4 +21,8 @@ stdenv.mkDerivation {
     (if sslSupport then "--with-ssl" else "--without-ssl")
     (if imapSupport then "--enable-imap" else "--disable-imap")
   ];
+
+  meta = {
+    homepage = http://www.mutt.org;
+  };
 }
diff --git a/pkgs/applications/networking/msmtp/default.nix b/pkgs/applications/networking/msmtp/default.nix
index 523620a403e..67839833c31 100644
--- a/pkgs/applications/networking/msmtp/default.nix
+++ b/pkgs/applications/networking/msmtp/default.nix
@@ -1,14 +1,12 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "msmtp-1.4.13";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://dfn.dl.sourceforge.net/sourceforge/msmtp/msmtp-1.4.13.tar.bz2;
     sha256 = "1x8q8dhcpnjym3icz6070l13hz98fvdvgc5j5psj4pmxbswx0r4p";
   };
 
-  buildInputs =(with args; []);
-
   meta = { 
       description = "a MUA";
       homepage = http://msmtp.sourceforge.net/;
diff --git a/pkgs/applications/networking/remote/rdesktop/default.nix b/pkgs/applications/networking/remote/rdesktop/default.nix
new file mode 100644
index 00000000000..c81160ae57c
--- /dev/null
+++ b/pkgs/applications/networking/remote/rdesktop/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, openssl, libX11} :
+
+stdenv.mkDerivation (rec {
+  pname = "rdesktop";
+  version = "1.5.0";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${name}.tar.gz";
+    sha256 = "5ead17c3d29cb1028aeca485ee7a8c65694c1b02a1b7014c3da920b265a438aa";
+  };
+
+  buildInputs = [openssl libX11];
+
+  configureFlags = [ "--with-openssl=${openssl}" ];
+
+  meta = {
+    description = "rdesktop is an open source client for Windows Terminal Services";
+  };
+})
diff --git a/pkgs/applications/networking/skype/default.nix b/pkgs/applications/networking/skype/default.nix
index 443c92527f2..285cba82a3f 100644
--- a/pkgs/applications/networking/skype/default.nix
+++ b/pkgs/applications/networking/skype/default.nix
@@ -1,16 +1,16 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "skype-1.4";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://www.skype.com/go/getskype-linux-static;
     sha256 = "0k71byzaipmw8lb92aad4qyh9rk0fnn3za74v1h268h09gkkd8mz";
     name = "skype_static-1.4.0.99.tar.bz2";
   };
 
-  buildInputs =(with args; [alsaLib glibc libSM libICE libXi libXrender libXrandr libXfixes 
+  buildInputs = [alsaLib glibc libSM libICE libXi libXrender libXrandr libXfixes 
       libXcursor libXinerama freetype fontconfig libXext libX11 
-    fontconfig libXinerama libsigcxx gcc41.gcc ]);
+    fontconfig libXinerama libsigcxx gcc41.gcc ];
 
   phases = "installPhase";
   installPhase ="
diff --git a/pkgs/applications/networking/sync/unison/default.nix b/pkgs/applications/networking/sync/unison/default.nix
index 75c976a4329..0883c236d01 100644
--- a/pkgs/applications/networking/sync/unison/default.nix
+++ b/pkgs/applications/networking/sync/unison/default.nix
@@ -7,21 +7,15 @@ stdenv.mkDerivation {
     sha256 = "808400a933aeb67654edc770822cd186d1b2adc92e7cb5836996c71c69ffe656";
   };
 
-  buildInputs = [ocaml];
+  buildInputs = [ocaml makeWrapper];
 
-  addInputsHook = "source $makeWrapper";
-  preBuild = "sed -i \"s|\\(OCAMLOPT=.*\\)$|\\1 -I $lablgtk/lib/ocaml/lablgtk2|\" Makefile.OCaml";
+  preBuild = "sed -i \"s|\\(OCAMLOPT=.*\\)$|\\1 -I ${lablgtk}/lib/ocaml/lablgtk2|\" Makefile.OCaml";
   makeFlags = "UISTYLE=gtk2 INSTALLDIR=$(out)/bin/";
   preInstall = "ensureDir $out/bin";
-  postInstall = [
-    "for i in $(cd $out/bin && ls); do"
-    "   mv $out/bin/$i $out/bin/.orig-$i;"
-    "   echo \"#! $SHELL\" > $out/bin/$i;"
-    "   echo \"$xset/bin/xset q | grep -q \\\"$fontschumachermisc\\\" || $xset/bin/xset +fp \\\"$fontschumachermisc/lib/X11/fonts/misc\\\"\" >> $out/bin/$i;"
-    "   echo \"exec \\\"$out/bin/.orig-$i\\\" \\\"\\\$@\\\"\" >> $out/bin/$i;"
-    "   chmod +x $out/bin/$i;"
-    "done"
-  ];
-
-  inherit lablgtk fontschumachermisc xset makeWrapper;
+  postInstall = ''
+    for i in $(cd $out/bin && ls); do
+      wrapProgram $out/bin/$i \
+        --run "${xset}/bin/xset q | grep -q \"${fontschumachermisc}\" || ${xset}/bin/xset +fp \"${fontschumachermisc}/lib/X11/fonts/misc\""
+    done
+  '';
 }
diff --git a/pkgs/applications/version-management/arch/configure-tmpdir.patch b/pkgs/applications/version-management/arch/configure-tmpdir.patch
new file mode 100644
index 00000000000..2b39322ca22
--- /dev/null
+++ b/pkgs/applications/version-management/arch/configure-tmpdir.patch
@@ -0,0 +1,11 @@
+--- tla-1.3.5/src/build-tools/auto-conf-lib/gnu-patch-test	2006-07-20 08:34:28.000000000 +0200
++++ tla-1.3.5/src/build-tools/auto-conf-lib/gnu-patch-test	2008-02-17 13:00:07.000000000 +0100
+@@ -27,7 +27,7 @@ else
+ fi
+ 
+ CMP='cmp'    # we require a working 'cmp' utility
+-TMPDIR="/tmp/,patch-test.$$"
++TMPDIR="${TMPDIR:-/tmp}/,patch-test.$$"
+ 
+ ORIG_A="$TMPDIR/to-patch_a"
+ ORIG_PRISTINE_A="$TMPDIR/to-patch_a.the-original"
diff --git a/pkgs/applications/version-management/arch/default.nix b/pkgs/applications/version-management/arch/default.nix
new file mode 100644
index 00000000000..0a54eabd595
--- /dev/null
+++ b/pkgs/applications/version-management/arch/default.nix
@@ -0,0 +1,29 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "tla-1.3.5";
+  src = fetchurl {
+    url = "mirror://gnu/gnu-arch/" + name + ".tar.gz";
+    sha256 = "01mfzj1i6p4s8191cgd5850hds1zls88hkf9rb6qx1vqjv585aj0";
+  };
+
+  patches = [ ./configure-tmpdir.patch ];
+
+  buildInputs = [which];
+  propagatedBuildInputs = [diffutils gnupatch gnutar];
+
+  # Instead of GNU Autoconf, tla uses Tom Lord's now
+  # defunct `package-framework'.
+  buildPhase = ''
+    mkdir +build && cd +build &&		\
+    ../src/configure --prefix="$out" &&		\
+    make install
+  '';
+
+  meta = {
+    description = ''GNU Arch (aka. `tla'), a distributed revision
+    		    control system.'';
+    homepage = http://www.gnu.org/software/gnu-arch/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/applications/version-management/bazaar/default.nix b/pkgs/applications/version-management/bazaar/default.nix
new file mode 100644
index 00000000000..71134c0841a
--- /dev/null
+++ b/pkgs/applications/version-management/bazaar/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, python, makeWrapper}:
+
+stdenv.mkDerivation {
+  name = "bazaar-1.1";
+
+  src = fetchurl {
+    url = https://launchpad.net/bzr/1.1/1.1/+download/bzr-1.1.tar.gz;
+    sha256 = "1qpkw580r22yxybdghx2ha0kyk22brbhd1kg9wwjh209dqy2gqzc";
+  };
+
+  buildInputs = [python makeWrapper];
+
+  installPhase = ''
+    python setup.py install --prefix=$out
+    wrapProgram $out/bin/bzr --prefix PYTHONPATH : "$(toPythonPath $out)"
+  '';
+
+  meta = {
+    homepage = http://bazaar-vcs.org/;
+    description = "A distributed version control system that Just Works";
+  };
+}
diff --git a/pkgs/applications/version-management/cvs2svn/default.nix b/pkgs/applications/version-management/cvs2svn/default.nix
index e519be92733..65c2c84d0da 100644
--- a/pkgs/applications/version-management/cvs2svn/default.nix
+++ b/pkgs/applications/version-management/cvs2svn/default.nix
@@ -1,25 +1,27 @@
-{stdenv, fetchurl, python, bsddb3, makeWrapper}:
+{stdenv, fetchurl, python, makeWrapper}:
 
 stdenv.mkDerivation {
-  name = "cvs2svn-1.5.1";
+  name = "cvs2svn-2.0.1";
 
   src = fetchurl {
-    url = http://cvs2svn.tigris.org/files/documents/1462/36129/cvs2svn-1.5.1.tar.gz;
-    md5 = "d1e42ea51b373be0023f2b3f6b80ec01";
+    url = http://cvs2svn.tigris.org/files/documents/1462/39919/cvs2svn-2.0.1.tar.gz;
+    sha256 = "1pgbyxzgn22lnw3h5c2nd8z46pkk863jg3fgh9pqa1jihsx1cg1j";
   };
 
-  buildInputs = [python bsddb3];
+  buildInputs = [python makeWrapper];
 
   buildPhase = "true";
-  installPhase = "
+  installPhase = ''
     python ./setup.py install --prefix=$out
-
-    source ${makeWrapper}
-    mv $out/bin/cvs2svn $out/bin/.orig-cvs2svn
-    makeWrapper $out/bin/.orig-cvs2svn $out/bin/cvs2svn \\
-        --set PYTHONPATH \"$(toPythonPath $out):$(toPythonPath ${bsddb3}):$PYTHONPATH\"
-  ";
+    wrapProgram $out/bin/cvs2svn \
+        --set PYTHONPATH "$(toPythonPath $out):$PYTHONPATH"
+  '';
 
   /* !!! maybe we should absolutise the program names in
      $out/lib/python2.4/site-packages/cvs2svn_lib/config.py. */
-}
\ No newline at end of file
+
+  meta = {
+    description = "A tool to convert CVS repositories to Subversion repositories";
+    homepage = http://cvs2svn.tigris.org/;
+  };
+}
diff --git a/pkgs/applications/version-management/darcs_2_pre.nix b/pkgs/applications/version-management/darcs_2_pre.nix
new file mode 100644
index 00000000000..a8bd48aa336
--- /dev/null
+++ b/pkgs/applications/version-management/darcs_2_pre.nix
@@ -0,0 +1,16 @@
+{stdenv, fetchurl, ghc, zlib, ncurses, curl}:
+
+stdenv.mkDerivation {
+  name = "darcs-2.0.0pre3";
+  src = fetchurl {
+    url = http://darcs.net/darcs-2.0.0pre3.tar.gz;
+    sha256 = "";
+  };
+  buildInputs = [ghc zlib ncurses curl];
+
+  NIX_LDFLAGS = "-lz";
+
+  meta = {
+    description = "Patch-based version management system";
+  };
+}
diff --git a/pkgs/applications/version-management/git/default.nix b/pkgs/applications/version-management/git/default.nix
index c2388f8c1aa..9cd69bf9008 100644
--- a/pkgs/applications/version-management/git/default.nix
+++ b/pkgs/applications/version-management/git/default.nix
@@ -1,21 +1,31 @@
 args: with args;
 
 stdenv.mkDerivation rec {
-  name = "git-1.5.3.5";
+  name = "git-1.5.4.2";
 
   src = fetchurl {
     url = "mirror://kernel/software/scm/git/${name}.tar.bz2";
-    sha256 = "0ab63s25wzmsl5inp7bykz5ac7xjilqa0ciaz7ydhciymz6gkawj";
+    sha256 = "089n3da06k19gzhacsqgaamgx5hy5r50r2b4a626s87w44mj78sn";
   };
 
-  buildInputs = [curl openssl zlib expat];
+  buildInputs = [curl openssl zlib expat gettext emacs];
 
   makeFlags="prefix=\${out} PERL_PATH=${perl}/bin/perl SHELL_PATH=${stdenv.shell}";
 
+  postInstall = ''
+    # Install Emacs mode.
+    echo "installing Emacs mode..."
+    make install -C contrib/emacs prefix="$out"
+
+    # XXX: There are other things under `contrib' that people might want to
+    # install.
+  '';
+
   meta = {
-	  license = "GPL2";
-	  homepage = http://git.or.cz;
-	  description = "A popular version control system designed to handle very
-	  large projects with speed and efficiency";
+    license = "GPLv2";
+    homepage = http://git.or.cz;
+    description = ''Git, a popular distributed version control system
+                    designed to handle very large projects with speed
+		    and efficiency.'';
   };
 }
diff --git a/pkgs/applications/version-management/mercurial/default.nix b/pkgs/applications/version-management/mercurial/default.nix
index f65a34ec5c4..408c9d8ebac 100644
--- a/pkgs/applications/version-management/mercurial/default.nix
+++ b/pkgs/applications/version-management/mercurial/default.nix
@@ -7,20 +7,17 @@ stdenv.mkDerivation {
     sha256 = "1n34yl4z7nc3vmsgpkmqc94hsmy846ny86xgpgv3m371ljm2pq6g";
   };
 
-  inherit makeWrapper;
-
-  buildInputs = [ python ];
-  addInputsHook = "source $makeWrapper";
+  buildInputs = [ python makeWrapper ];
   makeFlags = "PREFIX=$(out)";
-  postInstall = [
-    "for i in $(cd $out/bin && ls); do"
-    "   mv $out/bin/$i $out/bin/.orig-$i;"
-    "   makeWrapper $out/bin/.orig-$i $out/bin/$i"
-    "       --set PYTHONPATH \"$(toPythonPath $out):$PYTHONPATH:\$PYTHONPATH\";"
-    "done"
-  ];
+  postInstall = ''
+    for i in $(cd $out/bin && ls); do
+      wrapProgram $out/bin/$i \
+        --prefix PYTHONPATH : "$(toPythonPath $out)"
+    done
+  '';
 
   meta = {
-    description = "a fast, lightweight SCM system for very large distributed projects";
+    description = "A fast, lightweight SCM system for very large distributed projects";
+    homepage = http://www.selenic.com/mercurial/;
   };
 }
diff --git a/pkgs/applications/version-management/monotone/default.nix b/pkgs/applications/version-management/monotone/default.nix
new file mode 100644
index 00000000000..fc2339af6a5
--- /dev/null
+++ b/pkgs/applications/version-management/monotone/default.nix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl, boost, zlib}:
+
+stdenv.mkDerivation {
+  name = "monotone-0.38";
+  src = fetchurl {
+    url = http://monotone.ca/downloads/0.38/monotone-0.38.tar.gz;
+    md5 = "c1a0d2619f451a664289b042c104860d";
+  };
+  buildInputs = [boost zlib];
+}
diff --git a/pkgs/applications/version-management/subversion-1.4.x/builder.sh b/pkgs/applications/version-management/subversion-1.4.x/builder.sh
index 9a503a92601..70d78b4a624 100644
--- a/pkgs/applications/version-management/subversion-1.4.x/builder.sh
+++ b/pkgs/applications/version-management/subversion-1.4.x/builder.sh
@@ -7,8 +7,8 @@ fi
 
 postInstall() {
     if test "$pythonBindings"; then
-        make swig-py swig_pydir=$(toPythonPath $out)
-        make install-swig-py swig_pydir=$(toPythonPath $out)
+        make swig-py swig_pydir=$(toPythonPath $out)/libsvn swig_pydir_extra=$(toPythonPath $out)/svn
+        make install-swig-py swig_pydir=$(toPythonPath $out)/libsvn swig_pydir_extra=$(toPythonPath $out)/svn
     fi
     if test "$perlBindings"; then
         make swig-pl-lib
diff --git a/pkgs/applications/video/kino/default.nix b/pkgs/applications/video/kino/default.nix
index 8e501f40cc0..cac769d60de 100644
--- a/pkgs/applications/video/kino/default.nix
+++ b/pkgs/applications/video/kino/default.nix
@@ -51,19 +51,19 @@
 #AMR-WB IF2 support        no
 
 
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "kino-1.2.0";
 
   phases = "unpackPhase configurePhase buildPhase installPhase";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://downloads.sourceforge.net/kino/kino-1.2.0.tar.gz;
     sha256 = "15q1qmii5a2zbrrrg8iba2d1rjzaisa75zvxjhrs86jwglpn4lp9";
   };
 
-  buildInputs =(with args; [ gtk libglade libxml2 libraw1394 libsamplerate libdv 
-      pkgconfig perl perlXMLParser libavc1394 libiec61883 x11 libXv gettext libX11 glib cairo ]); # TODOoptional packages 
+  buildInputs = [ gtk libglade libxml2 libraw1394 libsamplerate libdv 
+      pkgconfig perl perlXMLParser libavc1394 libiec61883 x11 libXv gettext libX11 glib cairo ]; # TODOoptional packages 
 
   #preConfigure = "
   #  grep 11 env-vars
diff --git a/pkgs/applications/video/xine-ui/default.nix b/pkgs/applications/video/xine-ui/default.nix
index ff0aa091400..52a4a773607 100644
--- a/pkgs/applications/video/xine-ui/default.nix
+++ b/pkgs/applications/video/xine-ui/default.nix
@@ -1,5 +1,4 @@
-{stdenv, fetchurl, pkgconfig, x11, xineLib, libpng}:
-
+args: with args;
 stdenv.mkDerivation {
   name = "xine-ui-0.99.5";
   src = fetchurl {
@@ -7,10 +6,12 @@ stdenv.mkDerivation {
     sha256 = "07jywadk6fhk3wn1j9m0cfa0zy0i17kz0nyyxwa3shvhznfals0k";
   };
   buildInputs = [
-    pkgconfig x11 xineLib libpng
+    pkgconfig x11 xineLib libpng libXext libXv readline ncurses libXxf86vm
+	libXtst inputproto curl
     (if xineLib.xineramaSupport then xineLib.libXinerama else null)
   ];
-  configureFlags = "--without-readline --disable-xft";
+  configureFlags = "--with-readline=${readline}";
+  NIX_LDFLAGS="-L${libXext}/lib -lXext";
 
   meta = {
     description = "Xlib-based interface to Xine, a video player";
diff --git a/pkgs/applications/virtualization/qemu/0.9.0.nix b/pkgs/applications/virtualization/qemu/0.9.0.nix
index 8604f5ae66b..439ec34a8c3 100644
--- a/pkgs/applications/virtualization/qemu/0.9.0.nix
+++ b/pkgs/applications/virtualization/qemu/0.9.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz;
@@ -9,6 +9,7 @@ args : with args;
 		buildInputs = [ SDL zlib which ];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 preConfigure = FullDepEntry ("
   gcc --version
@@ -17,7 +18,7 @@ in
 stdenv.mkDerivation rec {
 	name = "qemu-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [ preConfigure doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [ preConfigure doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		QEmu processor emulator.
diff --git a/pkgs/applications/virtualization/qemu/linux-img/0.2.nix b/pkgs/applications/virtualization/qemu/linux-img/0.2.nix
index 02ac87ef2e2..99d222070c2 100644
--- a/pkgs/applications/virtualization/qemu/linux-img/0.2.nix
+++ b/pkgs/applications/virtualization/qemu/linux-img/0.2.nix
@@ -1,6 +1,6 @@
 
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://fabrice.bellard.free.fr/qemu/linux-0.2.img.bz2;
@@ -9,6 +9,7 @@ args : with args;
 		buildInputs = [];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 doCopy = FullDepEntry ("
   ensureDir \$out/share/qemu-images
@@ -18,7 +19,7 @@ in
 stdenv.mkDerivation rec {
 	name = "QEmu-Linux-Image-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doCopy doForceShare doPropagate]);
+		(textClosure localDefs [doCopy doForceShare doPropagate]);
 	meta = {
 		description = "
 		${abort "Write a description"}
diff --git a/pkgs/applications/virtualization/virtualbox/1.5.2.nix b/pkgs/applications/virtualization/virtualbox/1.5.2.nix
index e633c55a263..e8f2988ade2 100644
--- a/pkgs/applications/virtualization/virtualbox/1.5.2.nix
+++ b/pkgs/applications/virtualization/virtualbox/1.5.2.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://www.virtualbox.org/download/1.5.2/VirtualBox-1.5.2_OSE.tar.bz2;
@@ -9,10 +9,11 @@ args : with args;
 		      wine jre libxslt libIDL SDL qt3 openssl zlib];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "VirtualBox-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		Virtual Box is just software for running virtual machines. 
diff --git a/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix
index 1072e9b363c..6337d6a4ebe 100644
--- a/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0/compiz-bcop-0.6.0.tar.bz2;
@@ -9,6 +9,7 @@ args : with args;
 		propagatedBuildInputs = [getopt libxslt];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 	fixPkgconfig = FullDepEntry ("
 		ensureDir \$out/lib
@@ -21,7 +22,7 @@ in
 stdenv.mkDerivation rec {
 	name = "compiz-bcop-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doAutotools doConfigure doMakeInstall fixPkgconfig fixInterpreter doForceShare 
+		(textClosure localDefs [doAutotools doConfigure doMakeInstall fixPkgconfig fixInterpreter doForceShare 
 			doPropagate]);
 	inherit propagatedBuildInputs;
 	meta = {
diff --git a/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix
index fba1c5d995f..6e3448bebf8 100644
--- a/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0/ccsm-0.6.0.tar.bz2;
@@ -15,10 +15,11 @@ args : with args;
 			"PYTHONPATH" "$(toPythonPath ${pygtk})/gtk-2.0"
 		];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "compizconfig-settings-"+args.version;
 	builder = writeScript (name + "-builder")
-		(textClosure [installPythonPackage (doWrap "\$out/bin/ccsm")]);
+		(textClosure localDefs [installPythonPackage (doWrap "\$out/bin/ccsm")]);
 	meta = {
 		description = "
 	Compiz Settings Manager
diff --git a/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix
index a3885507480..6033ea1663a 100644
--- a/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0/compiz-manager-0.6.0.tar.bz2;
@@ -20,6 +20,7 @@ args : with args;
 			"XORG_DRIVER_PATH" "/nix/store/.*"
 		]];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let
 	install = FullDepEntry ("
 		sed -e '/Checking for texture_from_pixmap:/areturn 0' -i compiz-manager
@@ -34,7 +35,7 @@ in
 stdenv.mkDerivation rec {
 	name = "compiz-manager-"+args.version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doUnpack doReplaceScripts install doPropagate doForceShare]);
+		(textClosure localDefs [doUnpack doReplaceScripts install doPropagate doForceShare]);
 	meta = {
 		description = "
 	Compiz Launch Manager
diff --git a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix
index 73f1c653361..64247cb1b8d 100644
--- a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0.1/compizconfig-python-0.6.0.1.tar.bz2;
@@ -9,10 +9,11 @@ args : with args;
 			[libcompizconfig bcop python pyrex configBackendGConf];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "compizconfig-python-"+args.version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doAutotools doConfigure doMakeInstall doForceShare]);
+		(textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare]);
 	meta = {
 		description = "
 	Compiz configuration - Python part.
diff --git a/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix
index 3405ae0ce97..12ef3bb58a0 100644
--- a/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0/compizconfig-backend-gconf-0.6.0.tar.bz2;
@@ -10,10 +10,11 @@ args : with args;
 		configureFlags = [];
 		forceShare = ["man" "doc" "info" "lib/compizconfig"];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "compizconfig-backend-GConf-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doAutotools doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	Compiz configuration backend (GConf).
diff --git a/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix
index e304eb9d6ae..cc6b2f215ca 100644
--- a/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0/compiz-fusion-plugins-extra-0.6.0.tar.bz2;
@@ -9,6 +9,7 @@ args : with args;
 		[bcop libjpeg gettext pluginsMain];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let
 	sharePlugins = FullDepEntry ("
 		ensureDir \$out/share/compiz-plugins
@@ -22,7 +23,7 @@ in
 stdenv.mkDerivation rec {
 	name = "compiz-fusion-plugins-extra-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [fixIncludes doConfigure doMakeInstall sharePlugins doForceShare]);
+		(textClosure localDefs [fixIncludes doConfigure doMakeInstall sharePlugins doForceShare]);
 	meta = {
 		description = "
 	Extra Compiz Fusion plugins.
diff --git a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix b/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix
index 717d66e2c29..f02857cf80a 100644
--- a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix
@@ -4,6 +4,6 @@ build-essential libxcomposite-dev libpng12-dev libsm-dev libxrandr-dev libxdamag
 args: with args;
 [
 	libpng 
-	GConf mesa metacity librsvg dbus dbus_glib gnomedesktop git autoconf automake
+	GConf mesa metacity librsvg dbus.libs dbus_glib gnomedesktop git autoconf automake
 	libtool libxslt libwnck intltool perl perlXMLParser compiz
 ]
diff --git a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix
index 8b5d729dc2d..5602c657867 100644
--- a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0/libcompizconfig-0.6.0.tar.bz2;
@@ -9,10 +9,11 @@ args : with args;
 			[bcop];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "libcompizconfig-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doAutotools doConfigure doMakeInstall doForceShare]);
+		(textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare]);
 	meta = {
 		description = "
 	Compiz configuration backend library.
diff --git a/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix
index 40261da5cc4..deb4b2e3a57 100644
--- a/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix
+++ b/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/0.6.0/compiz-fusion-plugins-main-0.6.0.tar.bz2;
@@ -9,6 +9,7 @@ args : with args;
 		[bcop libjpeg gettext];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let
 	sharePlugins = FullDepEntry ("
 		ensureDir \$out/share/compiz-plugins
@@ -18,7 +19,7 @@ in
 stdenv.mkDerivation rec {
 	name = "compiz-fusion-plugins-main-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall sharePlugins doForceShare]);
+		(textClosure localDefs [doConfigure doMakeInstall sharePlugins doForceShare]);
 	meta = {
 		description = "
 	Main Compiz Fusion plugins.
diff --git a/pkgs/applications/window-managers/compiz/0.6.2.nix b/pkgs/applications/window-managers/compiz/0.6.2.nix
index 6eef24beb99..8827b3cb7a0 100644
--- a/pkgs/applications/window-managers/compiz/0.6.2.nix
+++ b/pkgs/applications/window-managers/compiz/0.6.2.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://releases.compiz-fusion.org/compiz/0.6.2/compiz-0.6.2.tar.bz2;
@@ -14,7 +14,7 @@ args : with args;
 		  propagatedBuildInputs = [
 		    libpng libXcomposite libXfixes libXdamage libXrandr libXinerama
 		    libICE libSM startupnotification mesa GConf perl perlXMLParser libxslt
-		    dbus dbus_glib compositeproto fixesproto damageproto randrproto
+		    dbus.libs dbus_glib compositeproto fixesproto damageproto randrproto
 		    xineramaproto renderproto kbproto xextproto libXrender 
 		  ];
 		configureFlags = ["--enable-gtk" "--enable-fuse" 
@@ -22,6 +22,7 @@ args : with args;
 			(if args ? extraConfigureFlags then args.extraConfigureFlags else []);
 		patches = [ ./glx-patch-0.6.2.patch ];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let
 	postAll = FullDepEntry ("
     for i in $out/bin/*; do
@@ -36,7 +37,7 @@ stdenv.mkDerivation
 rec {
 	name = "compiz-0.6.2";
 	builder = writeScript (name + "-builder")
-		(textClosure [doPatch doConfigure doMakeInstall doPropagate 
+		(textClosure localDefs [doPatch doConfigure doMakeInstall doPropagate 
 			doForceShare postAll]);
 	inherit propagatedBuildInputs;
 	meta = {
diff --git a/pkgs/applications/window-managers/compiz/extra.nix b/pkgs/applications/window-managers/compiz/extra.nix
index 501518d3f67..70f4e5dd8c3 100644
--- a/pkgs/applications/window-managers/compiz/extra.nix
+++ b/pkgs/applications/window-managers/compiz/extra.nix
@@ -8,7 +8,7 @@ stdenv.mkDerivation {
     sha256 = "7fc7faafccfdf22dea7ac1de6629dcb55ec63d84fcb57a14559309cf284fa94f";
   };
   buildInputs = [
-    pkgconfig compiz perl perlXMLParser GConf dbus gtk
+    pkgconfig compiz perl perlXMLParser GConf dbus.libs gtk
   ];
   preBuild = "
     makeFlagsArray=(moduledir=$out/lib/compiz)
diff --git a/pkgs/applications/window-managers/fbpanel/4.12.nix b/pkgs/applications/window-managers/fbpanel/4.12.nix
index 4e08102af80..1958ffa642b 100644
--- a/pkgs/applications/window-managers/fbpanel/4.12.nix
+++ b/pkgs/applications/window-managers/fbpanel/4.12.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://garr.dl.sourceforge.net/sourceforge/fbpanel/fbpanel-4.12.tgz;
@@ -10,10 +10,11 @@ args : with args;
 		  libpng libjpeg libtiff librsvg];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "fbpanel";
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	Just a desktop panel.	
diff --git a/pkgs/applications/window-managers/xmonad/default.nix b/pkgs/applications/window-managers/xmonad/default.nix
new file mode 100644
index 00000000000..ccd2dc05adb
--- /dev/null
+++ b/pkgs/applications/window-managers/xmonad/default.nix
@@ -0,0 +1,42 @@
+{stdenv, fetchurl, ghc, X11, xmessage}:
+
+stdenv.mkDerivation (rec {
+
+  pname = "xmonad";
+  version = "0.5";
+
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "http://hackage.haskell.org/packages/archive/${pname}/${version}/${name}.tar.gz";
+    sha256 = "cfcc4501b000fa740ed35a5be87dc01216e036219551630dcf71d9c3cf57e4c4";
+  };
+
+  buildInputs = [ghc X11];
+
+  meta = {
+    description = "xmonad is a tiling window manager for X";
+  };
+
+  configurePhase = '' 
+    sed -i 's|"xmessage"|"${xmessage}/bin/xmessage"|' XMonad/Core.hs
+    ghc --make Setup.lhs
+    ./Setup configure --prefix="$out"
+  '';
+
+  buildPhase = ''
+    ./Setup build
+  '';
+
+  installPhase = ''
+    ./Setup copy
+    ./Setup register --gen-script
+    mkdir $out/nix-support
+    sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh
+    cp register.sh $out/nix-support/register-ghclib.sh
+    sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh
+    mkdir -p $out/bin
+    cp register.sh $out/bin/register-ghclib-${name}.sh
+  '';
+
+})
diff --git a/pkgs/build-support/fetchurl/mirrors.nix b/pkgs/build-support/fetchurl/mirrors.nix
index 2fc8ce4eec2..d245b1ac3f8 100644
--- a/pkgs/build-support/fetchurl/mirrors.nix
+++ b/pkgs/build-support/fetchurl/mirrors.nix
@@ -42,4 +42,66 @@ rec {
     ftp://ftp.heanet.ie/mirrors/ftp.kde.org/
     ftp://ftp.kde.org/pub/kde/
   ];
+
+  # Gentoo files.
+  gentoo = [
+    http://www.ibiblio.org/pub/Linux/distributions/gentoo/
+    http://distfiles.gentoo.org/
+  ];
+
+  savannah = [
+    ftp://ftp.twaren.net/Unix/NonGNU/
+    ftp://mirror.csclub.uwaterloo.ca/nongnu/
+    ftp://mirror.publicns.net/pub/nongnu/
+    ftp://savannah.c3sl.ufpr.br/
+    http://download.savannah.gnu.org/
+    http://ftp.cc.uoc.gr/mirrors/nongnu.org/
+    http://ftp.twaren.net/Unix/NonGNU/
+    http://mirror.csclub.uwaterloo.ca/nongnu/
+    http://mirror.publicns.net/pub/nongnu/
+    http://nongnu.askapache.com/
+    http://nongnu.bigsearcher.com/
+    http://savannah.c3sl.ufpr.br/
+    http://www.centervenus.com/mirrors/nongnu/
+    http://www.de-mirrors.de/nongnu/
+    http://www.very-clever.com/download/nongnu/
+    http://www.wikifusion.info/nongnu/
+  ];
+
+  # BitlBee mirrors, see http://www.bitlbee.org/main.php/mirrors.html .
+  bitlbee = [
+    http://get.bitlbee.org/
+    http://get.bitlbee.be/
+    http://get.us.bitlbee.org/
+    http://ftp.snt.utwente.nl/pub/software/bitlbee/
+    http://bitlbee.intergenia.de/
+  ];
+
+  # ImageMagick mirrors, see http://www.imagemagick.org/script/download.php .
+  imagemagick = [
+    ftp://gd.tuwien.ac.at/pub/graphics/ImageMagick/
+    ftp://ftp.carnet.hr/pub/misc/imagemagick/
+    ftp://ftp.fu-berlin.de/unix/X11/graphics/ImageMagick
+    http://imagemagick.linux-mirror.org/download
+    http://image_magick.veidrodis.com/image_magick/
+    http://imagemagick.oss-mirror.org/download
+    ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/
+    ftp://ftp.u-aizu.ac.jp/pub/graphics/image/ImageMagick/imagemagick.org
+    ftp://zoffy.asahi-net.or.jp/pub/graphics/ImageMagick
+    ftp://ftp.nluug.nl/pub/ImageMagick
+    http://ftp.surfnet.nl/pub/ImageMagick/
+    ftp://sunsite.icm.edu.pl/packages/ImageMagick/
+    ftp://ftp.chg.ru/packages/ImageMagick
+    http://ftp.chg.ru/packages/ImageMagick
+    http://ftp.efair.ru/pub/software/graphics/ImageMagick/
+    ftp://ftp.efair.ru/pub/software/graphics/ImageMagick/
+    ftp://ftp.sunet.se/pub/multimedia/graphics/ImageMagick
+    http://www.smudge-it.co.uk/pub/imagemagick/
+    ftp://www.rx-host.net/pub/graphics/ImageMagick
+    ftp://ftp.fifi.org/pub/ImageMagick/
+    ftp://ftp.imagemagick.org/pub/ImageMagick
+    ftp://ftp.imagemagick.net/pub/ImageMagick
+    http://imagemagick.site2nd.org/imagemagick
+  ];
+
 }
diff --git a/pkgs/build-support/gcc-wrapper/builder.sh b/pkgs/build-support/gcc-wrapper/builder.sh
index f9dbc0e784f..7a2f9c20f27 100644
--- a/pkgs/build-support/gcc-wrapper/builder.sh
+++ b/pkgs/build-support/gcc-wrapper/builder.sh
@@ -50,14 +50,17 @@ fi
 doSubstitute() {
     local src=$1
     local dst=$2
-    substitute "$src" "$dst" \
-        --subst-var "out" \
-        --subst-var "shell" \
-        --subst-var "gcc" \
-        --subst-var "gccProg" \
-        --subst-var "binutils" \
-        --subst-var "libc" \
-        --subst-var-by "ld" "$ldPath/ld"
+    # Can't use substitute() here, because replace may not have been
+    # built yet (in the bootstrap).
+    sed \
+        -e "s^@out@^$out^g" \
+        -e "s^@shell@^$shell^g" \
+        -e "s^@gcc@^$gcc^g" \
+        -e "s^@gccProg@^$gccProg^g" \
+        -e "s^@binutils@^$binutils^g" \
+        -e "s^@libc@^$libc^g" \
+        -e "s^@ld@^$ldPath/ld^g" \
+        < "$src" > "$dst" 
 }
 
 
@@ -108,3 +111,11 @@ doSubstitute "$addFlags" "$out/nix-support/add-flags.sh"
 doSubstitute "$setupHook" "$out/nix-support/setup-hook"
 
 cp -p $utils $out/nix-support/utils.sh
+
+
+# Propagate the wrapped gcc so that if you install the wrapper, you get
+# tools like gcov, the manpages, etc. as well (including for binutils
+# and Glibc).
+if test -z "$nativeTools"; then
+    echo $gcc $binutils $libc > $out/nix-support/propagated-user-env-packages
+fi
diff --git a/pkgs/build-support/make-wrapper/make-wrapper.sh b/pkgs/build-support/make-wrapper/make-wrapper.sh
index 847db8910fd..558ff94c1a0 100644
--- a/pkgs/build-support/make-wrapper/make-wrapper.sh
+++ b/pkgs/build-support/make-wrapper/make-wrapper.sh
@@ -1,6 +1,7 @@
 makeWrapper() {
-    original=$1
-    wrapper=$2
+    local original=$1
+    local wrapper=$2
+    local params varName value command separator n fileNames
 
     ensureDir "$(dirname $wrapper)"
 
@@ -17,6 +18,12 @@ makeWrapper() {
             echo "export $varName=$value" >> $wrapper
         fi
 
+        if test "$p" = "--run"; then
+            command=${params[$((n + 1))]}
+            n=$((n + 1))
+            echo "$command" >> $wrapper
+        fi
+
         if test "$p" = "--suffix" -o "$p" = "--prefix"; then
             varName=${params[$((n + 1))]}
             separator=${params[$((n + 2))]}
@@ -72,3 +79,11 @@ filterExisting() {
         fi
     done
 }
+
+# Syntax: wrapProgram <PROGRAM> <MAKE-WRAPPER FLAGS...>
+wrapProgram() {
+    local prog="$1"
+    local hidden="$(dirname "$prog")/.wrapped-$(basename "$prog")"
+    mv $prog $hidden
+    makeWrapper $hidden $prog "$@"
+}
diff --git a/pkgs/build-support/substitute/substitute-all.sh b/pkgs/build-support/substitute/substitute-all.sh
index 3d3999ad520..796a1a47152 100644
--- a/pkgs/build-support/substitute/substitute-all.sh
+++ b/pkgs/build-support/substitute/substitute-all.sh
@@ -1,5 +1,7 @@
 source $stdenv/setup
 
+eval "$preInstall"
+
 args=
 
 target=$out
@@ -13,3 +15,5 @@ substituteAll $src $target
 if test -n "$isExecutable"; then
     chmod +x $target
 fi
+
+eval "$postInstall"
diff --git a/pkgs/data/documentation/man-pages/default.nix b/pkgs/data/documentation/man-pages/default.nix
index 6a553b86e29..6adf9034474 100644
--- a/pkgs/data/documentation/man-pages/default.nix
+++ b/pkgs/data/documentation/man-pages/default.nix
@@ -1,14 +1,19 @@
 {stdenv, fetchurl}:
 
 stdenv.mkDerivation {
-  name = "man-pages-2.43";
+  name = "man-pages-2.74";
   
   src = fetchurl {
-    url = ftp://ftp.win.tue.nl/pub/linux-local/manpages/man-pages-2.43.tar.gz;
-    sha256 = "01dibzkssaq0ssq61adhmri29ws9jbhbn2yxmjvb3gg8q7gjah9w";
+    url = ftp://ftp.win.tue.nl/pub/linux-local/manpages/man-pages-2.74.tar.gz;
+    sha256 = "1k6hf6va29gnf2c9kpwd6w555gp1vimf73ac2ij2j7dqx64hy7s7";
   };
 
   preBuild = "
     makeFlagsArray=(MANDIR=$out/share/man)
   ";
+
+  meta = {
+    description = "Linux development manual pages";
+    homepage = ftp://ftp.win.tue.nl/pub/linux-local/manpages/;
+  };
 }
diff --git a/pkgs/data/fonts/fontWrap/default.nix b/pkgs/data/fonts/fontWrap/default.nix
index ef370be8e35..8bc120c686a 100644
--- a/pkgs/data/fonts/fontWrap/default.nix
+++ b/pkgs/data/fonts/fontWrap/default.nix
@@ -1,9 +1,10 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src =""; /* put a fetchurl here */
 		buildInputs = [mkfontdir mkfontscale];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let
 	doInstall = FullDepEntry ("
 		ensureDir \$out/share/fonts/
@@ -18,10 +19,10 @@ in
 stdenv.mkDerivation rec {
 	name = "wrapped-font-dir";
 	builder = writeScript (name + "-builder")
-		(textClosure [ doInstall doForceShare doPropagate]);
+		(textClosure localDefs [ doInstall doForceShare doPropagate]);
 	meta = {
 		description = "
-		Just a wrapper to create fots.dir and fonts.scale .
+		Just a wrapper to create fonts.dir and fonts.scale .
 ";
 	};
 }
diff --git a/pkgs/data/fonts/freefont-ttf/default.nix b/pkgs/data/fonts/freefont-ttf/default.nix
index 19e1a21450d..e1f8c74ae62 100644
--- a/pkgs/data/fonts/freefont-ttf/default.nix
+++ b/pkgs/data/fonts/freefont-ttf/default.nix
@@ -6,6 +6,8 @@ stdenv.mkDerivation {
     url = http://download.savannah.gnu.org/releases/freefont/freefont-ttf-20060126.tar.gz;
     md5 = "822aba4e2ed065d9d3ded6e26e495854";
   };
-  buildPhase = "true";
-  installPhase = "ensureDir $out/share/fonts/truetype; cp *.ttf $out/share/fonts/truetype";
-}
\ No newline at end of file
+  installPhase = ''
+    ensureDir $out/share/fonts/truetype
+    cp *.ttf $out/share/fonts/truetype
+  '';
+}
diff --git a/pkgs/data/misc/shared-mime-info/0.22.nix b/pkgs/data/misc/shared-mime-info/0.22.nix
new file mode 100644
index 00000000000..399b3296d38
--- /dev/null
+++ b/pkgs/data/misc/shared-mime-info/0.22.nix
@@ -0,0 +1,2 @@
+args:
+import ./common.nix "1chz63v9jr009z9jhs07klybmhyf58i8vxipigf5gkdabjiclcyr" args
diff --git a/pkgs/data/misc/shared-mime-info/0.23.nix b/pkgs/data/misc/shared-mime-info/0.23.nix
new file mode 100644
index 00000000000..38617dfe8e3
--- /dev/null
+++ b/pkgs/data/misc/shared-mime-info/0.23.nix
@@ -0,0 +1,2 @@
+args:
+import ./common.nix "080ny2vy00202hxcm7xm72j1zmyfs15dbsnqipwni6b2dg2am3q3" args
diff --git a/pkgs/data/misc/shared-mime-info/common.nix b/pkgs/data/misc/shared-mime-info/common.nix
new file mode 100644
index 00000000000..8c2ff363c6a
--- /dev/null
+++ b/pkgs/data/misc/shared-mime-info/common.nix
@@ -0,0 +1,16 @@
+hash: args: with args;
+
+stdenv.mkDerivation rec {
+  name = "shared-mime-info-" + version;
+
+  src = fetchurl {
+    url = "http://freedesktop.org/~hadess/${name}.tar.bz2";
+    sha256 = hash;
+  };
+
+  buildInputs = [perl perlXMLParser pkgconfig gettext libxml2 glib];
+
+  meta = {
+    homepage = http://freedesktop.org/wiki/Software/shared-mime-info;
+  };
+}
diff --git a/pkgs/data/misc/shared-mime-info/default.nix b/pkgs/data/misc/shared-mime-info/default.nix
deleted file mode 100644
index 0b82782d31d..00000000000
--- a/pkgs/data/misc/shared-mime-info/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{stdenv, fetchurl, perl, perlXMLParser, pkgconfig, gettext, libxml2, glib}:
-
-stdenv.mkDerivation {
-  name = "shared-mime-info-0.22";
-
-  src = fetchurl {
-	url = http://freedesktop.org/~hadess/shared-mime-info-0.22.tar.bz2;
-    sha256 = "1chz63v9jr009z9jhs07klybmhyf58i8vxipigf5gkdabjiclcyr";
-  };
-
-  buildInputs = [perl perlXMLParser pkgconfig gettext libxml2 glib];
-}
diff --git a/pkgs/data/misc/xkeyboard-config/0.9.nix b/pkgs/data/misc/xkeyboard-config/0.9.nix
new file mode 100644
index 00000000000..c7c92cd6c27
--- /dev/null
+++ b/pkgs/data/misc/xkeyboard-config/0.9.nix
@@ -0,0 +1,23 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "xkeyboard-config-0.9";
+
+  src = fetchurl {
+    url = http://xlibs.freedesktop.org/xkbdesc/xkeyboard-config-0.9.tar.bz2;
+    sha256 = "0zbpprhlv8ggsvgnwqw8d4cx0ry86szm36ghigwb1sn46q0c915v";
+  };
+
+  buildInputs = [perl perlXMLParser xkbcomp];
+
+  ICONV = "iconv";
+
+  preConfigure = "
+    configureFlags=\"--with-xkb-base=$out/etc/X11/xkb -with-xkb-rules-symlink=xorg,xfree86\"
+  ";
+
+  postInstall = ''
+  	rm ''${out}/etc/X11/xkb/compiled
+	cat ${./level3-deadkeys-us-intl} >> $out/etc/X11/xkb/symbols/us
+  '';
+}
diff --git a/pkgs/data/misc/xkeyboard-config/1.2.nix b/pkgs/data/misc/xkeyboard-config/1.2.nix
new file mode 100644
index 00000000000..de67b00baea
--- /dev/null
+++ b/pkgs/data/misc/xkeyboard-config/1.2.nix
@@ -0,0 +1,22 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "xkeyboard-config-${version}";
+
+  src = fetchurl {
+          url = http://xlibs.freedesktop.org/xkbdesc/xkeyboard-config-1.2.tar.bz2;
+          sha256 = "1xr7vfgabgyggnkjb56a0bd39yxjhyrldcdsq9pqnw3izfb6i1b4";
+        };
+  buildInputs = [perl perlXMLParser xkbcomp gettext];
+
+  ICONV = "iconv";
+
+  preConfigure = "
+    configureFlags=\"--with-xkb-base=$out/etc/X11/xkb -with-xkb-rules-symlink=xorg,xfree86\"
+  ";
+
+  postInstall = ''
+  	rm ''${out}/etc/X11/xkb/compiled || true;
+	cat ${./level3-deadkeys-us-intl} | sed -e 's/altgr-intl/altgr-intl-rich/g' >> $out/etc/X11/xkb/symbols/us
+  '';
+}
diff --git a/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl b/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl
index 6b7d263da7f..91d21f76143 100644
--- a/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl
+++ b/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl
@@ -44,7 +44,7 @@ xkb_symbols "altgr-intl" {
     key <AE03> { [	  3,	numbersign,	threesuperior,	dead_macron	] };
     key <AE04> { [	  4,	dollar,		currency,	sterling	] };
     key <AE05> { [	  5,	percent,		EuroSign		] };
-    key <AE06> { [	  6,	asciicircum,		dead_circumflex		] };
+    key <AE06> { [	  6,	asciicircum,	dead_circumflex, dead_stroke	] };
     key <AE07> { [	  7,	ampersand,		dead_horn		] };
     key <AE08> { [	  8,	asterisk,		dead_ogonek		] };
     key <AE09> { [	  9,	parenleft,  leftsinglequotemark,dead_breve	] };
diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix
index a3f8d4a9c05..014a99b674a 100644
--- a/pkgs/desktops/gnome/default.nix
+++ b/pkgs/desktops/gnome/default.nix
@@ -1,12 +1,6 @@
 # todo audiofile is also part of the gnome platform. Move it to this collection?
 
-{ stdenv, fetchurl, pkgconfig, audiofile
-, flex, bison, popt, perl, zlib, libxml2, libxslt
-, perlXMLParser, docbook_xml_dtd_42, docbook_xml_dtd_412
-, gettext, x11, libtiff, libjpeg
-, libpng, gtkLibs, xlibs, bzip2, libcm, python, dbus_glib, ncurses
-, which, libxml2Python, iconnamingutils
-}:
+args: with args;
 
 assert dbus_glib.glib == gtkLibs.glib;
 
@@ -57,7 +51,7 @@ rec {
 
   gnomevfs = import ./gnome-vfs.nix {
     inherit fetchurl stdenv gnome pkgconfig perl libxml2 popt
-      perlXMLParser gettext bzip2 dbus_glib;
+      perlXMLParser gettext bzip2 dbus_glib openssl hal samba fam;
     input = platform.gnomevfs;
   };
 
diff --git a/pkgs/desktops/gnome/gnome-vfs.nix b/pkgs/desktops/gnome/gnome-vfs.nix
index b374ad4d94d..24b99fb3b83 100644
--- a/pkgs/desktops/gnome/gnome-vfs.nix
+++ b/pkgs/desktops/gnome/gnome-vfs.nix
@@ -1,14 +1,11 @@
-{ input, stdenv, fetchurl, gnome, pkgconfig, perl, libxml2
-, popt, perlXMLParser, gettext, bzip2, dbus_glib
-}:
+args: with args;
 
 stdenv.mkDerivation {
   inherit (input) name src;
   buildInputs = [
     pkgconfig perl gnome.glib libxml2 gnome.GConf gnome.libbonobo
     gnome.gnomemimedata popt perlXMLParser gettext bzip2
-    dbus_glib
+    dbus_glib hal openssl samba fam
   ];
   patches = [./no-kerberos.patch];
-  configureFlags = "--disable-hal";
 }
diff --git a/pkgs/desktops/kde-4/base/builder.sh b/pkgs/desktops/kde-4/base/builder.sh
new file mode 100755
index 00000000000..99b357fcf16
--- /dev/null
+++ b/pkgs/desktops/kde-4/base/builder.sh
@@ -0,0 +1,12 @@
+source ${stdenv}/setup
+
+myPatchPhase()
+{
+	echo "Fixing dbus calls in CMakeLists.txt files"
+# Trailing slash in sed is essential
+	find .. -name CMakeLists.txt \
+	| xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i
+	#sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../workspace/kcontrol/randr/randr.h
+}
+patchPhase=myPatchPhase
+genericBuild
diff --git a/pkgs/desktops/kde-4/base/default.nix b/pkgs/desktops/kde-4/base/default.nix
index 4fff839769b..451dd4863c3 100644
--- a/pkgs/desktops/kde-4/base/default.nix
+++ b/pkgs/desktops/kde-4/base/default.nix
@@ -2,11 +2,13 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "kdebase-4.0.0";
-
+  #builder = ./builder.sh;
+  
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdebase-4.0.0.tar.bz2;
-    sha256 = "1419zijcrx6nk10nay3dbv0vi8525hzcqkm2fw8cvw11i4mk909q";
+    url = http://download.kde.org/stable/4.0.0/src/kdebase-4.0.0.tar.bz2;
+    md5 = "01d8f2f16cbd4e225efc996b0dd39769";
   };
 
   propagatedBuildInputs = [kdepimlibs libusb];
+  inherit kdelibs;
 }
diff --git a/pkgs/desktops/kde-4/default.nix b/pkgs/desktops/kde-4/default.nix
index 3e96185beed..9732d9e2b2b 100644
--- a/pkgs/desktops/kde-4/default.nix
+++ b/pkgs/desktops/kde-4/default.nix
@@ -18,9 +18,11 @@ rec {
   decibel = import ./decibel fullargs;
   pim = import ./pim (fullargs // {kdeworkspace = workspace; });
 
-  env = kde_pkgs: with args; [ (runCommand "kde-env"
+  env = with args; runCommand "kde-env"
   {
-	  KDEDIRS = lib.concatStringsSep ":" (kde_pkgs ++ support.all);
+	  KDEDIRS = lib.concatStringsSep ":" ([ libs pimlibs graphics multimedia
+	  toys network utils games edu base runtime workspace extragear_plasma pim] ++
+	  support.all);
 	  scriptName = "echo-kde-dirs";
   }
   "
@@ -29,5 +31,5 @@ rec {
   echo \"#!/bin/sh\" > \${scriptPath}
   echo \"echo -n export KDEDIRS=\${KDEDIRS}\" >> \${scriptPath}
   chmod +x \${scriptPath}
-  ")] ++ kde_pkgs ++ support.all ++ [shared_mime_info qt];
+  ";
 }
diff --git a/pkgs/desktops/kde-4/edu/default.nix b/pkgs/desktops/kde-4/edu/default.nix
index 77fe86e2178..0cf140a5de9 100644
--- a/pkgs/desktops/kde-4/edu/default.nix
+++ b/pkgs/desktops/kde-4/edu/default.nix
@@ -4,11 +4,11 @@ stdenv.mkDerivation rec {
   name = "kdeedu-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdeedu-4.0.0.tar.bz2;
-    sha256 = "1wjy1rm7aiib1lv61wx7mcbkbpkk6phcz1q6dy51x0hfrc3rdkg4";
+    url = http://download.kde.org/stable/4.0.0/src/kdeedu-4.0.0.tar.bz2;
+    md5 = "73924e158e4a2de2107be441c808251f";
   };
 
-  buildInputs = [kdelibs kdepimlibs boost readline openbabel ocaml
+  buildInputs = [kdelibs kdepimlibs kdeworkspace boost readline openbabel ocaml
   libusb facile python];
   myCmakeFiles = ./myCmakeFiles;
   patchPhase = "
@@ -16,4 +16,5 @@ stdenv.mkDerivation rec {
   sed -e 's@+facile@\${LIBFACILE_INCLUDE_DIR}@' -i \\
   ../kalzium/src/CMakeOCamlInstructions.cmake
   ";
+  configureFlags = "--debug-trycompile";
 }
diff --git a/pkgs/desktops/kde-4/extragear/default.nix b/pkgs/desktops/kde-4/extragear/default.nix
index 93e41c6fbfa..c67d4b8682c 100644
--- a/pkgs/desktops/kde-4/extragear/default.nix
+++ b/pkgs/desktops/kde-4/extragear/default.nix
@@ -1,11 +1,11 @@
 args: with args;
 
 stdenv.mkDerivation {
-  name = "extragear-plasma-4.0.0";
+  name = "extragear-plasma-4.0beta4";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/extragear/extragear-plasma-4.0.0.tar.bz2;
-    sha256 = "19gmvqkal11gg67gfmdivxbhwvggm2i6ad642984d97yicms7s9k";
+    url = mirror://kde/unstable/3.95/src/extragear-plasma-3.95.0.tar.bz2;
+    sha256 = "1nzfy34ig66gfpgv6kbcmcap13axcy7kvj43srbd0ic6a0giv283";
   };
 
   buildInputs = [ kdeworkspace kdebase ];
diff --git a/pkgs/desktops/kde-4/games/default.nix b/pkgs/desktops/kde-4/games/default.nix
index a8df422f278..8f3b6c0ec48 100644
--- a/pkgs/desktops/kde-4/games/default.nix
+++ b/pkgs/desktops/kde-4/games/default.nix
@@ -4,9 +4,9 @@ stdenv.mkDerivation {
   name = "kdegames-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdegames-4.0.0.tar.bz2;
-    sha256 = "09ilgi6l5sq4gavskyhfrv8ra3n3r6xdn8cdc7fm2fi3zah4innn";
+    url = http://download.kde.org/stable/4.0.0/src/kdegames-4.0.0.tar.bz2;
+    md5 = "6264c0034f6389a2807a4e1723ba1c81";
   };
 
-  buildInputs = [kdelibs kdepimlibs];
+  buildInputs = [kdelibs kdepimlibs kdeworkspace];
 }
diff --git a/pkgs/desktops/kde-4/graphics/default.nix b/pkgs/desktops/kde-4/graphics/default.nix
index 18ff1025590..6ab84fd8eff 100644
--- a/pkgs/desktops/kde-4/graphics/default.nix
+++ b/pkgs/desktops/kde-4/graphics/default.nix
@@ -4,10 +4,10 @@ stdenv.mkDerivation {
   name = "kdegraphics-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdegraphics-4.0.0.tar.bz2;
-    sha256 = "00np19mzmg8zs8j89g1f47h3kj5azgnv3nspb8lw880zg682yp2f";
+    url = http://download.kde.org/stable/4.0.0/src/kdegraphics-4.0.0.tar.bz2;
+    md5 = "6cad7b165d99c43d1a19a0350598821c";
   };
 
-  buildInputs = [kdelibs kdepimlibs libgphoto2 saneBackends
+  buildInputs = [kdelibs kdepimlibs kdeworkspace libgphoto2 saneBackends
   djvulibre exiv2 poppler chmlib];
 }
diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix
index b714977bd73..91f722ec658 100644
--- a/pkgs/desktops/kde-4/libs/default.nix
+++ b/pkgs/desktops/kde-4/libs/default.nix
@@ -4,8 +4,8 @@ stdenv.mkDerivation rec {
   name = "kdelibs-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0.0/src/kdelibs-4.0.0.tar.bz2;
-    sha256 = "0bfcrb34kl2md77k9rbr924n5bc7chc5wkr10jjvq98742yh0rza";
+    url = http://download.kde.org/stable/4.0.0/src/kdelibs-4.0.0.tar.bz2;
+    md5 = "79d0f83ca81fc4a135663943340c0b8f";
   };
 
   propagatedBuildInputs = [
diff --git a/pkgs/desktops/kde-4/libs/setup.sh b/pkgs/desktops/kde-4/libs/setup.sh
index 851614b0d18..6f899442d27 100755
--- a/pkgs/desktops/kde-4/libs/setup.sh
+++ b/pkgs/desktops/kde-4/libs/setup.sh
@@ -2,13 +2,4 @@ addKDEDIRS()
 {
 	addToSearchPath KDEDIRS /share/kde4 /. $1
 }
-
-fixCmakeDbusCalls()
-{
-	dbusPrefix=${1:-@out@}
-	echo "Fixing dbus calls in CMakeLists.txt files"
-# Trailing slash in sed is essential
-	find .. -name CMakeLists.txt \
-	| xargs sed -e "s#\${DBUS_INTERFACES_INSTALL_DIR}/#${dbusPrefix}/share/dbus-1/interfaces/#" -i
-}
 envHooks=(${envHooks[@]} addKDEDIRS)
diff --git a/pkgs/desktops/kde-4/multimedia/default.nix b/pkgs/desktops/kde-4/multimedia/default.nix
index 0570b6f4035..f1f7994ce1a 100644
--- a/pkgs/desktops/kde-4/multimedia/default.nix
+++ b/pkgs/desktops/kde-4/multimedia/default.nix
@@ -4,8 +4,8 @@ stdenv.mkDerivation {
   name = "kdemultimedia-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdemultimedia-4.0.0.tar.bz2;
-    sha256 = "14axr1x09k67vb3vaw4g9zg4mq7j14xn9d90kifwap7b76iljbi5";
+    url = http://download.kde.org/stable/4.0.0/src/kdemultimedia-4.0.0.tar.bz2;
+    md5 = "0bf1cd18a23017a37324d9f8c4902e19";
   };
 
   buildInputs = [kdelibs kdepimlibs kdeworkspace libogg flac cdparanoia lame
diff --git a/pkgs/desktops/kde-4/network/default.nix b/pkgs/desktops/kde-4/network/default.nix
index 1a97c3e7e0d..f99f2184bca 100644
--- a/pkgs/desktops/kde-4/network/default.nix
+++ b/pkgs/desktops/kde-4/network/default.nix
@@ -4,8 +4,8 @@ stdenv.mkDerivation {
   name = "kdenetwork-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdenetwork-4.0.0.tar.bz2;
-    sha256 = "04vigr2z0md64khjdriwslsyaf6mpqxd2iwsnr82g53x4kh0i061";
+    url = http://download.kde.org/stable/4.0.0/src/kdenetwork-4.0.0.tar.bz2;
+    md5 = "f362bd34b589800845abfb99589d4cfc";
   };
 
   buildInputs = [kdelibs kdepimlibs kdeworkspace sqlite libidn];
diff --git a/pkgs/desktops/kde-4/pim/builder.sh b/pkgs/desktops/kde-4/pim/builder.sh
new file mode 100755
index 00000000000..8963fae048c
--- /dev/null
+++ b/pkgs/desktops/kde-4/pim/builder.sh
@@ -0,0 +1,10 @@
+source ${stdenv}/setup
+
+myPatchPhase()
+{
+# They reset CMAKE_MODULE_PATH, not adding to the existing
+	sed -e '3s/)/ ${CMAKE_MODULE_PATH})/' -i ../CMakeLists.txt
+}
+patchPhase=myPatchPhase
+
+genericBuild
diff --git a/pkgs/desktops/kde-4/pim/default.nix b/pkgs/desktops/kde-4/pim/default.nix
index 5a174130091..f0f4184d391 100644
--- a/pkgs/desktops/kde-4/pim/default.nix
+++ b/pkgs/desktops/kde-4/pim/default.nix
@@ -1,11 +1,11 @@
 args: with args;
 
 stdenv.mkDerivation {
-  name = "kdepim-4.0.0";
+  name = "kdepim-4.0beta4";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdepim-4.0.0.tar.bz2;
-    sha256 = "kdepim is not included";
+    url = mirror://kde/unstable/3.95/src/kdepim-3.95.0.tar.bz2;
+    sha256 = "0gzvm4h6ij7i119apmh9w82raygahr18bl0i9m3ynf2mcca0aq94";
   };
 
   buildInputs = [libXinerama mesa stdenv.gcc.libc alsaLib kdelibs kdepimlibs
diff --git a/pkgs/desktops/kde-4/pimlibs/default.nix b/pkgs/desktops/kde-4/pimlibs/default.nix
index 1ea2e99615b..30c6ca6250b 100644
--- a/pkgs/desktops/kde-4/pimlibs/default.nix
+++ b/pkgs/desktops/kde-4/pimlibs/default.nix
@@ -4,8 +4,8 @@ stdenv.mkDerivation {
   name = "kdepimlibs-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdepimlibs-4.0.0.tar.bz2;
-	sha256 = "0vixx2vh7qgysnbzvykf20362p22jzvl8snpqaknay3v3b2k0br0";
+    url = http://download.kde.org/stable/4.0.0/src/kdepimlibs-4.0.0.tar.bz2;
+    md5 = "1a68662230fcd4ec8cea90bb780f920e";
   };
 
   propagatedBuildInputs = [kdelibs boost gpgme cyrus_sasl openldap];
diff --git a/pkgs/desktops/kde-4/runtime/builder.sh b/pkgs/desktops/kde-4/runtime/builder.sh
new file mode 100755
index 00000000000..99b357fcf16
--- /dev/null
+++ b/pkgs/desktops/kde-4/runtime/builder.sh
@@ -0,0 +1,12 @@
+source ${stdenv}/setup
+
+myPatchPhase()
+{
+	echo "Fixing dbus calls in CMakeLists.txt files"
+# Trailing slash in sed is essential
+	find .. -name CMakeLists.txt \
+	| xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i
+	#sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../workspace/kcontrol/randr/randr.h
+}
+patchPhase=myPatchPhase
+genericBuild
diff --git a/pkgs/desktops/kde-4/runtime/default.nix b/pkgs/desktops/kde-4/runtime/default.nix
index 5a0d685c9bc..7b9d16bdc45 100644
--- a/pkgs/desktops/kde-4/runtime/default.nix
+++ b/pkgs/desktops/kde-4/runtime/default.nix
@@ -2,13 +2,14 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "kdebase-runtime-4.0.0";
+  builder = ./builder.sh;
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdebase-runtime-4.0.0.tar.bz2;
-    sha256 = "0svsn9gzg3ka77j7z71fy502a09w9gp9jd2q2y1w07ahpdil5p7h";
+    url = http://download.kde.org/stable/4.0.0/src/kdebase-runtime-4.0.0.tar.bz2;
+    md5 = "da93f59497ff90ad01bd4ab9b458f6cb";
   };
 
-  propagatedBuildInputs = [kdepimlibs libusb xineLib];
-  patchPhase = "fixCmakeDbusCalls";
+  propagatedBuildInputs = [kdepimlibs libusb kdebase xineLib];
+  inherit kdelibs;
 }
 
diff --git a/pkgs/desktops/kde-4/support/default.nix b/pkgs/desktops/kde-4/support/default.nix
index 4ad2143a700..426a5811bd7 100644
--- a/pkgs/desktops/kde-4/support/default.nix
+++ b/pkgs/desktops/kde-4/support/default.nix
@@ -4,7 +4,7 @@ let
 	svnSrc = name: hash:
 	oldArgs.fetchsvn {
 		url = "svn://anonsvn.kde.org/home/kde/trunk/kdesupport/${name}";
-		rev = 761061;
+		rev = 747269;
 		sha256 = hash;
 	};
 	};
diff --git a/pkgs/desktops/kde-4/support/eigen.nix b/pkgs/desktops/kde-4/support/eigen.nix
index 2b3520eb942..163683a2921 100644
--- a/pkgs/desktops/kde-4/support/eigen.nix
+++ b/pkgs/desktops/kde-4/support/eigen.nix
@@ -2,6 +2,6 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "eigen-1.0.5";
-  src = svnSrc "eigen" "1wh6kdmzsxmk6byp4rq91pz4rfr7hnh17g8f415p0ywxalg6pfkg";
+  src = svnSrc "eigen" "0dr2gzrf17bdgxj4f9ibk7x5j7fqwwjsl800dzfvrhgj6v1mxm4x";
   buildInputs = [ cmake ];
 }
diff --git a/pkgs/desktops/kde-4/support/gmm.nix b/pkgs/desktops/kde-4/support/gmm.nix
index 768df83c8df..843f9f6aaed 100644
--- a/pkgs/desktops/kde-4/support/gmm.nix
+++ b/pkgs/desktops/kde-4/support/gmm.nix
@@ -2,6 +2,6 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "gmm-svn";
-  src = svnSrc "gmm" "1hxc6ymrjccz4mnix44fwpkmv8fvg5y5a9j3y6liz37wj87snnxd";
+  src = svnSrc "gmm" "0qvx9jf17z0mpwy8k6w6bla94gkkslkiv5w98aajfcq34n0zxcpc";
   buildInputs = [ cmake ];
 }
diff --git a/pkgs/desktops/kde-4/support/qca.nix b/pkgs/desktops/kde-4/support/qca.nix
index a9b69787965..fda435c7bff 100644
--- a/pkgs/desktops/kde-4/support/qca.nix
+++ b/pkgs/desktops/kde-4/support/qca.nix
@@ -2,7 +2,7 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "qca-2.0.0dev";
-  src = svnSrc "qca" "1dm7q9v54ps0iix55hx4y51k379gqiwai5ym7avafis9j0py28aj";
+  src = svnSrc "qca" "0dycmk8fn57mz2pfxck6d0g833fqg9zrw17789vxb4ks0xz0p3zp";
   buildInputs = [ cmake qt openssl gettext cyrus_sasl libgcrypt gnupg ];
   patchPhase = "sed -e '/set(qca_PLUGINSDIR/s@\${QT_PLUGINS_DIR}@\${CMAKE_INSTALL_PREFIX}/plugins@' -i ../CMakeLists.txt";
 }
diff --git a/pkgs/desktops/kde-4/support/qimageblitz.nix b/pkgs/desktops/kde-4/support/qimageblitz.nix
index a4a88afa7e7..3364b4eac5d 100644
--- a/pkgs/desktops/kde-4/support/qimageblitz.nix
+++ b/pkgs/desktops/kde-4/support/qimageblitz.nix
@@ -2,6 +2,6 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "qimageblitz-4.0.0svn";
-  src = svnSrc "qimageblitz" "0vsan536qv8hj8l8ghmji62xzc75xm896h7fpwk48vq9f8w9fn4q";
+  src = svnSrc "qimageblitz" "0gi78bald70bc540jqcpa70x23hycywibn4raf5602hv4d5n8mnx";
   buildInputs = [cmake qt];
 }
diff --git a/pkgs/desktops/kde-4/support/soprano.nix b/pkgs/desktops/kde-4/support/soprano.nix
index 4b0e78f91cf..0cb490b9db7 100644
--- a/pkgs/desktops/kde-4/support/soprano.nix
+++ b/pkgs/desktops/kde-4/support/soprano.nix
@@ -2,7 +2,7 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "soprano-1.9.0svn";
-  src = svnSrc "soprano" "1j61jf8vzamknmzmrxpwba9v7c0vnb8zmlh9n0sgawjgbzfgq2zn";
+  src = svnSrc "soprano" "02xfp7g41ahxwczkxipyi13rav6akhwgspxdhgk5gm94rg10hq2l";
   CLUCENE_HOME=cluceneCore;
   buildInputs = [ cmake qt cluceneCore redland ];
 }
diff --git a/pkgs/desktops/kde-4/support/strigi.nix b/pkgs/desktops/kde-4/support/strigi.nix
index 75a9ed8c651..d1ec98ea25f 100644
--- a/pkgs/desktops/kde-4/support/strigi.nix
+++ b/pkgs/desktops/kde-4/support/strigi.nix
@@ -2,7 +2,7 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "strigi-svn";
-  src = svnSrc "strigi" "0zmfy7ga4y49hl3rgw8ypqag36k78k2wfkkxka8xskrd249516ha";
+  src = svnSrc "strigi" "0dp145n93bqp91lvk2n10mghppyhdm3anh1l3a18d20hrvsm42z5";
   CLUCENE_HOME=cluceneCore;
   buildInputs = [ cmake zlib cluceneCore bzip2 libxml2 qt dbus
   log4cxx stdenv.gcc.libc exiv2 bison cppunit perl ];
diff --git a/pkgs/desktops/kde-4/support/taglib.nix b/pkgs/desktops/kde-4/support/taglib.nix
index 5a5a26e09c3..9a2acc96636 100644
--- a/pkgs/desktops/kde-4/support/taglib.nix
+++ b/pkgs/desktops/kde-4/support/taglib.nix
@@ -2,6 +2,6 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "taglib-1.4svn";
-  src = svnSrc "taglib" "1wszymg4r3mm06wbxviqmnxra120kc1rxbk0a6kjrxjpyr8qcn2k";
+  src = svnSrc "taglib" "1myfgykflbs3l1mrzg4iv8rb1mbd0vpmzl5dnnslfi9b0xg6ydip";
   buildInputs = [ cmake zlib ];
 }
diff --git a/pkgs/desktops/kde-4/toys/default.nix b/pkgs/desktops/kde-4/toys/default.nix
index 2c0fdb28959..39933f0b131 100644
--- a/pkgs/desktops/kde-4/toys/default.nix
+++ b/pkgs/desktops/kde-4/toys/default.nix
@@ -4,8 +4,8 @@ stdenv.mkDerivation {
   name = "kdetoys-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdetoys-4.0.0.tar.bz2;
-    sha256 = "0j7kk4ripg2sw4m8ym96aiyi8rsfb4p7kqp9kmik850flqighhsk";
+    url = http://download.kde.org/stable/4.0.0/src/kdetoys-4.0.0.tar.bz2;
+    md5 = "6e4e2eea3d87718f48716f975b48ada2";
   };
 
   buildInputs = [kdelibs kdepimlibs kdeworkspace];
diff --git a/pkgs/desktops/kde-4/utils/default.nix b/pkgs/desktops/kde-4/utils/default.nix
index 94f49d11efd..2b256a8e768 100644
--- a/pkgs/desktops/kde-4/utils/default.nix
+++ b/pkgs/desktops/kde-4/utils/default.nix
@@ -4,11 +4,10 @@ stdenv.mkDerivation {
   name = "kdeutils-4.0.0";
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdeutils-4.0.0.tar.bz2;
-    sha256 = "0ha31z79ikkbknhyklihzys0w4jfz4qx8jiyja0gwh428f7mxqj4";
+    url = http://download.kde.org/stable/4.0.0/src/kdeutils-4.0.0.tar.bz2;
+    md5 = "5815625f215ff3be47a21074d2c047a0";
   };
 
   buildInputs = [kdelibs kdepimlibs kdeworkspace gmp libzip python ];
 # TODO : tpctl
-  patchPhase="fixCmakeDbusCalls";
 }
diff --git a/pkgs/desktops/kde-4/workspace/builder.sh b/pkgs/desktops/kde-4/workspace/builder.sh
index f5a5b5a90bf..648d6175f35 100755
--- a/pkgs/desktops/kde-4/workspace/builder.sh
+++ b/pkgs/desktops/kde-4/workspace/builder.sh
@@ -2,7 +2,10 @@ source ${stdenv}/setup
 
 myPatchPhase()
 {
-	fixCmakeDbusCalls
+	echo "Fixing dbus calls in CMakeLists.txt files"
+# Trailing slash in sed is essential
+	find .. -name CMakeLists.txt \
+	| xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i
 	sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../kcontrol/randr/randr.h
 }
 patchPhase=myPatchPhase
diff --git a/pkgs/desktops/kde-4/workspace/default.nix b/pkgs/desktops/kde-4/workspace/default.nix
index a5929785aec..70d2b3eddc3 100644
--- a/pkgs/desktops/kde-4/workspace/default.nix
+++ b/pkgs/desktops/kde-4/workspace/default.nix
@@ -5,9 +5,11 @@ stdenv.mkDerivation {
   builder = ./builder.sh;
   
   src = fetchurl {
-    url = mirror://kde/stable/4.0/src/kdebase-workspace-4.0.0.tar.bz2;
-    sha256 = "08sgp7jaqljdxwsgr5lyyfd6w734yv24zswps1mchmhj01vz1fcg";
+    url = http://download.kde.org/stable/4.0.0/src/kdebase-workspace-4.0.0.tar.bz2;
+    md5 = "f3d2155ff5ff7472a8884bd3f31bff16";
   };
 
-  buildInputs = [kdelibs kdepimlibs stdenv.gcc.libc];
+  buildInputs = [kdelibs kdepimlibs kdebase kderuntime stdenv.gcc.libc];
+  inherit kdelibs;
 }
+
diff --git a/pkgs/development/compilers/bigloo/default.nix b/pkgs/development/compilers/bigloo/default.nix
new file mode 100644
index 00000000000..2fb0b7c2276
--- /dev/null
+++ b/pkgs/development/compilers/bigloo/default.nix
@@ -0,0 +1,130 @@
+args:
+( args.mkDerivationByConfiguration {
+    flagConfig = {
+    /*
+Bigloo compiler:
+   --native=yes|no [default yes]
+   --jvm=yes|no|force [default no]
+   --dotnet=yes|no|force [default no]
+   --customgc=yes|no [default yes]
+   --bee=partial|full [default partial]
+
+API:
+   --enable-[calendar|fthread|mail|multimedia|pkgcomp|pkglib|pthread|sqlite|srfi1|ssl|web]
+   --disable-[calendar|fthread|mail|multimedia|pkgcomp|pkglib|pthread|sqlite|srfi1|ssl|web]
+
+Path:
+   --prefix=dir (sets bin, lib, zip, man, info and doc dirs)
+   --bindir=file
+   --libdir=file
+   --gcdir=dir (directory for non custom gc library)
+   --fildir=file
+   --zipdir=file
+   --dlldir=file
+   --mandir=file
+   --infodir=file
+   --docdir=file
+   --tmpdir=file (Bigloo tmp dir)
+   --tmp=file (Installation tmp dir)
+   --lispdir=file
+
+Tools and compilers:
+   --bigloo=comp [default bigloo]
+   --cc=comp [default gcc]
+   --ld=comp [default gcc]
+   --as=asm
+   --cflags=compilation flags
+   --lflags=compiler link flags
+   --coflags=optimization_flags
+   --cpicflags=pic_flags
+   --ldlibs=ld_libs
+   --ldcomplibs=ld_compiler_libs
+   --ldflags=ld_flags
+   --emacs=file
+   --xemacs=file (deprecated, use "--emacs" option)
+   --indent=file
+   --icc (configure for icc)
+
+Host configuration:
+   --arch=[i586|i686|athlon|athlon-tbird|athlon-mp|athlon-xp|k6-2|k6-3|pentium3|pentium4] (configure for specified hardware)
+   --a.out=file
+   --a.bat=file
+   --dirname=file-or-command
+   --force-posixos=operating-system
+   --os-win32
+   --os-macosx (tune for MacOSX)
+   --no-os-macosx (disable MacOSX auto configuration)
+   --cygwin-dos-path=[dos path]
+   --cygwin-dos-jvm=yes|no [default yes]
+   --no-share (disable shared libraries support)
+   --no-ldpreload
+   --sharedbde=yes|no [default no] (link Bde tools against shared libraries)
+   --sharedcompiler=yes|no [default no] (link Bigloo against shared libraries)
+
+JVM configuration:
+   --java=file
+   --javac=file
+   --javaprefix=dir
+   --javashell=shell [should be sh or msdos (default sh)]
+   --native-default-backend
+   --jvm-default-backend
+
+.NET configuration:
+   --pnet (configure for GNU pnet)
+   --mono (configure for Ximian Mono)
+   --dotnetldstyle=style [should be pnet, mono]
+   --dotnetcsccstyle=style [should be pnet, mono]
+   --dotnetclrstyle=style [should be pnet, mono]
+   --dotnetcscc=file
+   --dotnetld=file
+   --dotnetclr=file
+   --dotnetclropt=options
+   --dotnetshell=shell [should be sh or msdos (default sh)]
+   --dotnetasm=asm [optional]
+
+Misc:
+   --finalization=yes|no [default no]
+   --benchmark=yes|no [default no] (must use --arch too)
+   --stack-check=no
+
+Configuration settings:
+   --bigloo.h[=file]
+   --bigloo_gc.h[=file]
+   --bigloo_config.h[=file]
+   --bigloo_config.jvm[=file]
+   --Makefile.config=file
+   --configure.log=file
+   --no-summary
+   --bootconfig
+   --bootdir=dir
+   --configureinfo=yes|no [default no]
+
+   */
+
+    }; 
+
+    extraAttrs = co : rec {
+      name = "bigloo3.0d-alpha05Feb08"; # Thanks to Manuel Serrano for fixing the mv trouble 
+
+      # take care, modifying generated C-Code (altering string and length of string) 
+      preConfigure = 
+        "sed -i -e 's=/bin/rm -f \", 14=rm -f \", 9=' "
+         + " -e 's=/bin/mv \", 11=mv \", 6=' "
+         + "comptime/Cc/cc.c\n"
+      + "sed -i -e 's=/bin/rm=rm=' "
+           + " -e 's=/bin/mv=mv=' "
+         + "configure  gc/install-gc-*";
+
+      src = args.fetchurl {
+        url = "ftp://ftp-sop.inria.fr/mimosa/fp/Bigloo/${name}.tar.gz";
+        sha256 = "03rknb1nl3z2f86k6iazbrapmli2m8lcs21lqrri8ys8s72dm33w";
+      };
+
+    meta = { 
+      description = "scheme -> C / Java compiler (.net experimental)";
+      homepage = http://www-sop.inria.fr/mimosa/fp/Bigloo/;
+      # you can choose one of the following licenses: 
+      license = ["GPL"];
+    };
+  };
+} ) args
diff --git a/pkgs/development/compilers/fpc/binary.nix b/pkgs/development/compilers/fpc/binary.nix
index b76441e38d6..99725b501c0 100644
--- a/pkgs/development/compilers/fpc/binary.nix
+++ b/pkgs/development/compilers/fpc/binary.nix
@@ -1,9 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "fpc-2.0.4-binary";
 
-  src = args.
-	fetchurl {
+  src = fetchurl {
 		url = ftp://ftp.chg.ru/pub/lang/pascal/fpc/dist/i386-linux-2.0.4/fpc-2.0.4.i386-linux.tar;
 		sha256 = "0b2szv2anbf58h4i5mlph93afv9qdx6i0jqggba04d3anjbl9gfy";
 	};
diff --git a/pkgs/development/compilers/fpc/default.nix b/pkgs/development/compilers/fpc/default.nix
index 5da4f65aea7..0d2f1fb525d 100644
--- a/pkgs/development/compilers/fpc/default.nix
+++ b/pkgs/development/compilers/fpc/default.nix
@@ -1,16 +1,16 @@
 args:
 if ((args ? startFPC) && (args.startFPC != null))
 	then 
-args.stdenv.mkDerivation {
+with args;
+stdenv.mkDerivation {
   name = "fpc-2.2.0";
 
-  src = args.
-	fetchurl {
+  src = fetchurl {
 		url = ftp://freepascal.stack.nl/pub/fpc/dist/source-2.2.0/fpcbuild-2.2.0.tar.gz;
 		sha256 = "0pvsdmimknkgy8jgdz9kd7w5bs9fy5ynrgswpk0ib6x0y26zxijm";
 	};
 
-  buildInputs = [args.startFPC args.gawk];
+  buildInputs = [startFPC gawk];
 
   installFlags = "INSTALL_PREFIX=\${out}";
   postInstall = "ln -fs $out/lib/fpc/*/ppc386 $out/bin;
diff --git a/pkgs/development/compilers/gcc-4.2/default.nix b/pkgs/development/compilers/gcc-4.2/default.nix
index c763f8262c2..7fcf7717c5a 100644
--- a/pkgs/development/compilers/gcc-4.2/default.nix
+++ b/pkgs/development/compilers/gcc-4.2/default.nix
@@ -8,22 +8,24 @@ assert langC;
 
 with import ../../../lib;
 
+let version = "4.2.3"; in
+
 stdenv.mkDerivation {
-  name = "gcc-4.2.2";
+  name = "gcc-${version}";
   builder = ./builder.sh;
   
   src =
     optional /*langC*/ true (fetchurl {
-      url = mirror://gnu/gcc/gcc-4.2.2/gcc-core-4.2.2.tar.bz2;
-      sha256 = "01hdwd4im2xzg159fk022zqyhlxphqvpmabd25bqb8fjbs2yi80a";
+      url = "mirror://gnu/gcc/gcc-${version}/gcc-core-${version}.tar.bz2";
+      sha256 = "04y84s46wzy4h44hpacf7vyla7b5zfc1qvdq3myvrhp82cp0bv4r";
     }) ++
     optional langCC (fetchurl {
-      url = mirror://gnu/gcc/gcc-4.2.2/gcc-g++-4.2.2.tar.bz2;
-      sha256 = "04xankxi3bi4gvgv8rq9h6w3bdx59bg9zh0zv6lyw373gy26ygmq";
+      url = "mirror://gnu/gcc/gcc-${version}/gcc-g++-${version}.tar.bz2";
+      sha256 = "0spzz549fifwv02ym33azzwizl0zkq5m1fgy88ccmcyzmwpgyzfq";
     }) ++
     optional langF77 (fetchurl {
-      url = mirror://gnu/gcc/gcc-4.2.2/gcc-fortran-4.2.2.tar.bz2;
-      sha256 = "1fybl88w0l99cqppx18i6hnq5dsrssx3qd7vr2ybmmk3nfx8pziq";
+      url = "mirror://gnu/gcc/gcc-${version}/gcc-fortran-${version}.tar.bz2";
+      sha256 = "1l3ww6qymrkcfqlssb41a5fdnh6w2hqk0v2ijx56jgjbdnzawyp0";
     });
     
   patches =
diff --git a/pkgs/development/compilers/ghc-6.8/default.nix b/pkgs/development/compilers/ghc-6.8/default.nix
index 6226fa2988d..518b5f391a3 100644
--- a/pkgs/development/compilers/ghc-6.8/default.nix
+++ b/pkgs/development/compilers/ghc-6.8/default.nix
@@ -1,4 +1,4 @@
-args: with args;
+{stdenv, fetchurl, readline, ghc, perl, m4, gmp, ncurses}:
 
 stdenv.mkDerivation (rec {
   name = "ghc-6.8.2";
@@ -41,7 +41,6 @@ stdenv.mkDerivation (rec {
     sed -i \"s|^\\\(ld-options.*$\\\)|\\\1 -L${ncurses}/lib|\" libraries/readline/readline.buildinfo.in
   ";
 
-  dontStrip = 1;
   inherit (stdenv) gcc;
   inherit readline gmp ncurses;
 })
diff --git a/pkgs/development/compilers/ghc/boot.nix b/pkgs/development/compilers/ghc/boot.nix
index bf096616a96..ab606d4c2ba 100644
--- a/pkgs/development/compilers/ghc/boot.nix
+++ b/pkgs/development/compilers/ghc/boot.nix
@@ -22,7 +22,6 @@ stdenv.mkDerivation {
     else throw "cannot bootstrap GHC on this platform"; 
 
   buildInputs = [perl];
-  dontStrip = 1;
 
   # On Linux, use patchelf to modify the executables so that they can
   # find readline/gmp.
@@ -53,4 +52,5 @@ stdenv.mkDerivation {
     done
 
   " else "";
+
 }
diff --git a/pkgs/development/compilers/ghc/createGhcWrapper/default.nix b/pkgs/development/compilers/ghc/createGhcWrapper/default.nix
index 5eeb4d43190..4d6094f5d72 100644
--- a/pkgs/development/compilers/ghc/createGhcWrapper/default.nix
+++ b/pkgs/development/compilers/ghc/createGhcWrapper/default.nix
@@ -1,9 +1,15 @@
-args: with args;
+args: with args; with lib; with annotatedDerivations;
 
 stdenv.mkDerivation {
   inherit suffix name ghc ;
 
-  buildInputs = libraries ++ [ghcPkgUtil];
+  buildInputs = map delAnnotation (libraries ++ [ghcPkgUtil]);
+  #tags = if (installSourceAndTags == true) then
+  #        map sourceWithTagsDerivation ( uniqList { inputList = 
+  #            ( filterAnnotated ( concatLists (map uniqAnnotatedDeps libraries ) ) ) ; } )
+  #        else [];
+  tags = map (x : sourceWithTagsDerivation (x.sourceWithTags)) 
+          (uniqList { inputList=  filter annotatedWithSourceAndTagInfo libraries; } );
 
   phases="installPhase";
 
@@ -21,5 +27,12 @@ GHC_PACKAGE_PATH=\${GHC_PACKAGE_PATH}\${g} \$ghc/bin/$app \"\\\$@\"
 EOF
       chmod +x \"\$out/bin/\$a$suffix\"
     done
+
+    ensureDir \$out/{src,tags}
+    for i in \$tags; do
+      for path in src tags; do
+        ln -s \$i/\$path/* \$out/\$path
+      done
+    done
 ";
 }
diff --git a/pkgs/development/compilers/ghcs/default.nix b/pkgs/development/compilers/ghcs/default.nix
index c026a860d40..6dd37576524 100644
--- a/pkgs/development/compilers/ghcs/default.nix
+++ b/pkgs/development/compilers/ghcs/default.nix
@@ -1,11 +1,13 @@
-{ ghcPkgUtil, gnum4, perl, ghcboot, stdenv, fetchurl, recurseIntoAttrs, gmp, readline, lib } : rec {
+{ ghcPkgUtil, gnum4, perl, ghcboot, stdenv, fetchurl, recurseIntoAttrs, gmp, readline, lib, annotatedDerivations, hasktags, ctags } : 
+with annotatedDerivations;
+rec {
   
   /* What's in here?
      Goal:  really pure GHC. This means put every library into its each package.conf
      and add all together using GHC_PACKAGE_PATH
 
      First I've tried separating the build of ghc from it's lib. It hase been to painful. I've failed.
-     Now there is splitpackagedb.hs which just takes the installed package.conf
+     Now there is nix_ghc_pkg_tool.hs which just takes the installed package.conf
      and creates a new package db file for each contained package.
 
      The final attribute set looks similar to this:
@@ -31,31 +33,6 @@
 
   */
 
-  # creates a nix package out of the single package.conf files created when after installing ghc (see splitpackagedb.hs)
-  packageByPackageDB = otherPkg : name : packageconfpath : propagatedBuildInputs : stdenv.mkDerivation {
-    inherit name otherPkg propagatedBuildInputs;
-    phases = "buildPhase fixupPhase";
-    buildInputs = [ghcPkgUtil];
-    buildPhase = "setupHookRegisteringPackageDatabase \"$otherPkg/${packageconfpath}\"
-      ";
-  };
-
-  # used to automatically get dependencies ( used for core_libs ) 
-  # TODO use kind of state and evaluate deps of a dep only once
-  resolveDeps = ghc : libs : 
-    let attrs = builtins.listToAttrs libs; in
-      rec {
-        # using undocumented feature that attribute can contain hyphens when using listToAttrs
-        # You should be able to get the attribute values using __getAttr
-        result = builtins.listToAttrs (map ( l : lib.av l.name (
-                               packageByPackageDB ghc l.name 
-                                      ("lib/ghc-${ghc.version}/${l.name}.conf")
-                                      (map (n: builtins.getAttr n result) l.deps)
-                ) ) libs );
-      }.result;
-
-
-  
   #this only works for ghc-6.8 right now
   ghcAndLibraries = { version, src /* , core_libraries, extra_libraries  */
                     , extra_src }:
@@ -74,12 +51,14 @@
         sed -i \"s|^\(library-dirs.*$\)|\1 \\\"$ncurses/lib\\\"|\" libraries/readline/package.conf.in
       ";
 
-      splitpackagedb = ./splitpackagedb.hs;
+      # TODO add unique (filter duplicates?) shouldn't be there? 
+      nix_ghc_pkg_tool = ./nix_ghc_pkg_tool.hs;
 
       configurePhase = "./configure"
        +" --prefix=\$out "
        +" --with-ghc=\$ghcboot/bin/ghc"
        +" --with-gmp-libraries=$gmp/lib"
+       +" --with-gmp-includes=${gmp}/include"
        +" --with-readline-libraries=\"$readline/lib\"";
 
       # now read the main package.conf and create a single package db file for each of them
@@ -88,9 +67,10 @@
       #  note : I don't know yet wether it's a good idea to have RUNGHC.. It's faster
       # but you can't pass packages, can you?
       postInstall = "
-        cp \$splitpackagedb splitpackagedb.hs
-        \$out/bin/ghc-\$version --make -o splitpackagedb  splitpackagedb.hs;
-        ./splitpackagedb \$out/lib/ghc-\$version/package.conf \$out/lib/ghc-\$version
+        cp \$nix_ghc_pkg_tool nix_ghc_pkg_tool.hs
+        \$out/bin/ghc-\$version --make -o nix_ghc_pkg_tool  nix_ghc_pkg_tool.hs;
+        ./nix_ghc_pkg_tool split \$out/lib/ghc-\$version/package.conf \$out/lib/ghc-\$version
+        cp nix_ghc_pkg_tool \$out/bin
 
         if test -x \$out/bin/runghc; then
           RUNHGHC=\$out/bin/runghc # > ghc-6.7/8 ?
@@ -105,64 +85,120 @@
       ";
     };
 
-    # Why this effort? If you want to use pretty-0.9 you can do this now without cabal choosing the 1.0 version hassle 
-    core_libs = resolveDeps ghc
-      [ { name = "Cabal-1.2.0"; deps = ["base-2.1" "pretty-1.0" "old-locale-1.0" "old-time-1.0" "directory-1.0" "unix-2.0" "process-1.0" "array-0.1" "containers-0.1" "rts-1.0" "filepath-1.0"];} #
-        { name = "array-0.1"; deps = ["base-2.1"];}
-        { name = "base-2.1"; deps = [];} #
-        { name = "bytestring-0.9"; deps = [ "base-2.1" "array-0.1" ];}
-        { name = "containers-0.1"; deps = [ "base-2.1" "array-0.1" ];}
-        { name = "directory-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0"];}
-        { name = "filepath-1.0"; deps = [ "base-2.1" ];} #
-        { name = "ghc-6.8.0.20071004"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "array-0.1" "containers-0.1" "hpc-0.5" "bytestring-0.9" "pretty-1.0" "packedstring-0.1" "template-haskell-0.1" "unix-2.0" "process-1.0" "readline-1.0" "Cabal-1.2.0" "random-1.0" "haskell98-1.0"];}
-        { name = "haskell98-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "random-1.0" "unix-2.0" "process-1.0" "array-0.1"];}
-        { name = "hpc-0.5"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "array-0.1" "containers-0.1"]; }
-        { name = "old-locale-1.0"; deps = [ "base-2.1"];}
-        { name = "old-time-1.0"; deps = [ "base-2.1" "old-locale-1.0" ];}
-        { name = "packedstring-0.1"; deps = [ "base-2.1" "array-0.1" ];}
-        { name = "pretty-1.0"; deps = [ "base-2.1" ];}
-        { name = "process-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "unix-2.0"];}
-        { name = "random-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0"];}
-        { name = "readline-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "unix-2.0" "process-1.0" ];}
-        { name = "rts-1.0"; deps = [ "base-2.1" ];} #
-        { name = "template-haskell-0.1"; deps = [ "base-2.1" "pretty-1.0" "array-0.1" "packedstring-0.1" "containers-0.1" ];}
-        { name = "unix-2.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" ];}
-      ];
-
-      
-
-    extra_libs = [];
-
-    #all_libs = core_libs ++ extra_libs;
-
-  } );
-
-  ghc68 = ghcAndLibraries {
-    version = "6.8.0.20071004";
+    core_libs = rec {
+        #   name (using lowercase letters everywhere because using installing packages having different capitalization is discouraged) - this way there is not that much to remember?
+
+        cabal_darcs_name = "cabal-darcs";
+
+        # introducing p here to speed things up.
+        # It merges derivations (defined below) and additional inputs. I hope that using as few nix functions as possible results in greates speed?
+        # unfortunately with x; won't work because it forces nix to evaluate all attributes of x which would lead to infinite recursion
+        pkgs = let x = derivations; in {
+            # ghc extra packages 
+          cabal = { name = "Cabal-1.2.3.0"; srcDir = "libraries/Cabal";
+                          deps = [x.base x.pretty x.old_locale x.old_time
+                            x.directory x.unix x.process x.array x.containers
+                            x.rts x.filepath ]; };
+          array = { name = "array-0.1.0.0"; srcDir = "libraries/array";
+                          deps = [x.base ]; };
+          base = { name = "base-3.0.1.0"; srcDir = "libraries/base";
+                          deps = [x.rts ]; };
+          bytestring = { name = "bytestring-0.9.0.1"; srcDir = "libraries/bytestring";
+                          deps = [ x.base x.array ];};
+          containers = { name = "containers-0.1.0.1"; srcDir = "libraries/containers";
+                          deps = [ x.base x.array ];};
+          directory = { name = "directory-1.0.0.0"; srcDir = "libraries/directory";
+                          deps = [ x.base x.old_locale x.old_time x.filepath ];};
+          filepath = { name = "filepath-1.1.0.0"; srcDir = "libraries/filepath";
+                          deps = [ x.base ];};
+          ghc = { name = "ghc-${version}"; srcDir = "libraries/Cabal";
+                          deps = [ x.base x.old_locale x.old_time x.filepath
+                            x.directory x.array x.containers x.hpc x.bytestring
+                            x.pretty x.packedstring x.template_haskell x.unix
+                            x.process x.readline x.cabal x.random x.haskell98 ]; };
+          haskell98 = { name = "haskell98-1.0.1.0"; srcDir = "libraries/haskell98";
+                          deps = [ x.base x.old_locale x.old_time x.filepath
+                            x.directory x.random x.unix x.process x.array]; };
+          hpc = { name = "hpc-0.5.0.0"; srcDir = "libraries/hpc";
+                          deps = [ x.base x.old_locale x.old_time x.filepath
+                            x.directory x.array x.containers ]; };
+          old_locale = { name = "old-locale-1.0.0.0"; srcDir = "libraries/old-locale";
+                          deps = [ x.base ]; };
+          old_time = { name = "old-time-1.0.0.0"; srcDir = "libraries/old-time";
+                          deps = [ x.base x.old_locale ];};
+          packedstring = { name = "packedstring-0.1.0.0"; srcDir = "libraries/packedstring";
+                          deps = [ x.base x.array ];};
+          pretty = { name = "pretty-1.0.0.0"; srcDir = "libraries/pretty";
+                          deps = [ x.base ];};
+          process = { name = "process-1.0.0.0"; srcDir = "libraries/process";
+                          deps = [ x.base x.old_locale x.old_time x.filepath
+                            x.directory x.unix ]; };
+          random = { name = "random-1.0.0.0"; srcDir = "libraries/random";
+                          deps = [ x.base x.old_locale x.old_time ]; };
+          readline = { name = "readline-1.0.1.0"; srcDir = "libraries/readline";
+                          deps = [ x.base x.old_locale x.old_time x.filepath
+                            x.directory x.unix x.process ];};
+          rts = rec { 
+                  name = "rts-1.0"; srcDir = "rts"; # TODO: Doesn't have .hs files so I should use ctags if creating tags at all
+                  deps = [];
+                  createTagFiles = [
+                      { name = "${name}_haskell_tags";
+                        tagCmd = "${toString ctags}/bin/ctags -R .;mv tags \$TAG_FILE"; }
+                    ];
+          };
+          template_haskell = { name = "template-haskell-2.2.0.0"; srcDir = "libraries/template-haskell";
+                          deps = [ x.base x.pretty x.array x.packedstring x.containers ];};
+          unix = { name = "unix-2.3.0.0"; srcDir = "libraries/unix";
+                          deps = [ x.base x.old_locale x.old_time x.filepath x.directory ];};
+        };
+
+        toDerivation = attrs : with attrs;
+              rec {
+                inherit name;
+
+                #aDeps = concatLists ( catAttrs ( subsetmap id args [ "buildInputs" "propagatedBuildInputs" ] ) );
+                aDeps = deps;
+
+                # dummy derivation, only creates setup-hook for package database located in the ghc derivation 
+                aDeriv = stdenv.mkDerivation {
+                    inherit name;
+                    phases = "buildPhase fixupPhase";
+                    buildInputs = [ ghcPkgUtil ];
+                    propagatedBuildInputs = [ ghc ] ++ map delAnnotation  attrs.deps;
+                    buildPhase = "setupHookRegisteringPackageDatabase \"${ghc}/lib/ghc-${ghc.version}/${name}.conf\"";
+                };
+
+                sourceWithTags = {
+                  src = ghc.src;
+                  inherit srcDir;
+                  name = name + "-src-with-tags";
+                  createTagFiles = lib.maybeAttr "createTagFiles" [
+                      { name = "${name}_haskell_tags";
+                        tagCmd = "${toString hasktags}/bin/hasktags-modified --ctags `find . -type f -name \"*.*hs\"`; sort tags > \$TAG_FILE"; } 
+                    ] attrs;
+                };
+          };
+        derivations = with lib; builtins.listToAttrs (lib.concatLists ( lib.mapRecordFlatten 
+                  ( n : attrs : let d = (toDerivation attrs); in [ (nv n d) (nv attrs.name d) ] ) pkgs ) );
+    }.derivations;
+  });
+
+  ghc68 = ghcAndLibraries rec {
+    version = "6.8.2";
     src = fetchurl {
-      url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.0.20071004-src.tar.bz2;
-      sha256 = "1yyl7sxykmvkiwfxkfzpqa6cmgw19phkyjcdv99ml22j16wli63l";
+      #url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.0.20071004-src.tar.bz2;
+      #sha256 = "1yyl7sxykmvkiwfxkfzpqa6cmgw19phkyjcdv99ml22j16wli63l";
+      url = "http://www.haskell.org/ghc/dist/stable/dist/ghc-${version}-src.tar.bz2";
+      md5 = "745c6b7d4370610244419cbfec4b2f84";
       #url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.20070912-src.tar.bz2;
       #sha256 = "1b1gvi7hc7sc0fkh29qvzzd5lgnlvdv3ayiak4mkfnzkahvmq85s";
     };
 
     extra_src = fetchurl {
-      url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.0.20071004-src-extralibs.tar.bz2;
-      sha256 = "0vjx4vb2xhv5v2wj74ii3gpjim7x9wj0m87zglqlhc8xn31pmrd2";
+      url = "http://www.haskell.org/ghc/dist/stable/dist/ghc-${version}-src-extralibs.tar.bz2";
+      sha256 = "044mpbzpkbxcnqhjnrnmjs00mr85057d123rrlz2vch795lxbkcn";
       #url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.20070912-src-extralibs.tar.bz2;
       #sha256 = "0py7d9nh3lkhjxr3yb3n9345d0hmzq79bi40al5rcr3sb84rnp9r";
     };
-
-    # this will change because of dependency hell :) 
-    #core_libraries = [ "Cabal" /* "Win32" */ "array" "base" "bytestring" "containers" 
-                       #"directory" "doc" "filepath" "haskell98" "hpc" "old-locale" "old-time"
-                       #"packedstring" "pretty" "process" "random" "readline" "stamp" 
-                       #"template-haskell" "unix" ];
-
-    #extra_libraries = [ "ALUT" "GLUT" "HGL" "HUnit" "ObjectIO" "OpenAL" "OpenGL" "QuickCheck" "X11" 
-                        #"arrows" "cgi" "fgl" "haskell-src" "html" "mtl" "network" "parallel" "parsec" 
-                        #"regex-base" "regex-compat" "regex-posix" "stm" "time" "xhtm" ];
-
   };
 }
-
diff --git a/pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs b/pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs
new file mode 100644
index 00000000000..494b37807fa
--- /dev/null
+++ b/pkgs/development/compilers/ghcs/nix_ghc_pkg_tool.hs
@@ -0,0 +1,48 @@
+-- packages: filepath,Cabal,directory
+{-# OPTIONS_GHC -fglasgow-exts #-}
+module Main where
+import Distribution.InstalledPackageInfo (InstalledPackageInfo (..))
+import Distribution.Package (showPackageId)
+import System.FilePath
+import System.Environment
+import System.Directory
+import System.IO
+import System.Exit
+import Data.List
+
+usage = unlines [
+    " usage a) <app-name> split in_path out_path"
+  , "       b) <app-anme> join out_path"
+  , "This small helper executable servers two purposes:"
+  , "a) split the main package db created by ghc installation into single libs"
+  , "   so that nix can add them piecwise as needed to buildInputs"
+  , "b) merge databases into one single file, so when building a library"
+  , "   we can create one db containing all dependencies passed by GHC_PACKAGE_PATH"
+  , "   I think this is a better solution than patching and mantaining cabal so"
+  , "   that it support GHC_PACKAGE_PATH (not only by accident) ?"
+  ]
+
+mySplit :: (Eq Char) => [Char] ->[[ Char ]]
+mySplit [] = []
+mySplit list = let (l, l') = span (not . (`elem` ":;")) list
+                    in l: mySplit (drop 1 l')
+
+myReadFile f = doesFileExist f >>= \fe ->
+    if fe then readFile f
+          else do hPutStrLn stderr $ "unable to read file " ++ f
+                  exitWith (ExitFailure 1)
+
+main = do
+  args <- getArgs
+  case args of
+    ["split", inFile, outDir] -> do
+      -- prior to 6.9.x (when exactly) this must be InstalledPackageInfo only (not InstalledPackageInfo_ String) 
+      -- (packagedb :: [InstalledPackageInfo_ String] ) <- fmap read $ myReadFile inFile
+      (packagedb :: [InstalledPackageInfo] ) <- fmap read $ myReadFile inFile
+      mapM_ (\pi -> let fn = outDir </> (showPackageId $ package pi) ++ ".conf"
+                    in writeFile fn (show [pi])
+            ) packagedb
+    ["join", outpath] -> do
+      getEnv "GHC_PACKAGE_PATH" >>= mapM myReadFile . nub . mySplit 
+        >>= writeFile outpath . show . concat . map (read :: String -> [InstalledPackageInfo])
+    _ -> putStrLn usage
diff --git a/pkgs/development/compilers/ghcs/splitpackagedb.hs b/pkgs/development/compilers/ghcs/splitpackagedb.hs
deleted file mode 100644
index 0f7ceb0d401..00000000000
--- a/pkgs/development/compilers/ghcs/splitpackagedb.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-{-# OPTIONS_GHC -fglasgow-exts #-}
-module Main where
-import Distribution.InstalledPackageInfo (InstalledPackageInfo (..))
-import Distribution.Package (showPackageId)
-import System.FilePath
-import System.Environment
-
-usage = unlines [
-  "<appname> in outDir"
-  , "reads package db appname"
-  , "and creates a package database for each contained package in outDir"
-  , "" 
-  , "The purpose is to be able to control availible packages to ensure purity in nix."
-  , "Separating each package from the auomated ghc build process is to painful (for me)"
-  ]
-
-main = do
-  args <- getArgs
-  case args of
-    [inFile, outDir] -> do
-      (packagedb :: [InstalledPackageInfo] ) <- fmap read $ readFile inFile
-      mapM_ (\pi -> let fn = outDir </> (showPackageId $ package pi) ++ ".conf"
-                    in writeFile fn (show [pi])
-            ) packagedb
-    _ -> putStrLn usage
diff --git a/pkgs/development/compilers/gwt/builder.sh b/pkgs/development/compilers/gwt/builder.sh
new file mode 100644
index 00000000000..f21b521382b
--- /dev/null
+++ b/pkgs/development/compilers/gwt/builder.sh
@@ -0,0 +1,33 @@
+source $stdenv/setup
+
+tar xfvj $src
+ensureDir $out
+cp -av $name $out
+
+# Create wrapper scripts so that the GWT compiler/host work
+
+libPath="$libstdcpp5/lib:$glib/lib:$gtk/lib:$atk/lib:$pango/lib:$libX11/lib:$libXt/lib:$out/$name/mozilla-1.7.12"
+
+ensureDir $out/bin
+
+cat > $out/bin/gwt-compile <<EOF
+#!/bin/sh
+
+export LD_LIBRARY_PATH=$libPath
+export APPDIR=\`dirname \$0\`
+export LIBXCB_ALLOW_SLOPPY_LOCK=1 # Workaround for bug in Java AWT implementation
+
+java  -cp "\$APPDIR/src:\$APPDIR/bin:$out/$name/gwt-user.jar:$out/$name/gwt-dev-linux.jar" com.google.gwt.dev.GWTCompiler -out "\$APPDIR/www" $@
+EOF
+chmod 755 $out/bin/gwt-compile
+
+cat > $out/bin/gwt-shell <<EOF
+#!/bin/sh
+
+export LD_LIBRARY_PATH=$libPath
+export APPDIR=\`dirname \$0\`
+export LIBXCB_ALLOW_SLOPPY_LOCK=1 # Workaround for bug in Java AWT implementation
+
+java  -cp "\$APPDIR/src:\$APPDIR/bin:$out/$name/gwt-user.jar:$out/$name/gwt-dev-linux.jar" com.google.gwt.dev.GWTShell -out "\$APPDIR/www" $@
+EOF
+chmod 755 $out/bin/gwt-shell
diff --git a/pkgs/development/compilers/gwt/default.nix b/pkgs/development/compilers/gwt/default.nix
new file mode 100644
index 00000000000..50f05e81419
--- /dev/null
+++ b/pkgs/development/compilers/gwt/default.nix
@@ -0,0 +1,14 @@
+{stdenv, fetchurl, glib, gtk, pango, atk, libX11, libXt, libstdcpp5}:
+
+stdenv.mkDerivation {
+  name = "gwt-linux-1.4.61";
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = http://google-web-toolkit.googlecode.com/files/gwt-linux-1.4.61.tar.bz2;
+    md5 = "5aa5d630716817f7cf22dc2a36c0fcbd";
+  };
+
+  inherit glib gtk pango atk libX11 libXt libstdcpp5;
+  buildInputs = [glib gtk pango atk libX11 libXt libstdcpp5];
+}
diff --git a/pkgs/development/compilers/java-front/builder.sh b/pkgs/development/compilers/java-front/builder.sh
new file mode 100644
index 00000000000..0177abcccea
--- /dev/null
+++ b/pkgs/development/compilers/java-front/builder.sh
@@ -0,0 +1,4 @@
+source $stdenv/setup
+
+configureFlags="--with-aterm=$aterm --with-sdf=$sdf --with-strategoxt=$strategoxt"
+genericBuild
diff --git a/pkgs/development/compilers/java-front/default.nix b/pkgs/development/compilers/java-front/default.nix
new file mode 100644
index 00000000000..fc60e72a562
--- /dev/null
+++ b/pkgs/development/compilers/java-front/default.nix
@@ -0,0 +1,14 @@
+{stdenv, fetchurl, aterm, sdf, strategoxt, pkgconfig}:
+
+stdenv.mkDerivation {
+  name = "java-front-0.9";
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = http://buildfarm.st.ewi.tudelft.nl/releases/strategoxt/java-front-0.9pre17376-qi43zwhy/java-front-0.9pre17376.tar.gz;
+    md5 = "fec70158b110c77a2e5db29676438029";
+  };
+
+  inherit aterm sdf strategoxt;
+  buildInputs = [pkgconfig aterm sdf strategoxt];
+}
diff --git a/pkgs/development/compilers/jdk/builder.sh b/pkgs/development/compilers/jdk/builder.sh
index 1b61d548c1b..71dd6c433f6 100644
--- a/pkgs/development/compilers/jdk/builder.sh
+++ b/pkgs/development/compilers/jdk/builder.sh
@@ -1,3 +1,4 @@
+buildInputs="$unzip"
 source $stdenv/setup
 
 src=$filename.bin
diff --git a/pkgs/development/compilers/jdk/default-5.nix b/pkgs/development/compilers/jdk/default-5.nix
new file mode 100644
index 00000000000..9fb52378b3f
--- /dev/null
+++ b/pkgs/development/compilers/jdk/default-5.nix
@@ -0,0 +1,9 @@
+{stdenv, fetchurl, unzip}: 
+
+if stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"
+  then
+    (import ./jdk5-sun-linux.nix) {
+      inherit stdenv fetchurl unzip;
+    }
+  else
+    abort "the Java 5 SDK is not supported on this platform"
diff --git a/pkgs/development/compilers/jdk/jdk5-sun-linux.nix b/pkgs/development/compilers/jdk/jdk5-sun-linux.nix
new file mode 100644
index 00000000000..6a15b1f9ec9
--- /dev/null
+++ b/pkgs/development/compilers/jdk/jdk5-sun-linux.nix
@@ -0,0 +1,23 @@
+/**
+ * This Nix expression requires the user to download the j2sdk
+ * distribution to /tmp. Please obtain jdk-1_5_0_14-linux-i586.bin
+ * from java.sun.com by hand and place it in /tmp. Blame Sun, not me.
+ *
+ * Note that this is not necessary if someone has already pushed a
+ * binary.
+ */
+{stdenv, fetchurl, unzip}: 
+
+assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
+
+stdenv.mkDerivation {
+  name = "jdk-1.5.0_14";
+  filename = "jdk-1_5_0_14";
+  dirname = "jdk1.5.0_14";
+  builder = ./builder.sh;
+  pathname = if stdenv.system == "x86_64-linux" then "/tmp/jdk-1_5_0_14-linux-amd64.bin" else "/tmp/jdk-1_5_0_14-linux-i586.bin";
+  md5 = if stdenv.system == "x86_64-linux" then "9dc74d939dd42988280f2c22ab9521bf" else "32df8f2be09c3a0f39da1b3869164b55";
+  
+  stdenv = stdenv;
+  inherit unzip;
+}
diff --git a/pkgs/development/compilers/jdk/jdk6-linux.nix b/pkgs/development/compilers/jdk/jdk6-linux.nix
index 17a23c981e0..0c285c4526e 100644
--- a/pkgs/development/compilers/jdk/jdk6-linux.nix
+++ b/pkgs/development/compilers/jdk/jdk6-linux.nix
@@ -14,18 +14,18 @@ assert pluginSupport -> libstdcpp5 != null;
 
 (stdenv.mkDerivation ({
   name =
-    if installjdk then "jdk-1.6.0_3" else "jre-1.6.0_3";
+    if installjdk then "jdk-1.6.0_4" else "jre-1.6.0_4";
 
   src =
     if stdenv.system == "i686-linux" then
       fetchurl {
-        url = http://download.java.net/dlj/binaries/jdk-6u3-dlj-linux-i586.bin;
-        sha256 = "5c44208fbd5f90b3e6a0692ed9e1e98f5feb0c88aa0cfae5186dddb1f05f731b";
+        url = http://download.java.net/dlj/binaries/jdk-6u4-dlj-linux-i586.bin;
+        sha256 = "955186f497a50106cd1788fcaf032eedc560985826c8a6c3cb7ab43220cad23c";
       }
     else if stdenv.system == "x86_64-linux" then
       fetchurl {
-        url = http://download.java.net/dlj/binaries/jdk-6u3-dlj-linux-amd64.bin;
-        sha256 = "8bc80ea1bf739674c1cacdfba9987a4d15adb54f4b1462a0b48b79815f56b311";
+        url = http://download.java.net/dlj/binaries/jdk-6u4-dlj-linux-amd64.bin;
+        sha256 = "be0e21402a79c5b6cd6c96d34451bcc365619cd063930f3ca1c1abe2ee5dbf43";
       }
     else
       abort "jdk requires i686-linux or x86_64 linux";
diff --git a/pkgs/development/compilers/ocaml/default.nix b/pkgs/development/compilers/ocaml/default.nix
index 678a0a677a2..837a685198b 100644
--- a/pkgs/development/compilers/ocaml/default.nix
+++ b/pkgs/development/compilers/ocaml/default.nix
@@ -1,7 +1,7 @@
 args:
 args.stdenv.lib.listOfListsToAttrs [
-	[ "3.08.0" (import ./3.08.0.nix (args // {stdenv = args.stdenv34;})) ]
+	[ "3.08.0" (import ./3.08.0.nix args) ]
 	[ "3.09.1" (import ./3.09.1.nix args) ]
 	[ "3.10.0" (import ./3.10.0.nix args) ]
-	[ "default" (import ./3.10.0.nix args) ]
+	[ "default" (import ./3.09.1.nix args) ]
 ]
diff --git a/pkgs/development/compilers/qi/9.1.nix b/pkgs/development/compilers/qi/9.1.nix
index 661bb85e798..3a1a4f37886 100644
--- a/pkgs/development/compilers/qi/9.1.nix
+++ b/pkgs/development/compilers/qi/9.1.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://www.lambdassociates.org/Download/Qi9.1.zip;
@@ -8,6 +8,7 @@ args : with args;
 		buildInputs = [ unzip clisp];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 	shell=stdenv.shell;
 in
@@ -28,7 +29,7 @@ in
 stdenv.mkDerivation rec {
 	name = "Qi-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [allBuild doForceShare doPropagate]);
+		(textClosure localDefs [allBuild doForceShare doPropagate]);
 	meta = {
 		description = "
 		Qi - next generation on top of Common Lisp.
diff --git a/pkgs/development/compilers/roadsend/default.nix b/pkgs/development/compilers/roadsend/default.nix
new file mode 100644
index 00000000000..d7c693b6864
--- /dev/null
+++ b/pkgs/development/compilers/roadsend/default.nix
@@ -0,0 +1,33 @@
+args:
+let edf = args.lib.enableDisableFeature; in
+( args.mkDerivationByConfiguration {
+    flagConfig = {
+      mandatory = { buildInputs = ["bigloo" "curl"]; };
+    } // edf "pcre" "pcre" { } #support pcre extension [default=check]
+      // edf "fcgi" "fcgi" { } #support FastCGI web backend [default=check]
+      // edf "xml" "xml" { pass ="libxml2"; } #support xml extension [default=check]
+      // edf "mysql" "mysql" { pass = "mysql"; } #support mysql extension [default=check]
+      #// edf "sqlite3=[ARG]" "sqlite3=[ARG]" { } [>use SQLite 3 library [default=yes], optionally
+                                #specify the prefix for sqlite3 library
+      // edf "odbc" "odbc" { } #support ODBC extension [default=check]
+      // edf "gtk" "gtk" { } #support PHP-GTK extension [default=no]
+      // edf "gtk2" "gtk2" { }; #support PHP-GTK 2 extension [default=no]
+
+    optionals = [ "libxml2" "gettext" ];
+    extraAttrs = co : {
+      name = "roadsend-2.9.3";
+
+      src = args.fetchurl {
+        url = "http://code.roadsend.com/snaps/roadsend-php-2.9.4.tar.bz2";
+        sha256 = "0nw7rvrrwkss5cp6ws0m3q63q1mcyy27s8yjhy7kn508db1rgl9x";
+      };
+
+    meta = { 
+      description = "roadsend PHP -> C compiler";
+      homepage = http://www.roadsend.com;
+      # you can choose one of the following licenses: 
+      # Runtime license is LPGL 2.1
+      license = ["GPL2"];
+    };
+  };
+} ) args
diff --git a/pkgs/development/compilers/strategoxt/strategoxt-0.17.nix b/pkgs/development/compilers/strategoxt/strategoxt-0.17.nix
new file mode 100644
index 00000000000..fa56d6e35e6
--- /dev/null
+++ b/pkgs/development/compilers/strategoxt/strategoxt-0.17.nix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl, aterm, sdf, pkgconfig}:
+
+stdenv.mkDerivation {
+
+  name = "strategoxt-0.17";
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = http://buildfarm.st.ewi.tudelft.nl/releases/strategoxt/strategoxt-0.17M3pre17099/strategoxt-0.17M3pre17099.tar.gz;
+    md5 = "fc9bc3cb6d80bfa6ee1fadd2dd828c72";
+  };
+
+  inherit aterm sdf;
+  buildInputs = [pkgconfig aterm sdf];
+}
diff --git a/pkgs/development/compilers/webdsl/builder.sh b/pkgs/development/compilers/webdsl/builder.sh
new file mode 100644
index 00000000000..d77094a91b0
--- /dev/null
+++ b/pkgs/development/compilers/webdsl/builder.sh
@@ -0,0 +1,8 @@
+source $stdenv/setup
+
+configureFlags="--with-aterm=$aterm --with-sdf=$sdf --with-strategoxt=$strategoxt"
+genericBuild
+
+# Replace /bin/bash in WebDSL script (maybe there is a better solution?)
+
+sed -i -e "s|#!/bin/bash|#!/bin/sh|" $out/bin/webdsl
diff --git a/pkgs/development/compilers/webdsl/default.nix b/pkgs/development/compilers/webdsl/default.nix
new file mode 100644
index 00000000000..da961cbf2f6
--- /dev/null
+++ b/pkgs/development/compilers/webdsl/default.nix
@@ -0,0 +1,14 @@
+{stdenv, fetchurl, aterm, sdf, strategoxt, pkgconfig, javafront}:
+
+stdenv.mkDerivation {
+  name = "webdsl-7.12pre876";
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = http://buildfarm.st.ewi.tudelft.nl/releases/strategoxt/webdsl-7.12pre876-g60njq3p/webdsl-7.12pre876.tar.gz;
+    md5 = "7cd8709b02e03da74d90f8f8388e8d01";
+  };
+
+  inherit aterm sdf strategoxt javafront;
+  buildInputs = [pkgconfig aterm sdf strategoxt javafront];
+}
diff --git a/pkgs/development/guile-modules/guile-lib/default.nix b/pkgs/development/guile-modules/guile-lib/default.nix
new file mode 100644
index 00000000000..cc26c458a06
--- /dev/null
+++ b/pkgs/development/guile-modules/guile-lib/default.nix
@@ -0,0 +1,38 @@
+{stdenv, fetchurl, guile}:
+
+stdenv.mkDerivation rec {
+  name = "guile-lib-0.1.6";
+  src = fetchurl {
+    url = "http://download.gna.org/guile-lib/" + name + ".tar.gz";
+    sha256 = "827744c7954078f1f37e0bf70252ec70b4d60c1482a3542a49bd09723cf65d12";
+  };
+
+  buildInputs = [guile];
+
+  postInstall = ''
+    # Remove modules already provided by Guile.
+    if "${guile}/bin/guile" -c '(use-modules (srfi srfi-34))'
+    then
+	rm -f "$out/share/guile/site/srfi/srfi-34.scm"
+    fi
+    if "${guile}/bin/guile" -c '(use-modules (srfi srfi-35))'
+    then
+	rm -f "$out/share/guile/site/srfi/srfi-35.scm"
+    fi
+
+    # Make modules available under `/lib/site-guile' to comply with Guile's
+    # setup-hook.
+    mkdir -p "$out/lib/site-guile"
+    for f in "$out/share/guile/site"/*
+    do
+      ln -s "$f" "$out/lib/site-guile/"
+    done
+  '';
+
+  meta = {
+    description = ''Guile-Library, a set of various useful
+                    Guile Scheme modules.'';
+    homepage = http://home.gna.org/guile-lib/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/development/interpreters/clisp/builder.sh b/pkgs/development/interpreters/clisp/builder.sh
deleted file mode 100644
index 89731fbb987..00000000000
--- a/pkgs/development/interpreters/clisp/builder.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-source $stdenv/setup || exit 1
-
-set -e
-
-tar jxvf $src
-cd clisp-*
-sed -e 's@/bin/pwd@'${coreutils}'&@' -i src/clisp-link.in
-./configure --with-readline builddir --build \
-	--prefix=$out --with-dynamic-ffi \
-	--with-module=clx/new-clx --with-module=i18n \
-	--with-module=bindings/glibc \
-	--with-module=pcre --with-module=rawsock \
-	--with-module=readline --with-module=syscalls \
-	--with-module=wildcard --with-modules=zlib ||
-	for i in $(find . -name config.log ); do
-		echo -------
-		echo $i;
-		echo ===
-		cat $i;
-	done > /tmp/clisp-config-log
-cd builddir
-make install
diff --git a/pkgs/development/interpreters/clisp/default.nix b/pkgs/development/interpreters/clisp/default.nix
index db2506ae8c7..5095bf985d4 100644
--- a/pkgs/development/interpreters/clisp/default.nix
+++ b/pkgs/development/interpreters/clisp/default.nix
@@ -1,14 +1,36 @@
 args: with args;
-stdenv.mkDerivation {
-  name = "clisp-2.43";
-  builder = ./builder.sh;
+stdenv.mkDerivation rec {
+  v = "2.43";
+  name = "clisp-${v}";
   src =
 	fetchurl {
-		url = mirror://gnu/clisp/release/2.43/clisp-2.43.tar.bz2;
+		url = "mirror://gnu/clisp/release/${v}/${name}.tar.bz2";
 		sha256 = "10qyn6wccnayf1cyvrcanay6c6laar6z1r608w7ijp6nb763q8dm";
 	};
 
   inherit libsigsegv gettext coreutils;
   buildInputs = [libsigsegv gettext ncurses readline libX11 libXau
 	libXt pcre zlib];
+  
+  patchPhase = ''
+  sed -i 's@/bin/pwd@${coreutils}&@' src/clisp-link.in
+  find . -type f | xargs sed -e 's/-lICE/-lXau &/' -i
+  '';
+
+  configureFlags = "--with-readline builddir --with-dynamic-ffi
+  --with-module=clx/new-clx --with-module=i18n --with-module=bindings/glibc
+  --with-module=pcre --with-module=rawsock --with-module=readline
+  --with-module=syscalls --with-module=wildcard --with-module=zlib";
+
+  preBuild = "cd builddir";
+
+  NIX_CFLAGS_COMPILE="-O0";
+
+  # TODO : make mod-check fails
+  doCheck = 1;
+
+  meta = {
+	  description = "ANSI Common Lisp Implementation";
+	  homepage = http://clisp.cons.org;
+  };
 }
diff --git a/pkgs/development/interpreters/erlang/R11B-5.nix b/pkgs/development/interpreters/erlang/R11B-5.nix
new file mode 100644
index 00000000000..68cc3b5f2b5
--- /dev/null
+++ b/pkgs/development/interpreters/erlang/R11B-5.nix
@@ -0,0 +1,12 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "erlang-" + version;
+  src = fetchurl {
+    url = http://www.erlang.org/download/otp_src_R11B-5.tar.gz;
+    md5 = "96acec41da87d6ee0ef18e1aab36ffdd";
+  };
+  buildInputs = [perl gnum4 ncurses openssl];
+  patchPhase = '' sed -i "s@/bin/rm@rm@" lib/odbc/configure erts/configure '';
+  configureFlags = "--with-ssl=${openssl}";
+}
diff --git a/pkgs/development/interpreters/erlang/R12B-1.nix b/pkgs/development/interpreters/erlang/R12B-1.nix
new file mode 100644
index 00000000000..37ebdbf6ab8
--- /dev/null
+++ b/pkgs/development/interpreters/erlang/R12B-1.nix
@@ -0,0 +1,12 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "erlang-" + version;
+  src = fetchurl {
+    url = "http://www.erlang.org/download/otp_src_" + version + ".tar.gz";
+    sha256 = "16w7snhbjzwiywppsp04yiy2bkncff8pf4i643kqzkqx578jhaqz";
+  };
+  buildInputs = [perl gnum4 ncurses openssl];
+  patchPhase = '' sed -i "s@/bin/rm@rm@" lib/odbc/configure erts/configure '';
+  configureFlags = "--with-ssl=${openssl}";
+}
diff --git a/pkgs/development/interpreters/guile/default.nix b/pkgs/development/interpreters/guile/default.nix
index 9b12bc9a2f6..9aaa796d6b2 100644
--- a/pkgs/development/interpreters/guile/default.nix
+++ b/pkgs/development/interpreters/guile/default.nix
@@ -1,10 +1,26 @@
 args: with args; 
-stdenv.mkDerivation {
-  name = "guile-1.8.3";
+
+stdenv.mkDerivation rec {
+  name = "guile-1.8.4";
   src = fetchurl {
-		url = ftp://ftp.gnu.org/gnu/guile/guile-1.8.3.tar.gz;
-		sha256 = "2ab59099cf2d46f57cf5421c9b84aa85f61961640046e8066c6b321257517796";
-	};
+    url = "ftp://ftp.gnu.org/gnu/guile/" + name + ".tar.gz";
+    sha256 = "1cz1d4n6vzw0lfsvplsiarwqk675f12j596dzfv0h5r9cljpc0ya";
+  };
+
+  buildInputs = [ makeWrapper ];
+  propagatedBuildInputs = [readline libtool gmp gawk];
+
+  postInstall = ''
+    wrapProgram $out/bin/guile-snarf --prefix PATH : "${gawk}/bin"
+  '';
+
+  setupHook = ./setup-hook.sh;
 
-  propagatedBuildInputs = [readline libtool gmp];
+  meta = {
+    description = ''GNU Guile is an interpreter for the Scheme
+                    programming language, packaged as a library that
+		    can be embedded into programs to make them extensible.'';
+    homepage = http://www.gnu.org/software/guile/;
+    license = "LGPL";
+  };
 }
diff --git a/pkgs/development/interpreters/guile/setup-hook.sh b/pkgs/development/interpreters/guile/setup-hook.sh
new file mode 100644
index 00000000000..114bc4e87cc
--- /dev/null
+++ b/pkgs/development/interpreters/guile/setup-hook.sh
@@ -0,0 +1,8 @@
+addGuileLibPath () {
+    if test -d "$1/lib/site-guile"
+    then
+        export GUILE_LOAD_PATH="${GUILE_LOAD_PATH}${GUILE_LOAD_PATH:+:}$1/lib/site-guile"
+    fi
+}
+
+envHooks=(${envHooks[@]} addGuileLibPath)
diff --git a/pkgs/development/interpreters/perl/perl-5.10.nix b/pkgs/development/interpreters/perl/perl-5.10.nix
new file mode 100644
index 00000000000..01f314c19a4
--- /dev/null
+++ b/pkgs/development/interpreters/perl/perl-5.10.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "perl-5.10.0";
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.cpan.org/src/perl-5.10.0.tar.gz;
+    sha256 = "0bivbz15x02m02gqs6hs77cgjr2msfrhnvp5xqk359jg6w6llill";
+  };
+
+  # This patch does the following:
+  # 1) Do use the PATH environment variable to find the `pwd' command.
+  #    By default, Perl will only look for it in /lib and /usr/lib.
+  #    !!! what are the security implications of this?
+  # 2) Force the use of <errno.h>, not /usr/include/errno.h, on Linux
+  #    systems.  (This actually appears to be due to a bug in Perl.)
+  patches = [./no-sys-dirs.patch];
+
+  setupHook = ./setup-hook.sh;
+}
diff --git a/pkgs/development/interpreters/perl/setup-hook.sh b/pkgs/development/interpreters/perl/setup-hook.sh
index 6903bddd419..70ce2cf8b46 100644
--- a/pkgs/development/interpreters/perl/setup-hook.sh
+++ b/pkgs/development/interpreters/perl/setup-hook.sh
@@ -1,5 +1,5 @@
 addPerlLibPath () {
-	addToSearchPath PERL5LIB /lib/site_perl "" $1
+    addToSearchPath PERL5LIB /lib/site_perl "" $1
 }
 
 envHooks=(${envHooks[@]} addPerlLibPath)
diff --git a/pkgs/development/interpreters/php_configurable/default.nix b/pkgs/development/interpreters/php_configurable/default.nix
index 91e0518ccd3..d18a2cf2b05 100644
--- a/pkgs/development/interpreters/php_configurable/default.nix
+++ b/pkgs/development/interpreters/php_configurable/default.nix
@@ -9,6 +9,7 @@
 | http://www.php.net/manual/security.php for more details.           |
 */
 
+let version = "5.2.5"; in
 
 args:
 ( args.mkDerivationByConfiguration {
@@ -410,6 +411,7 @@ args:
 
 # Extensions 
 
+          zlib          =     { cfgOption = "--with-zlib=${args.zlib}"; pass = "zlib"; };
 
           libxml2       =     { cfgOption = "--with-libxml-dir=\$libxml2";
                                 pass = { inherit (args) libxml2; }; 
@@ -417,6 +419,8 @@ args:
           no_libxml2    =     { cfgOption =  "--disable-libxml";
                               };
 
+          postgresql   =      { cfgOption = "--with-pgsql=\$postgresql";
+                                pass = { inherit (args) postgresql;}; };
           mysql        =      { cfgOption = "--with-mysql=\$mysql";
                                 pass = { inherit (args) mysql;}; };
 
@@ -456,64 +460,63 @@ args:
     };
 
   defaults = [ "mysql" "mysqli" "pdo_mysql" "libxml2" "apxs2" ];
-  optionals = [ "libxml2" "gettext" ];
+  optionals = [ "libxml2" "gettext" "postgresql" "zlib"];
 
   # Don't konw wether they should be default.. I use them - Marc
 
 
   extraAttrs = co : {
-    name = "php_configurable-5.2.4";
+    name = "php_configurable-${version}";
 
     buildInputs = ( args.lib.getAttr [ "phpIncludes" ] [] args ) ++ co.buildInputs;
 
-    configurePhase = 
-      "
-      iniFile=\$out/etc/\$name.ini
-      [[ -z \"\$libxml2\" ]] || export PATH=\$PATH:\$libxml2/bin
-      ./configure --with-config-file-scan-dir=/etc --with-config-file-path=\$iniFile --prefix=\$out " + co.configureFlags + "
+    configurePhase = ''
+      iniFile=$out/etc/$name.ini
+      [[ -z "$libxml2" ]] || export PATH=$PATH:$libxml2/bin
+      ./configure --with-config-file-scan-dir=/etc --with-config-file-path=$iniFile --prefix=$out ${co.configureFlags}
       echo configurePhase end
-      ";
+    '';
 
-    installPhase = "
+    installPhase = ''
       unset installPhase; installPhase;
-      cp php.ini-recommended $\iniFile
+      cp php.ini-recommended $iniFile
 
       # Now Let's build xdebug if flag has been given 
       # TODO I think there are better paths than the given below
-      if [ -n \$flag_set_xdebug ]; then
-        PATH=\$PATH:\$out/bin
-        tar xfz \$xdebug_src; 
+      if [ -n $flag_set_xdebug ]; then
+        PATH=$PATH:$out/bin
+        tar xfz $xdebug_src; 
         cd xdebug*
         phpize
-        ./configure --prefix=\$out
+        ./configure --prefix=$out
         make
-        ensureDir \$out/lib; cp modules/xdebug.so $out/lib
-cat >> $iniFile << EOF
-zend_extension=\"\$out/lib/xdebug.so\"
-zend_extension_ts=\"\$out/lib/xdebug.so\"
-zend_extension_debug=\"\$out/lib/xdebug.so\"
-xdebug.remote_enable=true
-xdebug.remote_host=127.0.0.1
-xdebug.remote_port=9000
-xdebug.remote_handler=dbgp
-xdebug.profiler_enable=0
-xdebug.profiler_output_dir=\"/tmp/xdebug\"
-xdebug.remote_mode=req
-EOF
+        ensureDir $out/lib; cp modules/xdebug.so $out/lib
+        cat >> $iniFile << EOF
+          zend_extension="$out/lib/xdebug.so"
+          zend_extension_ts="$out/lib/xdebug.so"
+          zend_extension_debug="$out/lib/xdebug.so"
+          xdebug.remote_enable=true
+          xdebug.remote_host=127.0.0.1
+          xdebug.remote_port=9000
+          xdebug.remote_handler=dbgp
+          xdebug.profiler_enable=0
+          xdebug.profiler_output_dir="/tmp/xdebug"
+          xdebug.remote_mode=req
+        EOF
       fi
-    ";
+    '';
 
     src = args.fetchurl {
-      url = http://de.php.net/get/php-5.2.4.tar.bz2/from/this/mirror;
-      sha256 = "1h513j7crz08n7rlh8v7cvxfzisj87mvvyfrkiaa76v1wicm4bsh";
-      name = "php-5.2.4.tar.bz2";
+      url = "http://nl.php.net/get/php-${version}.tar.bz2/from/this/mirror";
+      sha256 = "18xv961924rkk66gdjcmk1mzbzgp2srbiq5jvbgyn6ahvxq1xb2w";
+      name = "php-${version}.tar.bz2";
     };
 
     meta = { 
-        description = "The PHP language runtime engine"; # : CLI, CGI and Apache2 SAPIs ? as well TODO 
-        homepage = http://www.php.net/;
-        license = "PHP-3";
-      };
+      description = "The PHP language runtime engine"; # : CLI, CGI and Apache2 SAPIs ? as well TODO 
+      homepage = http://www.php.net/;
+      license = "PHP-3";
+    };
 
     patches = [./fix.patch];
   };
diff --git a/pkgs/development/interpreters/pyrex/0.9.6.nix b/pkgs/development/interpreters/pyrex/0.9.6.nix
index 7053f949a43..1b11e8efe36 100644
--- a/pkgs/development/interpreters/pyrex/0.9.6.nix
+++ b/pkgs/development/interpreters/pyrex/0.9.6.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/oldtar/Pyrex-0.9.6.tar.gz;
@@ -8,10 +8,11 @@ args : with args;
 		buildInputs = [python];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "Pyrex-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [installPythonPackage doForceShare]);
+		(textClosure localDefs [installPythonPackage doForceShare]);
 	meta = {
 		description = "
 	Python package compiler or something like that.	
diff --git a/pkgs/development/interpreters/python/2.5/default.nix b/pkgs/development/interpreters/python/2.5/default.nix
index 9a84bfa7ff8..161584ee707 100644
--- a/pkgs/development/interpreters/python/2.5/default.nix
+++ b/pkgs/development/interpreters/python/2.5/default.nix
@@ -30,7 +30,7 @@ stdenv.mkDerivation {
   C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs);
   LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs);
   
-  configureFlags = "--enable-shared";
+  configureFlags = "--enable-shared --with-wctype-functions";
   
   preConfigure = "
     # Purity.
diff --git a/pkgs/development/interpreters/python/2.5/setup-hook.sh b/pkgs/development/interpreters/python/2.5/setup-hook.sh
index 27ad6226030..a11f8cbb484 100644
--- a/pkgs/development/interpreters/python/2.5/setup-hook.sh
+++ b/pkgs/development/interpreters/python/2.5/setup-hook.sh
@@ -1,5 +1,5 @@
 addPythonPath() {
-	addToSearchPathWithCustomDelimiter : PYTHONPATH /lib/python2.5/site-packages "" $1
+    addToSearchPathWithCustomDelimiter : PYTHONPATH /lib/python2.5/site-packages "" $1
 }
 
 toPythonPath() {
diff --git a/pkgs/development/libraries/SDL_image/default.nix b/pkgs/development/libraries/SDL_image/default.nix
index 93e1cc31f44..d26213ef7cd 100644
--- a/pkgs/development/libraries/SDL_image/default.nix
+++ b/pkgs/development/libraries/SDL_image/default.nix
@@ -1,20 +1,22 @@
-args:
-args.stdenv.mkDerivation {
-  name = "SDL_image-1.2.6";
+args: with args;
+stdenv.mkDerivation (rec {
+  pname = "SDL_image";
+  version = "1.2.6";
 
-  src = args.
-	fetchurl {
-		url = http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.6.tar.gz;
-		sha256 = "1i3f72dw3i3l6d77dk81gw57sp0629rng9k76qb37brlz7dv3z48";
-	};
+  name = "${pname}-${version}";
 
-  buildInputs =(with args; [SDL libpng libjpeg libtiff libungif libXpm]);
+  src = fetchurl {
+    url = "http://www.libsdl.org/projects/${pname}/release/${name}.tar.gz";
+    sha256 = "1i3f72dw3i3l6d77dk81gw57sp0629rng9k76qb37brlz7dv3z48";
+  };
+
+  buildInputs = [SDL libpng libjpeg libtiff libungif libXpm];
 
   postInstall = "ln -s \${out}/include/SDL/SDL_image.h \${out}/include/";
 
   meta = {
     description = "
-	SDL image library.
+      SDL image library.
 ";
   };
-}
+})
diff --git a/pkgs/development/libraries/SDL_mixer/default.nix b/pkgs/development/libraries/SDL_mixer/default.nix
index 14b8359c70a..024fd643be6 100644
--- a/pkgs/development/libraries/SDL_mixer/default.nix
+++ b/pkgs/development/libraries/SDL_mixer/default.nix
@@ -1,11 +1,24 @@
-{stdenv, fetchurl, SDL, libogg, libvorbis}:
+args: with args;
+stdenv.mkDerivation (rec {
+  pname = "SDL_mixer";
+  version = "1.2.8";
+
+  name = "${pname}-${version}";
 
-stdenv.mkDerivation {
-  name = "SDL_mixer-1.2.7";
   src = fetchurl {
-    url = http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.7.tar.gz;
-    md5 = "7959b89c8f8f1564ca90968f6c88fa1e";
+    url = "http://www.libsdl.org/projects/${pname}/release/${name}.tar.gz";
+    sha256 = "a8222a274778ff16d0e3ee49a30db27a48a4d357169a915fc599a764e405e0b6";
   };
+
   buildInputs = [SDL libogg libvorbis];
+
   configureFlags = "--disable-music-ogg-shared";
-}
+
+  postInstall = "ln -s \${out}/include/SDL/SDL_mixer.h \${out}/include/";
+
+  meta = {
+    description = "
+      SDL multi-channel audio mixer library.
+";
+  };
+})
diff --git a/pkgs/development/libraries/SDL_net/default.nix b/pkgs/development/libraries/SDL_net/default.nix
new file mode 100644
index 00000000000..7de557322f6
--- /dev/null
+++ b/pkgs/development/libraries/SDL_net/default.nix
@@ -0,0 +1,22 @@
+args: with args;
+stdenv.mkDerivation (rec {
+  pname = "SDL_net";
+  version = "1.2.7";
+
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "http://www.libsdl.org/projects/SDL_net/release/${name}.tar.gz";
+    sha256 = "2ce7c84e62ff8117b9f205758bcce68ea603e08bc9d6936ded343735b8b77c53";
+  };
+
+  buildInputs = [SDL];
+
+  postInstall = "ln -s \${out}/include/SDL/SDL_net.h \${out}/include/";
+
+  meta = {
+    description = "
+      SDL networking library.
+";
+  };
+})
diff --git a/pkgs/development/libraries/SDL_ttf/default.nix b/pkgs/development/libraries/SDL_ttf/default.nix
index 77b95d02cc3..c7a356adc61 100644
--- a/pkgs/development/libraries/SDL_ttf/default.nix
+++ b/pkgs/development/libraries/SDL_ttf/default.nix
@@ -1,14 +1,13 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "SDL_image-1.2.6";
 
-  src = args.
-	fetchurl {
+  src = fetchurl {
 		url = http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.9.tar.gz;
 		sha256 = "0ls6anmlmwrmy21p3y9nfyl6fkwz4jpgh74kw7xd0hwbg5v8h95l";
 	};
 
-  buildInputs =(with args; [SDL freetype]);
+  buildInputs = [SDL freetype];
 
   postInstall = "ln -s \${out}/include/SDL/SDL_ttf.h \${out}/include/";
 
diff --git a/pkgs/development/libraries/a52dec/default.nix b/pkgs/development/libraries/a52dec/default.nix
index 4a75e11ec30..46dfe38c455 100644
--- a/pkgs/development/libraries/a52dec/default.nix
+++ b/pkgs/development/libraries/a52dec/default.nix
@@ -1,9 +1,15 @@
-{stdenv, fetchurl}:
+args: with args;
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   name = "a52dec-0.7.4";
   src = fetchurl {
-    url = http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz;
-    md5 = "caa9f5bc44232dc8aeea773fea56be80";
+    url = "${meta.homepage}/files/a52dec-0.7.4.tar.gz";
+    sha256 = "0czccp4fcpf2ykp16xcrzdfmnircz1ynhls334q374xknd5747d2";
+  };
+
+  configureFlags = "--enable-shared --disable-static";
+
+  meta = {
+    homepage = http://liba52.sourceforge.net;
   };
 }
diff --git a/pkgs/development/libraries/apr-util/default.nix b/pkgs/development/libraries/apr-util/default.nix
index 7f2ce3e3882..967408e0cb4 100644
--- a/pkgs/development/libraries/apr-util/default.nix
+++ b/pkgs/development/libraries/apr-util/default.nix
@@ -4,14 +4,26 @@
 
 assert bdbSupport -> db4 != null;
 
-(stdenv.mkDerivation {
-  name = "apr-util-1.2.7";
+stdenv.mkDerivation {
+  name = "apr-util-1.2.12";
+  
   src = fetchurl {
-    url = http://archive.apache.org/dist/apr/apr-util-1.2.7.tar.bz2;
-    md5 = "a4c527f08ae2298e62a88472291bf066";
+    url = http://archive.apache.org/dist/apr/apr-util-1.2.12.tar.bz2;
+    sha256 = "152xwaxikp22acz7ypqsvlyjxhak6p40805wwbw7hcg1gyg2scyl";
   };
-  configureFlags = "
+  
+  configureFlags = ''
     --with-apr=${apr} --with-expat=${expat}
     ${if bdbSupport then "--with-berkeley-db=${db4}" else ""}
-  ";
-}) // {inherit bdbSupport;}
+  '';
+  
+  passthru = {
+    inherit bdbSupport;
+  };
+
+  meta = {
+    homepage = http://apr.apache.org/;
+    description = "A companion library to APR, the Apache Portable Runtime";
+  };
+}
+
diff --git a/pkgs/development/libraries/apr/default.nix b/pkgs/development/libraries/apr/default.nix
index a42699063c5..ceae8a1d12a 100644
--- a/pkgs/development/libraries/apr/default.nix
+++ b/pkgs/development/libraries/apr/default.nix
@@ -1,9 +1,15 @@
 {stdenv, fetchurl}:
 
 stdenv.mkDerivation {
-  name = "apr-1.2.7";
+  name = "apr-1.2.12";
+  
   src = fetchurl {
-    url = http://archive.apache.org/dist/apr/apr-1.2.7.tar.bz2;
-    md5 = "e77887dbafc515c63feac84686bcb3bc";
+    url = http://archive.apache.org/dist/apr/apr-1.2.12.tar.bz2;
+    sha256 = "0d11wa2hlhb5lnny5rcazca056b35kgccx94cd38bazw1d6b68nv";
+  };
+
+  meta = {
+    homepage = http://apr.apache.org/;
+    description = "The Apache Portable Runtime library";
   };
 }
diff --git a/pkgs/development/libraries/aspell/default.nix b/pkgs/development/libraries/aspell/default.nix
index fdee6107716..baa95da785b 100644
--- a/pkgs/development/libraries/aspell/default.nix
+++ b/pkgs/development/libraries/aspell/default.nix
@@ -10,15 +10,15 @@ stdenv.mkDerivation {
   
   buildInputs = [perl];
 
-  patches = [
-    # A patch that allows additional dictionary directories to be set
-    # specified through the environment variable
-    # ASPELL_EXTRA_DICT_DIRS (comma-separated).
-    ./dict-path.patch
-  ];
+  # Note: Users should define the `ASPELL_CONF' environment variable to
+  # `dict-dir $HOME/.nix-profile/lib/aspell/' so that they can access
+  # dictionaries installed in their profile.
+  #
+  # We can't use `$out/etc/aspell.conf' for that purpose since Aspell
+  # doesn't expand environment variables such as `$HOME'.
 
   meta = {
-    description = "A spell checker for many languages";
+    description = "GNU Aspell, A spell checker for many languages";
     homepage = http://aspell.net/;
     license = "LGPL";
   };
diff --git a/pkgs/development/libraries/aspell/dict-path.patch b/pkgs/development/libraries/aspell/dict-path.patch
deleted file mode 100644
index c044c3d0eba..00000000000
--- a/pkgs/development/libraries/aspell/dict-path.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -rc aspell-0.60.5-orig/common/info.cpp aspell-0.60.5/common/info.cpp
-*** aspell-0.60.5-orig/common/info.cpp	2004-11-10 07:18:45.000000000 +0100
---- aspell-0.60.5/common/info.cpp	2007-10-23 17:30:47.000000000 +0200
-***************
-*** 209,214 ****
---- 209,215 ----
-  					   unsigned int name_size,
-  					   IStream & in)
-    {
-+     char * extra_dict_dirs = getenv("ASPELL_EXTRA_DICT_DIRS");
-      ModuleInfoNode * * prev = &head_;
-      ModuleInfoNode * to_add = new ModuleInfoNode();
-      to_add->c_struct.name = 0;
-***************
-*** 246,251 ****
---- 247,260 ----
-  	goto RETURN_ERROR;
-        }
-      }
-+ 
-+     // Add dictionaries from directories in
-+     // $ASPELL_EXTRA_DICT_DIRS. Maybe this isn't the right place to do
-+     // this, but it works.
-+     if (extra_dict_dirs) {
-+       to_add->c_struct.dict_dirs = &(to_add->dict_dirs);
-+       itemize(extra_dict_dirs, to_add->dict_dirs);
-+     }
-    
-      while (*prev != 0 && 
-  	   (*prev)->c_struct.order_num < to_add->c_struct.order_num)
diff --git a/pkgs/development/libraries/aspell/dictionaries.nix b/pkgs/development/libraries/aspell/dictionaries.nix
index 7be7b580656..97a8e961b41 100644
--- a/pkgs/development/libraries/aspell/dictionaries.nix
+++ b/pkgs/development/libraries/aspell/dictionaries.nix
@@ -5,7 +5,7 @@ let
   /* Function to compile an Aspell dictionary.  Fortunately, they all
      build in the exact same way. */
   buildDict =
-    {shortName, fullName, src}:
+    {shortName, fullName, src, postInstall ? ""}:
 
     stdenv.mkDerivation {
       name = "aspell-dict-${shortName}";
@@ -18,6 +18,8 @@ let
 
       preBuild = "makeFlagsArray=(dictdir=$out/lib/aspell datadir=$out/lib/aspell)";
 
+      inherit postInstall;
+
       meta = {
         description = "Aspell dictionary for ${fullName}";
       };
@@ -52,6 +54,15 @@ in {
     };
   };
     
+  eo = buildDict {
+    shortName = "eo-0.50-2";
+    fullName = "Esperanto";
+    src = fetchurl {
+      url = mirror://gnu/aspell/dict/eo/aspell-eo-0.50-2.tar.bz2;
+      sha256 = "19vhdm599ng98nq8jxspgvanv5hwryp0qri1vx6zsjl0jx1acqbc";
+    };
+  };
+
   fr = buildDict {
     shortName = "fr-0.50-3";
     fullName = "French";
@@ -77,6 +88,10 @@ in {
       url = mirror://gnu/aspell/dict/nl/aspell-nl-0.50-2.tar.bz2;
       sha256 = "0ffb87yjsh211hllpc4b9khqqrblial4pzi1h9r3v465z1yhn3j4";
     };
+    # Emacs expects a language called "nederlands".
+    postInstall = ''
+      echo "add nl.rws" > $out/lib/aspell/nederlands.multi
+    '';
   };
     
   ru = buildDict {
diff --git a/pkgs/development/libraries/aterm/2.4.2-fixes.nix b/pkgs/development/libraries/aterm/2.4.2-fixes.nix
index 3144154c9e6..7c70afc621b 100644
--- a/pkgs/development/libraries/aterm/2.4.2-fixes.nix
+++ b/pkgs/development/libraries/aterm/2.4.2-fixes.nix
@@ -6,6 +6,7 @@ stdenv.mkDerivation {
     url = http://losser.st-lab.cs.uu.nl/~eelco/dist/aterm-2.4.2-fixes-r2.tar.bz2;
     sha256 = "1w3bxdpc2hz29li5ssmdcz3x0fn47r7g62ns0v8nazxwf40vff4j";
   };
+  doCheck = true;
   meta = {
     homepage = http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATerm;
     license = "LGPL";
diff --git a/pkgs/development/libraries/aterm/2.5.nix b/pkgs/development/libraries/aterm/2.5.nix
new file mode 100644
index 00000000000..f30be007fa5
--- /dev/null
+++ b/pkgs/development/libraries/aterm/2.5.nix
@@ -0,0 +1,14 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "aterm-2.5";
+  src = fetchurl {
+    url = http://buildfarm.st.ewi.tudelft.nl/releases/meta-environment/aterm-2.5pre21238-l2q7rg38/aterm-2.5.tar.gz;
+    md5 = "33ddcb1a229baf406ad1f603eb1d5995";
+  };
+  meta = {
+    homepage = http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATerm;
+    license = "LGPL";
+    description = "Library for manipulation of term data structures in C";
+  };
+}
diff --git a/pkgs/development/libraries/avahi/0.6.21.nix b/pkgs/development/libraries/avahi/0.6.21.nix
new file mode 100644
index 00000000000..26f03ca58bf
--- /dev/null
+++ b/pkgs/development/libraries/avahi/0.6.21.nix
@@ -0,0 +1,2 @@
+args:
+import ./common.nix "0q954lwhr6xnv7chhi4bqlmkn4nx9shyw0mbdr3n26018dgw65yq" args
diff --git a/pkgs/development/libraries/avahi/0.6.22.nix b/pkgs/development/libraries/avahi/0.6.22.nix
new file mode 100644
index 00000000000..93b7184cdae
--- /dev/null
+++ b/pkgs/development/libraries/avahi/0.6.22.nix
@@ -0,0 +1,2 @@
+args:
+import ./common.nix "0lnxzsdhihb3kjwd3vcrl9pq6ykfbp0vy9ja0mch01ffnrqgiilx" args
diff --git a/pkgs/development/libraries/avahi/common.nix b/pkgs/development/libraries/avahi/common.nix
new file mode 100644
index 00000000000..1ebadc26e26
--- /dev/null
+++ b/pkgs/development/libraries/avahi/common.nix
@@ -0,0 +1,18 @@
+sha256: args: with args;
+
+stdenv.mkDerivation rec {
+  name = "avahi-" + version;
+  src = fetchurl {
+    url = "${meta.homepage}/download/${name}.tar.gz";
+    inherit sha256;
+  };
+
+  buildInputs = [pkgconfig libdaemon dbus perl perlXMLParser glib qt4];
+
+  configureFlags = "--disable-qt3 --disable-gdbm --disable-gtk --disable-mono
+    --with-distro=none --enable-shared --disable-static --disable-python";
+
+  meta = {
+    homepage = http://avahi.org;
+  };
+}
diff --git a/pkgs/development/libraries/avahi/default.nix b/pkgs/development/libraries/avahi/default.nix
deleted file mode 100644
index 52051725e22..00000000000
--- a/pkgs/development/libraries/avahi/default.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{stdenv, fetchurl, pkgconfig}:
-
-stdenv.mkDerivation {
-  name = "avahi-0.6.11";
-  src = fetchurl {
-    url = http://avahi.org/download/avahi-0.6.11.tar.gz;
-    md5 = "91fd8cc0c2bae638848faad36cf1c032";
-  };
-
-  #buildInputs = [pkgconfig glib gtk libpng libglade];
-  buildInputs = [pkgconfig];
-
-  configureFlags = "--disable-glib --disable-qt3 --disable-qt4 --disable-gtk --disable-dbus --disable-expat --disable-gdbm --disable-libdaemon --disable-python --disable-mono";
-}
diff --git a/pkgs/development/libraries/cairomm/default.nix b/pkgs/development/libraries/cairomm/default.nix
new file mode 100644
index 00000000000..a22788c288e
--- /dev/null
+++ b/pkgs/development/libraries/cairomm/default.nix
@@ -0,0 +1,15 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "cairomm-1.4.6";
+
+  src = fetchurl {
+    url = "http://cairographics.org/releases/${name}.tar.gz";
+    sha256 = "1zd5pq5jd507w1v994awpsl7m26g4dfl0rwgrxig2823hl3rqmrp";
+  };
+
+  buildInputs = [pkgconfig];
+  propagatedBuildInputs = [cairo x11 fontconfig freetype];
+
+  configureFlags = "--enable-shared --disable-static";
+}
diff --git a/pkgs/development/libraries/cfitsio/default.nix b/pkgs/development/libraries/cfitsio/default.nix
new file mode 100644
index 00000000000..5fb672b8ff1
--- /dev/null
+++ b/pkgs/development/libraries/cfitsio/default.nix
@@ -0,0 +1,13 @@
+args: with args;
+stdenv.mkDerivation {
+	name = "cfitsio-3.060";
+	src = fetchurl {
+		url = ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/cfitsio3060.tar.gz;
+		sha256 = "0ijbjpl5v35m538sa3c82qgja697kddjbj7yxx64ka7pdsdnfx9l";
+	};
+# Shared-only build
+	buildFlags = "shared";
+	patchPhase = ''
+	sed -e '/^install:/s/libcfitsio.a //' -e 's@/bin/@@g' -i Makefile.in
+	'';
+}
diff --git a/pkgs/development/libraries/ctl/default.nix b/pkgs/development/libraries/ctl/default.nix
index c6a6cee0ca6..6e1c212703c 100644
--- a/pkgs/development/libraries/ctl/default.nix
+++ b/pkgs/development/libraries/ctl/default.nix
@@ -1,16 +1,16 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "ctl-1.4.1";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://surfnet.dl.sourceforge.net/sourceforge/ampasctl/ctl-1.4.1.tar.gz;
     sha256 = "16lzgbpxdyhykdwndj1i9vx3h4bfkxqqcrvasvgg70gb5raxj0mj";
   };
 
-  propagatedBuildInputs = (with args; [ilmbase]);
-  configureFlags="--with-ilmbase-prefix=${args.ilmbase}";
+  propagatedBuildInputs =  [ilmbase];
+  configureFlags="--with-ilmbase-prefix=${ilmbase}";
   #configurePhase = "
-    #export CXXFLAGS=\"-I${args.ilmbase}/include -L${args.ilmbase}/lib\"
+    #export CXXFLAGS=\"-I${ilmbase}/include -L${ilmbase}/lib\"
     #echo $CXXFLAGS
     #unset configurePhase; configurePhase
   #";
diff --git a/pkgs/development/libraries/dbus-glib/default.nix b/pkgs/development/libraries/dbus-glib/default.nix
index e72ca406509..9a9851521b4 100644
--- a/pkgs/development/libraries/dbus-glib/default.nix
+++ b/pkgs/development/libraries/dbus-glib/default.nix
@@ -1,14 +1,15 @@
 args: with args;
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   name = "dbus-glib-0.74";
   src = fetchurl {
-    url = http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.74.tar.gz;
+    url = "${meta.homepage}/releases/dbus-glib/${name}.tar.gz";
     sha256 = "1qmbnd9xgg7vahlfywd8sfd9yqhx8jdyczz3cshfsd4qc76xhw78";
   };
-  inherit dbus glib;
-  buildInputs = [pkgconfig gettext glib expat];
-  propagatedBuildInputs = [dbus];
+  buildInputs = [pkgconfig expat gettext];
+  propagatedBuildInputs = [dbus.libs glib];
+  configureFlags = "--enable-shared --disable-static";
+  passthru = { inherit dbus glib; };
 
   meta = {
 	  homepage = http://dbus.freedesktop.org;
diff --git a/pkgs/development/libraries/dbus/default.nix b/pkgs/development/libraries/dbus/default.nix
index cd4b8f49e05..b60705f21f6 100644
--- a/pkgs/development/libraries/dbus/default.nix
+++ b/pkgs/development/libraries/dbus/default.nix
@@ -1,22 +1,42 @@
-{stdenv, fetchurl, pkgconfig, expat}:
-
-stdenv.mkDerivation {
-  name = "dbus-1.0.2";
+args: with args;
+let
+  version = "1.0.2";
   src = fetchurl {
-    url = http://dbus.freedesktop.org/releases/dbus/dbus-1.0.2.tar.gz;
+    url = "http://dbus.freedesktop.org/releases/dbus/dbus-${version}.tar.gz";
     sha256 = "1jn652zb81mczsx4rdcwrrzj3lfhx9d107zjfnasc4l5yljl204a";
   };
-  buildInputs = [pkgconfig expat];
-  configureFlags = "--without-x --localstatedir=/var";
+  configureFlags = "--disable-static --localstatedir=/var --with-session-socket-dir=/tmp";
+in rec {
+  libs = stdenv.mkDerivation {
+    name = "dbus-library-" + version;
+    buildInputs = [pkgconfig expat];
+    inherit src configureFlags;
+    patchPhase = ''
+      sed -i /mkinstalldirs.*localstatedir/d bus/Makefile.in
+      sed -i '/SUBDIRS/s/ tools//' Makefile.in
+    '';
+  };
+
+  tools = stdenv.mkDerivation {
+    name = "dbus-tools-" + version;
+    inherit src configureFlags;
+    buildInputs = [pkgconfig expat libs]
+      ++ (if useX11 then [libX11 libICE libSM] else []);
+    postConfigure = "cd tools";
 
-  # Awful hack: `make install' wants to write in /var, but it
-  # can't.  So redirect it with a DESTDIR.
-  preInstall = "
-    installFlagsArray=(DESTDIR=$out/destdir)
-  ";
+    NIX_LDFLAGS = "-ldbus-1";
+    makeFlags = "DBUS_DAEMONDIR=${daemon}/bin";
+
+    patchPhase = ''
+      sed -i 's@ $(top_builddir)/dbus/libdbus-1.la@@' tools/Makefile.in
+      sed -i '/mkdir.*localstate/d' tools/Makefile.in
+    '';
+  };
 
-  postInstall = "
-    mv $out/destdir/$out/* $out
-    rm -rf $out/destdir
-  ";
+# I'm too lazy to separate daemon and libs now.
+  daemon = libs;
+  
+  # FIXME TODO
+  # After merger it will be better to correct upstart-job instead.
+  outPath = daemon.outPath;
 }
diff --git a/pkgs/development/libraries/dbus_x/default.nix b/pkgs/development/libraries/dbus_x/default.nix
deleted file mode 100644
index dfe3ea0ee7e..00000000000
--- a/pkgs/development/libraries/dbus_x/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-args: with args;
-
-stdenv.mkDerivation {
-  name = "dbus-1.0.2";
-  src = fetchurl {
-    url = http://dbus.freedesktop.org/releases/dbus/dbus-1.0.2.tar.gz;
-    sha256 = "1jn652zb81mczsx4rdcwrrzj3lfhx9d107zjfnasc4l5yljl204a";
-  };
-  buildInputs = [pkgconfig expat libX11 libICE libSM];
-
-  configureFlags = "--with-x --disable-static --localstatedir=/var --with-session-socket-dir=/tmp";
-  patchPhase = "sed -e /mkinstalldirs.*localstatedir/d -i bus/Makefile.in";
-}
diff --git a/pkgs/development/libraries/enchant/1.3.0.nix b/pkgs/development/libraries/enchant/1.3.0.nix
new file mode 100644
index 00000000000..e503366087e
--- /dev/null
+++ b/pkgs/development/libraries/enchant/1.3.0.nix
@@ -0,0 +1,14 @@
+args: with args;
+stdenv.mkDerivation rec {
+  name = "enchant-" + version;
+  src = fetchurl {
+    url = "http://www.abisource.com/downloads/enchant/${version}/${name}.tar.gz";
+    sha256 = "1vwqwsadnp4rf8wj7d4rglvszjzlcli0jyxh06h8inka1sm1al76";
+  };
+  buildInputs = [aspell pkgconfig glib];
+  configureFlags = "--enable-shared --disable-static";
+
+  meta = {
+    homepage = http://www.abisource.com/enchant;
+  };
+}
diff --git a/pkgs/development/libraries/enchant/default.nix b/pkgs/development/libraries/enchant/default.nix
deleted file mode 100644
index 74fe33cba8c..00000000000
--- a/pkgs/development/libraries/enchant/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-args: with args;
-stdenv.mkDerivation {
-	name = "enchant-1.3.0";
-	src = fetchurl {
-		url = http://FIXME/enchant-1.3.0.tar.gz;
-		sha256 = "1vwqwsadnp4rf8wj7d4rglvszjzlcli0jyxh06h8inka1sm1al76";
-	};
-	buildInputs = [aspell pkgconfig glib];
-	configureFlags = "--enable-shared --disable-static";
-}
diff --git a/pkgs/development/libraries/fcgi/default.nix b/pkgs/development/libraries/fcgi/default.nix
new file mode 100644
index 00000000000..0af3e4f5537
--- /dev/null
+++ b/pkgs/development/libraries/fcgi/default.nix
@@ -0,0 +1,18 @@
+args:
+args.stdenv.mkDerivation rec {
+  name = "fcgi-2.4.0";
+
+  src = args.fetchurl {
+    name = name + ".tar.gz";
+    url = http://www.fastcgi.com/dist/fcgi.tar.gz;
+    sha256 = "1f857wnl1d6jfrgfgfpz3zdaj8fch3vr13mnpcpvy8bang34bz36";
+  };
+
+  buildInputs =(with args; []);
+
+  meta = { 
+      description = "FastCGI  is a language independent, scalable, open extension to CG";
+      homepage = http://www.fastcgi.com/;
+      license = "FastCGI see LICENSE.TERMS";
+  };
+}
diff --git a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix
index 90978eb2908..980b04a9d61 100644
--- a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix
+++ b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix
@@ -1,17 +1,11 @@
-{stdenv, fetchsvn}:
+{stdenv, fetchurl}:
 
 stdenv.mkDerivation {
-  name = "ffmpeg-svn-2007-12-04";
-  src = fetchsvn {
-    url = svn://svn.mplayerhq.hu/ffmpeg/trunk ;
-    rev = "11164";
-    #sha256 = "95658455e466aeab5a302ddd6e7b2f79f620d4495012add46028a548e6c364b2";
-    sha256 = "c97b0cd791f8408cfc69452ff7afbf00d34b367e493dfbcae830fba99c229189";
+  name = "ffmpeg-svn-pre-r11901";
+  src = fetchurl {
+    url = http://nix.cs.uu.nl/dist/tarballs/ffmpeg-svn-r11901.tar.bz2;
+    sha256 = "0l5207gnfaz57pvlxpxyjphyz0mp9plnxzd0aghy0nz3hmqh4rs7";
   };
-  /*fetchurl {
-    url = http://ffmpeg.mplayerhq.hu/ffmpeg-export-snapshot.tar.bz2;
-    sha256 = "040a35f0c004323af14329c09ad3cff8d040e2cf9797d97cde3d9d83d02b4d87";
-  };*/
   # !!! Hm, what are the legal consequences of --enable-gpl?
   configureFlags = "--enable-shared --enable-pp --enable-gpl --disable-ffserver --disable-ffplay";
 }
diff --git a/pkgs/development/libraries/fftw/default.nix b/pkgs/development/libraries/fftw/default.nix
index 3f712544303..3f5d13b09fb 100644
--- a/pkgs/development/libraries/fftw/default.nix
+++ b/pkgs/development/libraries/fftw/default.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs { 
 		src = 
 			fetchurl {
 				url = ftp://ftp.fftw.org/pub/fftw/fftw-3.1.2.tar.gz;
@@ -8,10 +8,11 @@ args : with args;
 		buildInputs = [];
 		configureFlags = ["--enable-float --enable-shared"];
 	} null;
+	in with localDefs;
 stdenv.mkDerivation {
 	name = "fftw-3.1.2";
 	builder = writeScript "fftw-3.1.2-builder"
-		(textClosure [doConfigure doMakeInstall doForceShare]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare]);
 	meta = {
 		description = "
 	Fastest Fourier Transform in the West library.
diff --git a/pkgs/development/libraries/gamin/default.nix b/pkgs/development/libraries/gamin/default.nix
new file mode 100644
index 00000000000..a6ae0bacb22
--- /dev/null
+++ b/pkgs/development/libraries/gamin/default.nix
@@ -0,0 +1,12 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "gamin-0.1.9";
+
+	src = fetchurl {
+		url = "http://www.gnome.org/~veillard/gamin/sources/${name}.tar.gz";
+		sha256 = "0fgjfyr0nlkpdxj94a4qfm82wypljdyv1b6l56v7i9jdx0hcdqhr";
+	};
+
+	buildInputs = [python pkgconfig glib];
+	configureFlags = "--enable-shared --disable-static --disable-debug";
+}
diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix
deleted file mode 100644
index b0e64639d87..00000000000
--- a/pkgs/development/libraries/gettext/default.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-args:
-args.stdenv.lib.listOfListsToAttrs [
-	[ "recurseForDerivations" true ]
-	[ "0.14.6" (import ./0.14.6.nix args) ]
-	[ "0.15" (import ./0.15.nix args) ]
-	[ "0.16.x" (import ./0.16.x.nix args) ]
-	[ "default" (import ./0.16.x.nix args) ]
-]
diff --git a/pkgs/development/libraries/glew/default.nix b/pkgs/development/libraries/glew/default.nix
new file mode 100644
index 00000000000..82925d144b5
--- /dev/null
+++ b/pkgs/development/libraries/glew/default.nix
@@ -0,0 +1,19 @@
+args: with args;
+stdenv.mkDerivation {
+  name = "glew-1.5.0";
+
+  src = fetchurl {
+    url = http://dfn.dl.sourceforge.net/sourceforge/glew/glew-1.5.0-src.tgz;
+    sha256 = "1kjr1fchnl785wsg11vzc03q3pm12lh20n1i593zr1xqfjgx2b4h";
+  };
+
+  buildInputs = [mesa x11 libXmu libXi];
+
+  meta = { 
+      description = "cross-platform open-source C/C++ extension loading library";
+      homepage = http://glew.sourceforge.net/;
+      license = ["BSD" "GLX" "SGI-B" "GPL2"]; # License description copied from gentoo-1.4.0 
+  };
+
+  installPhase="GLEW_DEST=\$out make install";
+}
diff --git a/pkgs/development/libraries/glibc-2.7/builder.sh b/pkgs/development/libraries/glibc-2.7/builder.sh
index 3e874ed891c..f9b9c6b87aa 100644
--- a/pkgs/development/libraries/glibc-2.7/builder.sh
+++ b/pkgs/development/libraries/glibc-2.7/builder.sh
@@ -12,8 +12,9 @@ preConfigure=preConfigure
 preConfigure() {
 
     for i in configure io/ftwtest-sh; do
-        substituteInPlace "$i" \
-            --replace "@PWD@" "pwd"
+        # Can't use substituteInPlace here because replace hasn't been
+        # built yet in the bootstrap.
+        sed -i "$i" -e "s^/bin/pwd^$PWD_P^g"
     done
 
     # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older
diff --git a/pkgs/development/libraries/glibc-2.7/default.nix b/pkgs/development/libraries/glibc-2.7/default.nix
index 8a5a84bd2c6..f33f95fda9f 100644
--- a/pkgs/development/libraries/glibc-2.7/default.nix
+++ b/pkgs/development/libraries/glibc-2.7/default.nix
@@ -12,8 +12,6 @@ stdenv.mkDerivation {
     sha256 = "06j5q20l11x8kcrl9bg15xgb1pw0w82pazikxf4zvq2fmhiaa922";
   };
 
-  patches = [ ./glibc-pwd.patch ./glibc-getcwd-param-MAX.patch ];
-
   inherit kernelHeaders installLocales;
 
   inherit (stdenv) is64bit;
diff --git a/pkgs/development/libraries/gpgme/default.nix b/pkgs/development/libraries/gpgme/default.nix
index 68bbbc40904..64f1a746b03 100644
--- a/pkgs/development/libraries/gpgme/default.nix
+++ b/pkgs/development/libraries/gpgme/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, libgpgerror, gnupg}:
+args: with args;
 
 stdenv.mkDerivation {
   name = "gpgme-1.1.4";
@@ -6,5 +6,5 @@ stdenv.mkDerivation {
     url = ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-1.1.4.tar.bz2;
     sha256 = "0ncrv7p33rjq1avkxpp9x0gz6wna9y3b3dmw6nv366n5mgvxmpg8";
   };
-  buildInputs = [libgpgerror gnupg];
+  buildInputs = [libgpgerror gnupg gnupg2 pkgconfig glib pth];
 }
diff --git a/pkgs/development/libraries/gsl/default.nix b/pkgs/development/libraries/gsl/default.nix
index a5248d42299..19655f97b0d 100644
--- a/pkgs/development/libraries/gsl/default.nix
+++ b/pkgs/development/libraries/gsl/default.nix
@@ -1,14 +1,12 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "gsl-1.9";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = ftp://ftp.gnu.org/gnu/gsl/gsl-1.9.tar.gz;
     sha256 = "0l12js65c1qf3s7gmgay6gj5nbs6635py41dj8nk3hlp95wcdlgw";
   };
 
-  buildInputs =(with args; []);
-
   meta = { 
       description = "numerical library (>1000 functions)";
       homepage = http://www.gnu.org/software/gsl;
diff --git a/pkgs/development/libraries/gtk-libs-2.10/default.nix b/pkgs/development/libraries/gtk-libs-2.10/default.nix
deleted file mode 100644
index ed5ae35f05d..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.10/default.nix
+++ /dev/null
@@ -1,26 +0,0 @@
-{ xineramaSupport ? false
-, stdenv, fetchurl, pkgconfig, gettext, perl, x11
-, libtiff, libjpeg, libpng, cairo, libXinerama ? null, libXrandr
-}:
-
-rec {
-
-  glib = (import ./glib) {
-    inherit fetchurl stdenv pkgconfig gettext perl;
-  };
-
-  atk = (import ./atk) {
-    inherit fetchurl stdenv pkgconfig glib perl;
-  };
-
-  pango = (import ./pango) {
-    inherit fetchurl stdenv pkgconfig glib x11 cairo libpng;
-  };
-
-  gtk = (import ./gtk+) {
-    inherit fetchurl stdenv pkgconfig glib atk pango perl
-            libtiff libjpeg libpng x11 cairo libXinerama
-            xineramaSupport libXrandr;
-  };
-
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.10/gtk+/default.nix b/pkgs/development/libraries/gtk-libs-2.10/gtk+/default.nix
deleted file mode 100644
index 474c6499380..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.10/gtk+/default.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ xineramaSupport ? false
-, stdenv, fetchurl, pkgconfig, x11, glib, atk
-, pango, perl, libtiff, libjpeg, libpng, cairo, libXinerama ? null, libXrandr
-}:
-
-assert x11.buildClientLibs;
-assert xineramaSupport -> libXinerama != null;
-
-
-stdenv.mkDerivation {
-  name = "gtk+-2.10.14";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-2.10.14.tar.bz2;
-    sha256 = "1qjdx9kdc533dajdy1kv3ssxzh7gz7j7vzgw0ax910q4klil88yh";
-  };
-  buildInputs = [
-    pkgconfig perl libtiff libjpeg libpng cairo libXrandr
-    (if xineramaSupport then libXinerama else null)
-  ];
-  propagatedBuildInputs = [x11 glib atk pango];
-  inherit libtiff libjpeg libpng;
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.2/atk/default.nix b/pkgs/development/libraries/gtk-libs-2.2/atk/default.nix
deleted file mode 100644
index 1089f571099..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.2/atk/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{stdenv, fetchurl, pkgconfig, glib, perl}:
-
-assert pkgconfig != null && glib != null && perl != null;
-
-stdenv.mkDerivation {
-  name = "atk-1.2.4";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.2/atk-1.2.4.tar.bz2;
-    md5 = "2d6d50df31abe0e8892b5d3e7676a02d";
-  };
-  buildInputs = [pkgconfig perl];
-  propagatedBuildInputs = [glib];
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.2/glib/default.nix b/pkgs/development/libraries/gtk-libs-2.2/glib/default.nix
deleted file mode 100644
index 22d01d0d86f..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.2/glib/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{stdenv, fetchurl, pkgconfig, gettext, perl}:
-
-assert pkgconfig != null && gettext != null && perl != null;
-
-stdenv.mkDerivation {
-  name = "glib-2.2.3";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.2/glib-2.2.3.tar.bz2;
-    md5 = "aa214a10d873b68ddd67cd9de2ccae55";
-  };
-  buildInputs = [pkgconfig gettext perl];
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix b/pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix
deleted file mode 100644
index e1eef805803..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, x11, glib, atk
-, pango, perl, libtiff, libjpeg, libpng}:
-
-assert pkgconfig != null && x11 != null && glib != null && atk != null
-  && pango != null && perl != null && perl != null && libtiff != null
-  && libjpeg != null && libpng != null;
-assert x11.buildClientLibs;
-#assert glib == atk.glib;
-#assert glib == pango.glib;
-#assert x11 == pango.x11;
-
-stdenv.mkDerivation {
-  name = "gtk+-2.2.4";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.2/gtk+-2.2.4.tar.bz2;
-    md5 = "605332199533e73bc6eec481fb4f1671";
-  };
-  buildInputs = [pkgconfig perl libtiff libjpeg libpng];
-  propagatedBuildInputs = [x11 glib atk pango];
-  inherit libtiff libjpeg libpng;
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.2/pango/default.nix b/pkgs/development/libraries/gtk-libs-2.2/pango/default.nix
deleted file mode 100644
index 5d5e5184dda..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.2/pango/default.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{stdenv, fetchurl, pkgconfig, x11, glib}:
-
-assert pkgconfig != null && x11 != null && glib != null;
-assert x11.buildClientLibs;
-
-stdenv.mkDerivation {
-  name = "pango-1.2.5";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.2/pango-1.2.5.tar.bz2;
-    md5 = "df00fe3e71cd297010f24f439b6c8ee6";
-  };
-  buildInputs = [pkgconfig];
-  propagatedBuildInputs = [x11 glib];
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.4/atk/default.nix b/pkgs/development/libraries/gtk-libs-2.4/atk/default.nix
deleted file mode 100644
index 095ff32b2aa..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.4/atk/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{stdenv, fetchurl, pkgconfig, glib, perl}:
-
-assert pkgconfig != null && glib != null && perl != null;
-
-stdenv.mkDerivation {
-  name = "atk-1.6.1";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.4/atk-1.6.1.tar.bz2;
-    md5 = "f77be7e128c957bd3056c2e270b5f283";
-  };
-  buildInputs = [pkgconfig perl];
-  propagatedBuildInputs = [glib];
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.4/default.nix b/pkgs/development/libraries/gtk-libs-2.4/default.nix
deleted file mode 100644
index dc01a534d81..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.4/default.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, gettext, perl, x11
-, libtiff, libjpeg, libpng}:
-
-rec {
-
-  glib = (import ./glib) {
-    inherit fetchurl stdenv pkgconfig gettext perl;
-  };
-
-  atk = (import ./atk) {
-    inherit fetchurl stdenv pkgconfig glib perl;
-  };
-
-  pango = (import ./pango) {
-    inherit fetchurl stdenv pkgconfig glib x11;
-  };
-
-  gtk = (import ./gtk+) {
-    inherit fetchurl stdenv pkgconfig glib atk pango perl
-            libtiff libjpeg libpng x11;
-  };
-
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.4/glib/default.nix b/pkgs/development/libraries/gtk-libs-2.4/glib/default.nix
deleted file mode 100644
index 58f91b3f83c..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.4/glib/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{stdenv, fetchurl, pkgconfig, gettext, perl}:
-
-assert pkgconfig != null && gettext != null && perl != null;
-
-stdenv.mkDerivation {
-  name = "glib-2.4.7";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.4/glib-2.4.7.tar.bz2;
-    md5 = "eff6fec89455addf8b0dee5a19e343be";
-  };
-  buildInputs = [pkgconfig gettext perl];
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix b/pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix
deleted file mode 100644
index 56a6e41e731..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, x11, glib, atk
-, pango, perl, libtiff, libjpeg, libpng}:
-
-assert pkgconfig != null && x11 != null && glib != null && atk != null
-  && pango != null && perl != null && perl != null && libtiff != null
-  && libjpeg != null && libpng != null;
-assert x11.buildClientLibs;
-#assert glib == atk.glib;
-#assert glib == pango.glib;
-#assert x11 == pango.x11;
-
-stdenv.mkDerivation {
-  name = "gtk+-2.4.13";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.4/gtk+-2.4.13.tar.bz2;
-    md5 = "3a438e1010704b11acaf060c9ba0fd7b";
-  };
-  buildInputs = [pkgconfig perl libtiff libjpeg libpng];
-  propagatedBuildInputs = [x11 glib atk pango];
-  inherit libtiff libjpeg libpng;
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.4/pango/default.nix b/pkgs/development/libraries/gtk-libs-2.4/pango/default.nix
deleted file mode 100644
index 986891b98b9..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.4/pango/default.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{stdenv, fetchurl, pkgconfig, x11, glib}:
-
-assert pkgconfig != null && x11 != null && glib != null;
-assert x11.buildClientLibs;
-
-stdenv.mkDerivation {
-  name = "pango-1.4.1";
-  src = fetchurl {
-    url = ftp://ftp.gtk.org/pub/gtk/v2.4/pango-1.4.1.tar.bz2;
-    md5 = "39868e0da250fd4c00b2970e4eb84389";
-  };
-  buildInputs = [pkgconfig];
-  propagatedBuildInputs = [x11 glib];
-}
diff --git a/pkgs/development/libraries/gtk-libs-2.6/default.nix b/pkgs/development/libraries/gtk-libs-2.6/default.nix
deleted file mode 100644
index dc01a534d81..00000000000
--- a/pkgs/development/libraries/gtk-libs-2.6/default.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, gettext, perl, x11
-, libtiff, libjpeg, libpng}:
-
-rec {
-
-  glib = (import ./glib) {
-    inherit fetchurl stdenv pkgconfig gettext perl;
-  };
-
-  atk = (import ./atk) {
-    inherit fetchurl stdenv pkgconfig glib perl;
-  };
-
-  pango = (import ./pango) {
-    inherit fetchurl stdenv pkgconfig glib x11;
-  };
-
-  gtk = (import ./gtk+) {
-    inherit fetchurl stdenv pkgconfig glib atk pango perl
-            libtiff libjpeg libpng x11;
-  };
-
-}
diff --git a/pkgs/development/libraries/gtk-libs-1.x/default.nix b/pkgs/development/libraries/gtk-libs/1.x/default.nix
index 0e86abd788b..0e86abd788b 100644
--- a/pkgs/development/libraries/gtk-libs-1.x/default.nix
+++ b/pkgs/development/libraries/gtk-libs/1.x/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-1.x/gdk-pixbuf/default.nix b/pkgs/development/libraries/gtk-libs/1.x/gdk-pixbuf/default.nix
index 4e28a78930f..4e28a78930f 100644
--- a/pkgs/development/libraries/gtk-libs-1.x/gdk-pixbuf/default.nix
+++ b/pkgs/development/libraries/gtk-libs/1.x/gdk-pixbuf/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-1.x/glib/default.nix b/pkgs/development/libraries/gtk-libs/1.x/glib/default.nix
index 8aa5005b617..8aa5005b617 100644
--- a/pkgs/development/libraries/gtk-libs-1.x/glib/default.nix
+++ b/pkgs/development/libraries/gtk-libs/1.x/glib/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-1.x/glib/gcc34.patch b/pkgs/development/libraries/gtk-libs/1.x/glib/gcc34.patch
index 13d35c82209..13d35c82209 100644
--- a/pkgs/development/libraries/gtk-libs-1.x/glib/gcc34.patch
+++ b/pkgs/development/libraries/gtk-libs/1.x/glib/gcc34.patch
diff --git a/pkgs/development/libraries/gtk-libs-1.x/gtk+/builder.sh b/pkgs/development/libraries/gtk-libs/1.x/gtk+/builder.sh
index da9b8dc6128..da9b8dc6128 100644
--- a/pkgs/development/libraries/gtk-libs-1.x/gtk+/builder.sh
+++ b/pkgs/development/libraries/gtk-libs/1.x/gtk+/builder.sh
diff --git a/pkgs/development/libraries/gtk-libs-1.x/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/1.x/gtk+/default.nix
index 7762ee57b77..7762ee57b77 100644
--- a/pkgs/development/libraries/gtk-libs-1.x/gtk+/default.nix
+++ b/pkgs/development/libraries/gtk-libs/1.x/gtk+/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.10/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.10/atk/default.nix
index 34d23bc6daa..1dae480423f 100644
--- a/pkgs/development/libraries/gtk-libs-2.10/atk/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.10/atk/default.nix
@@ -1,6 +1,4 @@
-{stdenv, fetchurl, pkgconfig, glib, perl}:
-
-assert pkgconfig != null && glib != null && perl != null;
+args: with args;
 
 stdenv.mkDerivation {
   name = "atk-1.12.4";
diff --git a/pkgs/development/libraries/gtk-libs/2.10/default.nix b/pkgs/development/libraries/gtk-libs/2.10/default.nix
new file mode 100644
index 00000000000..0fc77dde627
--- /dev/null
+++ b/pkgs/development/libraries/gtk-libs/2.10/default.nix
@@ -0,0 +1,16 @@
+args: with args;
+
+rec {
+
+  glib = (import ./glib) args;
+
+  atk = (import ./atk) (args // { inherit glib; });
+
+  pango = (import ./pango) (args // { inherit glib; });
+
+  gtk = (import ./gtk+) (args // { inherit glib atk pango; } );
+
+  glibmm = (import ./glibmm) (args // { inherit glib; });
+
+  gtkmm = (import ./gtkmm) (args // { inherit gtk atk glibmm; });
+}
diff --git a/pkgs/development/libraries/gtk-libs-2.10/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.10/glib/default.nix
index b29f6b62f93..9af2ab959b1 100644
--- a/pkgs/development/libraries/gtk-libs-2.10/glib/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.10/glib/default.nix
@@ -1,6 +1,4 @@
-{stdenv, fetchurl, pkgconfig, gettext, perl}:
-
-assert pkgconfig != null && gettext != null && perl != null;
+args: with args;
 
 stdenv.mkDerivation {
   name = "glib-2.12.13"; # <- sic! gtk 2.10 needs glib 2.12
diff --git a/pkgs/development/libraries/gtk-libs-2.10/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix
index e1d275b9974..bbdde49b75d 100644
--- a/pkgs/development/libraries/gtk-libs-2.10/glibmm/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, pkgconfig, glib, libsigcxx}:
+args: with args;
 
 stdenv.mkDerivation {
   name = "glibmm-2.12.10";
@@ -7,6 +7,7 @@ stdenv.mkDerivation {
     sha256 = "02rjjdh0f6kafa1sn4y5ykvm4f2qn3yh4kr4lngcv7vzasqn1dr1";
   };
 
-  buildInputs = [pkgconfig glib libsigcxx];
+  buildInputs = [pkgconfig];
+  propagatedBuildInputs = [glib libsigcxx];
 }
 
diff --git a/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix
new file mode 100644
index 00000000000..a819c1fc275
--- /dev/null
+++ b/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix
@@ -0,0 +1,13 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "gtk+-2.10.14";
+  src = fetchurl {
+    url = ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-2.10.14.tar.bz2;
+    sha256 = "1qjdx9kdc533dajdy1kv3ssxzh7gz7j7vzgw0ax910q4klil88yh";
+  };
+  buildInputs = [ pkgconfig perl ];
+  propagatedBuildInputs = [x11 glib atk pango libtiff libjpeg libpng cairo
+    libXrandr (if xineramaSupport then libXinerama else null)];
+  passthru = { inherit libtiff libjpeg libpng; };
+}
diff --git a/pkgs/development/libraries/gtk-libs-2.10/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix
index 4f476f73d50..9a44e9a6ba2 100644
--- a/pkgs/development/libraries/gtk-libs-2.10/gtkmm/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, gtk, atk, glibmm, libsigcxx}:
+args: with args;
 
 stdenv.mkDerivation {
   name = "gtkmm-2.10.11";
@@ -7,6 +7,7 @@ stdenv.mkDerivation {
     sha256 = "1bri9r0k69dmi5xgzrlfllp3adfzhz8dh9zkcvi6sjkgfwi594vx";
   };
 
-  buildInputs = [pkgconfig gtk atk glibmm libsigcxx];
+  buildInputs = [pkgconfig];
+  propagatedBuildInputs = [glibmm gtk atk cairomm];
 }
 
diff --git a/pkgs/development/libraries/gtk-libs-2.10/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix
index 25d4aa17e91..faf5ffb4724 100644
--- a/pkgs/development/libraries/gtk-libs-2.10/pango/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix
@@ -1,6 +1,4 @@
-{stdenv, fetchurl, pkgconfig, x11, glib, cairo, libpng}:
-
-assert x11.buildClientLibs;
+args: with args;
 
 stdenv.mkDerivation {
   name = "pango-1.14.10";
@@ -8,6 +6,6 @@ stdenv.mkDerivation {
     url = ftp://ftp.gtk.org/pub/pango/1.14/pango-1.14.10.tar.bz2;
     md5 = "e9fc2f8168e74e2fa0aa8238ee0e9c06";
   };
-  buildInputs = [pkgconfig libpng];
-  propagatedBuildInputs = [x11 glib cairo];
+  buildInputs = [pkgconfig];
+  propagatedBuildInputs = [x11 glib cairo libpng];
 }
diff --git a/pkgs/development/libraries/gtk-libs-2.6/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.6/atk/default.nix
index 66720d4dbeb..66720d4dbeb 100644
--- a/pkgs/development/libraries/gtk-libs-2.6/atk/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.6/atk/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.2/default.nix b/pkgs/development/libraries/gtk-libs/2.6/default.nix
index dc01a534d81..dc01a534d81 100644
--- a/pkgs/development/libraries/gtk-libs-2.2/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.6/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.6/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.6/glib/default.nix
index 1dc3407a76e..1dc3407a76e 100644
--- a/pkgs/development/libraries/gtk-libs-2.6/glib/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.6/glib/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.6/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix
index 957c596fc7b..957c596fc7b 100644
--- a/pkgs/development/libraries/gtk-libs-2.6/glibmm/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.6/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix
index 06e37f070da..06e37f070da 100644
--- a/pkgs/development/libraries/gtk-libs-2.6/gtk+/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.6/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix
index ebc1e881c47..ebc1e881c47 100644
--- a/pkgs/development/libraries/gtk-libs-2.6/gtkmm/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.6/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.6/pango/default.nix
index 6b9391e0a0b..6b9391e0a0b 100644
--- a/pkgs/development/libraries/gtk-libs-2.6/pango/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.6/pango/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.8/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.8/atk/default.nix
index 07537567520..07537567520 100644
--- a/pkgs/development/libraries/gtk-libs-2.8/atk/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.8/atk/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.8/default.nix b/pkgs/development/libraries/gtk-libs/2.8/default.nix
index ee5abd562b1..ee5abd562b1 100644
--- a/pkgs/development/libraries/gtk-libs-2.8/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.8/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.8/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.8/glib/default.nix
index f73a1f388f4..f73a1f388f4 100644
--- a/pkgs/development/libraries/gtk-libs-2.8/glib/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.8/glib/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.8/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix
index 957c596fc7b..957c596fc7b 100644
--- a/pkgs/development/libraries/gtk-libs-2.8/glibmm/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.8/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix
index c5a012d9baa..c5a012d9baa 100644
--- a/pkgs/development/libraries/gtk-libs-2.8/gtk+/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.8/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix
index ebc1e881c47..ebc1e881c47 100644
--- a/pkgs/development/libraries/gtk-libs-2.8/gtkmm/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix
diff --git a/pkgs/development/libraries/gtk-libs-2.8/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.8/pango/default.nix
index 9e3296e00a1..9e3296e00a1 100644
--- a/pkgs/development/libraries/gtk-libs-2.8/pango/default.nix
+++ b/pkgs/development/libraries/gtk-libs/2.8/pango/default.nix
diff --git a/pkgs/development/libraries/haskell/Crypto/default.nix b/pkgs/development/libraries/haskell/Crypto/default.nix
new file mode 100644
index 00000000000..9cb465e50b3
--- /dev/null
+++ b/pkgs/development/libraries/haskell/Crypto/default.nix
@@ -0,0 +1,11 @@
+{cabal}:
+
+cabal.mkDerivation (self : {
+  pname = "Crypto";
+  version = "4.1.0";
+  sha256 = "0984c833c5dfa6f4d56fd6fb284db7b7cef6676dc7999a1436aa856becba2b8f";
+  meta = {
+    description = "Several encryption algorithms for Haskell";
+  };
+})  
+
diff --git a/pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix b/pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix
new file mode 100644
index 00000000000..429407d25d2
--- /dev/null
+++ b/pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix
@@ -0,0 +1,10 @@
+{cabal}:
+
+cabal.mkDerivation (self : {
+  pname = "HDBC";
+  version = "1.1.4";
+  sha256 = "de03020874b532f7aa734f093caf0709e7d33d0d64c59ce0a003b2269fc85597";
+  meta = {
+    description = "HDBC provides an abstraction layer between Haskell programs and SQL relational databases";
+  };
+})
diff --git a/pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix b/pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix
new file mode 100644
index 00000000000..d9a1985839c
--- /dev/null
+++ b/pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix
@@ -0,0 +1,12 @@
+{cabal, HDBC, postgresql}:
+
+cabal.mkDerivation (self : {
+  pname = "HDBC-postgresql";
+  version = "1.1.4.0";
+  sha256 = "039eae03693330fee0e4083e22d502f94865969b243744a939786f598aec34ad";
+  meta = {
+    description = "This package provides a PostgreSQL driver for HDBC";
+  };
+  propagatedBuildInputs = [HDBC postgresql];
+})
+
diff --git a/pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix b/pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix
new file mode 100644
index 00000000000..b0c7eb27e6a
--- /dev/null
+++ b/pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix
@@ -0,0 +1,12 @@
+{cabal, HDBC, sqlite}:
+
+cabal.mkDerivation (self : {
+  pname = "HDBC-sqlite3";
+  version = "1.1.4.0";
+  sha256 = "328fed8d4cdba4311efd50d9d60591a81481317ddba10c58fbaa2ec7f418f788";
+  meta = {
+    description = "This is the Sqlite v3 driver for HDBC, the generic database access system for Haskell";
+  };
+  propagatedBuildInputs = [HDBC sqlite];
+})
+
diff --git a/pkgs/development/libraries/haskell/X11/default.nix b/pkgs/development/libraries/haskell/X11/default.nix
new file mode 100644
index 00000000000..39fb5628467
--- /dev/null
+++ b/pkgs/development/libraries/haskell/X11/default.nix
@@ -0,0 +1,13 @@
+{cabal, libX11, xineramaSupport ? true, libXinerama ? null, libXext ? null}:
+
+assert xineramaSupport -> (libXinerama != null && libXext != null);
+
+cabal.mkDerivation (self : {
+  pname = "X11";
+  version = "1.4.1";
+  sha256 = "e51038541415686f0e278ccdbc0b2373cd11f212de99023b7b8f8e776aa09f79";
+  propagatedBuildInputs = [libX11] ++ (if xineramaSupport then [libXinerama libXext] else []);
+  meta = {
+    description = "A Haskell binding to the X11 graphics library";
+  };
+})
diff --git a/pkgs/development/libraries/haskell/binary/default.nix b/pkgs/development/libraries/haskell/binary/default.nix
new file mode 100644
index 00000000000..081779fd312
--- /dev/null
+++ b/pkgs/development/libraries/haskell/binary/default.nix
@@ -0,0 +1,11 @@
+{cabal}:
+
+cabal.mkDerivation (self : {
+  pname = "binary";
+  version = "0.4.1";
+  sha256 = "bb74824306843da25f6d97c271e2a06ee3a7e05fc529156fb81d7c576688e549";
+  meta = {
+    description = "Efficient, pure binary serialisation using lazy ByteStrings";
+  };
+})  
+
diff --git a/pkgs/development/libraries/haskell/cabal/cabal.nix b/pkgs/development/libraries/haskell/cabal/cabal.nix
new file mode 100644
index 00000000000..bafcedced63
--- /dev/null
+++ b/pkgs/development/libraries/haskell/cabal/cabal.nix
@@ -0,0 +1,95 @@
+# generic builder for Cabal packages
+
+attrs :
+{
+  mkDerivation =
+    transform :
+    let dtransform =
+          self : {
+
+            # pname should be defined by the client to be the package basename
+            # version should be defined by the client to be the package version
+ 
+            # fname is the internal full name of the package
+            fname = "${self.pname}-${self.version}";
+
+	    # name is the external full name of the package; usually we prefix
+	    # all packages with haskell- to avoid name clashes for libraries;
+	    # if that is not desired (for applications), name can be set to
+	    # fname.
+            name = "haskell-${self.fname}"; 
+
+            # the default download location for Cabal packages is Hackage,
+            # you still have to specify the checksum
+            src = attrs.fetchurl {
+              url = "http://hackage.haskell.org/packages/archive/${self.pname}/${self.version}/${self.fname}.tar.gz";
+              inherit (self) sha256;
+            };
+
+            # default buildInputs are just ghc, if more buildInputs are required
+            # buildInputs can be extended by the client by using extraBuildInputs,
+            # but often propagatedBuildInputs is preferable anyway
+            buildInputs = [attrs.ghc] ++ self.extraBuildInputs;
+            extraBuildInputs = [];
+
+            # we make sure that propagatedBuildInputs is defined, so that we don't
+            # have to check for its existence
+            propagatedBuildInputs = [];
+
+            # library directories that have to be added to the Cabal files
+            extraLibDirs = map (x : x + "/lib") self.propagatedBuildInputs;
+
+            # file(s) that have to be patched with information about extra libraries;
+            # can be redefined to the empty list by the client if this is not desired
+            patchLibFiles = [ "${self.pname}.cabal" ];
+
+            # patches files, compiles Setup, and configures
+            configurePhase = ''
+              eval "$preConfigure"
+
+              for i in ${toString self.patchLibFiles}; do
+                echo "patching $i"
+                test -f $i && sed -i '/[eE]xtra-[lL]ibraries/ { s|\( *\)[eE]xtra-[lL]ibraries.*|&\n\1extra-lib-dirs: ${toString self.extraLibDirs}| }' $i
+              done
+              for i in Setup.hs Setup.lhs; do
+                test -f $i && ghc --make $i
+              done
+              ./Setup configure --verbose --prefix="$out"
+
+              eval "$postConfigure"
+            '';
+
+            # builds via Cabal
+            buildPhase = ''
+              eval "$preBuild"
+
+              ./Setup build
+
+              eval "$postBuild"
+            '';
+
+	    # installs via Cabal; creates a registration file for nix-support
+	    # so that the package can be used in other Haskell-builds; also
+	    # creates a register-${name}.sh in userspace that can be used to
+	    # register the library in a user environment (but this scheme
+	    # should sooner or later be deprecated in favour of using a
+	    # ghc-wrapper).
+            installPhase = ''
+              eval "$preInstall"
+
+              ./Setup copy
+              ./Setup register --gen-script
+              mkdir -p $out/nix-support
+              if test -f register.sh; then
+                sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh
+                cp register.sh $out/nix-support/register-ghclib.sh
+                sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh
+                mkdir -p $out/bin
+                cp register.sh $out/bin/register-${self.name}.sh
+              fi
+
+              eval "$postInstall"
+            '';
+          };
+    in  attrs.stdenv.mkDerivation ((rec { f = dtransform f // transform f; }).f);
+} 
diff --git a/pkgs/development/libraries/haskell/gtk2hs/default.nix b/pkgs/development/libraries/haskell/gtk2hs/default.nix
index f4e3a02c73f..e49f4d7113e 100644
--- a/pkgs/development/libraries/haskell/gtk2hs/default.nix
+++ b/pkgs/development/libraries/haskell/gtk2hs/default.nix
@@ -1,18 +1,20 @@
 {stdenv, fetchurl, pkgconfig, ghc, gtk, cairo, GConf, libglade
 , glib, libgtkhtml, gtkhtml}:
 
-stdenv.mkDerivation {
-  name = "gtk2hs-0.9.12.1";
+stdenv.mkDerivation (rec {
+  pname = "gtk2hs";
+  version = "0.9.12.1";
+  fname = "${pname}-${version}";
+  name = "haskell-${fname}";
   src = fetchurl {
-    url = mirror://sourceforge/gtk2hs/gtk2hs-0.9.12.1.tar.gz;
+    url = "mirror://sourceforge/${pname}/${fname}.tar.gz";
     sha256 = "110z6v9gzhg6nzlz5gs8aafmipbva6rc50b8z1jgq0k2g25hfy22";
   };
 
   buildInputs = [pkgconfig ghc gtk glib cairo GConf libglade libgtkhtml gtkhtml];
 
- configureFlags = [
+  configureFlags = [
     "--enable-cairo"
   ];
 
-
-}
+})
diff --git a/pkgs/development/libraries/haskell/pcre-light/default.nix b/pkgs/development/libraries/haskell/pcre-light/default.nix
new file mode 100644
index 00000000000..1542bb7968a
--- /dev/null
+++ b/pkgs/development/libraries/haskell/pcre-light/default.nix
@@ -0,0 +1,12 @@
+{cabal, pcre}:
+
+cabal.mkDerivation (self : {
+  pname = "pcre-light";
+  version = "0.3";
+  sha256 = "a8cfec1c265530388efbb187426368e280331d9829fa93d8f49f16db3c3e7794";
+  propagatedBuildInputs = [pcre];
+  meta = {
+    description = "A small, efficient and portable regex library for Perl 5 compatible regular expressions";
+  };
+})  
+
diff --git a/pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh b/pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh
deleted file mode 100644
index bbe21eac49e..00000000000
--- a/pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-source $stdenv/setup
-
-
-tar xzf "$src" &&
-cd uulib-* &&
-
-
-autoconf &&
-./configure --prefix=$out &&
-
-
-ghc --make Setup.hs -o setup -package Cabal &&
-./setup configure --prefix=$out --with-hc-pkg=ghc-pkg &&
-
-
-./setup build &&
-./setup install &&
-./setup register --gen-script &&
-
-mkdir -p $out/nix-support/ &&
-cp register.sh $out/nix-support/register-ghclib.sh
diff --git a/pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix b/pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix
deleted file mode 100644
index 1c315b1cffa..00000000000
--- a/pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{stdenv, fetchurl, autoconf, ghc}:
-
-stdenv.mkDerivation
-{
-  name = "uulib-0.9.2-ghc-6.6";
-  src = fetchurl { url = http://www.cs.uu.nl/~ariem/uulib-2006-10-30-src.tar.gz;
-                   md5 = "d26059447d45fa91f54eca38680be7b7";
-                 };
-  builder = ./builder.sh;
-  buildInputs = [ autoconf ghc ];
-}
diff --git a/pkgs/development/libraries/haskell/uulib/builder.sh b/pkgs/development/libraries/haskell/uulib/builder.sh
deleted file mode 100644
index bdb0e81430e..00000000000
--- a/pkgs/development/libraries/haskell/uulib/builder.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-source $stdenv/setup
-
-
-export HOME=$(pwd)/fake-home
-
-
-#add ghc to search path
-test -n "$ghc" && PATH=$PATH:$ghc/bin
-
-#unpack
-tar xzf "$src" &&
-cd uulib-* &&
-
-#configure
-ghc --make Setup.hs -o setup -package Cabal &&
-./setup configure --prefix=$out &&
-
-#make
-./setup build &&
-
-#install
-./setup copy &&
-
-# Create package database. If we can find the ghc version we might install the
-# package, like ghc does, in $out/lib/ghc-version/package.conf.
-
-support=$out/nix-support &&
-packages_db=$out/nix-support/package.conf &&
-
-mkdir $support &&
-cp $ghc/lib/ghc-*/package.conf $packages_db &&
-chmod +w $packages_db &&
-#echo '[]' > $packages_db &&
-
-# We save a modified version of a register script. This gives a dependency on
-# ghc, but this should not be a problem as long as $out is a static library.
-
-./setup register --gen-script &&
-sed '/ghc-pkg/ s|update -|-f "$1" update -|' register.sh > register-pkg.sh &&
-sed '/ghc-pkg/ s|--auto-ghci-libs||' register-pkg.sh > $support/register.sh &&
-
-# The package and its direct cabal dependencies are registered. This may result
-# in duplicate registrations attempts but hopefully that will not result in
-# errors.
-
-# uulib has no dependencies on other ghc libraries
-for dep in ; do
-	sh $dep/nix-support/register.sh $packages_db || exit 1
-done &&
-sh register-pkg.sh $packages_db &&
-rm -f $package_db.old
diff --git a/pkgs/development/libraries/haskell/uulib/default.nix b/pkgs/development/libraries/haskell/uulib/default.nix
index c8bcf25dcc4..0e5e517d7c5 100644
--- a/pkgs/development/libraries/haskell/uulib/default.nix
+++ b/pkgs/development/libraries/haskell/uulib/default.nix
@@ -1,12 +1,10 @@
-{stdenv, fetchurl, ghc}:
+{cabal}:
 
-stdenv.mkDerivation {
-  name = "uulib-0.9.2";
-  src = fetchurl {
-    url = http://nix.cs.uu.nl/dist/tarballs/uulib-0.9.2-src.tar.gz;
-    md5 = "0cc9acc6a268e2bc5c8a954e67406e2d";
+cabal.mkDerivation (self : {
+  pname = "uulib";
+  version = "0.9.5";
+  sha256 = "38415725133af464de582dadc7d7e60b1aeb96344b18b239d176bf2181f98563";
+  meta = {
+    description = "Fast Parser Combinators and Pretty Printing Combinators";
   };
-  builder = ./builder.sh;
-  #buildInputs = [ ghc ];
-  inherit ghc;
-}
+})
diff --git a/pkgs/development/libraries/haskell/vty/default.nix b/pkgs/development/libraries/haskell/vty/default.nix
new file mode 100644
index 00000000000..930e19ae89c
--- /dev/null
+++ b/pkgs/development/libraries/haskell/vty/default.nix
@@ -0,0 +1,13 @@
+{cabal}:
+
+cabal.mkDerivation (self : {
+  pname = "vty";
+  version = "3.0.0";
+  sha256 = "44ae53d06b8b45c14cd3861e860a38730ed9995ed56b1b3d9aba6641771f1947";
+  meta = {
+    description = "vty is a *very* simplistic library in the niche of ncurses";
+  };
+  preConfigure = ''
+    sed -i 's|^Build-Depends:.*$|&, bytestring, containers|' ${self.pname}.cabal
+  '';
+})
diff --git a/pkgs/development/libraries/haskell/zlib/default.nix b/pkgs/development/libraries/haskell/zlib/default.nix
new file mode 100644
index 00000000000..268a43b5ea3
--- /dev/null
+++ b/pkgs/development/libraries/haskell/zlib/default.nix
@@ -0,0 +1,11 @@
+{cabal, zlib}:
+
+cabal.mkDerivation (self : {
+  pname = "zlib";
+  version = "0.4.0.2";
+  sha256 = "e6e9e51ca5b7f1685eb031f826f7865acc10cc2c8d0dfad975e0e81fd17f17ed";
+  propagatedBuildInputs = [zlib];
+  meta = {
+    description = "Compression and decompression in the gzip and zlib formats";
+  };
+})
diff --git a/pkgs/development/libraries/ilbc/default.nix b/pkgs/development/libraries/ilbc/default.nix
new file mode 100644
index 00000000000..360644cf911
--- /dev/null
+++ b/pkgs/development/libraries/ilbc/default.nix
@@ -0,0 +1,17 @@
+args: with args;
+stdenv.mkDerivation {
+  name = "ilbc-rfc3951";
+
+# I'm too lazy to extract .c source from rfc3951. So, I'm using autotools stuff
+# from linphone project
+  src = stdenv.mkDerivation {
+    name = "ilbc-rfc3951.tar.gz";
+    src = msilbc.src;
+	outputHashAlgo = "sha256";
+    outputHash = "0f6scsp72bz2ifscd8c0x57ipcxi2i4a9b4nwlnwx7a7a0hrazhj";
+    phases = "unpackPhase installPhase";
+    installPhase = "cp ilbc-rfc3951.tar.gz \${out}";
+  };
+
+  configureFlags = "--enable-shared --disable-static";
+}
diff --git a/pkgs/development/libraries/indilib/default.nix b/pkgs/development/libraries/indilib/default.nix
new file mode 100644
index 00000000000..651cb630944
--- /dev/null
+++ b/pkgs/development/libraries/indilib/default.nix
@@ -0,0 +1,16 @@
+args: with args;
+stdenv.mkDerivation {
+  name = "indilib-0.5";
+
+  src = fetchurl {
+    url = mirror://sf/indi/indilib-0.5.tar.gz;
+    sha256 = "02km37m3d2l8c9wnab24zm2k6a3l8h2fali74jhm4z3khwr277ad";
+  };
+
+  propagatedBuildInputs = [cfitsio libusb zlib];
+  configureFlags = "--enable-shared --disable-static";
+
+  meta = {
+    homepage = http://indi.sf.net;
+  };
+}
diff --git a/pkgs/development/libraries/iniparser/default.nix b/pkgs/development/libraries/iniparser/default.nix
new file mode 100644
index 00000000000..46fe5b6ef03
--- /dev/null
+++ b/pkgs/development/libraries/iniparser/default.nix
@@ -0,0 +1,34 @@
+args: with args;
+stdenv.mkDerivation rec{
+	name = "iniparser-3.0b";
+
+	src = fetchurl {
+		url = "${meta.homepage}/iniparser3.0b.tar.gz";
+		sha256 = "09klyddnqlpbgkv4cmh6ww9q5pv6nf1vfmzw4z256p51rnnlqqwa";
+	};
+
+	patches = ./no-usr.patch;
+
+	buildFlags = "libiniparser.so";
+
+	installPhase = ''
+	ensureDir $out/lib
+	cp libiniparser.so.0 $out/lib
+	ln -s libiniparser.so.0 $out/lib/libiniparser.so
+
+	ensureDir $out/include
+	cp src/*.h $out/include
+
+	ensureDir $out/share/doc/${name}
+	for i in AUTHORS INSTALL LICENSE README; do
+		bzip2 -c -9 $i > $out/share/doc/${name}/$i.bz2;
+	done;
+	cp -r html $out/share/doc/${name}
+	'';
+
+	meta = {
+		homepage = http://ndevilla.free.fr/iniparser;
+		description = "Free standalone ini file parsing library";
+		license = "MIT";
+	};
+}
diff --git a/pkgs/development/libraries/iniparser/no-usr.patch b/pkgs/development/libraries/iniparser/no-usr.patch
new file mode 100644
index 00000000000..28be099b8ee
--- /dev/null
+++ b/pkgs/development/libraries/iniparser/no-usr.patch
@@ -0,0 +1,14 @@
+diff -urN iniparser3.0b.orig/Makefile iniparser3.0b/Makefile
+--- iniparser3.0b.orig/Makefile	2008-01-16 19:56:08.000000000 +0100
++++ iniparser3.0b/Makefile	2008-01-16 19:56:49.000000000 +0100
+@@ -11,8 +11,8 @@
+ ARFLAGS = rcv
+ 
+ SHLD = ${CC} ${CFLAGS}
+-LDSHFLAGS = -shared -Wl,-Bsymbolic  -Wl,-rpath -Wl,/usr/lib -Wl,-rpath,/usr/lib
+-LDFLAGS = -Wl,-rpath -Wl,/usr/lib -Wl,-rpath,/usr/lib
++LDSHFLAGS = -shared
++LDFLAGS =
+ 
+ # Set RANLIB to ranlib on systems that require it (Sun OS < 4, Mac OSX)
+ # RANLIB  = ranlib
diff --git a/pkgs/development/libraries/jasper/default.nix b/pkgs/development/libraries/jasper/default.nix
new file mode 100644
index 00000000000..192e22add6e
--- /dev/null
+++ b/pkgs/development/libraries/jasper/default.nix
@@ -0,0 +1,18 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "jasper-1.900.1";
+
+	src = fetchurl {
+		url = "http://www.ece.uvic.ca/~mdadams/jasper/software/${name}.zip";
+		sha256 = "154l7zk7yh3v8l2l6zm5s2alvd2fzkp6c9i18iajfbna5af5m43b";
+	};
+
+	buildInputs = [ unzip libjpeg xproto libX11 libICE freeglut mesa libXmu
+		libXi libXext libXt ];
+	configureFlags = "--enable-shared --disable-static --with-x";
+
+	meta = {
+		homepage = http://www.ece.uvic.ca/~mdadams/jasper/;
+		description = "JasPer JPEG2000 Library";
+	};
+}
diff --git a/pkgs/development/libraries/kerberos/heimdal.nix b/pkgs/development/libraries/kerberos/heimdal.nix
new file mode 100644
index 00000000000..12cc50e3505
--- /dev/null
+++ b/pkgs/development/libraries/kerberos/heimdal.nix
@@ -0,0 +1,12 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "heimdal-1.0.2";
+
+	src = fetchurl {
+		url = "http://ftp.pdc.kth.se/pub/heimdal/src/${name}.tar.gz";
+		sha256 = "1h4x41lpv2abpv5l3yjd58pfzs0kkp5sbnih9iykhwd6sii1iig5";
+	};
+
+	configureFlags = "--enable-shared --disable-static --with-openldap=${openldap}";
+	propagatedBuildInputs = [ readline db4 openssl openldap cyrus_sasl ];
+}
diff --git a/pkgs/development/libraries/libaal/default.nix b/pkgs/development/libraries/libaal/default.nix
new file mode 100644
index 00000000000..596b8e2e84c
--- /dev/null
+++ b/pkgs/development/libraries/libaal/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "libaal-1.0.5";
+
+  src = fetchurl {
+    url = http://chichkin_i.zelnet.ru/namesys/libaal-1.0.5.tar.gz;
+    sha256 = "109f464hxwms90mpczc7h7lmrdlcmlglabkzh86h25xrlxxdn6pz";
+  };
+
+  preInstall = ''
+    substituteInPlace Makefile --replace ./run-ldconfig true
+  '';
+
+  meta = {
+    homepage = http://www.namesys.com/;
+    description = "Support library for Reiser4";
+  };
+}
diff --git a/pkgs/development/libraries/libao/default.nix b/pkgs/development/libraries/libao/default.nix
new file mode 100644
index 00000000000..cb42848585b
--- /dev/null
+++ b/pkgs/development/libraries/libao/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl, pkgconfig}:
+
+stdenv.mkDerivation {
+  name = "libao-0.8.8";
+  src = fetchurl {
+    url = http://downloads.xiph.org/releases/ao/libao-0.8.8.tar.gz;
+    sha256 = "e52e05af6b10f42d2ee9845df1a581bf2b352060eabf7946aee0a600c3878954";
+  };
+
+  buildInputs = [pkgconfig];
+
+  meta = {
+    description = ''Libao is Xiph.org's cross-platform audio
+                    library that allows programs to output audio
+		    using a simple API on a wide variety of platforms.'';
+    homepage = http://xiph.org/ao/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/development/libraries/libarchive/2.4.11.nix b/pkgs/development/libraries/libarchive/2.4.11.nix
new file mode 100644
index 00000000000..e75d59ec18a
--- /dev/null
+++ b/pkgs/development/libraries/libarchive/2.4.11.nix
@@ -0,0 +1,2 @@
+args:
+import ./common.nix "1iq5hs4hbqyl6sqiqlaj3j89vpfqx6zv974c965nxjvmwy816dbz" args
diff --git a/pkgs/development/libraries/libarchive/2.4.12.nix b/pkgs/development/libraries/libarchive/2.4.12.nix
new file mode 100644
index 00000000000..9765ec61cd7
--- /dev/null
+++ b/pkgs/development/libraries/libarchive/2.4.12.nix
@@ -0,0 +1,2 @@
+args:
+import ./common.nix "133kxx1wfangrhy6rcpqlqib7i45qxj8pcp3i9n574cwfx41swy4" args
diff --git a/pkgs/development/libraries/libarchive/common.nix b/pkgs/development/libraries/libarchive/common.nix
new file mode 100644
index 00000000000..9f031e4f2c2
--- /dev/null
+++ b/pkgs/development/libraries/libarchive/common.nix
@@ -0,0 +1,18 @@
+sha256: args: with args;
+stdenv.mkDerivation rec {
+	name = "libarchive-" + version;
+
+	src = fetchurl {
+		url = "${meta.homepage}/src/${name}.tar.gz";
+    inherit sha256;
+	};
+
+	propagatedBuildInputs = [zlib bzip2 e2fsprogs];
+  buildInputs = [sharutils];
+  configureFlags = "--enable-shared --disable-static";
+
+	meta = {
+		description = "A library for reading and writing streaming archives";
+    homepage = http://people.freebsd.org/~kientzle/libarchive;
+	};
+}
diff --git a/pkgs/development/libraries/libassuan/default.nix b/pkgs/development/libraries/libassuan/default.nix
new file mode 100644
index 00000000000..ef0df518452
--- /dev/null
+++ b/pkgs/development/libraries/libassuan/default.nix
@@ -0,0 +1,16 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "libassuan-1.0.4";
+
+	src = fetchurl {
+		url = "ftp://ftp.gnupg.org/gcrypt/libassuan/${name}.tar.bz2";
+		sha256 = "1milkb5128nkgvfvfc9yi3qq8d1bvci7b3qmzfibmyh7qga6pwpw";
+	};
+
+	propagatedBuildInputs = [pth];
+
+	meta = {
+		description = "Libassuan  is the IPC library used by some GnuPG related software";
+		homepage = http://www.gnupg.org;
+	};
+}
diff --git a/pkgs/development/libraries/libavc1394/default.nix b/pkgs/development/libraries/libavc1394/default.nix
index 3d1d63780c2..672ca202354 100644
--- a/pkgs/development/libraries/libavc1394/default.nix
+++ b/pkgs/development/libraries/libavc1394/default.nix
@@ -1,13 +1,14 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "libavc1394-0.5.3";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = mirror://sourceforge/libavc1394/libavc1394-0.5.3.tar.gz;
     sha256 = "19i40i3722ilhziknfds3a6w5xzv66fvc68gvbir1p2fvwi6ij93";
   };
 
-  buildInputs =(with args; [pkgconfig libraw1394]);
+  buildInputs = [pkgconfig];
+  propagatedBuildInputs = [libraw1394];
 
   meta = { 
       description = "programming interface for the 1394 Trade Association AV/C (Audio/Video Control) Digital Interface Command Set";
diff --git a/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix b/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix
index be0db328ef9..8c3975c8da2 100644
--- a/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix
+++ b/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 			fetchurl {
 				url = mirror://sourceforge/libdbi-drivers/libdbi-drivers-0.8.2-1.tar.gz;
@@ -27,10 +27,11 @@ args : with args;
 		] else [])
 		;
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "libdbi"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	DB independent interface to DB; DB drivers (mysql only for now).
diff --git a/pkgs/development/libraries/libdbi/0.8.2.nix b/pkgs/development/libraries/libdbi/0.8.2.nix
index e7dc24417f2..e80c0196650 100644
--- a/pkgs/development/libraries/libdbi/0.8.2.nix
+++ b/pkgs/development/libraries/libdbi/0.8.2.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 			fetchurl {
 				url = mirror://sourceforge/libdbi/libdbi-0.8.2.tar.gz;
@@ -9,10 +9,11 @@ args : with args;
 		buildInputs = [];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "libdbi"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	DB independent interface to DB.	
diff --git a/pkgs/development/libraries/libextractor/0.5.18.nix b/pkgs/development/libraries/libextractor/0.5.18.nix
index 3f8304d7304..6fc5e852448 100644
--- a/pkgs/development/libraries/libextractor/0.5.18.nix
+++ b/pkgs/development/libraries/libextractor/0.5.18.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://gnunet.org/libextractor/download/libextractor-0.5.18.tar.gz;
@@ -9,10 +9,11 @@ args : with args;
 		buildInputs = [ zlib];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "libextractor"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	Libextractor - extracts metadata from files.
diff --git a/pkgs/development/libraries/libid3tag/default.nix b/pkgs/development/libraries/libid3tag/default.nix
new file mode 100644
index 00000000000..c29d3d29558
--- /dev/null
+++ b/pkgs/development/libraries/libid3tag/default.nix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl, zlib}:
+
+stdenv.mkDerivation {
+  name = "libid3tag-0.15.1b";
+  src = fetchurl {
+    url = mirror://sourceforge/mad/libid3tag-0.15.1b.tar.gz;
+    sha256 = "63da4f6e7997278f8a3fef4c6a372d342f705051d1eeb6a46a86b03610e26151";
+  };
+
+  buildInputs = [zlib];
+
+  meta = {
+    description = "An ID3 tag manipulation library.";
+    homepage = http://mad.sourceforge.net/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/development/libraries/libiec61883/default.nix b/pkgs/development/libraries/libiec61883/default.nix
index 3f167eb81de..6fe199f5b91 100644
--- a/pkgs/development/libraries/libiec61883/default.nix
+++ b/pkgs/development/libraries/libiec61883/default.nix
@@ -1,17 +1,18 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation rec {
   name = "libiec61883-1.1.0";
 
-  src = args.fetchurl {
-    url = http://www.linux1394.org/dl/libiec61883-1.1.0.tar.gz;
+  src = fetchurl {
+    url = "${meta.homepage}/dl/${name}.tar.gz";
     sha256 = "09f0ca7bp6lqlz6601gnyl04mfabv0azg49n1cmjyqpzh35cgxkq";
   };
 
-  buildInputs =(with args; [pkgconfig libraw1394]);
+  buildInputs = [pkgconfig];
+  propagatedBuildInputs = [libraw1394];
 
   meta = { 
       description = "TODO";
-      homepage = http://www.linux1394.org/;
+      homepage = http://www.linux1394.org;
       license = "LGPL";
     };
 }
diff --git a/pkgs/development/libraries/libjingle/0.3.11.nix b/pkgs/development/libraries/libjingle/0.3.11.nix
new file mode 100644
index 00000000000..b9d0b82df5e
--- /dev/null
+++ b/pkgs/development/libraries/libjingle/0.3.11.nix
@@ -0,0 +1,10 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "libjingle-" + version;
+	src = fetchurl {
+		url = "mirror://sf/tapioca-voip/${name}.tar.gz";
+		sha256 = "1x5l2jwxpkyxvnq0cagq40p6x61v23vxngnnsxr15lyh1zwzk1yj";
+	};
+
+  propagatedBuildInputs = [ mediastreamer ];
+}
diff --git a/pkgs/development/libraries/libjingle/0.4.0.nix b/pkgs/development/libraries/libjingle/0.4.0.nix
new file mode 100644
index 00000000000..93bacd00929
--- /dev/null
+++ b/pkgs/development/libraries/libjingle/0.4.0.nix
@@ -0,0 +1,10 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "libjingle-" + version;
+
+  src = fetchurl {
+    url = "mirror://sf/libjingle/${name}.tar.gz";
+    sha256 = "0izg1i4nmhysvkqmsl2xqp0x6lwz2jjyavvhv196hsdsr2w0iwvi";
+  };
+}
diff --git a/pkgs/development/libraries/libksba/default.nix b/pkgs/development/libraries/libksba/default.nix
new file mode 100644
index 00000000000..573064f2889
--- /dev/null
+++ b/pkgs/development/libraries/libksba/default.nix
@@ -0,0 +1,19 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "libksba-1.0.2";
+
+	src = fetchurl {
+		url = "ftp://ftp.gnupg.org/gcrypt/libksba/${name}.tar.bz2";
+		sha256 = "1jkjh1daaykkrfq0s4vv8ddf0w8agdvspg9qm0ghjidlrfnsfiwh";
+	};
+
+	propagatedBuildInputs = [libgpgerror];
+
+	configureFlags = "--enable-shared --disable-static";
+
+	meta = {
+		homepage = http://www.gnupg.org;
+		description = "Libksba  is a CMS and X.509 access library under
+		development";
+	};
+}
diff --git a/pkgs/development/libraries/libmad/default.nix b/pkgs/development/libraries/libmad/default.nix
index 6db5bf798d9..458945e102d 100644
--- a/pkgs/development/libraries/libmad/default.nix
+++ b/pkgs/development/libraries/libmad/default.nix
@@ -3,7 +3,14 @@
 stdenv.mkDerivation {
   name = "libmad-0.15.1b";
   src = fetchurl {
-    url = ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz;
-    md5 = "1be543bc30c56fb6bea1d7bf6a64e66c";
+    url = mirror://sourceforge/mad/libmad-0.15.1b.tar.gz;
+    sha256 = "bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690";
+  };
+
+  buildInputs = [];
+
+  meta = {
+    description = "MAD, a high-quality, fixed-point, MPEG audio decoder
+                   supporting MPEG-1 and MPEG-2.";
   };
 }
diff --git a/pkgs/development/libraries/libnotify/default.nix b/pkgs/development/libraries/libnotify/default.nix
index 42747db95a1..8b58fe857e9 100644
--- a/pkgs/development/libraries/libnotify/default.nix
+++ b/pkgs/development/libraries/libnotify/default.nix
@@ -1,7 +1,4 @@
-{ stdenv, fetchurl
-, pkgconfig, dbus, dbus_glib
-, gtk, glib
-}:
+args: with args;
  
 stdenv.mkDerivation {
   name = "libnotify-0.4.4";
@@ -13,7 +10,7 @@ stdenv.mkDerivation {
   };
 
   buildInputs = [
-    pkgconfig dbus dbus_glib gtk glib
+    pkgconfig dbus.libs dbus_glib gtk glib
   ];
 
   configureFlags="";
diff --git a/pkgs/development/libraries/libnova/default.nix b/pkgs/development/libraries/libnova/default.nix
new file mode 100644
index 00000000000..805a1f44452
--- /dev/null
+++ b/pkgs/development/libraries/libnova/default.nix
@@ -0,0 +1,15 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "libnova-0.12.1";
+	
+	src = fetchurl {
+		url = "mirror://sf/libnova/${name}.tar.gz";
+		sha256 = "0bs6c45q4qkrns36qndl8vns5gvhgpd90hi68bhah4r4hrg48lw0";
+	};
+	configureFlags = "--enable-shared --disable-static";
+
+	meta = {
+		description = "Celestial Mechanics, Astrometry and Astrodynamics Library";
+		homepage = http://libnova.sf.net;
+	};
+}
diff --git a/pkgs/development/libraries/liboop/default.nix b/pkgs/development/libraries/liboop/default.nix
new file mode 100644
index 00000000000..2009e92a54d
--- /dev/null
+++ b/pkgs/development/libraries/liboop/default.nix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "liboop";
+  src = fetchurl {
+    url = http://download.ofb.net/liboop/liboop.tar.gz;
+    sha256 = "34d83c6e0f09ee15cb2bc3131e219747c3b612bb57cf7d25318ab90da9a2d97c";
+  };
+
+  buildInputs = [];
+
+  meta = {
+    description = "`liboop', an event loop library.";
+    homepage = http://liboop.ofb.net/;
+    license = "LGPL";
+  };
+}
diff --git a/pkgs/development/libraries/libraw1394/default.nix b/pkgs/development/libraries/libraw1394/default.nix
index 62398404ac2..2ca8c543fa9 100644
--- a/pkgs/development/libraries/libraw1394/default.nix
+++ b/pkgs/development/libraries/libraw1394/default.nix
@@ -1,17 +1,15 @@
-args:
-args.stdenv.mkDerivation {
-  name = "libraw1394-1.2.0";
+args: with args;
+stdenv.mkDerivation rec {
+  name = "libraw1394-1.3.0";
 
-  src = args.fetchurl {
-    url = "mirror://sourceforge/libraw1394/libraw1394-1.2.0.tar.gz";
-    sha256 = "1b9zqqzyz0ihyfvhn135y3wc6vmym5yz21jxj9dp0f09b96gmp0z";
+  src = fetchurl {
+    url = "${meta.homepage}/dl/${name}.tar.gz";
+    sha256 = "035mrca9fhg4kq8r1s5yjgzg3vrn1nc3ndy13yg3chhqgx4dzzr0";
   };
 
-  buildInputs =(with args; []);
-
   meta = { 
       description = "library providing direct access to the IEEE 1394 bus through the Linux 1394 subsystem's raw1394 user space interface";
-      homepage = "http://wiki.linux1394.org/";
+      homepage = "http://www.linux1394.org";
       license = ["GPL" "LGPL"];
   };
 }
diff --git a/pkgs/development/libraries/libsigsegv/2.5.nix b/pkgs/development/libraries/libsigsegv/2.5.nix
new file mode 100644
index 00000000000..11f69753dc8
--- /dev/null
+++ b/pkgs/development/libraries/libsigsegv/2.5.nix
@@ -0,0 +1,14 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "libsigsegv-" + version;
+  src = fetchurl {
+    url = "mirror://gnu/libsigsegv/${name}.tar.gz";
+    sha256 = "0fvcsq9msi63vrbpvks6mqkrnls5cfy6bzww063sqhk2h49vsyyg";
+  };
+
+  meta = {
+    homepage = http://libsigsegv.sf.net;
+    description = "A library for handling page faults in user mode";
+  };
+}
diff --git a/pkgs/development/libraries/libsigsegv/default.nix b/pkgs/development/libraries/libsigsegv/default.nix
deleted file mode 100644
index 07d4bdaacc8..00000000000
--- a/pkgs/development/libraries/libsigsegv/default.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-{stdenv, fetchurl}:
-
-stdenv.mkDerivation {
-  name = "libsigsegv-2.1";
-  src = fetchurl {
-    url = mirror://gnu/libsigsegv/libsigsegv-2.1.tar.gz;
-    md5 = "6d75ca3fede5fbfd72a78bc918d9e174";
-  };
-}
diff --git a/pkgs/development/libraries/libunwind/default.nix b/pkgs/development/libraries/libunwind/default.nix
new file mode 100644
index 00000000000..52ed30c0ae9
--- /dev/null
+++ b/pkgs/development/libraries/libunwind/default.nix
@@ -0,0 +1,14 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "libunwind-0.98.6";
+	src = fetchurl {
+		url = "http://download.savannah.nongnu.org/releases/libunwind/${name}.tar.gz";
+		sha256 = "1qfxqkyx4r5dmwajyhvsyyl8zwxs6n2rcg7a61fgfdfp0gxvpzgx";
+	};
+	configureFlags = "--enable-shared --disable-static";
+	meta = {
+		homepage = http://www.nongnu.org/libunwind;
+		description = "The primary goal of this project is to define a portable
+		and efficient API to determine the call-chain of a program";
+	};
+}
diff --git a/pkgs/development/libraries/libwmf/default.nix b/pkgs/development/libraries/libwmf/default.nix
index ea2eecd90d2..6f580613b16 100644
--- a/pkgs/development/libraries/libwmf/default.nix
+++ b/pkgs/development/libraries/libwmf/default.nix
@@ -1,15 +1,14 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "libwmf-0.2.8.4";
 
-  src = args.
-	fetchurl {
+  src = fetchurl {
 		url = mirror://sourceforge/wvware/libwmf-0.2.8.4.tar.gz;
 		sha256 = "1y3wba4q8pl7kr51212jwrsz1x6nslsx1gsjml1x0i8549lmqd2v";
 	};
 
-  buildInputs =(with args; [zlib imagemagick libpng
-	pkgconfig glib freetype libjpeg libxml2]);
+  buildInputs = [zlib imagemagick libpng
+	pkgconfig glib freetype libjpeg libxml2];
 
   meta = {
     description = "
diff --git a/pkgs/development/libraries/libxklavier/3.4.nix b/pkgs/development/libraries/libxklavier/3.4.nix
new file mode 100644
index 00000000000..38fa91cfeb0
--- /dev/null
+++ b/pkgs/development/libraries/libxklavier/3.4.nix
@@ -0,0 +1,21 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "libxklavier-" + version;
+
+  src = fetchurl {
+    url = "mirror://sf/gswitchit/${name}.tar.gz";
+    sha256 = "07pq74ygmnr3vgfp86dbjnqsp3v67fww6d3a1vqbif9wzbk70195";
+  };
+
+# TODO: enable xmodmap support, needs xmodmap DB
+  propagatedBuildInputs = [libX11 xkeyboard_config libxml2 libICE glib libxkbfile];
+  buildInputs = [pkgconfig];
+  configureFlags = "--enable-shared --disable-static
+    --with-xkb-base=${xkeyboard_config}/etc/X11/xkb
+    --disable-xmodmap-support";
+
+  meta = {
+    homepage = http://freedesktop.org/wiki/Software/LibXklavier;
+  };
+}
diff --git a/pkgs/development/libraries/log4cxx/default.nix b/pkgs/development/libraries/log4cxx/default.nix
index 49544796612..63f32c05bc7 100644
--- a/pkgs/development/libraries/log4cxx/default.nix
+++ b/pkgs/development/libraries/log4cxx/default.nix
@@ -6,6 +6,6 @@ stdenv.mkDerivation {
 		url = http://archive.apache.org/dist/logging/log4cxx/log4cxx-0.9.7.tar.gz;
 		sha256 = "1ikyxd8jgf7b2cqjk5lidl7cffs114iiblaczaqbv5bm4vyb4hav";
 	};
-	buildInputs = [ autoconf automake libtool libxml2 cppunit ];
+	buildInputs = [ autoconf automake libtool libxml2 cppunit boost ];
 	patchPhase = "sh autogen.sh; sed -e 's/DOMConfigurator::subst/subst/' -i include/log4cxx/xml/domconfigurator.h";
 }
diff --git a/pkgs/development/libraries/loudmouth/default.nix b/pkgs/development/libraries/loudmouth/default.nix
new file mode 100644
index 00000000000..87d613efd30
--- /dev/null
+++ b/pkgs/development/libraries/loudmouth/default.nix
@@ -0,0 +1,14 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "loudmouth-1.3.3";
+
+	src = fetchurl {
+		url = "http://ftp.imendio.com/pub/imendio/loudmouth/src/${name}.tar.bz2";
+		sha256 = "0f3xpp3pf5bxcp0kcmqa0g28vfl5gg8mj0hxhs2cx75hwgikd26x";
+	};
+
+	propagatedBuildInputs = [gnutls libidn glib];
+	buildInputs = [pkgconfig];
+
+	configureFlags = "--enable-shared --disable-static";
+}
diff --git a/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix b/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix
new file mode 100644
index 00000000000..6391ce4dd6c
--- /dev/null
+++ b/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix
@@ -0,0 +1,22 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "mediastreamer2-" + version;
+
+# This url is not related to mediastreamer. fetchcvs doesn't work on my laptop,
+# so I've created cvs snapshot and put it to my server.
+  src = fetchurl {
+    url = "http://www.loegria.net/misc/" + name + ".tar.bz2";
+    sha256 = "1nmvyqh4x3nsw4qbj754jwagj9ia183kvp8valdr7m44my0sw5p1";
+  };
+
+  buildInputs = [automake libtool autoconf pkgconfig];
+
+  propagatedBuildInputs = [alsaLib ffmpeg speex ortp];
+
+  preConfigure = "./autogen.sh";
+
+  patches = [ ./h264.patch ./plugins.patch ];
+
+  configureFlags = "--enable-external-ortp --enable-shared --disable-static";
+}
diff --git a/pkgs/development/libraries/mediastreamer/h264.patch b/pkgs/development/libraries/mediastreamer/h264.patch
new file mode 100644
index 00000000000..0c6dc9e9109
--- /dev/null
+++ b/pkgs/development/libraries/mediastreamer/h264.patch
@@ -0,0 +1,12 @@
+diff --git a/tests/mediastream.c b/tests/mediastream.c
+index 12e1605..cdc8cd1 100644
+--- a/tests/mediastream.c
++++ b/tests/mediastream.c
+@@ -144,7 +144,6 @@ int main(int argc, char * argv[])
+ 	rtp_profile_set_payload(&av_profile,97,&payload_type_theora);
+ 	rtp_profile_set_payload(&av_profile,99,&payload_type_mp4v);
+ 	rtp_profile_set_payload(&av_profile,100,&payload_type_x_snow);
+-	rtp_profile_set_payload(&av_profile,102,&payload_type_h264);
+ #endif
+ 	if (argc<4) {
+ 		printf(usage);
diff --git a/pkgs/development/libraries/mediastreamer/plugins.patch b/pkgs/development/libraries/mediastreamer/plugins.patch
new file mode 100644
index 00000000000..e82b85035f0
--- /dev/null
+++ b/pkgs/development/libraries/mediastreamer/plugins.patch
@@ -0,0 +1,49 @@
+diff --git a/src/mscommon.c b/src/mscommon.c
+index 1a12b2f..2399444 100644
+--- a/src/mscommon.c
++++ b/src/mscommon.c
+@@ -428,6 +428,7 @@ static MSSndCardDesc * ms_snd_card_descs[]={
+ void ms_init(){
+ 	int i;
+ 	MSSndCardManager *cm;
++	char *ms_plugin_path;
+ 
+ #ifdef __APPLE__
+ 	NSApplicationLoad();
+@@ -451,7 +452,35 @@ void ms_init(){
+ 	}
+ 
+ 	ms_message("Loading plugins");
+-	ms_load_plugins(PACKAGE_PLUGINS_DIR);
++	ms_plugin_path = getenv("MS_PLUGIN_PATH");
++	do
++		{
++			if (!ms_plugin_path)
++				{
++					ms_load_plugins(PACKAGE_PLUGINS_DIR);
++					break;
++				}
++			char *dup_plugins_path = strdup (ms_plugin_path);
++			char *cur_plugins_dir = dup_plugins_path;
++			if (!dup_plugins_path)
++				{
++					ms_message("Failed to duplicate plugins path, not loading plugins");
++					break;
++				}
++			while (1)
++				{
++					char *next_delimiter = strchr(cur_plugins_dir, ":");
++					if (next_delimiter)
++						next_delimiter[0] = '\0';
++					ms_load_plugins(cur_plugins_dir);
++					if (!next_delimiter)
++						break;
++					cur_plugins_dir = next_delimiter + 1;
++				}
++			free(dup_plugins_path);
++		}
++	while (0);
++
+ 	ms_message("ms_init() done");
+ }
+ 
diff --git a/pkgs/development/libraries/msilbc/2.0.0.nix b/pkgs/development/libraries/msilbc/2.0.0.nix
new file mode 100644
index 00000000000..8bc8f2a6c1d
--- /dev/null
+++ b/pkgs/development/libraries/msilbc/2.0.0.nix
@@ -0,0 +1,24 @@
+args: with args;
+stdenv.mkDerivation rec {
+  name = "msilbc-" + version;
+  src = fetchurl {
+    url = "http://download.savannah.gnu.org/releases/linphone/plugins/sources/${name}.tar.gz";
+    sha256 = "0ifydb7qmpync56l4hbrp36n5wrb7gadb76isp643s6wsg7l743j";
+  };
+
+  patchPhase = "sed -i /MS_FILTER_SET_FMTP/d ilbc.c";
+
+  propagatedBuildInputs = [ilbc mediastreamer];
+  buildInputs = [pkgconfig];
+
+  buildPhase = ''
+    cc -fPIC -c -pthread -o ilbc.o ilbc.c `pkg-config --cflags mediastreamer`
+    echo "next"
+    cc `pkg-config --libs mediastreamer` -shared -pthread -o libilbc.so
+  '';
+
+  installPhase = "
+    ensureDir \${out}/lib/mediastreamer/plugins
+    cp libilbc.so \${out}/lib/mediastreamer/plugins
+  ";
+}
diff --git a/pkgs/development/libraries/openexr_ctl/default.nix b/pkgs/development/libraries/openexr_ctl/default.nix
index 634a38990cb..288067a4bf2 100644
--- a/pkgs/development/libraries/openexr_ctl/default.nix
+++ b/pkgs/development/libraries/openexr_ctl/default.nix
@@ -1,17 +1,17 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "openexr_ctl-1.0.1";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://kent.dl.sourceforge.net/sourceforge/ampasctl/openexr_ctl-1.0.1.tar.gz;
     sha256 = "1jg9smpaplal8l14djp184wzk11nwd3dvm4lhkp69kjgw8jdd21d";
   };
 
-  propagatedBuildInputs = (with args; [ilmbase]);
-  buildInputs = ( with args; [openexr ctl]);
-  configureFlags="--with-ilmbase-prefix=${args.ilmbase}";
+  propagatedBuildInputs = [ilmbase];
+  buildInputs = [openexr ctl];
+  configureFlags="--with-ilmbase-prefix=${ilmbase}";
   #configurePhase = "
-    #export CXXFLAGS=\"-I${args.ilmbase}/include -L${args.ilmbase}/lib\"
+    #export CXXFLAGS=\"-I${ilmbase}/include -L${ilmbase}/lib\"
     #echo $CXXFLAGS
     #unset configurePhase; configurePhase
   #";
diff --git a/pkgs/development/libraries/ortp/0.13.1.nix b/pkgs/development/libraries/ortp/0.13.1.nix
new file mode 100644
index 00000000000..ea1cd64b3d2
--- /dev/null
+++ b/pkgs/development/libraries/ortp/0.13.1.nix
@@ -0,0 +1,16 @@
+args: with args;
+stdenv.mkDerivation rec {
+  name = "ortp-" + version;
+
+  src = fetchurl {
+    url = "mirror://savannah/linphone/ortp/sources/${name}.tar.gz";
+    sha256 = "0k2963v4b15xnf4cpkpgjhsb8ckxpf6vdr8dnw7z3mzilji7391b";
+  };
+
+  configureFlags = "--enable-shared --disable-static";
+
+  meta = {
+    description = "a Real-Time Transport Protocol (RFC3550) stack under LGPL";
+    homepage = http://www.linphone.org/index.php/eng/code_review/ortp;
+  };
+}
diff --git a/pkgs/development/libraries/ortp/0.7.1.nix b/pkgs/development/libraries/ortp/0.7.1.nix
new file mode 100644
index 00000000000..7bedf39f8be
--- /dev/null
+++ b/pkgs/development/libraries/ortp/0.7.1.nix
@@ -0,0 +1,16 @@
+args: with args;
+stdenv.mkDerivation rec {
+  name = "ortp-" + version;
+
+  src = fetchurl {
+    url = "mirror://savannah/linphone/ortp/sources/${name}.tar.gz";
+    sha256 = "0gyl0yzfg78sjhbwnwc2g8yn4riwd1wcv183qihgan6z2d5cfbrg";
+  };
+
+  configureFlags = "--enable-shared --disable-static";
+
+  meta = {
+    description = "a Real-Time Transport Protocol (RFC3550) stack under LGPL";
+    homepage = http://www.linphone.org/index.php/eng/code_review/ortp;
+  };
+}
diff --git a/pkgs/development/libraries/proj.4/default.nix b/pkgs/development/libraries/proj.4/default.nix
index 6449a188f2b..ffb3bed5054 100644
--- a/pkgs/development/libraries/proj.4/default.nix
+++ b/pkgs/development/libraries/proj.4/default.nix
@@ -1,14 +1,12 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "proj-4.5.0";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = ftp://ftp.remotesensing.org/proj/proj-4.5.0.tar.gz;
     sha256 = "1d2qz0vgp13hkfgaz7hkblhb9w2fh2blbjqz73xdinwc08cmflqv";
   };
 
-  buildInputs =(with args; []);
-
   meta = { 
       description = "Cartographic Projections Library";
       homepage = http://proj.maptools.org;
diff --git a/pkgs/development/libraries/pth/default.nix b/pkgs/development/libraries/pth/default.nix
new file mode 100644
index 00000000000..631a7622406
--- /dev/null
+++ b/pkgs/development/libraries/pth/default.nix
@@ -0,0 +1,14 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "pth-2.0.7";
+	
+	src = fetchurl {
+		url = "mirror://gnu/pth/${name}.tar.gz";
+		sha256 = "0ckjqw5kz5m30srqi87idj7xhpw6bpki43mj07bazjm2qmh3cdbj";
+	};
+
+	meta = {
+		description = "The GNU Portable Threads";
+		homepage = http://www.gnu.org/software/pth;
+	};
+}
diff --git a/pkgs/development/libraries/qt-4/default.nix b/pkgs/development/libraries/qt-4/default.nix
index 9910d2eed2a..046ebde99a1 100644
--- a/pkgs/development/libraries/qt-4/default.nix
+++ b/pkgs/development/libraries/qt-4/default.nix
@@ -4,7 +4,7 @@ rec {
   setupHook = ./setup-hook.sh;  
   propagatedBuildInputs = [libXft libXrender libXrandr randrproto xextproto
   libXinerama xineramaproto libXcursor zlib libjpeg mysql libpng which mesa
-  libXmu openssl dbus cups pkgconfig libXext freetype fontconfig inputproto
+  libXmu openssl dbus.libs cups pkgconfig libXext freetype fontconfig inputproto
   fixesproto libXfixes glib libtiff];
   prefixKey = "-prefix ";
   configureFlags = "
diff --git a/pkgs/development/libraries/readline/readline5.nix b/pkgs/development/libraries/readline/readline5.nix
index a0e7ffd72d2..96ec1ffea79 100644
--- a/pkgs/development/libraries/readline/readline5.nix
+++ b/pkgs/development/libraries/readline/readline5.nix
@@ -1,11 +1,12 @@
-{ stdenv, fetchurl, ncurses }:
+args: with args;
 
 stdenv.mkDerivation {
   name = "readline-5.2";
   src = fetchurl {
     url = mirror://gnu/readline/readline-5.2.tar.gz;
-    md5 = "e39331f32ad14009b9ff49cc10c5e751";
+    sha256 = "0icz4hqqq8mlkwrpczyaha94kns0am9z0mh3a2913kg2msb8vs0j";
   };
   propagatedBuildInputs = [ncurses];
+  configureFlags = "--enable-shared --disable-static";
   patches = stdenv.lib.optional stdenv.isDarwin ./shobj-darwin.patch;
 }
diff --git a/pkgs/development/libraries/redland/default.nix b/pkgs/development/libraries/redland/default.nix
index 37d899feb70..d344fbc0ac3 100644
--- a/pkgs/development/libraries/redland/default.nix
+++ b/pkgs/development/libraries/redland/default.nix
@@ -4,10 +4,12 @@ stdenv.mkDerivation rec {
   name = "redland-1.0.7";
 
   src = fetchurl {
-    url = "sf://librdf/${name}.tar.gz";
+    url = "mirror://sf/librdf/${name}.tar.gz";
     sha256 = "1z160hhrnlyy5c8vh2hjza6kdfmzml8mg9dk8yffifkhnxjq5r2z";
   };
-  buildInputs = [ bdb openssl libxml2 pkgconfig perl];
-  configureFlags="--without-static --with-threads --with-bdb=${bdb}";
+  buildInputs = [pkgconfig];
+  propagatedBuildInputs = [ bdb openssl libxslt perl mysql postgresql sqlite
+    curl pcre];
+  configureFlags = "--disable-static --with-threads --with-bdb=${bdb}";
   patchPhase="sed -e 1s@/usr@${perl}@ -i utils/touch-mtime.pl";
 }
diff --git a/pkgs/development/libraries/tapioca-qt/default.nix b/pkgs/development/libraries/tapioca-qt/default.nix
new file mode 100644
index 00000000000..962a82a8a1a
--- /dev/null
+++ b/pkgs/development/libraries/tapioca-qt/default.nix
@@ -0,0 +1,16 @@
+args: with args;
+let rev = "2066"; in
+stdenv.mkDerivation {
+	name = "tapioca-qt-r${rev}";
+	src = fetchsvn {
+		url = "https://tapioca-voip.svn.sourceforge.net/svnroot/tapioca-voip/trunk/tapioca-qt";
+		inherit rev;
+		sha256 = "0r2qzlm56yizdi64xga6v2sdhdcgl3cvlsd7g9ynh95813nky88z";
+	};
+
+	buildInputs = [cmake];
+	propagatedBuildInputs = [telepathy_qt stdenv.gcc.libc];
+	meta = {
+		description = "Qt Tapioca binding library";
+	};
+}
diff --git a/pkgs/development/libraries/telepathy-gabble/default.nix b/pkgs/development/libraries/telepathy-gabble/default.nix
new file mode 100644
index 00000000000..44affecefd8
--- /dev/null
+++ b/pkgs/development/libraries/telepathy-gabble/default.nix
@@ -0,0 +1,17 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "telepathy-gabble-0.7.2";
+
+	src = fetchurl {
+		url = "${meta.homepage}/releases/telepathy-gabble/${name}.tar.gz";
+		sha256 = "0r1j475a5s2a4f10hybmavf4kf6nrnjnv091dpic5nl2asdilb7i";
+	};
+
+	propagatedBuildInputs = [telepathy_glib loudmouth];
+	buildInputs = [pkgconfig libxslt];
+	configureFlags = "--enable-shared --disable-static";
+
+	meta = {
+		homepage = http://telepathy.freedesktop.org;
+	};
+}
diff --git a/pkgs/development/libraries/telepathy-glib/default.nix b/pkgs/development/libraries/telepathy-glib/default.nix
new file mode 100644
index 00000000000..fd4f59bdc8a
--- /dev/null
+++ b/pkgs/development/libraries/telepathy-glib/default.nix
@@ -0,0 +1,17 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "telepathy-glib-0.7.0";
+
+	src = fetchurl {
+		url = "${meta.homepage}/releases/telepathy-glib/${name}.tar.gz";
+		sha256 = "0hf1jrgisr7skrji7djh66q0ic351vlsm65xqy982p5d0axzxkz5";
+	};
+
+	propagatedBuildInputs = [dbus_glib glib python];
+	buildInputs = [pkgconfig libxslt];
+	configureFlags = "--enable-shared --disable-static";
+
+	meta = {
+		homepage = http://telepathy.freedesktop.org;
+	};
+}
diff --git a/pkgs/development/libraries/telepathy-qt/default.nix b/pkgs/development/libraries/telepathy-qt/default.nix
new file mode 100644
index 00000000000..6e8e84399d1
--- /dev/null
+++ b/pkgs/development/libraries/telepathy-qt/default.nix
@@ -0,0 +1,16 @@
+args: with args;
+let rev = "2031"; in
+stdenv.mkDerivation {
+	name = "telepathy-qt-r${rev}";
+	src = fetchsvn {
+		url = "https://tapioca-voip.svn.sourceforge.net/svnroot/tapioca-voip/trunk/telepathy-qt";
+		inherit rev;
+		sha256 = "0d7psgc8nr5bryrjgfg92622hbilp0qwx0pya3836bz2l6x3msnb";
+	};
+
+	buildInputs = [cmake];
+	propagatedBuildInputs = [qt stdenv.gcc.libc];
+	meta = {
+		description = "Qt bindings for telepathy";
+	};
+}
diff --git a/pkgs/development/libraries/tk/8.4.16.nix b/pkgs/development/libraries/tk/8.4.16.nix
new file mode 100644
index 00000000000..1f26db83f1b
--- /dev/null
+++ b/pkgs/development/libraries/tk/8.4.16.nix
@@ -0,0 +1,18 @@
+args: with args;
+
+stdenv.mkDerivation {
+  name = "tk-${version}";
+  src = fetchurl {
+    url = "mirror://sourceforge/tcl/tk${version}-src.tar.gz";
+    sha256 = "0cciavzd05bpm5yfppid0s0vsf8kabwia9620vgvi26sv1gjgwhb";
+  };
+  postInstall = ''
+    echo -e '#! /bin/sh \n $( readlink -f $( type -tP wish${__substring 0 3 version}) ) "$@"' >$out/bin/wish
+    chmod a+x $out/bin/wish
+  ''; 
+  configureFlags="--with-tcl=${tcl}/lib";
+  preConfigure = "cd unix";
+
+  buildInputs = [tcl x11];
+  inherit tcl;
+}
diff --git a/pkgs/development/libraries/tk/builder.sh b/pkgs/development/libraries/tk/builder.sh
deleted file mode 100644
index 999488a3531..00000000000
--- a/pkgs/development/libraries/tk/builder.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-source $stdenv/setup
-
-configureFlags="--with-tcl=$tcl/lib"
-preConfigure() {
-  cd unix
-}
-
-preConfigure=preConfigure
-
-genericBuild
diff --git a/pkgs/development/libraries/tk/default.nix b/pkgs/development/libraries/tk/default.nix
deleted file mode 100644
index 9e0a6b8c0da..00000000000
--- a/pkgs/development/libraries/tk/default.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{stdenv, fetchurl, tcl, x11}:
-
-stdenv.mkDerivation {
-  name = "tk-8.4.16";
-  builder = ./builder.sh;
-  src = fetchurl {
-    url = mirror://sourceforge/tcl/tk8.4.16-src.tar.gz;
-    sha256 = "0cciavzd05bpm5yfppid0s0vsf8kabwia9620vgvi26sv1gjgwhb";
-  };
-  buildInputs = [tcl x11];
-  inherit tcl;
-}
diff --git a/pkgs/development/libraries/xine-lib/default.nix b/pkgs/development/libraries/xine-lib/default.nix
index 0af3732cbae..ba6880d525a 100644
--- a/pkgs/development/libraries/xine-lib/default.nix
+++ b/pkgs/development/libraries/xine-lib/default.nix
@@ -1,31 +1,14 @@
-{ xvideoSupport ? true
-, xineramaSupport ? true
-, encryptedDVDSupport ? true
-, alsaSupport ? true
-, stdenv, fetchurl, zlib, x11, pkgconfig
-, libXv ? null, libXinerama ? null, libdvdcss ? null, alsaLib ? null
-}:
+args: with args;
 
-assert xvideoSupport -> libXv != null;
-assert xineramaSupport -> libXinerama != null;
-assert encryptedDVDSupport -> libdvdcss != null;
-assert alsaSupport -> alsaLib != null;
-
-(stdenv.mkDerivation {
-  name = "xine-lib-1.1.8";
-  builder = ./builder.sh;
+(stdenv.mkDerivation rec {
+  name = "xine-lib-1.1.9.1";
   src = fetchurl {
-    url = mirror://sourceforge/xine/xine-lib-1.1.8.tar.bz2;
-    sha256 = "03iwhgsf9kj0x5b4fgv7lzc1vj3frk4afh2idgrqskvixjyi37vc";
+    url = "mirror://sourceforge/xine/${name}.tar.bz2";
+    sha256 = "1rz4k2a9pny2ksqb5diw1ci8ijihpcm0mi8qxp5p7nasgzgqcj82";
   };
-  buildInputs = [
-    x11 pkgconfig
-    (if xvideoSupport then libXv else null)
-    (if xineramaSupport then libXinerama else null)
-    (if alsaSupport then alsaLib else null)
-  ];
-  libXv = if xvideoSupport then libXv else null;
-  libdvdcss = if encryptedDVDSupport then libdvdcss else null;
+  buildInputs = [ x11 pkgconfig libXv libXinerama alsaLib mesa aalib SDL
+  libvorbis libtheora speex ];
+  configureFlags = "--with-xv-path=${libXv}/lib";
+  NIX_LDFLAGS = "-rpath ${libdvdcss}/lib -L${libdvdcss}/lib -ldvdcss";
   propagatedBuildInputs = [zlib];
-  patches = [ ./xine-lib-linux-headers-2.6.23.patch ];
-}) // {inherit xineramaSupport libXinerama;}
+}) // { xineramaSupport = true; inherit libXinerama; }
diff --git a/pkgs/development/perl-modules/DB_File/default.nix b/pkgs/development/perl-modules/DB_File/default.nix
new file mode 100644
index 00000000000..6931d5d424c
--- /dev/null
+++ b/pkgs/development/perl-modules/DB_File/default.nix
@@ -0,0 +1,11 @@
+{fetchurl, perl, db4}:
+
+import ../generic perl {
+  name = "DB_File-1.816";
+  src = fetchurl {
+    url = http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/DB_File-1.816.tar.gz;
+    sha256 = "1a668hk5v0l180kbqss2hq9khl756cmrykn8fz1rl4qzsp6lq284";
+  };
+  perlPreHook = "source ${./hook.sh}";
+  inherit db4;
+}
diff --git a/pkgs/development/perl-modules/DB_File/hook.sh b/pkgs/development/perl-modules/DB_File/hook.sh
new file mode 100644
index 00000000000..033de2fd5db
--- /dev/null
+++ b/pkgs/development/perl-modules/DB_File/hook.sh
@@ -0,0 +1,11 @@
+oldPreConfigure=$preConfigure
+preConfigure=myPreConfigure
+myPreConfigure() {
+    cat > config.in <<EOF
+PREFIX = size_t
+HASH = u_int32_t
+LIB = $db4/lib
+INCLUDE = $db4/include
+EOF
+    $oldPreConfigure
+}
diff --git a/pkgs/development/python-modules/ZopeInterface/default.nix b/pkgs/development/python-modules/ZopeInterface/default.nix
index 0fe40954115..6bcedcd0f17 100644
--- a/pkgs/development/python-modules/ZopeInterface/default.nix
+++ b/pkgs/development/python-modules/ZopeInterface/default.nix
@@ -1,10 +1,10 @@
 {stdenv, fetchurl, python}:
 
 stdenv.mkDerivation {
-  name = "ZopeInterface-3.1.0c1";
+  name = "ZopeInterface-3.3.0";
   src = fetchurl {
-    url = http://www.zope.org/Products/ZopeInterface/3.1.0c1/ZopeInterface-3.1.0c1.tgz;
-    md5 = "f34cb95f2fbdbe3f1850c95cefddbd2c";
+    url = http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz;
+    sha256 = "0xahg9cmagn4j3dbifvgzbjliw2jdrbf27fhqwkdp8j80xpyyjf0";
   };
   buildInputs = [python];
   buildPhase = "true";
diff --git a/pkgs/development/python-modules/pil/default.nix b/pkgs/development/python-modules/pil/default.nix
index 863366f1a42..d5ed9aae12a 100644
--- a/pkgs/development/python-modules/pil/default.nix
+++ b/pkgs/development/python-modules/pil/default.nix
@@ -1,20 +1,20 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "python-imaging-1.1.6";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://effbot.org/downloads/Imaging-1.1.6.tar.gz;
     sha256 = "141zidl3s9v4vfi3nsbg42iq1lc2a932gprqr1kij5hrnn53bmvx";
   };
 
-  buildInputs =(with args; [python zlib libtiff libjpeg freetype]);
+  buildInputs = [python zlib libtiff libjpeg freetype];
  
-  configurePhase = (with args;"
+  configurePhase = "
 		sed -e 's@FREETYPE_ROOT = None@FREETYPE_ROOT = libinclude(\"${freetype}\")@' -i setup.py
 		sed -e 's@JPEG_ROOT = None@JPEG_ROOT = libinclude(\"${libjpeg}\")@' -i setup.py
 		sed -e 's@TIFF_ROOT = None@TIFF_ROOT = libinclude(\"${libtiff}\")@' -i setup.py
 		sed -e 's@ZLIB_ROOT = None@ZLIB_ROOT = libinclude(\"${zlib}\")@' -i setup.py
-	");
+	";
 
   buildPhase = "true";
 	
diff --git a/pkgs/development/python-modules/pygame/default.nix b/pkgs/development/python-modules/pygame/default.nix
index 0ed717479d8..cad9b17ebad 100644
--- a/pkgs/development/python-modules/pygame/default.nix
+++ b/pkgs/development/python-modules/pygame/default.nix
@@ -1,22 +1,22 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "pygame-1.7";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://www.pygame.org/ftp/pygame-1.7.1release.tar.gz ;
     sha256 = "0hl0rmgjcqj217fibwyilz7w9jpg0kh7hsa7vyzd4cgqyliskpqi";
   };
 
-  buildInputs =(with args; [python pkgconfig SDL SDL_image SDL_ttf]);
+  buildInputs = [python pkgconfig SDL SDL_image SDL_ttf];
  
-  configurePhase = (with args;
+  configurePhase =
 	 "
 	export LOCALBASE=///
 	sed -e \"/origincdirs =/a'${SDL_image}/include/SDL','${SDL_image}/include',\" -i config_unix.py
 	sed -e \"/origlibdirs =/aoriglibdirs += '${SDL_image}/lib',\" -i config_unix.py
 	sed -e \"/origincdirs =/a'${SDL_ttf}/include/SDL','${SDL_ttf}/include',\" -i config_unix.py
 	sed -e \"/origlibdirs =/aoriglibdirs += '${SDL_ttf}/lib',\" -i config_unix.py
-	yes Y | python config.py ");
+	yes Y | python config.py ";
 
   buildPhase = "yes Y | python setup.py build";	
 
diff --git a/pkgs/development/python-modules/twisted/default.nix b/pkgs/development/python-modules/twisted/default.nix
index 37a42faf856..7fdf610d74c 100644
--- a/pkgs/development/python-modules/twisted/default.nix
+++ b/pkgs/development/python-modules/twisted/default.nix
@@ -1,10 +1,10 @@
 {stdenv, fetchurl, python, ZopeInterface}:
 
 stdenv.mkDerivation {
-  name = "twisted-2.4.0";
+  name = "twisted-2.5.0";
   src = fetchurl {
-    url = http://tmrc.mit.edu/mirror/twisted/Twisted/2.4/Twisted-2.4.0.tar.bz2;
-    md5 = "42eb0c8fd0f8707a39fff1dd6adab27d";
+    url = http://tmrc.mit.edu/mirror/twisted/Twisted/2.5/Twisted-2.5.0.tar.bz2;
+    sha256 = "1kfj4354lm4kphm317giyldykyd17lba2xd7y512lxc38hzxzcpk";
   };
   buildInputs = [python];
   propagatedBuildInputs = [ZopeInterface];
diff --git a/pkgs/development/tools/build-managers/cmake/setup-hook.sh b/pkgs/development/tools/build-managers/cmake/setup-hook.sh
index 4712ef2b648..2ec77d8223e 100755
--- a/pkgs/development/tools/build-managers/cmake/setup-hook.sh
+++ b/pkgs/development/tools/build-managers/cmake/setup-hook.sh
@@ -1,49 +1,49 @@
 addCMakeParamsInclude()
 {
-	addToSearchPath CMAKE_INCLUDE_PATH /include "" $1
+    addToSearchPath CMAKE_INCLUDE_PATH /include "" $1
 }
 
 addCMakeParamsLibs()
 {
-	addToSearchPath CMAKE_LIBRARY_PATH /lib "" $1
+    addToSearchPath CMAKE_LIBRARY_PATH /lib "" $1
 }
 
 addCMakeModulePath()
 {
-	addToSearchPath CMAKE_MODULE_PATH /share/cmake-2.4/Modules "" $1
+    addToSearchPath CMAKE_MODULE_PATH /share/cmake-2.4/Modules "" $1
 }
 
 fixCmakeFiles()
 {
-	local replaceArgs;
-	echo "Fixing cmake files"
-	replaceArgs="-e -f -L -T /usr /FOO"
-   	replaceArgs="${replaceArgs}	-a NO_DEFAULT_PATH \"\" -a NO_SYSTEM_PATH \"\""
-	find $1 -type f -name "*.cmake" | xargs replace-literal ${replaceArgs}
+    local replaceArgs;
+    echo "Fixing cmake files"
+    replaceArgs="-e -f -L -T /usr /FOO"
+    replaceArgs="${replaceArgs}     -a NO_DEFAULT_PATH \"\" -a NO_SYSTEM_PATH \"\""
+    find $1 -type f -name "*.cmake" | xargs replace-literal ${replaceArgs}
 }
 
 cmakePostUnpack()
 {
-	sourceRoot=$sourceRoot/build
-	mkdir -v $sourceRoot
-	echo source root reset to $sourceRoot
-
-	if [ -z "$dontFixCmake" ]; then
-		fixCmakeFiles .
-	fi
-
-	if [ -z "$configureScript" ]; then
-		configureScript="cmake .."
-	fi
-	if [ -z "$dontAddPrefix" ]; then
-		dontAddPrefix=1
-		configureFlags="-DCMAKE_INSTALL_PREFIX=$out $configureFlags"
-	fi
+    sourceRoot=$sourceRoot/build
+    mkdir -v $sourceRoot
+    echo source root reset to $sourceRoot
+
+    if [ -z "$dontFixCmake" ]; then
+        fixCmakeFiles .
+    fi
+
+    if [ -z "$configureScript" ]; then
+        configureScript="cmake .."
+    fi
+    if [ -z "$dontAddPrefix" ]; then
+        dontAddPrefix=1
+        configureFlags="-DCMAKE_INSTALL_PREFIX=$out $configureFlags"
+    fi
 }
 
 
 if [ -z "$noCmakeTewaks" ]; then
-	postUnpack="cmakePostUnpack${postUnpack:+; }${postUnpack}"
+    postUnpack="cmakePostUnpack${postUnpack:+; }${postUnpack}"
 fi;
 
 envHooks=(${envHooks[@]} addCMakeParamsInclude addCMakeParamsLibs addCMakeModulePath)
diff --git a/pkgs/development/tools/build-managers/gnumake/log.patch b/pkgs/development/tools/build-managers/gnumake/log.patch
index 99111ca3495..3104e1f2bde 100644
--- a/pkgs/development/tools/build-managers/gnumake/log.patch
+++ b/pkgs/development/tools/build-managers/gnumake/log.patch
@@ -1,6 +1,6 @@
-diff -rc make-orig/job.c make-3.81/job.c
-*** make-orig/job.c	2006-03-20 04:03:04.000000000 +0100
---- make-3.81/job.c	2006-06-21 17:31:52.000000000 +0200
+diff -rc make-3.81-orig/job.c make-3.81/job.c
+*** make-3.81-orig/job.c	2006-03-20 04:03:04.000000000 +0100
+--- make-3.81/job.c	2008-02-20 17:41:25.000000000 +0100
 ***************
 *** 1083,1089 ****
        appear.  */
@@ -18,9 +18,9 @@ diff -rc make-orig/job.c make-3.81/job.c
   
     /* Tell update_goal_chain that a command has been started on behalf of
        this target.  It is important that this happens here and not in
-diff -rc make-orig/main.c make-3.81/main.c
-*** make-orig/main.c	2006-03-20 03:36:37.000000000 +0100
---- make-3.81/main.c	2006-06-21 17:48:43.000000000 +0200
+diff -rc make-3.81-orig/main.c make-3.81/main.c
+*** make-3.81-orig/main.c	2006-03-20 03:36:37.000000000 +0100
+--- make-3.81/main.c	2008-02-20 17:41:25.000000000 +0100
 ***************
 *** 886,891 ****
 --- 886,900 ----
@@ -83,9 +83,9 @@ diff -rc make-orig/main.c make-3.81/main.c
 + 
 + int logNestingStdout = 0;
 + int logNestingStderr = 0;
-diff -rc make-orig/make.h make-3.81/make.h
-*** make-orig/make.h	2006-02-16 00:54:43.000000000 +0100
---- make-3.81/make.h	2006-06-21 17:39:35.000000000 +0200
+diff -rc make-3.81-orig/make.h make-3.81/make.h
+*** make-3.81-orig/make.h	2006-02-16 00:54:43.000000000 +0100
+--- make-3.81/make.h	2008-02-20 17:41:25.000000000 +0100
 ***************
 *** 609,611 ****
 --- 609,613 ----
@@ -94,15 +94,16 @@ diff -rc make-orig/make.h make-3.81/make.h
   
 + extern int logNestingStdout;
 + extern int logNestingStderr;
-diff -rc make-orig/remake.c make-3.81/remake.c
-*** make-orig/remake.c	2006-03-20 03:36:37.000000000 +0100
---- make-3.81/remake.c	2006-06-21 17:31:52.000000000 +0200
+diff -rc make-3.81-orig/remake.c make-3.81/remake.c
+*** make-3.81-orig/remake.c	2006-03-20 03:36:37.000000000 +0100
+--- make-3.81/remake.c	2008-02-20 17:44:01.000000000 +0100
 ***************
 *** 1120,1126 ****
---- 1120,1130 ----
+--- 1120,1131 ----
         /* The normal case: start some commands.  */
         if (!touch_flag || file->cmds->any_recurse)
   	{
++           log_working_directory (1);
 +           fprintf(stderr, "\e[pbuilding %s\n", file->name);
 +           logNestingStderr++;
   	  execute_file_commands (file);
diff --git a/pkgs/development/tools/documentation/haddock/default.nix b/pkgs/development/tools/documentation/haddock/default.nix
new file mode 100644
index 00000000000..86d07b240a5
--- /dev/null
+++ b/pkgs/development/tools/documentation/haddock/default.nix
@@ -0,0 +1,11 @@
+{cabal}:
+
+cabal.mkDerivation (self : {
+  pname = "haddock";
+  version = "2.0.0.0";
+  name = self.fname;
+  sha256 = "a2ea5bdc127bc8b189a8d869f582ec774fea0933e7f5ca89549a6c142b9993df";
+  meta = {
+    description = "a tool for automatically generating documentation from annotated Haskell source code";
+  };
+})
diff --git a/pkgs/development/tools/guile/guile-lint/default.nix b/pkgs/development/tools/guile/guile-lint/default.nix
new file mode 100644
index 00000000000..f9032dd4884
--- /dev/null
+++ b/pkgs/development/tools/guile/guile-lint/default.nix
@@ -0,0 +1,26 @@
+{stdenv, fetchurl, guile}:
+
+stdenv.mkDerivation rec {
+  name = "guile-lint-14";
+  src = fetchurl {
+    url = "http://www.geocities.com/user42_kevin/guile-lint/"
+            + name + ".tar.bz2.bin";
+    sha256 = "5bfcf7a623338b2ef81ac097e3e136eaf32856dd0730b7eeaff3161067b5d0be";
+  };
+
+  buildInputs = [ guile ];
+
+  unpackPhase = ''tar xjvf "$src" && sourceRoot="$PWD/${name}"'';
+  patchPhase = ''
+    cat guile-lint.in |						\
+    sed 's|^exec guile|exec $\{GUILE:-${guile}/bin/guile}|g' > ,,tmp &&	\
+    mv ,,tmp guile-lint.in
+  '';
+
+  meta = {
+    description = ''Guile-Lint checks syntax and semantics in a
+                    Guile program or module.'';
+    homepage = http://www.geocities.com/user42_kevin/guile-lint/index.html;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/development/tools/haskell/uuagc/default.nix b/pkgs/development/tools/haskell/uuagc/default.nix
index 519244ae7b8..b45db5f2ea6 100644
--- a/pkgs/development/tools/haskell/uuagc/default.nix
+++ b/pkgs/development/tools/haskell/uuagc/default.nix
@@ -1,14 +1,12 @@
-{stdenv, fetchurl, ghc, uulib}:
-
-stdenv.mkDerivation
-{
-  name = "uuagc-0.9.2";
-
-  src = fetchurl { url = http://www.cs.uu.nl/~ariem/uuagc-0.9.2-src.tar.gz;
-                   md5 = "cbac92287c9c0a858ccbfa37615d9f5f";
-                 };
-
-  buildInputs = [ghc uulib];
-
-  meta = { description = "The UUAG Compiler"; };
-}
+{cabal, uulib}:
+
+cabal.mkDerivation (self : {
+  pname = "uuagc";
+  version = "0.9.5";
+  name = self.fname;
+  sha256 = "c5be435efa609f72c09e175dd5cf7835a060bd7eaf6634ec4cde72ea84b99f25";
+  extraBuildInputs = [uulib];
+  meta = {
+    description = "Attribute Grammar System of Universiteit Utrecht";
+  };
+})
diff --git a/pkgs/development/tools/misc/automake/setup-hook.sh b/pkgs/development/tools/misc/automake/setup-hook.sh
index 4489d343510..2b12ae3aee0 100644
--- a/pkgs/development/tools/misc/automake/setup-hook.sh
+++ b/pkgs/development/tools/misc/automake/setup-hook.sh
@@ -1,5 +1,5 @@
 addAclocals () {
-	addToSearchPathWithCustomDelimiter : ACLOCAL_PATH /share/aclocal "" $1
+    addToSearchPathWithCustomDelimiter : ACLOCAL_PATH /share/aclocal "" $1
 }
 
 envHooks=(${envHooks[@]} addAclocals)
diff --git a/pkgs/development/tools/misc/avrdude/default.nix b/pkgs/development/tools/misc/avrdude/default.nix
index e573d0751f2..f87d305dfb2 100644
--- a/pkgs/development/tools/misc/avrdude/default.nix
+++ b/pkgs/development/tools/misc/avrdude/default.nix
@@ -12,7 +12,7 @@ let
     #defaultFlags = ["doc"];
   };
 
-in args.stdenv.mkDerivation {
+in stdenv.mkDerivation {
 
   # passing the flags in case a library using this want's to check them (*) .. 
   inherit (co) /* flags */ buildInputs configureFlags;
diff --git a/pkgs/development/tools/misc/ccache/default.nix b/pkgs/development/tools/misc/ccache/default.nix
new file mode 100644
index 00000000000..8342dfcc728
--- /dev/null
+++ b/pkgs/development/tools/misc/ccache/default.nix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "ccache-2.4";
+  src = fetchurl {
+    url = http://samba.org/ftp/ccache/ccache-2.4.tar.gz;
+    sha256 = "435f862ca5168c346f5aa9e242174bbf19a5abcaeecfceeac2f194558827aaa0";
+  };
+
+  meta = {
+    description = "ccache, a tool that caches compilation results.";
+    homepage = http://ccache.samba.org/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/development/tools/misc/elfutils/0.127.nix b/pkgs/development/tools/misc/elfutils/0.127.nix
index 2337ebbdbd0..efa91fa637c 100644
--- a/pkgs/development/tools/misc/elfutils/0.127.nix
+++ b/pkgs/development/tools/misc/elfutils/0.127.nix
@@ -6,4 +6,5 @@ stdenv.mkDerivation {
     url = http://nix.cs.uu.nl/dist/tarballs/elfutils-0.127.tar.gz;
     sha256 = "12n3h5r3c24a6l2wxz0w2dqq072bvgms0dzckivrwp5vdn22lpdv";
   };
+  preBuild = "sed -e 's/-Werror//' -i */Makefile ";
 }
diff --git a/pkgs/development/tools/misc/hasktags/default.nix b/pkgs/development/tools/misc/hasktags/default.nix
new file mode 100644
index 00000000000..613d028948f
--- /dev/null
+++ b/pkgs/development/tools/misc/hasktags/default.nix
@@ -0,0 +1,24 @@
+args:
+args.stdenv.mkDerivation {
+  name = "hasktags-modified";
+
+  src = args.fetchurl {
+    url = http://mawercer.de/hasktags.hs;
+    sha256 = "112k97g6mgvwa0a9zrq840mqxxw55cn422h1c134xb0fl29llig7";
+  };
+
+  buildInputs =(with args; [ghc]);
+
+  phases = "buildPhase";
+
+  # calling it hasktags-modified to not clash with the one distributed with ghc
+  buildPhase = "
+    ensureDir \$out/bin
+    ghc --make \$src -o \$out/bin/hasktags-modified
+  ";
+
+  meta = { 
+      # this can be removed again when somone comitts my changes into the distribution
+      description = "Marc's modified hasktags";
+  };
+}
diff --git a/pkgs/development/tools/misc/indent/2.2.9.nix b/pkgs/development/tools/misc/indent/2.2.9.nix
index d7e91abcf83..5e92802beed 100644
--- a/pkgs/development/tools/misc/indent/2.2.9.nix
+++ b/pkgs/development/tools/misc/indent/2.2.9.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = ftp://ftp.gnu.org/gnu/indent/indent-2.2.9.tar.gz;
@@ -9,6 +9,7 @@ args : with args;
 		buildInputs = [];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 	preBuild = FullDepEntry ("
 		sed -e '/extern FILE [*]output/i#ifndef OUTPUT_DEFINED_ELSEWHERE' -i src/indent.h
@@ -19,7 +20,7 @@ in
 stdenv.mkDerivation rec {
 	name = "indent";
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure preBuild doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure preBuild doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	GNU Indent - a source text formatter.
diff --git a/pkgs/development/tools/misc/intltool/0.36.2.nix b/pkgs/development/tools/misc/intltool/0.36.2.nix
index d8315a9ba62..884c76a800c 100644
--- a/pkgs/development/tools/misc/intltool/0.36.2.nix
+++ b/pkgs/development/tools/misc/intltool/0.36.2.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = http://ftp.gnome.org/pub/gnome/sources/intltool/0.36/intltool-0.36.2.tar.bz2;
@@ -9,10 +9,11 @@ args : with args;
 		propagatedBuildInputs = [perl perlXMLParser];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "intltool-0.36.2";
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doPropagate doForceShare]);
+		(textClosure localDefs [doConfigure doMakeInstall doPropagate doForceShare]);
 	inherit propagatedBuildInputs;
 	meta = {
 		description = "
diff --git a/pkgs/development/tools/misc/libtool/default.nix b/pkgs/development/tools/misc/libtool/default.nix
index 226552b3943..b955ccbc3c8 100644
--- a/pkgs/development/tools/misc/libtool/default.nix
+++ b/pkgs/development/tools/misc/libtool/default.nix
@@ -1,10 +1,10 @@
 {stdenv, fetchurl, m4, perl}:
 
-stdenv.mkDerivation {
-  name = "libtool-1.5.22";
+stdenv.mkDerivation rec {
+  name = "libtool-1.5.26";
   src = fetchurl {
-    url = http://ftp.gnu.org/gnu/libtool/libtool-1.5.22.tar.gz;
-    md5 = "8e0ac9797b62ba4dcc8a2fb7936412b0";
+    url = "mirror://gnu/libtool/" + name + ".tar.gz";
+    sha256 = "029ggq5kri1gjn6nfqmgw4w920gyfzscjjxbsxxidal5zqsawd8w";
   };
   buildInputs = [m4 perl];
 }
diff --git a/pkgs/development/tools/misc/ltrace/default.nix b/pkgs/development/tools/misc/ltrace/0.5-3deb.nix
index 23b44bf3b5b..bff3e6a8fbc 100644
--- a/pkgs/development/tools/misc/ltrace/default.nix
+++ b/pkgs/development/tools/misc/ltrace/0.5-3deb.nix
@@ -1,5 +1,10 @@
-args : with args;
-	with builderDefs {
+args : with args;	let 
+        patch = fetchurl {
+          url = ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.5-3.diff.gz;
+          sha256 = "0rin25si7117wld5bc7vf3d73c5k9ph3zach7cbg9h9vvz376c26";
+        };
+	localDefs = with (builderDefs {src="";} null);
+	 builderDefs {
 		src = /* put a fetchurl here */
 	fetchurl {
 		url = ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.5.orig.tar.gz;
@@ -11,7 +16,12 @@ args : with args;
 		goSrcDir = "
 			cd ltrace-*;
 		";
+		preBuild = FullDepEntry (''
+		  gunzip < ${patch} | patch -Np1
+		  sed -e s@-Werror@@ -i Makefile.in
+		'')["minInit" "doUnpack"];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let
 	preConfigure = FullDepEntry ("
 		sed -e 's@-o root -g root@@' -i Makefile.in;
@@ -20,7 +30,7 @@ in
 stdenv.mkDerivation rec {
 	name = "ltrace-0.5";
 	builder = writeScript (name + "-builder")
-		(textClosure [preConfigure doConfigure doMakeInstall doForceShare]);
+		(textClosure localDefs [preBuild preConfigure doConfigure doMakeInstall doForceShare]);
 	meta = {
 		description = "
 	Library call tracer.
diff --git a/pkgs/development/tools/misc/pkgconfig/setup-hook.sh b/pkgs/development/tools/misc/pkgconfig/setup-hook.sh
index f13a44eb999..c137fb0e96c 100644
--- a/pkgs/development/tools/misc/pkgconfig/setup-hook.sh
+++ b/pkgs/development/tools/misc/pkgconfig/setup-hook.sh
@@ -1,5 +1,5 @@
 addPkgConfigPath () {
-	addToSearchPath PKG_CONFIG_PATH /lib/pkgconfig "" $1
+    addToSearchPath PKG_CONFIG_PATH /lib/pkgconfig "" $1
 }
 
 envHooks=(${envHooks[@]} addPkgConfigPath)
diff --git a/pkgs/development/tools/misc/uisp/default.nix b/pkgs/development/tools/misc/uisp/default.nix
index c6810939dd4..694dc940d92 100644
--- a/pkgs/development/tools/misc/uisp/default.nix
+++ b/pkgs/development/tools/misc/uisp/default.nix
@@ -1,16 +1,14 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "uisp-20050207";
 
   configureFlags="--disable-dependency-tracking";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://mirror.switch.ch/mirror/gentoo/distfiles/uisp-20050207.tar.gz;
     sha256 = "1bncxp5yxh9r1yrp04vvhfiva8livi1pwic7v8xj99q09zrwahvw";
   };
 
-  #buildInputs =(with args; []);
-
   meta = {
     description = "tool for AVR microcontrollers which can interface to many hardware in-system programmers";
     license = "GPL-2";
diff --git a/pkgs/development/tools/parsing/alex/default.nix b/pkgs/development/tools/parsing/alex/default.nix
index 00d414d56bd..273a25753e8 100644
--- a/pkgs/development/tools/parsing/alex/default.nix
+++ b/pkgs/development/tools/parsing/alex/default.nix
@@ -1,23 +1,12 @@
-{stdenv, fetchurl, ghc, perl}:
-
-stdenv.mkDerivation {
-  name = "alex-2.1.0";
-  src = fetchurl {
-    url = http://www.haskell.org/alex/dist/2.1.0/alex-2.1.0.tar.gz;
-    sha1 = "37599b7be5249d639b3a5a3fdc61907dc4dad660";
+{cabal, perl}:
+
+cabal.mkDerivation (self : {
+  pname = "alex";
+  version = "2.2";
+  name = self.fname;
+  sha256 = "e958d4fc6cfdb1d351dc39a45ea882f23b1b1773a736d43814a52d4939a41ffe";
+  extraBuildInputs = [perl];
+  meta = {
+    description = "A lexical analyser generator for Haskell";
   };
-  buildInputs = [ghc perl];
-
-  configurePhase = "
-    ghc --make Setup.lhs
-    ./Setup configure --prefix=\"\${out}\"
-  ";
-
-  buildPhase = "
-    ./Setup build
-  ";
-
-  installPhase = "
-    ./Setup install
-  ";
-}
+})
diff --git a/pkgs/development/tools/parsing/flex-iputils/builder.sh b/pkgs/development/tools/parsing/flex-iputils/builder.sh
deleted file mode 100644
index 946301946ba..00000000000
--- a/pkgs/development/tools/parsing/flex-iputils/builder.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-source $stdenv/setup
-
-installPhase() {
-   make install
-   cd $out/bin; ln -s flex lex
-   cd $out/lib; ln -s libfl.a libl.a
-}
-
-installPhase=installPhase
-genericBuild
diff --git a/pkgs/development/tools/parsing/flex-iputils/default.nix b/pkgs/development/tools/parsing/flex-iputils/default.nix
deleted file mode 100644
index c680f0f5c49..00000000000
--- a/pkgs/development/tools/parsing/flex-iputils/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{stdenv, fetchurl, yacc}:
-
-assert yacc != null;
-
-stdenv.mkDerivation {
-  name = "flex-2.5.4a";
-  builder = ./builder.sh;
-  src = fetchurl {
-    url = http://nix.cs.uu.nl/dist/tarballs/flex-2.5.4a.tar.gz;
-    md5 = "bd8753d0b22e1f4ec87a553a73021adf";
-  };
-  buildInputs = [yacc];
-}
diff --git a/pkgs/development/tools/parsing/flex-iputils/flex-new.nix b/pkgs/development/tools/parsing/flex-iputils/flex-new.nix
deleted file mode 100644
index 802f77a9ad6..00000000000
--- a/pkgs/development/tools/parsing/flex-iputils/flex-new.nix
+++ /dev/null
@@ -1,16 +0,0 @@
-# !!! this should be moved to default.nix eventually (but I delay
-# doing that since it would cause a rebuild of lots of stuff).
-
-{stdenv, fetchurl, yacc, m4}:
-
-assert yacc != null && m4 != null;
-
-stdenv.mkDerivation {
-  name = "flex-2.5.31";
-  src = fetchurl {
-    url = http://nix.cs.uu.nl/dist/tarballs/flex-2.5.31.tar.bz2;
-    md5 = "363dcc4afc917dc51306eb9d3de0152f";
-  };
-  buildInputs = [yacc];
-  propagatedBuildInputs = [m4];
-}
diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.34.nix b/pkgs/development/tools/parsing/flex/flex-2.5.34.nix
new file mode 100644
index 00000000000..d56cf0c88a2
--- /dev/null
+++ b/pkgs/development/tools/parsing/flex/flex-2.5.34.nix
@@ -0,0 +1,19 @@
+# This should be moved to default.nix eventually (?)
+
+{stdenv, fetchurl, yacc, m4}:
+
+assert yacc != null && m4 != null;
+
+stdenv.mkDerivation {
+  name = "flex-2.5.34";
+  src = fetchurl {
+    url = mirror://sourceforge/flex/flex-2.5.34.tar.bz2;
+    sha256 = "1c8e64f32508841b0441ddfb139c4cfd25fee3728cadb63f5f351c6eb9b224a6";
+  };
+  buildInputs = [yacc];
+  propagatedBuildInputs = [m4];
+
+  meta = {
+    description = "A fast lexical analyser generator";
+  };
+}
diff --git a/pkgs/development/tools/parsing/happy/happy-1.17.nix b/pkgs/development/tools/parsing/happy/happy-1.17.nix
new file mode 100644
index 00000000000..b7fa22ccb80
--- /dev/null
+++ b/pkgs/development/tools/parsing/happy/happy-1.17.nix
@@ -0,0 +1,12 @@
+{cabal, perl}:
+
+cabal.mkDerivation (self : {
+
+  # requires cabal-1.2 (and therefore, in Nix, currently ghc-6.8)
+
+  pname = "happy";
+  version = "1.17";
+  name = self.fname;
+  sha256 = "dca4e47d17e5d538335496236b3d2c3cbff644cf7380c987a4714e7784c70a2b";
+  extraBuildInputs = [perl];
+})
diff --git a/pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix b/pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix
new file mode 100644
index 00000000000..7d62d743070
--- /dev/null
+++ b/pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix
@@ -0,0 +1,12 @@
+{stdenv, fetchurl, aterm, getopt, pkgconfig}:
+
+stdenv.mkDerivation {
+  name = "sdf2-bundle-2.4";
+  src = fetchurl {
+    url = http://buildfarm.st.ewi.tudelft.nl/releases/meta-environment/sdf2-bundle-2.4pre212034-2nspl1xc/sdf2-bundle-2.4.tar.gz;
+    md5 = "00107bef17d3fb8486575f8974fb384b";
+  };
+
+  buildInputs = [aterm pkgconfig];
+  propagatedBuildInputs = [getopt];
+}
diff --git a/pkgs/development/tools/selenium/remote-control/default.nix b/pkgs/development/tools/selenium/remote-control/default.nix
index e2bf63264a6..4c55805e5c8 100644
--- a/pkgs/development/tools/selenium/remote-control/default.nix
+++ b/pkgs/development/tools/selenium/remote-control/default.nix
@@ -1,8 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "selenium-rc-0.8.3-binary";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://release.openqa.org/cgi-bin/selenium-remote-control-redirect.zip;
     sha256 = "694b46a8440011bcedc4fdc6d01fd91c8b4b4b62b7c6629ace4e745ef47f583e";
   };
@@ -13,7 +13,7 @@ args.stdenv.mkDerivation {
   cp selenium-server-*/*.jar \$out/lib
   ";
 
-  buildInputs =(with args; [unzip]);
+  buildInputs = [unzip];
 
   meta = { 
       description = "test tool for web applications";
diff --git a/pkgs/games/construo/0.2.2.nix b/pkgs/games/construo/0.2.2.nix
index 964b0e3898e..555d2f4b30b 100644
--- a/pkgs/games/construo/0.2.2.nix
+++ b/pkgs/games/construo/0.2.2.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://savannah.nongnu.org/download/construo/construo-0.2.2.tar.gz;
@@ -11,6 +11,7 @@ args : with args;
 		;
 		configureFlags = [""];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 preConfigure = FullDepEntry ("
   sed -e 's/math[.]h/cmath/' -i vector.cxx
@@ -20,7 +21,7 @@ in
 stdenv.mkDerivation rec {
 	name = "construo-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [preConfigure doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [preConfigure doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	Construo masses and springs simulation.
diff --git a/pkgs/games/fsg/alt-builder.nix b/pkgs/games/fsg/alt-builder.nix
index 8efd788789b..4401bf8451a 100644
--- a/pkgs/games/fsg/alt-builder.nix
+++ b/pkgs/games/fsg/alt-builder.nix
@@ -1,13 +1,13 @@
 args: with args; 
-	with (builderDefs 
-	{ 
+	let localDefs = builderDefs {
   		buildInputs =[(wxGTK null)];
 		  src = 
 			fetchurl {
 				url = http://www.piettes.com/fallingsandgame/fsg-src-4.4.tar.gz;
 				sha256 = "1756y01rkvd3f1pkj88jqh83fqcfl2fy0c48mcq53pjzln9ycv8c";
 			};
-	} null);
+	} null;
+	in with localDefs;
 let 
 	preBuild = FullDepEntry "
 		sed -e '
@@ -25,7 +25,7 @@ in
 stdenv.mkDerivation {
   name = "fsg-4.4";
 	builder = writeScript "fsg-4.4-builder"
-		(textClosure [doUnpack addInputs preBuild doMake installPhase doForceShare]);
+		(textClosure localDefs [doUnpack addInputs preBuild doMake installPhase doForceShare]);
 
   meta = {
     description = "
diff --git a/pkgs/games/orbit/1.01.nix b/pkgs/games/orbit/1.01.nix
new file mode 100644
index 00000000000..ba824e83f1c
--- /dev/null
+++ b/pkgs/games/orbit/1.01.nix
@@ -0,0 +1,43 @@
+args : with args; with builderDefs {src="";} null;
+	let localDefs = builderDefs rec {
+		src = /* put a fetchurl here */
+		fetchurl {
+			sha256 = "1kx69f9jqnfzwjh47cl1df8p8hn3bnp6bznxnb6c4wx32ijn5gri";
+			url = http://ftp.de.debian.org/debian/pool/main/s/space-orbit/space-orbit_1.01.orig.tar.gz;
+		};
+
+		buildInputs = [mesa libXi libXt libXext libX11 libXmu freeglut esound];
+		configureFlags = [];
+		debianPatch = 
+		fetchurl {
+			url = http://ftp.de.debian.org/debian/pool/main/s/space-orbit/space-orbit_1.01-9.diff.gz;
+			sha256 = "1v3s97day6fhv08l2rn81waiprhi1lfyjjsj55axfh6n6zqfn1w2";
+		};
+		customBuild = FullDepEntry (''
+			gunzip < ${debianPatch} | patch -Np1
+                        cd src
+			sed -e 's@/usr/share/games/orbit/@'$out'/dump/@g' -i *.c
+                        sed -e '/DIR=/d' -i Makefile 
+                        make 
+                        ensureDir $out/bin
+                        cp -r .. $out/dump
+                        cat >$out/bin/space-orbit <<EOF
+#! /bin/sh
+$out/dump/orbit "\$@"
+EOF
+                        chmod a+x $out/bin/space-orbit
+		'') ["minInit" "doUnpack" "defEnsureDir" "addInputs"];
+	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
+stdenv.mkDerivation rec {
+	name = "space-orbit-"+version;
+	builder = writeScript (name + "-builder")
+		(textClosure localDefs 
+			[ customBuild doForceShare doPropagate]);
+	meta = {
+		description = "
+		Orbit space flight simulator.
+";
+	};
+}
+
diff --git a/pkgs/games/scummvm/default.nix b/pkgs/games/scummvm/default.nix
index 610556a2635..2f81aaa474d 100644
--- a/pkgs/games/scummvm/default.nix
+++ b/pkgs/games/scummvm/default.nix
@@ -1,11 +1,11 @@
 {stdenv, fetchurl, SDL, zlib, mpeg2dec}:
 
 stdenv.mkDerivation {
-  name = "scummvm-0.10.0";
+  name = "scummvm-0.11.0";
   
   src = fetchurl {
-    url = mirror://sourceforge/scummvm/scummvm-0.10.0.tar.bz2;
-    sha256 = "09ii4vbs4nygc0x4n1l9dkfiywj5qwxv9j81pbrf9r6d6y4wdlf9";
+    url = mirror://sourceforge/scummvm/scummvm-0.11.0.tar.bz2;
+    sha256 = "106vcknkr07m17rxypavlz3cjyd862bwq1qw1arakcvhhi90mbfl";
   };
   
   buildInputs = [SDL zlib mpeg2dec];
diff --git a/pkgs/games/thePenguinMachine/default.nix b/pkgs/games/thePenguinMachine/default.nix
index 89f675e083d..4ce42934b5a 100644
--- a/pkgs/games/thePenguinMachine/default.nix
+++ b/pkgs/games/thePenguinMachine/default.nix
@@ -1,20 +1,19 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "thePenguinMachine";
 
-  src = args.
-	fetchurl {
+  src = fetchurl {
 		url = http://www.migniot.com/matrix/projects/thepenguinmachine/ThePenguinMachine.tar.gz;
 		sha256 = "09ljks8vj75g00h3azc83yllbfsrxwmv1c9g32gylcmsshik0dqv";
 	};
 
-  buildInputs =(with args; [python24 pil pygame SDL]);
+  buildInputs = [python24 pil pygame SDL];
 
-  configurePhase = (with args; "
+  configurePhase = "
 		sed -e \"/includes = /aincludes.append('${SDL}/include/SDL')\" -i setup.py;
 		sed -e \"/includes = /aincludes.append('${pygame}/include/python2.4')\" -i setup.py;
 		cat setup.py;
-	");
+	";
   buildPhase = "
 		python setup.py build;
 		python setup.py build_clib;
@@ -22,13 +21,13 @@ args.stdenv.mkDerivation {
 		python setup.py build_py;
 		python setup.py build_scripts;
 		";
-  installPhase = (with args ; "
+  installPhase = "
 		python setup.py install --prefix=\${out}
 		cp -r . /tmp/tpm-build
 		echo 'export PYTHONPATH=$PYTHONPATH:${pygame}/lib/python2.4/site-packages:${pil}/lib/python2.4/site-packages/PIL
 		python ThePenguinMachine.py' >/tmp/tpm-build/tpm.sh; 
 		chmod a+rx /tmp/tpm-build/tpm.sh
-		");
+		";
 
   meta = {
     description = "
diff --git a/pkgs/games/wesnoth/default.nix b/pkgs/games/wesnoth/default.nix
new file mode 100644
index 00000000000..2e132dd8889
--- /dev/null
+++ b/pkgs/games/wesnoth/default.nix
@@ -0,0 +1,22 @@
+args: with args;
+stdenv.mkDerivation (rec {
+  pname = "wesnoth";
+  version = "1.3.18";
+
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "http://surfnet.dl.sourceforge.net/sourceforge/${pname}/${name}.tar.bz2";
+    sha256 = "ab2ed2cbe1daa134c453927bf0ec5d3a36f3319063b6f18c35819871f386da75";
+  };
+
+  buildInputs = [SDL SDL_image SDL_mixer SDL_net gettext zlib boost freetype];
+
+  configureFlags = "--with-preferences-dir=.${name} --program-suffix=-${version} --with-datadir-name=${name} --with-boost=${boost}/include --disable-python";
+
+  meta = {
+    description = "
+      The Battle for Wesnoth  is a free, turn-based strategy game with a fantasy theme.
+";
+  };
+})
diff --git a/pkgs/lib/annotatedDerivations.nix b/pkgs/lib/annotatedDerivations.nix
new file mode 100644
index 00000000000..eca97747cd8
--- /dev/null
+++ b/pkgs/lib/annotatedDerivations.nix
@@ -0,0 +1,56 @@
+{ lib } : with lib; with builtins; rec {
+  /*
+  # traversal proposal (very unstable now )
+  # goal: create tags easily (and install source files along without recompiling)
+
+  rec {
+    # encouraged: using it you can filter based on names later on? Do we ned it?
+    name = 
+
+    # required: the annotated derivation (this attr is used to identify a
+    # annotated derivation)
+    aDeriv =
+
+    # required: extra list of annotated dependencies, so we can traverse the tree
+    aDeps = <annotated deps>
+
+    # your annotation derivations 
+  };
+  */
+
+  isAnnotated = a : (a ? aDeriv); # this function serves documentation purposes 
+
+  delAnnotation = a :
+    if ((__isAttrs a) && (isAnnotated a)) then  a.aDeriv
+    else a; # most probalby a derivation without annotations.
+
+  # returns buildInputs and propagatedBuildInputs from given set after removing annotations
+  delAnnotationsFromInputs = attrs :
+    subsetmap (map delAnnotation) attrs [ "buildInputs" "propagatedBuildInputs" ];
+
+  /* so an annotated drivation function might look like this
+  args: with args;
+    let aDeps = filterDeps args;
+        deps = delAnnotation aDeps;
+    in rec {
+      name = "my-package-0.2";
+      inherit aDeps;
+
+      aDeriv = stdenv.mkDerivation {
+        inherit name;
+        buildInputs = deps;
+      };
+    };
+
+  */
+
+  filterAnnotated = lib.filter isAnnotated;
+
+  # stops when depthCounter = 0 
+  traverseByDepthCounter = depthCounter : aAttrs :
+    if (depthCounter == 0) then []
+    else [ aAttrs ] ++ map (traverseByDepthCounter (__sub depthCounter 1) ) (filterAnnotated aAttrs.aDeps);
+
+  # get all deps recursively
+  uniqAnnotatedDeps = aAttrs : uniqList { inputList = traverseByDepthCounter 10 aAttrs; };
+}
diff --git a/pkgs/lib/default-unstable.nix b/pkgs/lib/default-unstable.nix
deleted file mode 100644
index 5653508dca9..00000000000
--- a/pkgs/lib/default-unstable.nix
+++ /dev/null
@@ -1,478 +0,0 @@
-# Utility functions.
-
-let
-
-  inherit (builtins)
-    head tail isList stringLength substring lessThan sub
-    listToAttrs attrNames hasAttr;
-
-in
-
-rec {
-
-  # "Fold" a binary function `op' between successive elements of
-  # `list' with `nul' as the starting value, i.e., `fold op nul [x_1
-  # x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'.  (This is
-  # Haskell's foldr).
-  fold = op: nul: list:
-    if list == []
-    then nul
-    else op (head list) (fold op nul (tail list));
-    
-  # Concatenate a list of lists.
-  concatLists =
-    fold (x: y: x ++ y) [];
-
-
-  # Concatenate a list of strings.
-  concatStrings =
-    fold (x: y: x + y) "";
-
-
-  # Place an element between each element of a list, e.g.,
-  # `intersperse "," ["a" "b" "c"]' returns ["a" "," "b" "," "c"].
-  intersperse = separator: list:
-    if list == [] || tail list == []
-    then list
-    else [(head list) separator]
-         ++ (intersperse separator (tail list));
-
-  toList = x : if (__isList x) then x else [x];
-
-  concatStringsSep = separator: list:
-    concatStrings (intersperse separator list);
-
-
-  # Flatten the argument into a single list; that is, nested lists are
-  # spliced into the top-level lists.  E.g., `flatten [1 [2 [3] 4] 5]
-  # == [1 2 3 4 5]' and `flatten 1 == [1]'.
-  flatten = x:
-    if isList x
-    then fold (x: y: (flatten x) ++ y) [] x
-    else [x];
-
-
-  # Return an attribute from nested attribute sets.  For instance ["x"
-  # "y"] applied to some set e returns e.x.y, if it exists.  The
-  # default value is returned otherwise.
-  # comment: I'd rename this to getAttrRec or something like that .. (has the same name as builtin.getAttr) - Marc Weber
-  getAttr = attrPath : default : e :
-    let {
-      attr = head attrPath;
-      body =
-        if attrPath == [] then e
-        else if builtins ? hasAttr && builtins.hasAttr attr e
-        then getAttr (tail attrPath) default (builtins.getAttr attr e)
-        else default;
-    };
-  #getAttr = attrPath: default: e: getAttrMap id;
-
-  # the same as getAttr but if the element exists map the value using function f 
-  # corresponds to the maybe function of haskell
-  getAttrMap = f : attrPath : default : e :
-    let {
-      attr = head attrPath;
-      body =
-        if attrPath == [] then e
-        else if builtins ? hasAttr && builtins.hasAttr attr e
-        then f (getAttr (tail attrPath) default (builtins.getAttr attr e))
-        else default;
-    };
-
-
-
-  # Filter a list using a predicate; that is, return a list containing
-  # every element from `list' for which `pred' returns true.
-  filter = pred: list:
-    fold (x: y: if pred x then [x] ++ y else y) [] list;
-
-
-  # Return true if `list' has an element `x':
-  elem = x: list: fold (a: bs: x == a || bs) false list;
-
-
-  # Find the sole element in the list matching the specified
-  # predicate, or returns the default value.
-  findSingle = pred: default: list:
-    let found = filter pred list;
-    in if found == [] then default
-       else if tail found != [] then
-         abort "Multiple elements match predicate in findSingle."
-       else head found;
-
-
-  # Return true if each element of a list is equal, false otherwise.
-  eqLists = xs: ys:
-    if xs == [] && ys == [] then true
-    else if xs == [] || ys == [] then false
-    else head xs == head ys && eqLists (tail xs) (tail ys);
-
-
-  # Determine whether a filename ends in the given suffix.
-  hasSuffix = ext: fileName:
-    let lenFileName = stringLength fileName;
-        lenExt = stringLength ext;
-    in !(lessThan lenFileName lenExt) &&
-       substring (sub lenFileName lenExt) lenFileName fileName == ext;
-
-       
-  # Bring in a path as a source, filtering out all Subversion and CVS
-  # directories, as well as backup files (*~).
-  cleanSource =
-    let filter = name: type: let baseName = baseNameOf (toString name); in ! (
-      # Filter out Subversion and CVS directories.
-      (type == "directory" && (name == ".svn" || name == "CVS")) ||
-      # Filter out backup files.
-      (hasSuffix "~" name)
-    );
-    in src: builtins.filterSource filter src;
-
-
-  # Return a singleton list or an empty list, depending on a boolean
-  # value.  Useful when building lists with optional elements
-  # (e.g. `++ optional (system == "i686-linux") flashplayer').
-  optional = cond: elem: if (cond) then [elem] else [];
-
-  whenFlip = x : cond : if (cond) then x else "";
-
-    
-  # Return a list of integers from `first' up to and including `last'.
-  range = first: last:
-    if builtins.lessThan last first
-    then []
-    else [first] ++ range (builtins.add first 1) last;
-
-  # Return true only if there is an attribute and it is true.
-  checkFlag = attrSet: name:
-	if (name == "true") then true else
-	if (name == "false") then false else
-	if (isInList (getAttr ["flags"] [] attrSet) name) then true else
-	getAttr [name] false attrSet ;
-
-  logicalOR = x: y: x || y;
-  logicalAND = x: y: x && y;
-
-  # Input : attrSet, [ [name default] ... ], name
-  # Output : its value or default.
-  getValue = attrSet: argList: name:
-  ( getAttr [name] (if checkFlag attrSet name then true else
-	if argList == [] then null else
-	let x = builtins.head argList; in
-		if (head x) == name then 
-			(head (tail x))
-		else (getValue attrSet 
-			(tail argList) name)) attrSet );
-
-  # Input : attrSet, [[name default] ...], [ [flagname reqs..] ... ]
-  # Output : are reqs satisfied? It's asserted.
-  checkReqs = attrSet : argList : condList :
-  (
-    fold logicalAND true 
-      (map (x: let name = (head x) ; in
-	
-	((checkFlag attrSet name) -> 
-	(fold logicalAND true
-	(map (y: let val=(getValue attrSet argList y); in
-		(val!=null) && (val!=false)) 
-	(tail x))))) condList)) ;
-	
-   
-  isInList = list: x:
-	if (list == []) then false else
-	if (x == (head list)) then true else
-	isInList (tail list) x;
-  
-  uniqList = {inputList, outputList ? []}:
-	if (inputList == []) then outputList else
-	let x=head inputList; 
-	newOutputList = outputList ++
-	 (if (isInList outputList x) then [] else [x]);
-	in uniqList {outputList=newOutputList; 
-		inputList = (tail inputList);};
-
-  condConcat = name: list: checker:
-	if list == [] then name else
-	if checker (head list) then 
-		condConcat 
-			(name + (head (tail list))) 
-			(tail (tail list)) 
-			checker
-	else condConcat
-		name (tail (tail list)) checker;
-
-  # calls a function (f attr value ) for each record item. returns a list
-  mapRecordFlatten = f : r : map (attr: f attr (builtins.getAttr attr r) ) (attrNames r);
-
-  # to be used with listToAttrs (_a_ttribute _v_alue)
-  # TODO should be renamed to nv because niksnut has renamed the attribute attr to name
-  av = name : value : { inherit name value; };
-  # attribute set containing one attribute
-  avs = name : value : listToAttrs [ (av name value) ];
-  # adds / replaces an attribute of an attribute set
-  setAttr = set : name : v : set // (avs name v);
-
-  id = x : x;
-  # true if all/ at least one element(s) satisfy f
-  all = f : l : fold logicalAND true (map f l);
-  any = f : l : fold logicalOR false (map f l);
-
-  # iterates over a list of attributes collecting the attribute attr if it exists
-  catAttrs = attr : l : fold ( s : l : if (hasAttr attr s) then [(builtins.getAttr attr s)] ++ l else l) [] l;
-
-  mergeAttrs = fold ( x : y : x // y) {};
-
-  # Using f = a : b = b the result is similar to //
-  # merge attributes with custom function handling the case that the attribute
-  # exists in both sets
-  mergeAttrsWithFunc = f : set1 : set2 :
-    fold (n: set : if (__hasAttr n set) 
-                        then setAttr set n (f (__getAttr n set) (__getAttr n set2))
-                        else set )
-           set1 (__attrNames set2);
-
-  # merging two attribute set concatenating the values of same attribute names
-  # eg { a = 7; } {  a = [ 2 3 ]; } becomes { a = [ 7 2 3 ]; }
-  mergeAttrsConcatenateValues = mergeAttrsWithFunc ( a : b : (toList a) ++ (toList b) );
-
-  # returns atribute values as a list 
-  flattenAttrs = set : map ( attr : builtins.getAttr attr set) (attrNames set);
-  mapIf = cond : f :  fold ( x : l : if (cond x) then [(f x)] ++ l else l) [];
-
-# Marc 2nd proposal: (not everything has been tested in detail yet..)
-
-  # usage / example
-  # flagConfig = {
-  # } // (enableDisableFeature "flagName" "configure_feature" extraAttrs;)
-  #
-  # is equal to
-  # flagConfig = {
-  #   flagName = { cfgOption = "--enable-configure_feature"; } // extraAttrs;
-  #   no_flagName = { cfgOption = "--disable-configure_feature"; };
-  enableDisableFeature = flagName : configure_feature : extraAttrs :
-    listToAttrs [ ( av flagName ({ cfgOption = "--enable-${configure_feature}"; } // extraAttrs ) )
-                  ( av "no_${flagName}" ({ cfgOption = "--disable-${configure_feature}"; } ) )];
-
-  # calls chooseOptionsByFlags2 with some preprocessing
-  # chooseOptionsByFlags2 returns an attribute set meant to be used to create new derivaitons.
-  # see mkDerivationByConfiguration in all-packages.nix and the examples given below.
-  # You can just copy paste them into all-packages.nix to test them..
-
-  chooseOptionsByFlags = { flagConfig, args, optionals ? [], defaults ? [],
-                           collectExtraPhaseActions ? [] } :
-    let passedOptionals = filter ( x : hasAttr x args ) optionals; # these are in optionals and in args
-        # we simply merge in <optional_name> = { buildInputs = <arg.<optional_name>; pass = <arg.optional_name>; }
-        flagConfigWithOptionals = flagConfig // ( listToAttrs
-          (map ( o : av o ( { buildInputs = o; pass = avs o (builtins.getAttr o args); }
-                            // getAttr [o] {} flagConfig )
-               )
-               passedOptionals ) );
-
-    in chooseOptionsByFlags2 flagConfigWithOptionals collectExtraPhaseActions args 
-       ( (getAttr ["flags"] defaults args) ++ passedOptionals);
-
-  chooseOptionsByFlags2 = flagConfig : collectExtraPhaseActions : args : flags :
-    let   
-        # helper function
-        collectFlags = # state : flags :
-              fold ( flag : s : (
-                     if (hasAttr flag s.result) then s # this state has already been visited
-                     else if (! hasAttr flag flagConfig) then throw "unkown flag `${flag}' specified"
-                           else let fDesc = (builtins.getAttr flag flagConfig);
-                                    implied = flatten ( getAttr ["implies"] [] fDesc );
-                                    blocked = flatten ( getAttr ["blocks"] [] fDesc ); 
-                                    # add this flag
-                                    s2 =  s // { result = ( setAttr s.result flag (builtins.getAttr flag flagConfig) );
-                                                 blockedFlagsBy = s.blockedFlagsBy 
-                                                   // listToAttrs (map (b: av b flag ) blocked); };
-                                    # add implied flags
-                                in collectFlags s2 implied
-                   ));
-
-        # chosen contains flagConfig but only having those attributes elected by flags 
-        # (or by implies attributes of elected attributes)
-        options = let stateOpts = collectFlags { blockedFlagsBy = {}; result = {}; } 
-                                               (flags ++ ( if (hasAttr "mandatory" flagConfig) then ["mandatory"] else [] ));
-                      # these options have not been chosen (neither by flags nor by implies)
-                      unsetOptions = filter ( x : (! hasAttr x stateOpts.result) && (hasAttr ("no_"+x) flagConfig)) 
-                                            ( attrNames flagConfig );
-                      # no add the corresponding no_ attributes as well ..
-                      state = collectFlags stateOpts (map ( x : "no_" + x ) unsetOptions);
-                  in # check for blockings:
-                     assert ( all id ( map ( b: if (hasAttr b state.result) 
-                                             then throw "flag ${b} is blocked by flag ${__getAttr b state.blockedFlagsBy}"
-                                             else true ) 
-                                           (attrNames state.blockedFlagsBy) ) ); 
-                    state.result;
-        flatOptions = flattenAttrs options;
-
-        # helper functions :
-        collectAttrs = attr : catAttrs attr flatOptions;
-        optsConcatStrs = delimiter : attrs : concatStrings 
-                ( intersperse delimiter (flatten ( collectAttrs attrs ) ) );
-
-        ifStringGetArg = x : if (__isAttrs x) then x # ( TODO implement __isString ?)
-                             else avs x (__getAttr x args);
-          
-    in assert ( all id ( mapRecordFlatten ( attr : r : if ( all id ( flatten (getAttr ["assertion"] [] r ) ) ) 
-                                              then true else throw "assertion failed flag ${attr}" )
-                                         options) );
-      ( rec {
-
-          #foldOptions = attr: f : start: fold f start (catAttrs attr flatOptions);
-
-          # compared to flags flagsSet does also contain the implied flags.. This makes it easy to write assertions. ( assert args.
-          inherit options flatOptions collectAttrs optsConcatStrs;
-
-          buildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) )
-                        (flatten  (catAttrs "buildInputs" flatOptions));
-          propagatedBuildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) )
-                        (flatten  (catAttrs "propagatedBuildInputs" flatOptions));
-
-          configureFlags = optsConcatStrs " " "cfgOption";
-
-          #flags = listToAttrs (map ( flag: av flag (hasAttr flag options) ) (attrNames flagConfig) );
-          flags_prefixed = listToAttrs (map ( flag: av ("flag_set_"+flag) (hasAttr flag options) ) (attrNames flagConfig) );
-
-          pass = mergeAttrs ( map ifStringGetArg ( flatten (collectAttrs "pass") ) );
-      } #  now add additional phase actions (see examples)
-      // listToAttrs ( map ( x : av x (optsConcatStrs "\n" x) ) collectExtraPhaseActions ) );
-}
-
-/* 
-
-  # ###########################################################################
-  #  configuration tutorial .. examples and tests.. 
-  #  Copy this into all-packages.nix and  try
-
-  # The following derviations will all fail.. 
-  # But they will print the passed options so that you can get to know
-  # how these configurations ought to work.
-  # TODO: There is no nice way to pass an otpion yet.
-  #       I could imagine something like
-  #       flags = [ "flagA" "flagB" { flagC = 4; } ];
-
-  # They are named:
-  # simpleYes, simpleNo, 
-  # defaultsimpleYes, defaultsimpleNo
-  # optionalssimpleYes, optionalssimpleNo
-  # bitingsimpleYes can only be ran with -iA  blockingBiteMonster
-  # assertionsimpleNo
-  # of course you can use -iA and the attribute name as well to select these examples
-
-  # dummy build input
-  whoGetsTheFlagFirst = gnused;
-  whoGetsTheFlagLast = gnumake;
-
-  # simple example demonstrating containing one flag.
-  # features:
-  # * configure options are passed automatically
-  # * buildInputs are collected (they are special, see the setup script)
-  # * they can be passed by additional name as well using pass = { inherit (args) python } 
-  #                                       ( or short (value not attrs) : pass = "python" )
-  # * an attribute named the same way as the flag is added indicating 
-  #   true/ false (flag has been set/ not set)
-  # * extra phase dependend commands can be added
-  #   Its easy to add your own stuff using co.collectAttrs or co.optsConcatStrs 
-  #   ( perhaps this name will change?)
-  simpleFlagYesNoF = namePrefix : extraFlagAttrs : mkDerivationByConfiguration ( {
-    flagConfig = {
-      flag    = { name = namePrefix + "simpleYes"; 
-                  cfgOption = [ "--Yes" "--you-dont-need-a-list" ]; 
-                  buildInputs = [ "whoGetsTheFlagFirst" ]; 
-                  pass = { inherit gnumake; };
-                  extraConfigureCmd = "echo Hello, it worked! ";
-                  blocks = "bitingMonster";
-                };
-      no_flag = { name = namePrefix + "simpleNo"; 
-                  cfgOption = "--no"; 
-                  implies = ["bitingMonster"];
-                };
-      bitingMonster = {
-                  extraConfigureCmd = "echo Ill bite you";
-                };
-      gnutar = { cfgOption="--with-gnutar";
-                  # buildInputs and pass will be added automatically if gnutar is added to optionals
-               };
-      # can be used to check configure options of dependencies
-      # eg testFlag = { assertion = [ arg.desktop.flag_set_wmii (! arg.desktop.flag_set_gnome) (! arg.desktops.flag_set_kde ]; }
-      assertionFlag = { assertion = false; }; # assert is nix language keyword
-                                        
-    }; 
-
-    collectExtraPhaseActions = [ "extraConfigureCmd" ];
-
-    extraAttrs = co : {
-      name = ( __head (co.collectAttrs "name") );
-
-      unpackPhase = "
-       echo my name is 
-       echo \$name
-       echo
-       echo flag given \\(should be 1 or empty string\\) ? 
-       echo \$flag_set_flag
-       echo
-       echo my build inputs are 
-       echo \$buildInputs
-       echo
-       echo my configuration flags are 
-       echo \$configureFlags
-       echo
-       echo what about gnumake? Did it pass?
-       echo \$gnumake
-       echo 
-       echo configurePhase command is
-       echo $\configurePhase
-       echo 
-       echo gnutar passed? \\(optional test\\)
-       echo \$gnutar
-       echo
-       echo dying now
-       echo die_Hopefully_Soon
-      ";
-    configurePhase = co.extraConfigureCmd;
-    };
-  } // extraFlagAttrs ); 
-
-
-  simpleYes = simpleFlagYesNoF "" {} {
-    inherit whoGetsTheFlagFirst lib stdenv;
-    flags = ["flag"];
-  };
-  # note the "I'll bite you" because of the implies attribute
-  simpleNo = simpleFlagYesNoF "" {} {
-    inherit whoGetsTheFlagFirst lib stdenv;
-    flags = [];
-  };
-
-  # specifying defaults by adding a default attribute
-  
-  yesAgainDefault = simpleFlagYesNoF "default" { defaults = [ "flag" ];} {
-    inherit whoGetsTheFlagFirst lib stdenv;
-  };
-  noAgainOverridingDefault = simpleFlagYesNoF "default" { defaults = [ "flag" ];} {
-    inherit whoGetsTheFlagFirst lib stdenv;
-    flags = [];
-  };
-
-  # requested by Michael Raskin: activate flag automatically if dependency is passed:
-  withGnutarOptional = simpleFlagYesNoF "optionals" { optionals = [ "gnutar" ];} {
-    flags = [ "flag" ]; # I only need to pass this to trigger name optionalssimpleYes
-    inherit whoGetsTheFlagFirst lib stdenv;
-    inherit gnutar;
-  };
-  withoutGnutarOptional = simpleFlagYesNoF "optionals" { optionals = [ "gnutar" ];} {
-    inherit whoGetsTheFlagFirst lib stdenv;
-  };
-
-  # blocking example, this shouldn't even start building:
-  blockingBiteMonster = simpleFlagYesNoF "biting" {} {
-    inherit whoGetsTheFlagFirst lib stdenv;
-    flags = [ "flag" "bitingMonster" ];
-  };
-
-  # assertion example this shouldn't even start building:
-  assertion = simpleFlagYesNoF "assertion" {} {
-    inherit whoGetsTheFlagFirst lib stdenv;
-    flags = [ "assertionFlag" ];
-  };
-*/
diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix
index 108d62b3d8a..3ac24d5cfb3 100644
--- a/pkgs/lib/default.nix
+++ b/pkgs/lib/default.nix
@@ -3,7 +3,8 @@
 let
 
   inherit (builtins)
-    head tail isList stringLength substring lessThan sub;
+    head tail isList stringLength substring lessThan sub
+    listToAttrs attrNames hasAttr;
 
 in
 
@@ -15,11 +16,15 @@ rec {
   id = x: x;
 
 
-  # !!! need documentation...
+  # accumulates / merges all attr sets until null is fed.
+  # example: sumArgs id { a = 'a'; x = 'x'; } { y = 'y'; x = 'X'; } null
+  # result : { a = 'a'; x = 'X'; y = 'Y'; }
   innerSumArgs = f : x : y : (if y == null then (f x)
 	else (innerSumArgs f (x // y)));
   sumArgs = f : innerSumArgs f {};
 
+  # example a = pairMap (x : y : x + y) ["a" "b" "c" "d"];
+  # result: ["ab" "cd"]
   innerPairMap = acc: f: l: 
   	if l == [] then acc else
 	innerPairMap (acc ++ [(f (head l)(head (tail l)))])
@@ -27,6 +32,7 @@ rec {
   pairMap = innerPairMap [];
 
   
+  
   # "Fold" a binary function `op' between successive elements of
   # `list' with `nul' as the starting value, i.e., `fold op nul [x_1
   # x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'.  (This is
@@ -47,6 +53,12 @@ rec {
     fold (x: y: x + y) "";
 
 
+  # Map and concatenate the result.
+  concatMap = f: list: concatLists (map f list);
+
+  concatMapStrings = f: list: concatStrings (map f list);
+  
+
   # Place an element between each element of a list, e.g.,
   # `intersperse "," ["a" "b" "c"]' returns ["a" "," "b" "," "c"].
   intersperse = separator: list:
@@ -55,6 +67,7 @@ rec {
     else [(head list) separator]
          ++ (intersperse separator (tail list));
 
+  toList = x : if (__isList x) then x else [x];
 
   concatStringsSep = separator: list:
     concatStrings (intersperse separator list);
@@ -72,6 +85,7 @@ rec {
   # Return an attribute from nested attribute sets.  For instance ["x"
   # "y"] applied to some set e returns e.x.y, if it exists.  The
   # default value is returned otherwise.
+  # comment: there is also builtins.getAttr ? (is there a better name for this function?)
   getAttr = attrPath: default: e:
     let attr = head attrPath;
     in
@@ -80,6 +94,10 @@ rec {
       then getAttr (tail attrPath) default (builtins.getAttr attr e)
       else default;
 
+  # shortcut for getAttr ["name"] default attrs
+  maybeAttr = name: default: attrs:
+    if (__hasAttr name attrs) then (__getAttr name attrs) else default;
+
 
   # Filter a list using a predicate; that is, return a list containing
   # every element from `list' for which `pred' returns true.
@@ -116,6 +134,12 @@ rec {
     else if pred (head list) then all pred (tail list)
     else false;
 
+  # much shorter implementations using map and fold (are lazy as well)
+  # which ones are better?
+  # true if all/ at least one element(s) satisfy f
+  # all = f : l : fold logicalAND true (map f l);
+  # any = f : l : fold logicalOR false (map f l);
+
 
   # Return true if each element of a list is equal, false otherwise.
   eqLists = xs: ys:
@@ -136,15 +160,16 @@ rec {
        substring (sub lenFileName lenExt) lenFileName fileName == ext;
 
   hasSuffixHack = a: b: hasSuffix (a+(substring 0 0 b)) ((substring 0 0 a)+b);
-       
+
+         
   # Bring in a path as a source, filtering out all Subversion and CVS
   # directories, as well as backup files (*~).
   cleanSource =
     let filter = name: type: let baseName = baseNameOf (toString name); in ! (
       # Filter out Subversion and CVS directories.
-      (type == "directory" && (name == ".svn" || name == "CVS")) ||
+      (type == "directory" && (baseName == ".svn" || baseName == "CVS")) ||
       # Filter out backup files.
-      (hasSuffix "~" name)
+      (hasSuffix "~" baseName)
     );
     in src: builtins.filterSource filter src;
 
@@ -164,6 +189,10 @@ rec {
   optional = cond: elem: if cond then [elem] else [];
 
 
+  # Return a list or an empty list, dependening on a boolean value.
+  optionals = cond: elems: if cond then elems else [];
+
+
   # Return a list of integers from `first' up to and including `last'.
   range = first: last:
     if builtins.lessThan last first
@@ -246,8 +275,6 @@ rec {
 			checker
 	else condConcat
 		name (tail (tail list)) checker;
-
-
   /* Options. */
   
   mkOption = attrs: attrs // {_type = "option";};
@@ -297,6 +324,18 @@ rec {
   debugVal = if builtins ? trace then x: (builtins.trace x x) else x: x;
   debugXMLVal = if builtins ? trace then x: (builtins.trace (builtins.toXML x) x) else x: x;
 
+  # this can help debug your code as well - designed to not produce thousands of lines
+  traceWhatis = x : __trace (whatis x) x;
+  whatis = x : 
+      if (__isAttrs x) then
+          if (x ? outPath) then "x is a derivation with name ${x.name}"
+          else "x is an attr set with attributes ${builtins.toString (__attrNames x)}"
+      else if (__isFunction x) then "x is a function"
+      else if (__isList x) then "x is a list, first item is : ${whatis (__head x)}"
+      else if (x == true || x == false) then builtins.toString x
+      else "x is propably a string starting, starting characters: ${__substring 0 50 x}..";
+
+
   innerClosePropagation = ready: list: if list == [] then ready else
     if (head list) ? propagatedBuildInputs then 
       innerClosePropagation (ready ++ [(head list)]) 
@@ -305,4 +344,290 @@ rec {
 
   closePropagation = list: (uniqList {inputList = (innerClosePropagation [] list);});
 
+  stringToCharacters = s : let l = __stringLength s; in
+    if (__lessThan l 1) then [""] else  [(__substring 0 1 s)] ++ stringToCharacters (__substring 1 (__sub l 1) s);
+
+  # should this be implemented as primop ? Yes it should..
+  escapeShellArg = s :
+    let escapeChar = x : if ( x == "'" ) then "'\"'\"'" else x;
+    in "'" + concatStrings (map escapeChar (stringToCharacters s) ) +"'";
+
+  defineShList = name : list : "\n${name}=(${concatStringsSep " " (map escapeShellArg list)})\n";
+
+  # calls a function (f attr value ) for each record item. returns a list
+  mapRecordFlatten = f : r : map (attr: f attr (builtins.getAttr attr r) ) (attrNames r);
+
+  # to be used with listToAttrs (_a_ttribute _v_alue)
+  nv = name : value : { inherit name value; };
+  # attribute set containing one attribute
+  nvs = name : value : listToAttrs [ (nv name value) ];
+  # adds / replaces an attribute of an attribute set
+  setAttr = set : name : v : set // (nvs name v);
+
+  # iterates over a list of attributes collecting the attribute attr if it exists
+  catAttrs = attr : l : fold ( s : l : if (hasAttr attr s) then [(builtins.getAttr attr s)] ++ l else l) [] l;
+
+  mergeAttrs = fold ( x : y : x // y) {};
+
+  # Using f = a : b = b the result is similar to //
+  # merge attributes with custom function handling the case that the attribute
+  # exists in both sets
+  mergeAttrsWithFunc = f : set1 : set2 :
+    fold (n: set : if (__hasAttr n set) 
+                        then setAttr set n (f (__getAttr n set) (__getAttr n set2))
+                        else set )
+           set1 (__attrNames set2);
+
+  # merging two attribute set concatenating the values of same attribute names
+  # eg { a = 7; } {  a = [ 2 3 ]; } becomes { a = [ 7 2 3 ]; }
+  mergeAttrsConcatenateValues = mergeAttrsWithFunc ( a : b : (toList a) ++ (toList b) );
+
+  # returns atribute values as a list 
+  flattenAttrs = set : map ( attr : builtins.getAttr attr set) (attrNames set);
+  mapIf = cond : f :  fold ( x : l : if (cond x) then [(f x)] ++ l else l) [];
+
+  # pick attrs subset_attr_names and apply f 
+  subsetmap = f : attrs : subset_attr_names : 
+    listToAttrs (fold ( attr : r : if __hasAttr attr attrs
+          then r ++ [ (  nv attr ( f (__getAttr attr attrs) ) ) ] else r ) []
+      subset_attr_names );
+
+# Marc 2nd proposal: (not everything has been tested in detail yet..)
+
+  # usage / example
+  # flagConfig = {
+  # } // (enableDisableFeature "flagName" "configure_feature" extraAttrs;)
+  #
+  # is equal to
+  # flagConfig = {
+  #   flagName = { cfgOption = "--enable-configure_feature"; } // extraAttrs;
+  #   no_flagName = { cfgOption = "--disable-configure_feature"; };
+  enableDisableFeature = flagName : configure_feature : extraAttrs :
+    listToAttrs [ ( nv flagName ({ cfgOption = "--enable-${configure_feature}"; } // extraAttrs ) )
+                  ( nv "no_${flagName}" ({ cfgOption = "--disable-${configure_feature}"; } ) )];
+
+  # calls chooseOptionsByFlags2 with some preprocessing
+  # chooseOptionsByFlags2 returns an attribute set meant to be used to create new derivaitons.
+  # see mkDerivationByConfiguration in all-packages.nix and the examples given below.
+  # You can just copy paste them into all-packages.nix to test them..
+
+  chooseOptionsByFlags = { flagConfig, args, optionals ? [], defaults ? [],
+                           collectExtraPhaseActions ? [] } :
+    let passedOptionals = filter ( x : hasAttr x args ) optionals; # these are in optionals and in args
+        # we simply merge in <optional_name> = { buildInputs = <arg.<optional_name>; pass = <arg.optional_name>; }
+        flagConfigWithOptionals = flagConfig // ( listToAttrs
+          (map ( o : nv o ( { buildInputs = o; pass = nvs o (builtins.getAttr o args); }
+                            // getAttr [o] {} flagConfig )
+               )
+               passedOptionals ) );
+
+    in chooseOptionsByFlags2 flagConfigWithOptionals collectExtraPhaseActions args 
+       ( (getAttr ["flags"] defaults args) ++ passedOptionals);
+
+  chooseOptionsByFlags2 = flagConfig : collectExtraPhaseActions : args : flags :
+    let   
+        # helper function
+        collectFlags = # state : flags :
+              fold ( flag : s : (
+                     if (hasAttr flag s.result) then s # this state has already been visited
+                     else if (! hasAttr flag flagConfig) then throw "unkown flag `${flag}' specified"
+                           else let fDesc = (builtins.getAttr flag flagConfig);
+                                    implied = flatten ( getAttr ["implies"] [] fDesc );
+                                    blocked = flatten ( getAttr ["blocks"] [] fDesc ); 
+                                    # add this flag
+                                    s2 =  s // { result = ( setAttr s.result flag (builtins.getAttr flag flagConfig) );
+                                                 blockedFlagsBy = s.blockedFlagsBy 
+                                                   // listToAttrs (map (b: nv b flag ) blocked); };
+                                    # add implied flags
+                                in collectFlags s2 implied
+                   ));
+
+        # chosen contains flagConfig but only having those attributes elected by flags 
+        # (or by implies attributes of elected attributes)
+        options = let stateOpts = collectFlags { blockedFlagsBy = {}; result = {}; } 
+                                               (flags ++ ( if (hasAttr "mandatory" flagConfig) then ["mandatory"] else [] ));
+                      # these options have not been chosen (neither by flags nor by implies)
+                      unsetOptions = filter ( x : (! hasAttr x stateOpts.result) && (hasAttr ("no_"+x) flagConfig)) 
+                                            ( attrNames flagConfig );
+                      # no add the corresponding no_ attributes as well ..
+                      state = collectFlags stateOpts (map ( x : "no_" + x ) unsetOptions);
+                  in # check for blockings:
+                     assert ( all id ( map ( b: if (hasAttr b state.result) 
+                                             then throw "flag ${b} is blocked by flag ${__getAttr b state.blockedFlagsBy}"
+                                             else true ) 
+                                           (attrNames state.blockedFlagsBy) ) ); 
+                    state.result;
+        flatOptions = flattenAttrs options;
+
+        # helper functions :
+        collectAttrs = attr : catAttrs attr flatOptions;
+        optsConcatStrs = delimiter : attrs : concatStrings 
+                ( intersperse delimiter (flatten ( collectAttrs attrs ) ) );
+
+        ifStringGetArg = x : if (__isAttrs x) then x # ( TODO implement __isString ?)
+                             else nvs x (__getAttr x args);
+          
+    in assert ( all id ( mapRecordFlatten ( attr : r : if ( all id ( flatten (getAttr ["assertion"] [] r ) ) ) 
+                                              then true else throw "assertion failed flag ${attr}" )
+                                         options) );
+      ( rec {
+
+          #foldOptions = attr: f : start: fold f start (catAttrs attr flatOptions);
+
+          # compared to flags flagsSet does also contain the implied flags.. This makes it easy to write assertions. ( assert args.
+          inherit options flatOptions collectAttrs optsConcatStrs;
+
+          buildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) )
+                        (flatten  (catAttrs "buildInputs" flatOptions));
+          propagatedBuildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) )
+                        (flatten  (catAttrs "propagatedBuildInputs" flatOptions));
+
+          configureFlags = optsConcatStrs " " "cfgOption";
+
+          #flags = listToAttrs (map ( flag: nv flag (hasAttr flag options) ) (attrNames flagConfig) );
+          flags_prefixed = listToAttrs (map ( flag: nv ("flag_set_"+flag) (hasAttr flag options) ) (attrNames flagConfig) );
+
+          pass = mergeAttrs ( map ifStringGetArg ( flatten (collectAttrs "pass") ) );
+      } #  now add additional phase actions (see examples)
+      // listToAttrs ( map ( x : nv x (optsConcatStrs "\n" x) ) collectExtraPhaseActions ) );
 }
+
+/* 
+  TODO: Perhaps it's better to move this documentation / these tests into some extra packages ..
+
+  # ###########################################################################
+  #  configuration tutorial .. examples and tests.. 
+  #  Copy this into all-packages.nix and  try
+
+  # The following derviations will all fail.. 
+  # But they will print the passed options so that you can get to know
+  # how these configurations ought to work.
+  # TODO: There is no nice way to pass an otpion yet.
+  #       I could imagine something like
+  #       flags = [ "flagA" "flagB" { flagC = 4; } ];
+
+  # They are named:
+  # simpleYes, simpleNo, 
+  # defaultsimpleYes, defaultsimpleNo
+  # optionalssimpleYes, optionalssimpleNo
+  # bitingsimpleYes can only be ran with -iA  blockingBiteMonster
+  # assertionsimpleNo
+  # of course you can use -iA and the attribute name as well to select these examples
+
+  # dummy build input
+  whoGetsTheFlagFirst = gnused;
+  whoGetsTheFlagLast = gnumake;
+
+  # simple example demonstrating containing one flag.
+  # features:
+  # * configure options are passed automatically
+  # * buildInputs are collected (they are special, see the setup script)
+  # * they can be passed by additional name as well using pass = { inherit (args) python } 
+  #                                       ( or short (value not attrs) : pass = "python" )
+  # * an attribute named the same way as the flag is added indicating 
+  #   true/ false (flag has been set/ not set)
+  # * extra phase dependend commands can be added
+  #   Its easy to add your own stuff using co.collectAttrs or co.optsConcatStrs 
+  #   ( perhaps this name will change?)
+  simpleFlagYesNoF = namePrefix : extraFlagAttrs : mkDerivationByConfiguration ( {
+    flagConfig = {
+      flag    = { name = namePrefix + "simpleYes"; 
+                  cfgOption = [ "--Yes" "--you-dont-need-a-list" ]; 
+                  buildInputs = [ "whoGetsTheFlagFirst" ]; 
+                  pass = { inherit gnumake; };
+                  extraConfigureCmd = "echo Hello, it worked! ";
+                  blocks = "bitingMonster";
+                };
+      no_flag = { name = namePrefix + "simpleNo"; 
+                  cfgOption = "--no"; 
+                  implies = ["bitingMonster"];
+                };
+      bitingMonster = {
+                  extraConfigureCmd = "echo Ill bite you";
+                };
+      gnutar = { cfgOption="--with-gnutar";
+                  # buildInputs and pass will be added automatically if gnutar is added to optionals
+               };
+      # can be used to check configure options of dependencies
+      # eg testFlag = { assertion = [ arg.desktop.flag_set_wmii (! arg.desktop.flag_set_gnome) (! arg.desktops.flag_set_kde ]; }
+      assertionFlag = { assertion = false; }; # assert is nix language keyword
+                                        
+    }; 
+
+    collectExtraPhaseActions = [ "extraConfigureCmd" ];
+
+    extraAttrs = co : {
+      name = ( __head (co.collectAttrs "name") );
+
+      unpackPhase = "
+       echo my name is 
+       echo \$name
+       echo
+       echo flag given \\(should be 1 or empty string\\) ? 
+       echo \$flag_set_flag
+       echo
+       echo my build inputs are 
+       echo \$buildInputs
+       echo
+       echo my configuration flags are 
+       echo \$configureFlags
+       echo
+       echo what about gnumake? Did it pass?
+       echo \$gnumake
+       echo 
+       echo configurePhase command is
+       echo $\configurePhase
+       echo 
+       echo gnutar passed? \\(optional test\\)
+       echo \$gnutar
+       echo
+       echo dying now
+       echo die_Hopefully_Soon
+      ";
+    configurePhase = co.extraConfigureCmd;
+    };
+  } // extraFlagAttrs ); 
+
+
+  simpleYes = simpleFlagYesNoF "" {} {
+    inherit whoGetsTheFlagFirst lib stdenv;
+    flags = ["flag"];
+  };
+  # note the "I'll bite you" because of the implies attribute
+  simpleNo = simpleFlagYesNoF "" {} {
+    inherit whoGetsTheFlagFirst lib stdenv;
+    flags = [];
+  };
+
+  # specifying defaults by adding a default attribute
+  
+  yesAgainDefault = simpleFlagYesNoF "default" { defaults = [ "flag" ];} {
+    inherit whoGetsTheFlagFirst lib stdenv;
+  };
+  noAgainOverridingDefault = simpleFlagYesNoF "default" { defaults = [ "flag" ];} {
+    inherit whoGetsTheFlagFirst lib stdenv;
+    flags = [];
+  };
+
+  # requested by Michael Raskin: activate flag automatically if dependency is passed:
+  withGnutarOptional = simpleFlagYesNoF "optionals" { optionals = [ "gnutar" ];} {
+    flags = [ "flag" ]; # I only need to pass this to trigger name optionalssimpleYes
+    inherit whoGetsTheFlagFirst lib stdenv;
+    inherit gnutar;
+  };
+  withoutGnutarOptional = simpleFlagYesNoF "optionals" { optionals = [ "gnutar" ];} {
+    inherit whoGetsTheFlagFirst lib stdenv;
+  };
+
+  # blocking example, this shouldn't even start building:
+  blockingBiteMonster = simpleFlagYesNoF "biting" {} {
+    inherit whoGetsTheFlagFirst lib stdenv;
+    flags = [ "flag" "bitingMonster" ];
+  };
+
+  # assertion example this shouldn't even start building:
+  assertion = simpleFlagYesNoF "assertion" {} {
+    inherit whoGetsTheFlagFirst lib stdenv;
+    flags = [ "assertionFlag" ];
+  };
+*/
diff --git a/pkgs/lib/strings-with-deps.nix b/pkgs/lib/strings-with-deps.nix
index 78cded99ef7..4fb4fe150a7 100644
--- a/pkgs/lib/strings-with-deps.nix
+++ b/pkgs/lib/strings-with-deps.nix
@@ -1,9 +1,24 @@
+/*
+Usage:
+
+  You define you custom builder script by adding all build steps to a list.
+  for example:
+	builder = writeScript "fsg-4.4-builder"
+		(textClosure [doUnpack addInputs preBuild doMake installPhase doForceShare]);
+
+  a step is defined by noDepEntry, FullDepEntry or PackEntry.
+  To ensure that prerequisite are met those are added before the task itself by
+  textClosureDupList. Duplicated items are removed again.
+
+  See trace/nixpkgs/trunk/pkgs/top-level/builder-defs.nix for some predefined build steps
+
+*/
 args: 
 	with args;
 	with lib;
 	let 
 		inherit (builtins)	
-			head tail isList;
+			head tail isList isAttrs;
 in
 rec {
 
@@ -37,12 +52,23 @@ rec {
 			(concatLists (map textClosureDupList arg.deps)) ++ [arg]
 	);
 
-	textClosureList = arg:
+	textClosureDupListOverridable = predefined: arg:
+	(
+		if isList arg then 
+			textClosureDupListOverridable predefined {text = ""; deps = arg;} 
+		else if isAttrs arg then
+			(concatLists (map (textClosureDupListOverridable predefined) arg.deps)) ++ [arg]
+		else
+			textClosureDupListOverridable predefined (getAttr [arg] [] predefined)
+	);
+
+	textClosureListOverridable = predefined: arg:
 		(map	(x : x.text) 
-			(uniqList {inputList = textClosureDupList arg;}));
-	textClosure = arg: concatStringsSep "\n" (textClosureList arg);
+			(uniqList {inputList = textClosureDupListOverridable predefined arg;}));
+	textClosureOverridable = predefined: arg: concatStringsSep "\n" (textClosureListOverridable predefined arg);
 	
-	textClosureMap = f: arg: concatStringsSep "\n" (map f (textClosureList arg));
+	textClosureMapOveridable = f: predefined: arg: 
+		concatStringsSep "\n" (map f (textClosureListOverridable predefined arg));
 
 	noDepEntry = text : {inherit text;deps = [];};
 	FullDepEntry = text : deps: {inherit text deps;};
diff --git a/pkgs/misc/emulators/wine/default.nix b/pkgs/misc/emulators/wine/default.nix
index 8a13c61b557..3127036d68b 100644
--- a/pkgs/misc/emulators/wine/default.nix
+++ b/pkgs/misc/emulators/wine/default.nix
@@ -1,5 +1,6 @@
 { stdenv, fetchurl, xlibs, flex, bison, mesa, alsaLib
 , ncurses, libpng, libjpeg, lcms, freetype, fontconfig, fontforge
+, libxml2, libxslt, openssl
 }:
 
 assert stdenv.isLinux;
@@ -7,28 +8,29 @@ assert stdenv.isLinux;
 let lib = import ../../../lib/default.nix; in
 
 stdenv.mkDerivation {
-  name = "wine-0.9.53";
+  name = "wine-0.9.55";
 
   src = fetchurl {
-		#url = mirror://sourceforge/wine/wine-0.9.49.tar.bz2;
-		url = mirror://sourceforge/wine/wine-0.9.53.tar.bz2;
-		#sha256 = "d41edd08cf7fd21d7350a633995107533a25f925c8859995d3a6fc131f54b3c1";
-		sha256 = "06317d78b7db39458656b6acc6b265ce97f358aefd7ded679263f397a89f1200";
-	};
+    url = mirror://sourceforge/wine/wine-0.9.55.tar.bz2;
+    sha256 = "1qsyd4k7fbv8nsv3y7zi72fakpp6z1idi7afhi87qv9xgqzy3a4d";
+  };
 
   buildInputs = [
     xlibs.xlibs flex bison xlibs.libXi mesa
     xlibs.libXcursor xlibs.libXinerama xlibs.libXrandr
-    xlibs.libXrender xlibs.libXxf86vm alsaLib ncurses
-    libpng libjpeg lcms fontforge
+    xlibs.libXrender xlibs.libXxf86vm xlibs.libXcomposite
+    alsaLib ncurses libpng libjpeg lcms fontforge
+    libxml2 libxslt openssl
   ];
 
   # Wine locates a lot of libraries dynamically through dlopen().  Add
   # them to the RPATH so that the user doesn't have to set them in
   # LD_LIBRARY_PATH.
-  NIX_LDFLAGS = map (path: "-rpath " + path + "/lib") [
+  NIX_LDFLAGS = map (path: "-rpath ${path}/lib") [
     freetype fontconfig stdenv.gcc.gcc mesa mesa.libdrm
-    xlibs.libXinerama xlibs.libXrender xlibs.libXrandr xlibs.libXcursor
+    xlibs.libXinerama xlibs.libXrender xlibs.libXrandr
+    xlibs.libXcursor xlibs.libXcomposite
+    openssl
   ];
 
   # Don't shrink the ELF RPATHs in order to keep the extra RPATH
diff --git a/pkgs/misc/emulators/wine/opengl-child-window.patch b/pkgs/misc/emulators/wine/opengl-child-window.patch
deleted file mode 100644
index 3340ecf7011..00000000000
--- a/pkgs/misc/emulators/wine/opengl-child-window.patch
+++ /dev/null
@@ -1,1286 +0,0 @@
-diff -rc wine-0.9.43-orig/dlls/winex11.drv/dce.c wine-0.9.43/dlls/winex11.drv/dce.c
-*** wine-0.9.43-orig/dlls/winex11.drv/dce.c	2007-08-10 18:18:12.000000000 +0200
---- wine-0.9.43/dlls/winex11.drv/dce.c	2007-08-21 10:20:19.000000000 +0200
-***************
-*** 639,644 ****
---- 639,656 ----
-  
-  
-  /**********************************************************************
-+  *      hwnd_from_dce
-+  *
-+  * Retrieve the HWND from a given dce
-+  */
-+ HWND hwnd_from_dce( struct dce *dce )
-+ {
-+     HWND hwnd = 0;
-+     if (dce) hwnd = dce->hwnd;
-+     return hwnd;
-+ }
-+ 
-+ /**********************************************************************
-   *		WindowFromDC   (X11DRV.@)
-   */
-  HWND X11DRV_WindowFromDC( HDC hdc )
-***************
-*** 650,656 ****
-      EnterCriticalSection( &dce_section );
-      if (!ExtEscape( hdc, X11DRV_ESCAPE, sizeof(escape), (LPCSTR)&escape,
-                      sizeof(dce), (LPSTR)&dce )) dce = NULL;
-!     if (dce) hwnd = dce->hwnd;
-      LeaveCriticalSection( &dce_section );
-      return hwnd;
-  }
---- 662,668 ----
-      EnterCriticalSection( &dce_section );
-      if (!ExtEscape( hdc, X11DRV_ESCAPE, sizeof(escape), (LPCSTR)&escape,
-                      sizeof(dce), (LPSTR)&dce )) dce = NULL;
-!     hwnd = hwnd_from_dce( dce );
-      LeaveCriticalSection( &dce_section );
-      return hwnd;
-  }
-diff -rc wine-0.9.43-orig/dlls/winex11.drv/event.c wine-0.9.43/dlls/winex11.drv/event.c
-*** wine-0.9.43-orig/dlls/winex11.drv/event.c	2007-08-10 18:18:12.000000000 +0200
---- wine-0.9.43/dlls/winex11.drv/event.c	2007-08-21 10:20:19.000000000 +0200
-***************
-*** 957,962 ****
---- 957,973 ----
-          return X11DRV_AcquireClipboard( hwnd );
-      case WM_X11DRV_DELETE_WINDOW:
-          return SendMessageW( hwnd, WM_SYSCOMMAND, SC_CLOSE, 0 );
-+     case WM_X11DRV_GET_PARENT_INFO:
-+         {
-+             struct x11drv_win_data *data = X11DRV_get_win_data( hwnd );
-+             if (data)
-+             {
-+                 ((void**)lp)[0] = &data->client_rect;
-+                 ((void**)lp)[1] = thread_display();
-+                 return 1;
-+             }
-+         }
-+         return 0;
-      default:
-          FIXME( "got window msg %x hwnd %p wp %lx lp %lx\n", msg, hwnd, wp, lp );
-          return 0;
-Only in wine-0.9.43/dlls/winex11.drv: event.c.orig
-diff -rc wine-0.9.43-orig/dlls/winex11.drv/init.c wine-0.9.43/dlls/winex11.drv/init.c
-*** wine-0.9.43-orig/dlls/winex11.drv/init.c	2007-08-10 18:18:12.000000000 +0200
---- wine-0.9.43/dlls/winex11.drv/init.c	2007-08-21 10:20:19.000000000 +0200
-***************
-*** 129,134 ****
---- 129,135 ----
-      if (!physDev) return FALSE;
-  
-      *pdev = physDev;
-+     physDev->display = gdi_display;
-      physDev->hdc = hdc;
-  
-      if (GetObjectType( hdc ) == OBJ_MEMDC)
-Only in wine-0.9.43/dlls/winex11.drv: init.c.orig
-diff -rc wine-0.9.43-orig/dlls/winex11.drv/opengl.c wine-0.9.43/dlls/winex11.drv/opengl.c
-*** wine-0.9.43-orig/dlls/winex11.drv/opengl.c	2007-08-10 18:18:12.000000000 +0200
---- wine-0.9.43/dlls/winex11.drv/opengl.c	2007-08-21 10:31:52.000000000 +0200
-***************
-*** 575,583 ****
-      int tmp;
-      int ctx_vis_id;
-      TRACE(" Context %p have (vis:%p):\n", ctx, ctx->vis);
-!     pglXGetFBConfigAttrib(gdi_display, ctx->fmt->fbconfig, GLX_FBCONFIG_ID, &tmp);
-      TRACE(" - FBCONFIG_ID 0x%x\n", tmp);
-!     pglXGetFBConfigAttrib(gdi_display, ctx->fmt->fbconfig, GLX_VISUAL_ID, &tmp);
-      TRACE(" - VISUAL_ID 0x%x\n", tmp);
-      ctx_vis_id = tmp;
-      return ctx_vis_id;
---- 575,583 ----
-      int tmp;
-      int ctx_vis_id;
-      TRACE(" Context %p have (vis:%p):\n", ctx, ctx->vis);
-!     pglXGetFBConfigAttrib(ctx->physDev->display, ctx->fmt->fbconfig, GLX_FBCONFIG_ID, &tmp);
-      TRACE(" - FBCONFIG_ID 0x%x\n", tmp);
-!     pglXGetFBConfigAttrib(ctx->physDev->display, ctx->fmt->fbconfig, GLX_VISUAL_ID, &tmp);
-      TRACE(" - VISUAL_ID 0x%x\n", tmp);
-      ctx_vis_id = tmp;
-      return ctx_vis_id;
-***************
-*** 595,614 ****
-      }
-  
-      TRACE(" Drawable %p have :\n", (void*) drawable);
-!     pglXQueryDrawable(gdi_display, drawable, GLX_WIDTH, (unsigned int*) &tmp);
-      TRACE(" - WIDTH as %d\n", tmp);
-!     pglXQueryDrawable(gdi_display, drawable, GLX_HEIGHT, (unsigned int*) &tmp);
-      TRACE(" - HEIGHT as %d\n", tmp);
-!     pglXQueryDrawable(gdi_display, drawable, GLX_FBCONFIG_ID, (unsigned int*) &tmp);
-      TRACE(" - FBCONFIG_ID as 0x%x\n", tmp);
-  
-      attribList[1] = tmp;
-!     fbCfgs = pglXChooseFBConfig(gdi_display, DefaultScreen(gdi_display), attribList, &nElements);
-      if (fbCfgs == NULL) {
-          return -1;
-      }
-  
-!     pglXGetFBConfigAttrib(gdi_display, fbCfgs[0], GLX_VISUAL_ID, &tmp);
-      TRACE(" - VISUAL_ID as 0x%x\n", tmp);
-  
-      XFree(fbCfgs);
---- 595,614 ----
-      }
-  
-      TRACE(" Drawable %p have :\n", (void*) drawable);
-!     pglXQueryDrawable(ctx->physDev->display, drawable, GLX_WIDTH, (unsigned int*) &tmp);
-      TRACE(" - WIDTH as %d\n", tmp);
-!     pglXQueryDrawable(ctx->physDev->display, drawable, GLX_HEIGHT, (unsigned int*) &tmp);
-      TRACE(" - HEIGHT as %d\n", tmp);
-!     pglXQueryDrawable(ctx->physDev->display, drawable, GLX_FBCONFIG_ID, (unsigned int*) &tmp);
-      TRACE(" - FBCONFIG_ID as 0x%x\n", tmp);
-  
-      attribList[1] = tmp;
-!     fbCfgs = pglXChooseFBConfig(ctx->physDev->display, DefaultScreen(gdi_display), attribList, &nElements);
-      if (fbCfgs == NULL) {
-          return -1;
-      }
-  
-!     pglXGetFBConfigAttrib(ctx->physDev->display, fbCfgs[0], GLX_VISUAL_ID, &tmp);
-      TRACE(" - VISUAL_ID as 0x%x\n", tmp);
-  
-      XFree(fbCfgs);
-***************
-*** 1236,1265 ****
-  
-    wine_tsx11_lock();
-  
-!   pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_CONFIG_CAVEAT, &value);
-    if(value == GLX_SLOW_CONFIG)
-        ppfd->dwFlags |= PFD_GENERIC_ACCELERATED;
-  
-!   pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_DOUBLEBUFFER, &value); if (value) ppfd->dwFlags |= PFD_DOUBLEBUFFER;
-!   pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_STEREO, &value); if (value) ppfd->dwFlags |= PFD_STEREO;
-  
-    /* Pixel type */
-!   pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_RENDER_TYPE, &value);
-    if (value & GLX_RGBA_BIT)
-      ppfd->iPixelType = PFD_TYPE_RGBA;
-    else
-      ppfd->iPixelType = PFD_TYPE_COLORINDEX;
-  
-    /* Color bits */
-!   pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_BUFFER_SIZE, &value);
-    ppfd->cColorBits = value;
-  
-    /* Red, green, blue and alpha bits / shifts */
-    if (ppfd->iPixelType == PFD_TYPE_RGBA) {
-!     pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_RED_SIZE, &rb);
-!     pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_GREEN_SIZE, &gb);
-!     pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_BLUE_SIZE, &bb);
-!     pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_ALPHA_SIZE, &ab);
-  
-      ppfd->cRedBits = rb;
-      ppfd->cRedShift = gb + bb + ab;
---- 1236,1265 ----
-  
-    wine_tsx11_lock();
-  
-!   pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_CONFIG_CAVEAT, &value);
-    if(value == GLX_SLOW_CONFIG)
-        ppfd->dwFlags |= PFD_GENERIC_ACCELERATED;
-  
-!   pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_DOUBLEBUFFER, &value); if (value) ppfd->dwFlags |= PFD_DOUBLEBUFFER;
-!   pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_STEREO, &value); if (value) ppfd->dwFlags |= PFD_STEREO;
-  
-    /* Pixel type */
-!   pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_RENDER_TYPE, &value);
-    if (value & GLX_RGBA_BIT)
-      ppfd->iPixelType = PFD_TYPE_RGBA;
-    else
-      ppfd->iPixelType = PFD_TYPE_COLORINDEX;
-  
-    /* Color bits */
-!   pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_BUFFER_SIZE, &value);
-    ppfd->cColorBits = value;
-  
-    /* Red, green, blue and alpha bits / shifts */
-    if (ppfd->iPixelType == PFD_TYPE_RGBA) {
-!     pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_RED_SIZE, &rb);
-!     pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_GREEN_SIZE, &gb);
-!     pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_BLUE_SIZE, &bb);
-!     pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_ALPHA_SIZE, &ab);
-  
-      ppfd->cRedBits = rb;
-      ppfd->cRedShift = gb + bb + ab;
-***************
-*** 1293,1303 ****
-    ppfd->cAccumAlphaBits = ab;
-  
-    /* Depth bits */
-!   pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_DEPTH_SIZE, &value);
-    ppfd->cDepthBits = value;
-  
-    /* stencil bits */
-!   pglXGetFBConfigAttrib(gdi_display, fmt->fbconfig, GLX_STENCIL_SIZE, &value);
-    ppfd->cStencilBits = value;
-  
-    wine_tsx11_unlock();
---- 1293,1303 ----
-    ppfd->cAccumAlphaBits = ab;
-  
-    /* Depth bits */
-!   pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_DEPTH_SIZE, &value);
-    ppfd->cDepthBits = value;
-  
-    /* stencil bits */
-!   pglXGetFBConfigAttrib(physDev->display, fmt->fbconfig, GLX_STENCIL_SIZE, &value);
-    ppfd->cStencilBits = value;
-  
-    wine_tsx11_unlock();
-***************
-*** 1350,1357 ****
---- 1350,1365 ----
-  BOOL X11DRV_SetPixelFormat(X11DRV_PDEVICE *physDev,
-  			   int iPixelFormat,
-  			   const PIXELFORMATDESCRIPTOR *ppfd) {
-+   XSetWindowAttributes attr;
-+   XVisualInfo *vis;
-+   XVisualInfo template;
-+   Display *display;
-+   Window gl_child;
-+   HWND main_hwnd;
-+   RECT rect;
-    WineGLPixelFormat *fmt;
-    int value;
-+   int num;
-  
-    TRACE("(%p,%d,%p)\n", physDev, iPixelFormat, ppfd);
-  
-***************
-*** 1374,1380 ****
---- 1382,1494 ----
-      return 0;
-    }
-  
-+   /* Check for an existing pixel format */
-+   if (physDev->current_pf) {
-+     if (physDev->current_pf != iPixelFormat) {
-+       ERR("Pixel format already set for physDev (cur: %d, req: %d)\n", physDev->current_pf, iPixelFormat);
-+       return 0;
-+     }
-+     /* TODO: test if the current gl_drawable is still valid */
-+   }
-+ 
-+   /* Check the window we'll be parenting from */
-+   if (!physDev->drawable) {
-+     ERR("No drawable associated with physDev %p\n", physDev);
-+     return 0;
-+   }
-+ 
-+ 
-+   /* Get the window and display for the opengl child */
-+   main_hwnd = hwnd_from_dce(physDev->dce);
-+   display = X11DRV_get_gl_display(main_hwnd);
-+ 
-+   TRACE("main_hwnd: %p\n", main_hwnd);
-+   /* Make sure this window doesn't already have a gl drawable */
-+   if (physDev->gl_drawable) {
-+         /* Check if the gl_drawable is still valid */
-+         if(X11DRV_get_gl_window(main_hwnd) == 0)
-+             physDev->gl_drawable = 0;
-+         else
-+             WARN("Window already has an opengl child (%p), possible window leak!\n", (void*)physDev->gl_drawable);
-+ 
-+     physDev->gl_drawable = 0;
-+     X11DRV_set_gl_window(main_hwnd, 0);
-+   }
-+ 
-+   /* Force semi-sane values */
-+   rect = physDev->dc_rect;
-+   if (rect.right <= rect.left) {
-+     rect.right = 0;
-+     rect.left = -16;
-+   }
-+   if (rect.bottom <= rect.top) {
-+     rect.bottom = 0;
-+     rect.top = -16;
-+   }
-+ 
-+   wine_tsx11_lock();
-+ 
-+   /* Get the visual for the X11 child window and set up a colormap for it */
-+   template.visualid = XVisualIDFromVisual(visual);
-+   vis = XGetVisualInfo(gdi_display, VisualIDMask, &template, &num);
-+   if (!vis) {
-+     wine_tsx11_unlock();
-+     ERR("No visual for pixel format %i\n", iPixelFormat);
-+     return 0;
-+   }
-+ 
-+   if ((vis->class == PseudoColor) || (vis->class == GrayScale) ||
-+       (vis->class == DirectColor)) {
-+     attr.colormap = XCreateColormap(display, physDev->drawable, vis->visual, AllocAll);
-+   }
-+   else {
-+     attr.colormap = XCreateColormap(display, physDev->drawable, vis->visual, AllocNone);
-+   }
-+   XInstallColormap(display, attr.colormap);
-+ 
-+   TRACE("Creating X11 window x=%d,y=%d,w=%d,h=%d, parent=%p\n", rect.left, rect.top,
-+         rect.right-rect.left, rect.bottom-rect.top, (void*)physDev->drawable);
-+ 
-+   /* Create the window */
-+   gl_child = XCreateWindow(display, physDev->drawable, rect.left, rect.top,
-+ //  gl_child = XCreateWindow(display, RootWindow(display, DefaultScreen(display)), rect.left, rect.top,
-+                            rect.right-rect.left, rect.bottom-rect.top, 0,
-+                            CopyFromParent, InputOutput, vis->visual,
-+                            CWColormap, &attr);
-+ 
-+   XFree(vis);
-+   wine_tsx11_unlock();
-+ 
-+   if (!gl_child) {
-+     ERR("Could not create OpenGL child window!\n");
-+     return 0;
-+   }
-+ 
-+   if(!X11DRV_set_gl_window(main_hwnd, gl_child)) {
-+     wine_tsx11_lock();
-+     XDestroyWindow(display, gl_child);
-+     wine_tsx11_unlock();
-+     ERR("Could not set OpenGL child window for hwnd %p!\n", main_hwnd);
-+     return 0;
-+   }
-+ 
-+   TRACE("Created window %p\n", (void*)gl_child);
-+ 
-    physDev->current_pf = iPixelFormat;
-+ //if(physDev->dc_rect.left != 4)
-+ //physDev->gl_drawable = 0;
-+ //else
-+   physDev->gl_drawable = gl_child;
-+   physDev->display = display;
-+ 
-+   /* Finally, map the child if the window is visible */
-+   if (X11DRV_is_window_rect_mapped(&physDev->dc_rect) &&
-+       X11DRV_get_visible(main_hwnd)) {
-+     wine_tsx11_lock();
-+ //    if(physDev->dc_rect.left == 4)
-+     XMapWindow(physDev->display, physDev->gl_drawable);
-+     wine_tsx11_unlock();
-+   }
-  
-    if (TRACE_ON(opengl)) {
-      int gl_test = 0;
-***************
-*** 1407,1412 ****
---- 1521,1527 ----
-        TRACE(" - DRAWABLE_TYPE 0x%x\n", value);
-      }
-    }
-+ 
-    return TRUE;
-  }
-  
-***************
-*** 1468,1474 ****
-      ret->fmt = fmt;
-  
-      /*ret->vis = vis;*/
-!     ret->vis = pglXGetVisualFromFBConfig(gdi_display, fmt->fbconfig);
-  
-      TRACE(" creating context %p (GL context creation delayed)\n", ret);
-      return (HGLRC) ret;
---- 1583,1589 ----
-      ret->fmt = fmt;
-  
-      /*ret->vis = vis;*/
-!     ret->vis = pglXGetVisualFromFBConfig(physDev->display, fmt->fbconfig);
-  
-      TRACE(" creating context %p (GL context creation delayed)\n", ret);
-      return (HGLRC) ret;
-***************
-*** 1496,1502 ****
-      * so make sure it is valid first */
-      if (is_valid_context( ctx ))
-      {
-!         if (ctx->ctx) pglXDestroyContext(gdi_display, ctx->ctx);
-          free_context(ctx);
-      }
-      else
---- 1611,1617 ----
-      * so make sure it is valid first */
-      if (is_valid_context( ctx ))
-      {
-!         if (ctx->ctx) pglXDestroyContext(ctx->physDev->display, ctx->ctx);
-          free_context(ctx);
-      }
-      else
-***************
-*** 1579,1584 ****
---- 1694,1700 ----
-   */
-  static void sync_current_drawable(BOOL updatedc)
-  {
-+ #if 0
-      int dy;
-      int width;
-      int height;
-***************
-*** 1616,1621 ****
---- 1732,1738 ----
-  
-          wine_tsx11_unlock();
-      }
-+ #endif
-  }
-  
-  /**
-***************
-*** 1628,1634 ****
-      HDC hdc = physDev->hdc;
-      DWORD type = GetObjectType(hdc);
-  
-!     TRACE("(%p,%p)\n", hdc, hglrc);
-  
-      if (!has_opengl()) {
-          ERR("No libGL on this box - disabling OpenGL support !\n");
---- 1745,1751 ----
-      HDC hdc = physDev->hdc;
-      DWORD type = GetObjectType(hdc);
-  
-!     TRACE("(%p %p,%p)\n", physDev, hdc, hglrc);
-  
-      if (!has_opengl()) {
-          ERR("No libGL on this box - disabling OpenGL support !\n");
-***************
-*** 1637,1643 ****
-  
-      wine_tsx11_lock();
-      if (hglrc == NULL) {
-!         ret = pglXMakeCurrent(gdi_display, None, NULL);
-          NtCurrentTeb()->glContext = NULL;
-      } else {
-          Wine_GLContext *ctx = (Wine_GLContext *) hglrc;
---- 1754,1760 ----
-  
-      wine_tsx11_lock();
-      if (hglrc == NULL) {
-!         ret = pglXMakeCurrent(physDev->display, None, NULL);
-          NtCurrentTeb()->glContext = NULL;
-      } else {
-          Wine_GLContext *ctx = (Wine_GLContext *) hglrc;
-***************
-*** 1654,1668 ****
-               */
-              TRACE(" Creating GLX Context\n");
-              if(ctx->vis)
-!                 ctx->ctx = pglXCreateContext(gdi_display, ctx->vis, NULL, type == OBJ_MEMDC ? False : True);
-              else /* Create a GLX Context for a pbuffer */
-!                 ctx->ctx = pglXCreateNewContext(gdi_display, ctx->fmt->fbconfig, ctx->fmt->render_type, NULL, True);
-  
-              TRACE(" created a delayed OpenGL context (%p)\n", ctx->ctx);
-          }
-!         TRACE(" make current for dis %p, drawable %p, ctx %p\n", gdi_display, (void*) drawable, ctx->ctx);
-!         ret = pglXMakeCurrent(gdi_display, drawable, ctx->ctx);
-          NtCurrentTeb()->glContext = ctx;
-          if(ret)
-          {
-              ctx->physDev = physDev;
---- 1771,1786 ----
-               */
-              TRACE(" Creating GLX Context\n");
-              if(ctx->vis)
-!                 ctx->ctx = pglXCreateContext(physDev->display, ctx->vis, NULL, type == OBJ_MEMDC ? False : True);
-              else /* Create a GLX Context for a pbuffer */
-!                 ctx->ctx = pglXCreateNewContext(physDev->display, ctx->fmt->fbconfig, ctx->fmt->render_type, NULL, True);
-  
-              TRACE(" created a delayed OpenGL context (%p)\n", ctx->ctx);
-          }
-!         TRACE(" make current for dis %p, drawable %p, ctx %p\n", physDev->display, (void*) drawable, ctx->ctx);
-!         ret = pglXMakeCurrent(physDev->display, drawable, ctx->ctx);
-          NtCurrentTeb()->glContext = ctx;
-+         
-          if(ret)
-          {
-              ctx->physDev = physDev;
-***************
-*** 1711,1720 ****
-              Drawable d_read = get_glxdrawable(hReadDev);
-  
-              if (ctx->ctx == NULL) {
-!                 ctx->ctx = pglXCreateContext(gdi_display, ctx->vis, NULL, GetObjectType(hDrawDev->hdc) == OBJ_MEMDC ? False : True);
-                  TRACE(" created a delayed OpenGL context (%p)\n", ctx->ctx);
-              }
-!             ret = pglXMakeContextCurrent(gdi_display, d_draw, d_read, ctx->ctx);
-              NtCurrentTeb()->glContext = ctx;
-          }
-      }
---- 1829,1838 ----
-              Drawable d_read = get_glxdrawable(hReadDev);
-  
-              if (ctx->ctx == NULL) {
-!                 ctx->ctx = pglXCreateContext(ctx->physDev->display, ctx->vis, NULL, GetObjectType(hDrawDev->hdc) == OBJ_MEMDC ? False : True);
-                  TRACE(" created a delayed OpenGL context (%p)\n", ctx->ctx);
-              }
-!             ret = pglXMakeContextCurrent(ctx->physDev->display, d_draw, d_read, ctx->ctx);
-              NtCurrentTeb()->glContext = ctx;
-          }
-      }
-***************
-*** 1749,1757 ****
-              describeContext(org);
-  
-              if(org->vis)
-!                 org->ctx = pglXCreateContext(gdi_display, org->vis, NULL, GetObjectType(org->physDev->hdc) == OBJ_MEMDC ? False : True);
-              else /* Create a GLX Context for a pbuffer */
-!                 org->ctx = pglXCreateNewContext(gdi_display, org->fmt->fbconfig, org->fmt->render_type, NULL, True);
-              wine_tsx11_unlock();
-              TRACE(" created a delayed OpenGL context (%p) for Wine context %p\n", org->ctx, org);
-          }
---- 1867,1875 ----
-              describeContext(org);
-  
-              if(org->vis)
-!                 org->ctx = pglXCreateContext(org->physDev->display, org->vis, NULL, GetObjectType(org->physDev->hdc) == OBJ_MEMDC ? False : True);
-              else /* Create a GLX Context for a pbuffer */
-!                 org->ctx = pglXCreateNewContext(org->physDev->display, org->fmt->fbconfig, org->fmt->render_type, NULL, True);
-              wine_tsx11_unlock();
-              TRACE(" created a delayed OpenGL context (%p) for Wine context %p\n", org->ctx, org);
-          }
-***************
-*** 1760,1768 ****
-              describeContext(dest);
-              /* Create the destination context with display lists shared */
-              if(dest->vis)
-!                 dest->ctx = pglXCreateContext(gdi_display, dest->vis, org->ctx, GetObjectType(org->physDev->hdc) == OBJ_MEMDC ? False : True);
-              else /* Create a GLX Context for a pbuffer */
-!                 dest->ctx = pglXCreateNewContext(gdi_display, dest->fmt->fbconfig, dest->fmt->render_type, org->ctx, True);
-              wine_tsx11_unlock();
-              TRACE(" created a delayed OpenGL context (%p) for Wine context %p sharing lists with OpenGL ctx %p\n", dest->ctx, dest, org->ctx);
-              return TRUE;
---- 1878,1886 ----
-              describeContext(dest);
-              /* Create the destination context with display lists shared */
-              if(dest->vis)
-!                 dest->ctx = pglXCreateContext(dest->physDev->display, dest->vis, org->ctx, GetObjectType(org->physDev->hdc) == OBJ_MEMDC ? False : True);
-              else /* Create a GLX Context for a pbuffer */
-!                 dest->ctx = pglXCreateNewContext(dest->physDev->display, dest->fmt->fbconfig, dest->fmt->render_type, org->ctx, True);
-              wine_tsx11_unlock();
-              TRACE(" created a delayed OpenGL context (%p) for Wine context %p sharing lists with OpenGL ctx %p\n", dest->ctx, dest, org->ctx);
-              return TRUE;
-***************
-*** 1937,1942 ****
---- 2055,2061 ----
-  
-  static void WINAPI X11DRV_wglDisable(GLenum cap)
-  {
-+ #if 0
-      if (cap == GL_SCISSOR_TEST)
-      {
-         Wine_GLContext *ctx = (Wine_GLContext *) NtCurrentTeb()->glContext;
-***************
-*** 1945,1950 ****
---- 2064,2070 ----
-            ctx->scissor_enabled = FALSE;
-      }
-      else
-+ #endif
-      {
-          wine_tsx11_lock();
-          pglDisable(cap);
-***************
-*** 1954,1959 ****
---- 2074,2080 ----
-  
-  static void WINAPI X11DRV_wglEnable(GLenum cap)
-  {
-+ #if 0
-      if (cap == GL_SCISSOR_TEST)
-      {
-         Wine_GLContext *ctx = (Wine_GLContext *) NtCurrentTeb()->glContext;
-***************
-*** 1962,1967 ****
---- 2083,2089 ----
-             ctx->scissor_enabled = TRUE;
-      }
-      else
-+ #endif
-      {
-          wine_tsx11_lock();
-          pglEnable(cap);
-***************
-*** 2012,2017 ****
---- 2134,2140 ----
-  {
-      GLboolean enabled = False;
-  
-+ #if 0
-      if (cap == GL_SCISSOR_TEST)
-      {
-         Wine_GLContext *ctx = (Wine_GLContext *) NtCurrentTeb()->glContext;
-***************
-*** 2020,2025 ****
---- 2143,2149 ----
-             enabled = ctx->scissor_enabled;
-      }
-      else
-+ #endif
-      {
-          wine_tsx11_lock();
-          enabled = pglIsEnabled(cap);
-***************
-*** 2030,2035 ****
---- 2154,2160 ----
-  
-  static void WINAPI X11DRV_wglScissor(GLint x, GLint y, GLsizei width, GLsizei height)
-  {
-+ #if 0
-      Wine_GLContext *ctx = (Wine_GLContext *) NtCurrentTeb()->glContext;
-  
-      if (ctx)
-***************
-*** 2041,2050 ****
---- 2166,2181 ----
-  
-          sync_current_drawable(TRUE);
-      }
-+ #else
-+     wine_tsx11_lock();
-+     pglScissor(x, y, width, height);
-+     wine_tsx11_unlock();
-+ #endif
-  }
-  
-  static void WINAPI X11DRV_wglViewport(GLint x, GLint y, GLsizei width, GLsizei height)
-  {
-+ #if 0
-      Wine_GLContext *ctx = (Wine_GLContext *) NtCurrentTeb()->glContext;
-  
-      if (ctx)
-***************
-*** 2056,2061 ****
---- 2187,2197 ----
-  
-          sync_current_drawable(TRUE);
-      }
-+ #else
-+     wine_tsx11_lock();
-+     pglViewport(x, y, width, height);
-+     wine_tsx11_unlock();
-+ #endif
-  }
-  
-  /**
-***************
-*** 2327,2332 ****
---- 2463,2469 ----
-  
-      /* The function wglGetPbufferDCARB returns a DC to which the pbuffer can be connected.
-       * All formats in our pixelformat list are compatible with each other and the main drawable. */
-+     physDev->display = object->display;
-      physDev->current_pf = object->fmt->iPixelFormat;
-      physDev->drawable = object->drawable;
-      SetRect( &physDev->drawable_rect, 0, 0, object->width, object->height );
-***************
-*** 3234,3241 ****
---- 3371,3381 ----
-              ret = physDev->bitmap->glxpixmap;
-          }
-      }
-+     else if(physDev->gl_drawable)
-+         ret = physDev->gl_drawable;
-      else
-          ret = physDev->drawable;
-+ 
-      return ret;
-  }
-  
-***************
-*** 3264,3270 ****
-  
-    drawable = get_glxdrawable(physDev);
-    wine_tsx11_lock();
-!   pglXSwapBuffers(gdi_display, drawable);
-    wine_tsx11_unlock();
-  
-    /* FPS support */
---- 3404,3410 ----
-  
-    drawable = get_glxdrawable(physDev);
-    wine_tsx11_lock();
-!   pglXSwapBuffers(physDev->display, drawable);
-    wine_tsx11_unlock();
-  
-    /* FPS support */
-***************
-*** 3285,3290 ****
---- 3425,3431 ----
-    return TRUE;
-  }
-  
-+ 
-  /***********************************************************************
-   *		X11DRV_setup_opengl_visual
-   *
-Only in wine-0.9.43/dlls/winex11.drv: opengl.c.orig
-Only in wine-0.9.43/dlls/winex11.drv: opengl.c.rej
-Only in wine-0.9.43/dlls/winex11.drv: opengl.c~
-diff -rc wine-0.9.43-orig/dlls/winex11.drv/window.c wine-0.9.43/dlls/winex11.drv/window.c
-*** wine-0.9.43-orig/dlls/winex11.drv/window.c	2007-08-10 18:18:12.000000000 +0200
---- wine-0.9.43/dlls/winex11.drv/window.c	2007-08-21 10:20:19.000000000 +0200
-***************
-*** 55,61 ****
---- 55,64 ----
-  
-  static const char whole_window_prop[] = "__wine_x11_whole_window";
-  static const char icon_window_prop[]  = "__wine_x11_icon_window";
-+ static const char gl_display_prop[]   = "__wine_x11_gl_display";
-+ static const char gl_winptr_prop[]    = "__wine_x11_gl_winptr";
-  static const char managed_prop[]      = "__wine_x11_managed";
-+ static const char visible_prop[]      = "__wine_x11_visible";
-  static const char visual_id_prop[]    = "__wine_x11_visual_id";
-  
-  /* for XDG systray icons */
-***************
-*** 604,632 ****
-      BOOL iconic = (style & WS_MINIMIZE) != 0;
-  
-      if (!(data = X11DRV_get_win_data( hwnd ))) return;
-!     if (!data->whole_window || data->whole_window == DefaultRootWindow(display)) return;
-  
-      GetWindowRect( hwnd, &rect );
-  
-      wine_tsx11_lock();
-  
-!     if (!(wm_hints = XGetWMHints( display, data->whole_window ))) wm_hints = XAllocWMHints();
-!     wm_hints->flags |= StateHint | IconPositionHint;
-!     wm_hints->initial_state = iconic ? IconicState : NormalState;
-!     wm_hints->icon_x = rect.left - virtual_screen_rect.left;
-!     wm_hints->icon_y = rect.top - virtual_screen_rect.top;
-!     XSetWMHints( display, data->whole_window, wm_hints );
-! 
-!     if (style & WS_VISIBLE)
-      {
-!         if (iconic)
-!             XIconifyWindow( display, data->whole_window, DefaultScreen(display) );
-!         else
-!             if (X11DRV_is_window_rect_mapped( &rect ))
-!                 XMapWindow( display, data->whole_window );
-      }
-  
-!     XFree(wm_hints);
-      wine_tsx11_unlock();
-  }
-  
---- 607,650 ----
-      BOOL iconic = (style & WS_MINIMIZE) != 0;
-  
-      if (!(data = X11DRV_get_win_data( hwnd ))) return;
-!     if ((!data->whole_window && !data->gl_window) || data->whole_window == DefaultRootWindow(display)) return;
-  
-      GetWindowRect( hwnd, &rect );
-  
-      wine_tsx11_lock();
-  
-!     if (data->gl_window)
-      {
-!         if (style & WS_VISIBLE)
-!         {
-!             if (iconic)
-!                 XUnmapWindow( data->gl_display, data->gl_window );
-!             else
-!                 if (X11DRV_is_window_rect_mapped( &rect ))
-!                     XMapWindow( data->gl_display, data->gl_window );
-!         }
-      }
-  
-!     if (data->whole_window)
-!     {
-!         if (!(wm_hints = XGetWMHints( display, data->whole_window ))) wm_hints = XAllocWMHints();
-!         wm_hints->flags |= StateHint | IconPositionHint;
-!         wm_hints->initial_state = iconic ? IconicState : NormalState;
-!         wm_hints->icon_x = rect.left - virtual_screen_rect.left;
-!         wm_hints->icon_y = rect.top - virtual_screen_rect.top;
-!         XSetWMHints( display, data->whole_window, wm_hints );
-! 
-!         if (style & WS_VISIBLE)
-!         {
-!             if (iconic)
-!                 XIconifyWindow( display, data->whole_window, DefaultScreen(display) );
-!             else
-!                 if (X11DRV_is_window_rect_mapped( &rect ))
-!                     XMapWindow( display, data->whole_window );
-!         }
-! 
-!         XFree(wm_hints);
-!     }
-      wine_tsx11_unlock();
-  }
-  
-***************
-*** 694,699 ****
---- 712,748 ----
-      data->client_rect = *new_client_rect;
-      OffsetRect( &data->client_rect, -data->whole_rect.left, -data->whole_rect.top );
-  
-+     if (data->gl_window)
-+     {
-+         changes.width = data->client_rect.right - data->client_rect.left;
-+         changes.height = data->client_rect.bottom - data->client_rect.top;
-+ 
-+         if ( changes.width > 0 && changes.height > 0 )
-+         {
-+             POINT pt;
-+             pt.x = data->gl_offset->left;
-+             pt.y = data->gl_offset->top;
-+             if (data->hwnd != data->gl_parent)
-+                 MapWindowPoints( data->hwnd, data->gl_parent, &pt, 1 );
-+ 
-+             changes.x = pt.x;
-+             changes.y = pt.y;
-+ 
-+             TRACE( "setting gl_win %lx pos %d,%d,%dx%d\n",
-+                    data->gl_window, changes.x, changes.y,
-+                    changes.width, changes.height );
-+ 
-+             wine_tsx11_lock();
-+             XReconfigureWMWindow( data->gl_display, data->gl_window,
-+                                   DefaultScreen(data->gl_display),
-+                                   CWX|CWY|CWWidth|CWHeight, &changes );
-+             wine_tsx11_unlock();
-+         }
-+ 
-+         if (!data->whole_window)
-+             return;
-+     }
-+ 
-      if (!data->whole_window || data->lock_changes) return;
-  
-      mask = get_window_changes( &changes, &old_whole_rect, &data->whole_rect );
-***************
-*** 905,910 ****
---- 954,963 ----
-      if (!(data = X11DRV_get_win_data( hwnd ))) return;
-  
-      free_window_dce( data );
-+     wine_tsx11_lock();
-+ 
-+     if (data->gl_window) XDestroyWindow( data->gl_display, data->gl_window );
-+     wine_tsx11_unlock();
-      destroy_whole_window( display, data );
-      destroy_icon_window( display, data );
-  
-***************
-*** 927,932 ****
---- 980,989 ----
-          data->hwnd          = hwnd;
-          data->whole_window  = 0;
-          data->icon_window   = 0;
-+         data->gl_window     = 0;
-+         data->gl_parent     = 0;
-+         data->gl_offset     = NULL;
-+         data->gl_display    = NULL;
-          data->xic           = 0;
-          data->managed       = FALSE;
-          data->dce           = NULL;
-***************
-*** 1056,1061 ****
---- 1113,1147 ----
-      /* get class or window DC if needed */
-      alloc_window_dce( data );
-  
-+     if (!data->whole_window)
-+     {
-+         HWND parent = hwnd;
-+         while ((parent = GetAncestor( parent, GA_PARENT )))
-+         {
-+             if (X11DRV_get_whole_window( parent ))
-+             {
-+                 void *params[2];
-+                 SendMessageW( parent, WM_X11DRV_GET_PARENT_INFO, 0, (LPARAM)params );
-+                 data->gl_parent = parent;
-+                 data->gl_offset = params[0];
-+                 data->gl_display = params[1];
-+                 break;
-+             }
-+         }
-+         if (!parent)
-+             ERR( "Could not find drawable parent for HWND %p!\n", hwnd );
-+     }
-+     else
-+     {
-+         data->gl_parent = data->hwnd;
-+         data->gl_offset = &data->client_rect;
-+         data->gl_display = thread_display();
-+     }
-+ 
-+     SetPropA( hwnd, gl_display_prop, (HANDLE)data->gl_display );
-+     SetPropA( hwnd, gl_winptr_prop, (HANDLE)&data->gl_window );
-+     SetPropA( hwnd, visible_prop, (HANDLE)!!(cs->style&WS_VISIBLE) );
-+ 
-      /* Call the WH_CBT hook */
-  
-      /* the window style passed to the hook must be the real window style,
-***************
-*** 1216,1221 ****
---- 1302,1394 ----
-  
-  
-  /***********************************************************************
-+  *		X11DRV_get_gl_display
-+  *
-+  * Return the X display associated with the full area of a window
-+  */
-+ Display *X11DRV_get_gl_display( HWND hwnd )
-+ {
-+     struct x11drv_win_data *data = X11DRV_get_win_data( hwnd );
-+ 
-+     if (!data) return (Display *)GetPropA( hwnd, gl_display_prop );
-+     return data->gl_display;
-+ }
-+ 
-+ 
-+ /***********************************************************************
-+  *		X11DRV_get_visible
-+  *
-+  * Returns if the window has the WS_VISIBLE style or not
-+  */
-+ BOOL X11DRV_get_visible( HWND hwnd )
-+ {
-+     return (BOOL)GetPropA( hwnd, visible_prop );
-+ }
-+ 
-+ 
-+ /***********************************************************************
-+  *		X11DRV_set_visible
-+  *
-+  * Stores the WS_VISIBLE style for the window in a prop
-+  */
-+ BOOL X11DRV_set_visible( HWND hwnd, BOOL is_visible )
-+ {
-+     return (BOOL)SetPropA( hwnd, visible_prop, (HANDLE)is_visible );
-+ }
-+ 
-+ 
-+ /***********************************************************************
-+  *		X11DRV_set_gl_window
-+  *
-+  * Retrieve the OpenGL child window from the HWND
-+  */
-+ Window X11DRV_get_gl_window( HWND hwnd )
-+ {
-+     struct x11drv_win_data *data = X11DRV_get_win_data( hwnd );
-+ 
-+     if (!data)
-+     {
-+         Window *WinPtr = (Window *)GetPropA( hwnd, gl_winptr_prop );
-+         return *WinPtr;
-+     }
-+     else
-+     {
-+         return data->gl_window;
-+     }
-+ 
-+     return 0;
-+ }
-+ 
-+ 
-+ /***********************************************************************
-+  *		X11DRV_set_gl_window
-+  *
-+  * Sets the OpenGL child window for the HWND
-+  */
-+ BOOL X11DRV_set_gl_window( HWND hwnd, Window window )
-+ {
-+     struct x11drv_win_data *data = X11DRV_get_win_data( hwnd );
-+ 
-+     if (!data)
-+     {
-+         Window *WinPtr = (Window *)GetPropA( hwnd, gl_winptr_prop );
-+         if (WinPtr)
-+         {
-+             *WinPtr = window;
-+             return TRUE;
-+         }
-+     }
-+     else
-+     {
-+         data->gl_window = window;
-+         return TRUE;
-+     }
-+ 
-+     return FALSE;
-+ }
-+ 
-+ 
-+ /***********************************************************************
-   *		X11DRV_get_ic
-   *
-   * Return the X input context associated with a window
-Only in wine-0.9.43/dlls/winex11.drv: window.c.orig
-diff -rc wine-0.9.43-orig/dlls/winex11.drv/winpos.c wine-0.9.43/dlls/winex11.drv/winpos.c
-*** wine-0.9.43-orig/dlls/winex11.drv/winpos.c	2007-08-10 18:18:12.000000000 +0200
---- wine-0.9.43/dlls/winex11.drv/winpos.c	2007-08-21 10:20:19.000000000 +0200
-***************
-*** 142,158 ****
-  
-      if (changed & WS_VISIBLE)
-      {
-!         if (data->whole_window && X11DRV_is_window_rect_mapped( &data->window_rect ))
-          {
-              if (new_style & WS_VISIBLE)
-              {
-                  TRACE( "mapping win %p\n", hwnd );
-!                 X11DRV_sync_window_style( display, data );
-!                 X11DRV_set_wm_hints( display, data );
-!                 wine_tsx11_lock();
-!                 XMapWindow( display, data->whole_window );
-!                 wine_tsx11_unlock();
-              }
-              /* we don't unmap windows, that causes trouble with the window manager */
-          }
-          invalidate_dce( hwnd, &data->window_rect );
---- 142,171 ----
-  
-      if (changed & WS_VISIBLE)
-      {
-!         if ((data->whole_window || data->gl_window) &&
-!             X11DRV_is_window_rect_mapped( &data->window_rect ))
-          {
-              if (new_style & WS_VISIBLE)
-              {
-                  TRACE( "mapping win %p\n", hwnd );
-!                 if (data->gl_window)
-!                 {
-!                     wine_tsx11_lock();
-!                     XMapWindow( data->gl_display, data->gl_window );
-!                     wine_tsx11_unlock();
-!                 }
-!                 if (data->whole_window)
-!                 {
-!                     X11DRV_sync_window_style( display, data );
-!                     X11DRV_set_wm_hints( display, data );
-!                     wine_tsx11_lock();
-!                     XMapWindow( display, data->whole_window );
-!                     wine_tsx11_unlock();
-!                 }
-!                 X11DRV_set_visible( hwnd, 1 );
-              }
-+             else
-+                 X11DRV_set_visible( hwnd, 0 );
-              /* we don't unmap windows, that causes trouble with the window manager */
-          }
-          invalidate_dce( hwnd, &data->window_rect );
-***************
-*** 287,292 ****
---- 300,307 ----
-      }
-      SERVER_END_REQ;
-  
-+ //needs to be cleaned up
-+ X11DRV_set_visible ( hwnd, (new_style&WS_VISIBLE)?1 : 0 );
-      if (win == WND_DESKTOP || data->whole_window == DefaultRootWindow(gdi_display))
-      {
-          data->whole_rect = data->client_rect = data->window_rect = *rectWindow;
-***************
-*** 347,360 ****
-          }
-  
-  
-!         if (data->whole_window && !data->lock_changes)
-          {
-              if ((old_style & WS_VISIBLE) && !(new_style & WS_VISIBLE))
-              {
-                  /* window got hidden, unmap it */
-                  TRACE( "unmapping win %p\n", hwnd );
-                  wine_tsx11_lock();
-!                 XUnmapWindow( display, data->whole_window );
-                  wine_tsx11_unlock();
-              }
-              else if ((new_style & WS_VISIBLE) && !X11DRV_is_window_rect_mapped( rectWindow ))
---- 362,378 ----
-          }
-  
-  
-!         if ((data->whole_window || data->gl_window) && !data->lock_changes)
-          {
-              if ((old_style & WS_VISIBLE) && !(new_style & WS_VISIBLE))
-              {
-                  /* window got hidden, unmap it */
-                  TRACE( "unmapping win %p\n", hwnd );
-                  wine_tsx11_lock();
-!                 if (data->gl_window)
-!                     XUnmapWindow( data->gl_display, data->gl_window );
-!                 if (data->whole_window)
-!                     XUnmapWindow( display, data->whole_window );
-                  wine_tsx11_unlock();
-              }
-              else if ((new_style & WS_VISIBLE) && !X11DRV_is_window_rect_mapped( rectWindow ))
-***************
-*** 362,375 ****
-                  /* resizing to zero size or off screen -> unmap */
-                  TRACE( "unmapping zero size or off-screen win %p\n", hwnd );
-                  wine_tsx11_lock();
-!                 XUnmapWindow( display, data->whole_window );
-                  wine_tsx11_unlock();
-              }
-          }
-  
-          X11DRV_sync_window_position( display, data, swp_flags, rectClient, &new_whole_rect );
-  
-!         if (data->whole_window && !data->lock_changes)
-          {
-              BOOL new_fs_state, mapped = FALSE;
-  
---- 380,396 ----
-                  /* resizing to zero size or off screen -> unmap */
-                  TRACE( "unmapping zero size or off-screen win %p\n", hwnd );
-                  wine_tsx11_lock();
-!                 if (data->gl_window)
-!                     XUnmapWindow( data->gl_display, data->gl_window );
-!                 if (data->whole_window)
-!                     XUnmapWindow( display, data->whole_window );
-                  wine_tsx11_unlock();
-              }
-          }
-  
-          X11DRV_sync_window_position( display, data, swp_flags, rectClient, &new_whole_rect );
-  
-!         if ((data->whole_window || data->gl_window) && !data->lock_changes)
-          {
-              BOOL new_fs_state, mapped = FALSE;
-  
-***************
-*** 380,402 ****
-                  {
-                      /* window got shown, map it */
-                      TRACE( "mapping win %p\n", hwnd );
-!                     X11DRV_sync_window_style( display, data );
-!                     X11DRV_set_wm_hints( display, data );
-!                     wine_tsx11_lock();
-!                     XMapWindow( display, data->whole_window );
-!                     XFlush( display );
-!                     wine_tsx11_unlock();
-!                     mapped = TRUE;
-                  }
-                  else if ((swp_flags & (SWP_NOSIZE | SWP_NOMOVE)) != (SWP_NOSIZE | SWP_NOMOVE))
-                  {
-                      /* resizing from zero size to non-zero -> map */
-                      TRACE( "mapping non zero size or off-screen win %p\n", hwnd );
-                      wine_tsx11_lock();
-!                     XMapWindow( display, data->whole_window );
-!                     XFlush( display );
-                      wine_tsx11_unlock();
--                     mapped = TRUE;
-                  }
-                  SetRect( &old_screen_rect, 0, 0, screen_width, screen_height );
-                  if (fullscreen_state_changed( data, &old_client_rect, &old_screen_rect, &new_fs_state ) || mapped)
---- 401,441 ----
-                  {
-                      /* window got shown, map it */
-                      TRACE( "mapping win %p\n", hwnd );
-!                     if (data->gl_window)
-!                     {
-!                         wine_tsx11_lock();
-!                         XMapWindow( data->gl_display, data->gl_window );
-!                         XFlush( display );
-!                         wine_tsx11_unlock();
-!                     }
-!                     if (data->whole_window)
-!                     {
-!                         X11DRV_sync_window_style( display, data );
-!                         X11DRV_set_wm_hints( display, data );
-!                         wine_tsx11_lock();
-!                         XMapWindow( display, data->whole_window );
-!                         XFlush( display );
-!                         wine_tsx11_unlock();
-!                         mapped = TRUE;
-!                     }
-                  }
-                  else if ((swp_flags & (SWP_NOSIZE | SWP_NOMOVE)) != (SWP_NOSIZE | SWP_NOMOVE))
-                  {
-                      /* resizing from zero size to non-zero -> map */
-                      TRACE( "mapping non zero size or off-screen win %p\n", hwnd );
-                      wine_tsx11_lock();
-!                     if (data->gl_window)
-!                     {
-!                         XMapWindow( data->gl_display, data->gl_window );
-!                         XFlush( data->gl_display );
-!                     }
-!                     if (data->whole_window)
-!                     {
-!                         XMapWindow( display, data->whole_window );
-!                         mapped = TRUE;
-!                         XFlush( display );
-!                     }
-                      wine_tsx11_unlock();
-                  }
-                  SetRect( &old_screen_rect, 0, 0, screen_width, screen_height );
-                  if (fullscreen_state_changed( data, &old_client_rect, &old_screen_rect, &new_fs_state ) || mapped)
-Only in wine-0.9.43/dlls/winex11.drv: winpos.c.orig
-diff -rc wine-0.9.43-orig/dlls/winex11.drv/x11drv.h wine-0.9.43/dlls/winex11.drv/x11drv.h
-*** wine-0.9.43-orig/dlls/winex11.drv/x11drv.h	2007-08-10 18:18:12.000000000 +0200
---- wine-0.9.43/dlls/winex11.drv/x11drv.h	2007-08-21 10:20:19.000000000 +0200
-***************
-*** 122,130 ****
---- 122,132 ----
-    /* X physical device */
-  typedef struct
-  {
-+     Display      *display;
-      HDC           hdc;
-      GC            gc;          /* X Window GC */
-      Drawable      drawable;
-+     Drawable      gl_drawable;
-      RECT          dc_rect;       /* DC rectangle relative to drawable */
-      RECT          drawable_rect; /* Drawable rectangle relative to screen */
-      HRGN          region;        /* Device region (visible region & clip region) */
-***************
-*** 633,639 ****
-  enum x11drv_window_messages
-  {
-      WM_X11DRV_ACQUIRE_SELECTION = 0x80001000,
-!     WM_X11DRV_DELETE_WINDOW
-  };
-  
-  /* x11drv private window data */
---- 635,642 ----
-  enum x11drv_window_messages
-  {
-      WM_X11DRV_ACQUIRE_SELECTION = 0x80001000,
-!     WM_X11DRV_DELETE_WINDOW,
-!     WM_X11DRV_GET_PARENT_INFO
-  };
-  
-  /* x11drv private window data */
-***************
-*** 642,647 ****
---- 645,654 ----
-      HWND        hwnd;           /* hwnd that this private data belongs to */
-      Window      whole_window;   /* X window for the complete window */
-      Window      icon_window;    /* X window for the icon */
-+     Window      gl_window;      /* X window for OpenGL display */
-+     HWND        gl_parent;      /* hwnd that has the drawable the OpenGL display is from */
-+     RECT       *gl_offset;      /* The OpenGL parent window's client_rect */
-+     Display    *gl_display;     /* The display the OpenGL window uses */
-      RECT        window_rect;    /* USER window rectangle relative to parent */
-      RECT        whole_rect;     /* X window rectangle for the whole window relative to parent */
-      RECT        client_rect;    /* client area relative to whole window */
-***************
-*** 655,666 ****
---- 662,679 ----
-  
-  extern struct x11drv_win_data *X11DRV_get_win_data( HWND hwnd );
-  extern Window X11DRV_get_whole_window( HWND hwnd );
-+ extern Display *X11DRV_get_gl_display( HWND hwnd );
-+ extern Window X11DRV_get_gl_window( HWND hwnd );
-+ extern BOOL X11DRV_set_gl_window( HWND hwnd, Window window );
-+ extern BOOL X11DRV_get_visible( HWND hwnd );
-+ extern BOOL X11DRV_set_visible( HWND hwnd, BOOL is_visible );
-  extern BOOL X11DRV_is_window_rect_mapped( const RECT *rect );
-  extern XIC X11DRV_get_ic( HWND hwnd );
-  
-  extern void alloc_window_dce( struct x11drv_win_data *data );
-  extern void free_window_dce( struct x11drv_win_data *data );
-  extern void invalidate_dce( HWND hwnd, const RECT *rect );
-+ extern HWND hwnd_from_dce( struct dce *dce );
-  
-  /* X context to associate a hwnd to an X window */
-  extern XContext winContext;
-Only in wine-0.9.43/dlls/winex11.drv: x11drv.h.orig
diff --git a/pkgs/misc/gxemul/default.nix b/pkgs/misc/gxemul/default.nix
index e7fdc96d32e..e7d0c92a1c5 100644
--- a/pkgs/misc/gxemul/default.nix
+++ b/pkgs/misc/gxemul/default.nix
@@ -12,7 +12,7 @@ let
     optionals = ["libX11"];
     defaultFlags = [ "demos" "doc" ];
   };
-in args.stdenv.mkDerivation {
+in stdenv.mkDerivation {
 
   inherit name;
   inherit (co) /* flags */ buildInputs configureFlags;
diff --git a/pkgs/misc/maven/maven-2.nix b/pkgs/misc/maven/maven-2.nix
index 9f96639689b..be84f212e8b 100644
--- a/pkgs/misc/maven/maven-2.nix
+++ b/pkgs/misc/maven/maven-2.nix
@@ -1,8 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "maven-2.0.8-bin";
 
-  src = args.fetchurl {
+  src = fetchurl {
     # TODO mirrors 
     url = http://apache.linux-mirror.org/maven/binaries/apache-maven-2.0.8-bin.tar.bz2;
     sha256 = "1wasvqplw7xk04j38vsq94zbrlpdg2k4348bg8730snr6zgaasai";
@@ -14,8 +14,6 @@ args.stdenv.mkDerivation {
     ensureDir \$out; mv * \$out
   ";
 
-  buildInputs =(with args; []);
-
   meta = { 
       description = "Java build tool";
       homepage = "apache.org";
diff --git a/pkgs/misc/ntfsprogs/default.nix b/pkgs/misc/ntfsprogs/default.nix
index 6e79ea61d89..8f2e6839309 100644
--- a/pkgs/misc/ntfsprogs/default.nix
+++ b/pkgs/misc/ntfsprogs/default.nix
@@ -1,15 +1,13 @@
-args:
+args: with args;
 args.stdenv.mkDerivation {
   name = "ntfsprogs-2.0.0";
 
-  src = args.fetchurl {
+  src = fetchurl {
     name = "ntfsprogs-2.0.0.tar.bz2";
     url = "http://garr.dl.sourceforge.net/sourceforge/linux-ntfs/ntfsprogs-2.0.0.tar.bz2";
     sha256 = "ad36e19706c7303b10aa0a9bf2c2dd0309b91cd0171f1c9eb361d94a85017432";
   };
 
-  buildInputs =(with args; []);
-
   meta = {
       description = "ntfs utilities";
       homepage = http://sourceforge.net/projects/linux-ntfs;
diff --git a/pkgs/misc/screensavers/xlockmore/default.nix b/pkgs/misc/screensavers/xlockmore/default.nix
new file mode 100644
index 00000000000..025a2c044eb
--- /dev/null
+++ b/pkgs/misc/screensavers/xlockmore/default.nix
@@ -0,0 +1,30 @@
+{stdenv, fetchurl, pam, x11, freetype}:
+
+stdenv.mkDerivation {
+  # FIXME: Password authentication doesn't work!
+
+  name = "xlockmore-5.24";
+  src = fetchurl {
+    url = http://www.tux.org/~bagleyd/xlock/xlockmore-5.24.tar.bz2;
+    sha256 = "dbee7bbe35c08afcbe419603fae60aee7898bbd85a3175dc788f02ddbb9f5a39";
+  };
+
+  # Optionally, it can use GTK+ as well.
+  buildInputs = [pam x11 freetype];
+
+  # The `xlock' program needs to be linked against Glibc's
+  # `libgcrypt', which contains `crypt(3)'.
+  patches = [ ./makefile-libcrypt.patch ];
+
+  # Don't try to install `xlock' setuid.  Instead, the user should add
+  # it to `security.extraSetuidPrograms'.
+  configureFlags = 
+    "--disable-setuid " + "--enable-pam " +
+    "--enable-appdefaultdir=$out/lib/X11/app-defaults";
+
+  meta = {
+    description = "Xlockmore, a screen locker for the X Window System.";
+    homepage = http://www.tux.org/~bagleyd/xlockmore.html;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/misc/screensavers/xlockmore/makefile-libcrypt.patch b/pkgs/misc/screensavers/xlockmore/makefile-libcrypt.patch
new file mode 100644
index 00000000000..df31a00a13b
--- /dev/null
+++ b/pkgs/misc/screensavers/xlockmore/makefile-libcrypt.patch
@@ -0,0 +1,11 @@
+--- xlockmore-5.24/modes/Makefile.in	2007-01-22 23:02:07.000000000 +0100
++++ xlockmore-5.24/modes/Makefile.in	2008-02-11 17:24:34.000000000 +0100
+@@ -326,7 +326,7 @@ CFLAGS = @CFLAGS@
+ CXXFLAGS = @CXXFLAGS@
+ #CFLAGS = -O
+ #CFLAGS = -g
+-XLOCKLDFLAGS = @XLOCKLDFLAGS@ $(CHECKLDFLAG)
++XLOCKLDFLAGS = @XLOCKLDFLAGS@ $(CHECKLDFLAG) -lcrypt
+ XLIBS = @XLIBS@
+ XLOCKLIBS = $(MODULELIB) @XLOCKLIBS@
+ 
diff --git a/pkgs/misc/tex/nix/find-includes.pl b/pkgs/misc/tex/nix/find-includes.pl
index 649b16dc35f..9e5fd112bac 100644
--- a/pkgs/misc/tex/nix/find-includes.pl
+++ b/pkgs/misc/tex/nix/find-includes.pl
@@ -59,6 +59,7 @@ while (scalar @workset > 0) {
 	if (/\\input\{(.*)\}/) {
 	    my $fn2 = $1;
             die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
+	    push @workset, "$path/$fn2.tex";
 	    push @workset, "$path/$fn2";
 	} elsif (/\\usepackage(\[.*\])?\{(.*)\}/) {
 	    my $fn2 = $2;
diff --git a/pkgs/misc/trac/builder.sh b/pkgs/misc/trac/builder.sh
index a3e97e178a0..76bf0612334 100644
--- a/pkgs/misc/trac/builder.sh
+++ b/pkgs/misc/trac/builder.sh
@@ -1,5 +1,4 @@
 source $stdenv/setup
-source $makeWrapper
 
 unpackPhase
 mkdir -p $out
@@ -7,7 +6,6 @@ cd $name
 $python/bin/python setup.py install --prefix=$out
 
 for i in $(cd $out/bin && ls); do
-	mv $out/bin/$i $out/bin/.orig-$i
-	makeWrapper $out/bin/.orig-$i $out/bin/$i \
-		--set PYTHONPATH "$python/site-packages:$out/lib/python2.4/site-packages:$pysqlite/lib/python2.4/site-packages:$subversion/lib/svn-python:$clearsilver/site-packages"
+    wrapProgram $out/bin/$i \
+        --prefix PYTHONPATH : "$(toPythonPath $python):$(toPythonPath $out):$(toPythonPath $pysqlite):$subversion/lib/svn-python:$clearsilver/site-packages"
 done
diff --git a/pkgs/misc/trac/default.nix b/pkgs/misc/trac/default.nix
index c456c51daff..b93c36843d3 100644
--- a/pkgs/misc/trac/default.nix
+++ b/pkgs/misc/trac/default.nix
@@ -3,13 +3,12 @@
 assert stdenv.system == "i686-linux";
 
 stdenv.mkDerivation {
-	name = "trac-0.9.5";
-	src = fetchurl {
-		url = "http://ftp.edgewall.com/pub/trac/trac-0.9.5.tar.gz";
-		md5 = "3b7d708eaf905cc6ba2b6b10a09a8cf4";
-	};
-	builder = ./builder.sh;
-	inherit stdenv python subversion clearsilver sqlite pysqlite makeWrapper;
+  name = "trac-0.9.5";
+  src = fetchurl {
+    url = "http://ftp.edgewall.com/pub/trac/trac-0.9.5.tar.gz";
+    md5 = "3b7d708eaf905cc6ba2b6b10a09a8cf4";
+  };
+  builder = ./builder.sh;
+  buildInputs = [makeWrapper];
+  inherit stdenv python subversion clearsilver sqlite pysqlite;
 }
-
-
diff --git a/pkgs/os-specific/linux/alsa/library/default.nix b/pkgs/os-specific/linux/alsa/library/default.nix
index 32df29d722f..6ab8143c7ab 100644
--- a/pkgs/os-specific/linux/alsa/library/default.nix
+++ b/pkgs/os-specific/linux/alsa/library/default.nix
@@ -6,4 +6,8 @@ stdenv.mkDerivation {
     url = ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.14.tar.bz2;
 	sha256 = "18xhm53adgss20jnva2nfl9gk46kb5an6ah820pazqn0ykd97rh1";
   };
+
+  meta = {
+	  homepage = http://www.alsa-project.org;
+  };
 }
diff --git a/pkgs/os-specific/linux/alsa/utils/default.nix b/pkgs/os-specific/linux/alsa/utils/default.nix
index ccc49432566..658d8d8e9f7 100644
--- a/pkgs/os-specific/linux/alsa/utils/default.nix
+++ b/pkgs/os-specific/linux/alsa/utils/default.nix
@@ -7,4 +7,8 @@ stdenv.mkDerivation {
     sha256 = "1jx5bwa8abx7aih4lymx4bnrmyip2yb0rp1mza97wpni1q7n6z9h";
   };
   buildInputs = [alsaLib ncurses gettext];
+
+  meta = {
+	  homepage = http://www.alsa-project.org;
+  };
 }
diff --git a/pkgs/os-specific/linux/atheros/0.9.3.3.nix b/pkgs/os-specific/linux/atheros/0.9.3.3.nix
index d5c207bf188..419c136bed2 100644
--- a/pkgs/os-specific/linux/atheros/0.9.3.3.nix
+++ b/pkgs/os-specific/linux/atheros/0.9.3.3.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://downloads.sourceforge.net/madwifi/madwifi-0.9.3.3.tar.bz2;
@@ -16,6 +16,7 @@ args : with args;
 			sha256 = "11xpx5g9w7ilagvj60prc3s8a3x0n5n4mr0b7nh0lxwrbjdgjjfg";
 		} else "")*/;
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 doPatch = FullDepEntry (if patchAR2425x86 !="" then ''
 	cd hal
@@ -25,7 +26,7 @@ in
 stdenv.mkDerivation rec {
 	name = "atheros-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doPatch doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doPatch doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		Atheros WiFi driver.
diff --git a/pkgs/os-specific/linux/atheros/r2756.nix b/pkgs/os-specific/linux/atheros/r2756.nix
index 8309b785865..031404b0395 100644
--- a/pkgs/os-specific/linux/atheros/r2756.nix
+++ b/pkgs/os-specific/linux/atheros/r2756.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://snapshots.madwifi.org/madwifi-ng/madwifi-ng-r2756-20071018.tar.gz;
@@ -16,6 +16,7 @@ args : with args;
 			sha256 = "11xpx5g9w7ilagvj60prc3s8a3x0n5n4mr0b7nh0lxwrbjdgjjfg";
 		} else "");
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 doPatch = FullDepEntry (if patchAR2425x86 !="" then ''
 	cd hal
@@ -26,7 +27,7 @@ in
 stdenv.mkDerivation rec {
 	name = "atheros-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doPatch doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doPatch doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		Atheros WiFi driver.
diff --git a/pkgs/os-specific/linux/atheros/r3122.nix b/pkgs/os-specific/linux/atheros/r3122.nix
index c82b4021544..e9fb7bab01a 100644
--- a/pkgs/os-specific/linux/atheros/r3122.nix
+++ b/pkgs/os-specific/linux/atheros/r3122.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://snapshots.madwifi.org/madwifi-ng/madwifi-ng-r3122-20080109.tar.gz;
@@ -10,10 +10,11 @@ args : with args;
 		configureFlags = [];
 		makeFlags = [''KERNELPATH=${kernel}/lib/modules/*/build'' ''DESTDIR=$out''];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "atheros-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		Atheros WiFi driver.
diff --git a/pkgs/os-specific/linux/aufs/default.nix b/pkgs/os-specific/linux/aufs/default.nix
new file mode 100644
index 00000000000..2ce510a5b9b
--- /dev/null
+++ b/pkgs/os-specific/linux/aufs/default.nix
@@ -0,0 +1,38 @@
+{stdenv, fetchurl, kernel}:
+
+stdenv.mkDerivation {
+  name = "aufs-20080128";
+  
+  src = fetchurl {
+    url = http://nix.cs.uu.nl/dist/tarballs/aufs-20080128.tar.bz2;
+    sha256 = "0732zp6wfss09x9d6n0a3v65rifn739m9nffi5d3952vglg4va6l";
+  };
+
+  buildPhase = ''
+
+    kernelVersion=$(cd ${kernel}/lib/modules && ls)
+    kernelBuild=$(echo ${kernel}/lib/modules/$kernelVersion/source)
+    tar xvfj ${kernel.src}
+    kernelSource=$(echo $(pwd)/linux-*)
+    cp -prd $kernelBuild/* $kernelSource
+  
+    substituteInPlace fs/aufs/Makefile
+    make KDIR=$kernelSource -f local.mk
+  '';
+
+  installPhase = ''
+    ensureDir $out/bin
+    cp util/aulchown $out/bin
+
+    ensureDir $out/share/man/man5
+    cp util/aufs.5 $out/share/man/man5
+
+    ensureDir $out/lib/modules/$kernelVersion/misc
+    cp aufs.ko $out/lib/modules/$kernelVersion/misc
+  '';
+
+  meta = {
+    description = "Another Unionfs implementation for Linux";
+    homepage = http://aufs.sourceforge.net/;
+  };
+}
diff --git a/pkgs/os-specific/linux/bridge_utils/default.nix b/pkgs/os-specific/linux/bridge_utils/default.nix
index 2c71f8fb0a9..b4f5efce22f 100644
--- a/pkgs/os-specific/linux/bridge_utils/default.nix
+++ b/pkgs/os-specific/linux/bridge_utils/default.nix
@@ -1,17 +1,17 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "bridge-utils-1.2";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = mirror://sourceforge/bridge/bridge-utils-1.2.tar.gz;
     sha256 = "0jg3z51c2c34byg4zi39j9g4b66js5kanjhid77hpa0jdfmryfy9";
   };
 
-  buildInputs =(with args; [autoconf automake]);
+  buildInputs = [autoconf automake];
 
   preConfigure="autoreconf";
 
-  meta = {
+  meta = { 
       description = "http://sourceforge.net/projects/bridge/";
       homepage = [ "http://www.linux-foundation.org/en/Net:Bridge/" "http://sourceforge.net/projects/bridge/" ];
       license = "GPL";
diff --git a/pkgs/os-specific/linux/dmidecode/2.9.nix b/pkgs/os-specific/linux/dmidecode/2.9.nix
index 787846465d8..968ab80a4af 100644
--- a/pkgs/os-specific/linux/dmidecode/2.9.nix
+++ b/pkgs/os-specific/linux/dmidecode/2.9.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://download.savannah.gnu.org/releases/dmidecode/dmidecode-2.9.tar.bz2;
@@ -10,10 +10,11 @@ args : with args;
 		configureFlags = [];
 		makeFlags = "prefix=\$out";
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "dmidecode-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [ doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [ doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		Tool to decode Desktop Management Interface and SBIOS data.
diff --git a/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix
index c991389633c..091f0c910f6 100644
--- a/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix
+++ b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://fy.chalmers.se/~appro/linux/DVD+RW/tools/dvd+rw-tools-7.0.tar.gz;
@@ -10,15 +10,17 @@ args : with args;
 		configureFlags = [];
 		makeFlags = [" prefix=\$out "];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 	preBuild = FullDepEntry ("
+		sed -e '1i#define INT_MAX __INT_MAX__' -i *.c *.cpp
 		sed -e 's@/usr/local@'\$out'@g' -i Makefile.m4 Makefile
 	") [minInit doUnpack];
 in
 stdenv.mkDerivation rec {
 	name = "dvd+rw-tools-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [preBuild doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [preBuild addInputs (doDump "0") doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	DVD+RW tools.
diff --git a/pkgs/os-specific/linux/firmware/iwlwifi-4965-ucode/default.nix b/pkgs/os-specific/linux/firmware/iwlwifi-4965-ucode/default.nix
new file mode 100644
index 00000000000..3a87cd164cb
--- /dev/null
+++ b/pkgs/os-specific/linux/firmware/iwlwifi-4965-ucode/default.nix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  name = "iwlwifi-4965-ucode-4.44.17";
+  
+  src = fetchurl {
+    url = "http://intellinuxwireless.org/iwlwifi/downloads/" + name + ".tgz";
+    sha256 = "1mfnxsp58jvh0njvwaxrkbiggbzr4jd0hk314hxfwyjpjdd2hj6w";
+  };
+  
+  buildPhase = "true";
+
+  installPhase = "ensureDir $out; chmod -x *; cp * $out";
+  
+  meta = {
+    description = "Firmware for the Intel 4965ABG wireless card";
+    homepage = http://intellinuxwireless.org/;
+  };
+}
diff --git a/pkgs/os-specific/linux/firmware/zd1211/default.nix b/pkgs/os-specific/linux/firmware/zd1211/default.nix
new file mode 100644
index 00000000000..1cffb504322
--- /dev/null
+++ b/pkgs/os-specific/linux/firmware/zd1211/default.nix
@@ -0,0 +1,21 @@
+args: with args;
+stdenv.mkDerivation ( rec {
+  pname = "zd1211-firmware";
+  version = "1.4";
+
+  name = "${pname}-${version}";
+  src = fetchurl {
+    url = "http://surfnet.dl.sourceforge.net/sourceforge/zd1211/${name}.tar.bz2";
+    sha256 = "866308f6f59f7075f075d4959dff2ede47735c751251fecd1496df1ba4d338e1";
+  };
+  
+  buildPhase = "true";
+
+  installPhase = "ensureDir $out/zd1211; cp * $out/zd1211";
+  
+  meta = {
+    description = "Firmware for the ZyDAS ZD1211(b) 802.11a/b/g USB WLAN chip";
+    homepage = http://sourceforge.net/projects/zd1211/;
+    license = "GPL";
+  };
+})
diff --git a/pkgs/os-specific/linux/fxload/default.nix b/pkgs/os-specific/linux/fxload/default.nix
new file mode 100644
index 00000000000..0eb37c0d50e
--- /dev/null
+++ b/pkgs/os-specific/linux/fxload/default.nix
@@ -0,0 +1,39 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "fxload-2002_04_11";
+  
+  src = fetchurl {
+    url = mirror://sourceforge/linux-hotplug/fxload-2002_04_11.tar.gz;
+    sha256 = "1hql93bp3dxrv1p67nc63xsbqwljyynm997ysldrc3n9ifi6s48m";
+  };
+
+  patches = [
+    # Will be needed after linux-headers is updated to >= 2.6.21.
+    #(fetchurl {
+    #  url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/sys-apps/fxload/files/fxload-20020411-linux-headers-2.6.21.patch?rev=1.1";
+    #  sha256 = "0ij0c8nr1rbyl5wmyv1cklhkxglvsqz32h21cjw4bjm151kgmk7p";
+    #})
+
+    (fetchurl {
+      url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/sys-apps/fxload/files/fxload-20020411-linux-headers-2.6.19.patch?rev=1.1";
+      sha256 = "05q7c1yvi479q5z91s9ra2rgn589qljgmdl6phqf30pgzf09r0r6";
+    })
+  ];
+
+  preBuild = ''
+    substituteInPlace Makefile --replace /usr /
+    makeFlagsArray=(INSTALL=install prefix=$out)
+  '';
+
+  preInstall = ''
+    ensureDir $out/sbin
+    ensureDir $out/share/man/man8
+    ensureDir $out/share/usb
+  '';
+
+  meta = {
+    homepage = http://linux-hotplug.sourceforge.net/?selected=usb;
+    description = "Tool to upload firmware to Cypress EZ-USB microcontrollers";
+  };
+}
diff --git a/pkgs/os-specific/linux/hal/default.nix b/pkgs/os-specific/linux/hal/default.nix
index 1fc01298105..ce41a29a9fe 100644
--- a/pkgs/os-specific/linux/hal/default.nix
+++ b/pkgs/os-specific/linux/hal/default.nix
@@ -1,8 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, python, pciutils, usbutils, expat
-, libusb, dbus, dbus_glib, glib, libvolume_id, perl, perlXMLParser
-, gettext, zlib /* required by pciutils */, eject, libsmbios
-, udev
-}:
+args: with args;
 
 stdenv.mkDerivation {
   name = "hal-0.5.9";
@@ -13,7 +9,7 @@ stdenv.mkDerivation {
   };
   
   buildInputs = [
-    pkgconfig python pciutils expat libusb dbus dbus_glib glib
+    pkgconfig python pciutils expat libusb dbus.libs dbus_glib glib
     libvolume_id perl perlXMLParser gettext zlib libsmbios
   ];
 
diff --git a/pkgs/os-specific/linux/kernel/2.6.20.nix b/pkgs/os-specific/linux/kernel/2.6.20.nix
deleted file mode 100644
index b6c0c70b580..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.20.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-args:
-(import ./meta.nix)
-( args //
-  {
-    version = "2.6.20.12";
-    src_hash = { sha256 = "1s7vdpg2897q5pcyxxypqcnibwpbdawbimkf3pngmahj8wr9c03x"; };
-
-	systemPatches = [
-      { name = "paravirt-nvidia";
-        patch = ./2.6.20-paravirt-nvidia.patch;
-      }
-      { name = "skas-2.6.20-v9-pre9";
-        patch = args.fetchurl {
-          url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2;
-          md5 = "02e619e5b3aaf0f9768f03ac42753e74";
-        };
-        extraConfig =
-          "CONFIG_PROC_MM=y\n" +
-          "# CONFIG_PROC_MM_DUMPABLE is not set\n";
-      }
-      { name = "fbsplash-0.9.2-r5-2.6.20-rc6";
-        patch = args.fetchurl {
-          url = http://dev.gentoo.org/~spock/projects/gensplash/archive/fbsplash-0.9.2-r5-2.6.20-rc6.patch;
-          sha256 = "11v4f85f4jnh9sbhqcyn47krb7l1czgzjw3w8wgbq14jm0sp9294";
-        };
-        extraConfig = "CONFIG_FB_SPLASH=y";
-      }
-	];
-
-    config = with args;
-      if config != null then config else
-      if userModeLinux then ./config-2.6.20-uml else
-      if stdenv.system == "i686-linux" then ./config-2.6.20-i686-smp else
-      if stdenv.system == "x86_64-linux" then ./config-2.6.20-x86_64-smp else
-      abort "No kernel configuration for your platform!";
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/2.6.21-ck.nix b/pkgs/os-specific/linux/kernel/2.6.21-ck.nix
deleted file mode 100644
index 0fb902c695e..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.21-ck.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-args:
-(import ./2.6.21.nix)
-( args //
-  {
-      extraPatches = (if (args ? extraPatches) then args.extraPatches else []) ++ 
-      [
-      {
-        name = "Con Kolivas Patch";
-        patch = ./patch-2.6.21-ck1;
-      }
-      ];
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/2.6.21.nix b/pkgs/os-specific/linux/kernel/2.6.21.nix
deleted file mode 100644
index da7ef60e096..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.21.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-args:
-(import ./meta.nix)
-( args //
-  {
-    version = "2.6.21.7";
-    src_hash = { sha256 = "1c8ndsz35qd8vyng3xsxjjkjv5bnzyvc9b5vd85fz5v0bjp8hx50"; };
-
-	systemPatches = [
-      { name = "ext3cow";
-        patch = ./linux-2.6.21.7-ext3cow_wouter.patch;
-        extraConfig =  
-	"CONFIG_EXT3COW_FS=m\n" +
-	"CONFIG_EXT3COW_FS_XATTR=y\n" +
-	"CONFIG_EXT3COW_FS_POSIX_ACL=y\n" +
-	"CONFIG_EXT3COW_FS_SECURITY=y\n";
-      }
-      { name = "paravirt-nvidia";
-        patch = ./2.6.20-paravirt-nvidia.patch;
-      }
-      { name = "skas-2.6.20-v9-pre9";
-        patch = args.fetchurl {
-          url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2;
-          md5 = "02e619e5b3aaf0f9768f03ac42753e74";
-        };
-        extraConfig =
-          "CONFIG_PROC_MM=y\n" +
-          "# CONFIG_PROC_MM_DUMPABLE is not set\n";
-      }
-      { name = "fbsplash-0.9.2-r5-2.6.21";
-        patch = args.fetchurl {
-          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch;
-          sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8";
-        };
-        extraConfig = "CONFIG_FB_SPLASH=y";
-      }
-	];
-
-    config = with args;
-      if config != null then config else
-      if userModeLinux then ./config-2.6.21-uml else
-      if stdenv.system == "i686-linux" then ./config-2.6.21-i686-smp else
-      if stdenv.system == "x86_64-linux" then ./config-2.6.21-x86_64-smp else
-      abort "No kernel configuration for your platform!";
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/2.6.22-ck.nix b/pkgs/os-specific/linux/kernel/2.6.22-ck.nix
deleted file mode 100644
index 23a134cfc77..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.22-ck.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-args:
-(import ./2.6.22.nix)
-( args //
-  {
-      extraPatches = (if (args ? extraPatches) then args.extraPatches else []) ++ 
-      [
-      {
-        name = "Con Kolivas Patch";
-        patch = ./patch-2.6.21-ck1;
-      }
-      ];
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/2.6.22.nix b/pkgs/os-specific/linux/kernel/2.6.22.nix
deleted file mode 100644
index c3d167f6b19..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.22.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-args:
-(import ./meta.nix)
-( args //
-  {
-    version = "2.6.22.10";
-    src_hash = { sha256 = "0kh196qzm54mvnbrdr9s2q86l9yn2321gnsl5xq44ai2idqp044g"; };
-
-	systemPatches = [
-      { name = "paravirt-nvidia";
-        patch = ./2.6.22-paravirt-nvidia.patch;
-      }
-      { name = "fbsplash-0.9.2-r5-2.6.21";
-        patch = args.fetchurl {
-          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch;
-          sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px";
-        };
-        extraConfig = "CONFIG_FB_SPLASH=y";
-      }
-	];
-
-    config = with args;
-      if config != null then config else
-      if userModeLinux then ./config-2.6.22-uml else
-      if stdenv.system == "i686-linux" then ./config-2.6.22-i686-smp else
-      if stdenv.system == "x86_64-linux" then ./config-2.6.22-x86_64-smp else
-      abort "No kernel configuration for your platform!";
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/2.6.23.1.nix b/pkgs/os-specific/linux/kernel/2.6.23.1.nix
deleted file mode 100644
index 3d4244a74da..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.23.1.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-args:
-(import ./meta.nix)
-( args //
-  {
-    version = "2.6.23.1";
-    src_hash = { sha256 = "0737g83h7jbrlss8782b17mhc3nfn8qfbh5s71flz8pjxmbbmg1m"; };
-
-	systemPatches = [
-      { name = "paravirt-nvidia";
-        patch = ./2.6.22-paravirt-nvidia.patch;
-      }
-      { # resume with resume=swap:/dev/xx
-        name = "tux on ice"; # (swsusp2)
-        patch = args.fetchurl {
-          url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc2-for-2.6.23.1.patch.bz2";
-          sha256 = "ef86267b6f3d7e309221f5173a881afae1dfa57418be5b3963f2380b0633ca1a";
-        };
-        extraConfig = "
-          CONFIG_SUSPEND2=y
-          CONFIG_SUSPEND2_FILE=y
-          CONFIG_SUSPEND2_SWAP=y
-          CONFIG_CRYPTO_LZF=y
-        ";
-      }
-      { name = "fbsplash-0.9.2-r5-2.6.21";
-        patch = args.fetchurl {
-          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch;
-          sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px";
-        };
-        extraConfig = "CONFIG_FB_SPLASH=y";
-      }
-	];
-
-    config = with args;
-      if config != null then config else
-      if userModeLinux then ./config-2.6.23-uml else
-      if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else
-      if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else
-      abort "No kernel configuration for your platform!";
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/2.6.23.12.nix b/pkgs/os-specific/linux/kernel/2.6.23.12.nix
deleted file mode 100644
index a0e3bcbf2d8..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.23.12.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-args:
-(import ./meta.nix)
-( args //
-  {
-    version = "2.6.23.12";
-    src_hash = { sha256 = "1x3ngnhyxy9rlaislm2hzijaaa2mp8v930dyp8zmmhjdpzjf3w8k"; };
-
-	systemPatches = [
-      { # resume with resume=swap:/dev/xx
-        name = "tux on ice"; # (swsusp2)
-        patch = args.fetchurl {
-          url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc3-for-2.6.23.9.patch.bz2";
-          sha256 = "16f61cn0mdi7yklhdx4isi7c85843fzxq2cifd05cpsl6x6ilrfk";
-        };
-        extraConfig = "
-          CONFIG_SUSPEND2=y
-          CONFIG_SUSPEND2_FILE=y
-          CONFIG_SUSPEND2_SWAP=y
-          CONFIG_CRYPTO_LZF=y
-        ";
-      }
-      { name = "fbsplash-0.9.2-r5-2.6.21";
-        patch = args.fetchurl {
-          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch;
-          sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px";
-        };
-        extraConfig = "CONFIG_FB_SPLASH=y";
-      }
-	];
-
-    config = with args;
-      if config != null then config else
-      if userModeLinux then ./config-2.6.23-uml else
-      if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else
-      if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else
-      abort "No kernel configuration for your platform!";
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/2.6.23.nix b/pkgs/os-specific/linux/kernel/2.6.23.nix
deleted file mode 100644
index 3b8c2c469a7..00000000000
--- a/pkgs/os-specific/linux/kernel/2.6.23.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-args:
-(import ./meta.nix)
-( args //
-  {
-    version = "2.6.23";
-    src_hash = { sha256 = "1nyv7004w40l4adzq2b0hrvk3f4iqwngkgrlh8as9cpz6l4prrnl"; };
-
-	systemPatches = [ ];
-
-    config = with args;
-      if config != null then config else
-      if userModeLinux then ./config-2.6.23-uml else
-      if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else
-      if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else
-      abort "No kernel configuration for your platform!";
-  }
-)
diff --git a/pkgs/os-specific/linux/kernel/acerhk/default.nix b/pkgs/os-specific/linux/kernel/acerhk/default.nix
index 577d0f51027..8fe45048d7f 100644
--- a/pkgs/os-specific/linux/kernel/acerhk/default.nix
+++ b/pkgs/os-specific/linux/kernel/acerhk/default.nix
@@ -1,14 +1,14 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "acerhk_kernel_patch-0.5.35";
-  kernel = args.kernel.src;
-  inherit (args) debug;
-  acerhk = args.fetchurl {
+  kernel = kernel.src;
+  inherit debug;
+  acerhk = fetchurl {
     url = http://mirror.switch.ch/mirror/gentoo/distfiles/acerhk-0.5.35.tar.bz2;
     sha256 = "1kg002qraa8vha2cgza3z74d9j46g180g5b44zbv64dsa9n2j4b0";
   };
 
-  buildInputs =(with args; [gnupatch]);
+  buildInputs = [gnupatch];
   
   builder = ./builder.sh;
 
diff --git a/pkgs/os-specific/linux/kernel/builder.sh b/pkgs/os-specific/linux/kernel/builder.sh
index 123b65e3f07..3512a74c196 100644
--- a/pkgs/os-specific/linux/kernel/builder.sh
+++ b/pkgs/os-specific/linux/kernel/builder.sh
@@ -66,7 +66,6 @@ installPhase() {
         cp arch/$arch/boot/bzImage $out/vmlinuz
     fi
 
-	sed -e '/-b $(INSTALL_MOD_PATH)/d' -i Makefile
     # Install the modules in $out/lib/modules with matching paths
     # in modules.dep (i.e., refererring to $out/lib/modules, not
     # /lib/modules).  The depmod_opts= is to prevent the kernel
@@ -96,7 +95,7 @@ installPhase() {
     if test "$arch" != um; then
         # copy all Makefiles and Kconfig files
         ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source
-        cp --parents `find  -type f -name "Makefile*" -o -name "Kconfig*"` $out/lib/modules/$version/build
+        cp --parents `find  -type f -name Makefile -o -name "Kconfig*"` $out/lib/modules/$version/build
         cp Module.symvers $out/lib/modules/$version/build
 
         # weed out unneeded stuff
diff --git a/pkgs/os-specific/linux/kernel/default.nix b/pkgs/os-specific/linux/kernel/default.nix
deleted file mode 100644
index c07bc4c81fb..00000000000
--- a/pkgs/os-specific/linux/kernel/default.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-args:
-let
-  getValue = aSet: aName: default:
-  (if (builtins.hasAttr aName aSet) then (builtins.getAttr aName aSet) else default);
-in
-
-let
-  newArgs = (args //
-  {
-    userModeLinux = getValue args "userModeLinux" false;
-  
-    localVersion = getValue args "localVersion" "";
-  
-    config = getValue args "configFile" null;
-  
-    extraPatches = getValue args "extraPatches" [];
-  
-    extraConfig = getValue args "extraConfig" [];
-  });
-in
-args.stdenv.lib.listOfListsToAttrs [
-  [ "recurseForDerivations" true ]
-  [ "2.6.20" (import ./2.6.20.nix newArgs) ]
-  [ "2.6.21" (import ./2.6.21.nix newArgs) ]
-  [ "2.6.21-ck" (import ./2.6.21-ck.nix newArgs) ]
-  [ "2.6.22" (import ./2.6.22.nix newArgs) ]
-  [ "2.6.22-ck" (import ./2.6.22-ck.nix newArgs) ]
-  [ "2.6.23" (import ./2.6.23.nix newArgs) ]
-  [ "2.6.23.1" (import ./2.6.23.1.nix newArgs) ]
-  [ "default" (import ./2.6.23.1.nix newArgs) ]
-]
diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.20.nix b/pkgs/os-specific/linux/kernel/linux-2.6.20.nix
new file mode 100644
index 00000000000..3299ba5a3cb
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel/linux-2.6.20.nix
@@ -0,0 +1,76 @@
+{ stdenv, fetchurl, perl, mktemp, module_init_tools
+
+  # A list of patches to apply to the kernel.  Each element of this list
+  # should be an attribute set {name, patch} where `name' is a
+  # symbolic name and `patch' is the actual patch.  The patch may
+  # optionally be compressed with gzip or bzip2.
+, kernelPatches ? []
+
+, # Whether to build a User-Mode Linux kernel.
+  userModeLinux ? false
+
+, # Allows you to set your own kernel version suffix (e.g.,
+  # "-my-kernel").
+  localVersion ? ""
+
+, # Your own kernel configuration file, if you don't want to use the
+  # default. 
+  kernelConfig ? null  
+}:
+
+assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
+
+let
+
+  lib = import ../../../lib;
+
+  version = "2.6.20.12";
+
+in
+
+stdenv.mkDerivation {
+  name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}";
+  builder = ./builder.sh;
+  
+  src = fetchurl {
+    url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2";
+    sha256 = "1s7vdpg2897q5pcyxxypqcnibwpbdawbimkf3pngmahj8wr9c03x";
+  };
+  
+  patches = map (p: p.patch) kernelPatches;
+  extraConfig = lib.concatStrings (map (p: "\n" + (if p ? extraConfig then p.extraConfig else "") + "\n") kernelPatches);
+
+  config =
+    if kernelConfig != null then kernelConfig else
+    if userModeLinux then ./config-2.6.20-uml else
+    if stdenv.system == "i686-linux" then ./config-2.6.20-i686-smp else
+    if stdenv.system == "x86_64-linux" then ./config-2.6.20-x86_64-smp else
+    abort "No kernel configuration for your platform!";
+  
+  buildInputs = [perl mktemp];
+  
+  arch =
+    if userModeLinux then "um" else
+    if stdenv.system == "i686-linux" then "i386" else
+    if stdenv.system == "x86_64-linux" then "x86_64" else
+    abort "Platform ${stdenv.system} is not supported.";
+
+  makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else "";
+
+  inherit module_init_tools;
+
+  allowLocalVersion = false; # don't allow patches to set a suffix
+  inherit localVersion; # but do allow the user to set one.
+
+  meta = {
+    description =
+      (if userModeLinux then
+        "User-Mode Linux"
+       else
+        "The Linux kernel") +
+      (if kernelPatches == [] then "" else
+        " (with patches: "
+        + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches))
+        + ")");
+  };
+}
diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.21.nix b/pkgs/os-specific/linux/kernel/linux-2.6.21.nix
new file mode 100644
index 00000000000..e7fc2943a5c
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel/linux-2.6.21.nix
@@ -0,0 +1,76 @@
+{ stdenv, fetchurl, perl, mktemp, module_init_tools
+
+  # A list of patches to apply to the kernel.  Each element of this list
+  # should be an attribute set {name, patch} where `name' is a
+  # symbolic name and `patch' is the actual patch.  The patch may
+  # optionally be compressed with gzip or bzip2.
+, kernelPatches ? []
+
+, # Whether to build a User-Mode Linux kernel.
+  userModeLinux ? false
+
+, # Allows you to set your own kernel version suffix (e.g.,
+  # "-my-kernel").
+  localVersion ? ""
+
+, # Your own kernel configuration file, if you don't want to use the
+  # default. 
+  kernelConfig ? null  
+}:
+
+assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
+
+let
+
+  lib = import ../../../lib;
+
+  version = "2.6.21.7";
+
+in
+
+stdenv.mkDerivation {
+  name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}";
+  builder = ./builder.sh;
+  
+  src = fetchurl {
+    url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2";
+    sha256 = "1c8ndsz35qd8vyng3xsxjjkjv5bnzyvc9b5vd85fz5v0bjp8hx50";
+  };
+  
+  patches = map (p: p.patch) kernelPatches;
+  extraConfig = lib.concatStrings (map (p: "\n" + (if p ? extraConfig then p.extraConfig else "") + "\n") kernelPatches);
+
+  config =
+    if kernelConfig != null then kernelConfig else
+    if userModeLinux then ./config-2.6.21-uml else
+    if stdenv.system == "i686-linux" then ./config-2.6.21-i686-smp else
+    if stdenv.system == "x86_64-linux" then ./config-2.6.21-x86_64-smp else
+    abort "No kernel configuration for your platform!";
+  
+  buildInputs = [perl mktemp];
+  
+  arch =
+    if userModeLinux then "um" else
+    if stdenv.system == "i686-linux" then "i386" else
+    if stdenv.system == "x86_64-linux" then "x86_64" else
+    abort "Platform ${stdenv.system} is not supported.";
+
+  makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else "";
+
+  inherit module_init_tools;
+
+  allowLocalVersion = false; # don't allow patches to set a suffix
+  inherit localVersion; # but do allow the user to set one.
+
+  meta = {
+    description =
+      (if userModeLinux then
+        "User-Mode Linux"
+       else
+        "The Linux kernel") +
+      (if kernelPatches == [] then "" else
+        " (with patches: "
+        + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches))
+        + ")");
+  };
+}
diff --git a/pkgs/os-specific/linux/kernel/meta.nix b/pkgs/os-specific/linux/kernel/linux-2.6.22.nix
index 8dcdcecab52..1abc1470616 100644
--- a/pkgs/os-specific/linux/kernel/meta.nix
+++ b/pkgs/os-specific/linux/kernel/linux-2.6.22.nix
@@ -1,12 +1,34 @@
-args: with args;
+{ stdenv, fetchurl, perl, mktemp, module_init_tools
+
+  # A list of patches to apply to the kernel.  Each element of this list
+  # should be an attribute set {name, patch} where `name' is a
+  # symbolic name and `patch' is the actual patch.  The patch may
+  # optionally be compressed with gzip or bzip2.
+, kernelPatches ? []
+
+, # Whether to build a User-Mode Linux kernel.
+  userModeLinux ? false
+
+, # Allows you to set your own kernel version suffix (e.g.,
+  # "-my-kernel").
+  localVersion ? ""
+
+, # Your own kernel configuration file, if you don't want to use the
+  # default. 
+  kernelConfig ? null
+
+, # A list of additional statements to be appended to the
+  # configuration file.
+  extraConfig ? []
+}:
 
 assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
 
 let
 
-  lib = stdenv.lib;
-  addNewlines = map (s: "\n" + s + "\n");
-  kernelPatches = systemPatches ++ extraPatches;
+  lib = import ../../../lib;
+
+  version = "2.6.22.18";
 
 in
 
@@ -14,18 +36,24 @@ stdenv.mkDerivation {
   name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}";
   builder = ./builder.sh;
   
-  src = fetchurl ( {
+  src = fetchurl {
     url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2";
-  } // src_hash );
+    sha256 = "09acj1xr16j9y91gzwzcjhanhcpyac1ah2lc42mfi7d8c0plagry";
+  };
   
   patches = map (p: p.patch) kernelPatches;
-
   extraConfig =
-    let configFromPatches =
+    let addNewlines = map (s: "\n" + s + "\n");
+        configFromPatches =
           map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches;
     in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig));
 
-  inherit config;
+  config =
+    if kernelConfig != null then kernelConfig else
+    if userModeLinux then ./config-2.6.22-uml else
+    if stdenv.system == "i686-linux" then ./config-2.6.22-i686-smp else
+    if stdenv.system == "x86_64-linux" then ./config-2.6.22-x86_64-smp else
+    abort "No kernel configuration for your platform!";
   
   buildInputs = [perl mktemp];
   
diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.23.nix b/pkgs/os-specific/linux/kernel/linux-2.6.23.nix
new file mode 100644
index 00000000000..d4c4b688ab4
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel/linux-2.6.23.nix
@@ -0,0 +1,84 @@
+{ stdenv, fetchurl, perl, mktemp, module_init_tools
+
+  # A list of patches to apply to the kernel.  Each element of this list
+  # should be an attribute set {name, patch} where `name' is a
+  # symbolic name and `patch' is the actual patch.  The patch may
+  # optionally be compressed with gzip or bzip2.
+, kernelPatches ? []
+
+, # Whether to build a User-Mode Linux kernel.
+  userModeLinux ? false
+
+, # Allows you to set your own kernel version suffix (e.g.,
+  # "-my-kernel").
+  localVersion ? ""
+
+, # Your own kernel configuration file, if you don't want to use the
+  # default. 
+  kernelConfig ? null
+
+, # A list of additional statements to be appended to the
+  # configuration file.
+  extraConfig ? []
+}:
+
+assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux";
+
+let
+
+  lib = import ../../../lib;
+
+  version = "2.6.23.16";
+
+in
+
+stdenv.mkDerivation {
+  name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}";
+  builder = ./builder.sh;
+  
+  src = fetchurl {
+    url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2";
+    sha256 = "0drk3981rl5j16s6amb63lai9kpi0vf0kr6avhpd9nikj27bsa83";
+  };
+  
+  patches = map (p: p.patch) kernelPatches;
+  extraConfig =
+    let addNewlines = map (s: "\n" + s + "\n");
+        configFromPatches =
+          map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches;
+    in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig));
+
+  config =
+    if kernelConfig != null then kernelConfig else
+    if userModeLinux then ./config-2.6.23-uml else
+    if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else
+    if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else
+    abort "No kernel configuration for your platform!";
+  
+  buildInputs = [perl mktemp];
+  
+  arch =
+    if userModeLinux then "um" else
+    if stdenv.system == "i686-linux" then "i386" else
+    if stdenv.system == "x86_64-linux" then "x86_64" else
+    abort "Platform ${stdenv.system} is not supported.";
+
+  makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else "";
+
+  inherit module_init_tools;
+
+  allowLocalVersion = false; # don't allow patches to set a suffix
+  inherit localVersion; # but do allow the user to set one.
+
+  meta = {
+    description =
+      (if userModeLinux then
+        "User-Mode Linux"
+       else
+        "The Linux kernel") +
+      (if kernelPatches == [] then "" else
+        " (with patches: "
+        + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches))
+        + ")");
+  };
+}
diff --git a/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix
index 3aa2731ac3f..20e738e0692 100644
--- a/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix
+++ b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre11.tar.gz;
@@ -8,11 +8,13 @@ args : with args;
 		buildInputs = [];
 		configureFlags = [''--prefix=$out'' ''--kernel-path=$(ls -d ${kernel}/lib/modules/*/build)''];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
   debugStep = FullDepEntry (''
   	cat config-host.mak
   '') [minInit];
   preConfigure = FullDepEntry ('' 
+  	sed -e 's/`uname -r`/'"$(basename ${kernel}/lib/modules/*)"'/' -i install.sh
   	sed -e '/kernel_path=/akernel_path=$out$kernel_path' -i install.sh
 	sed -e '/depmod/d' -i install.sh
 	cat install.sh
@@ -21,7 +23,7 @@ in
 stdenv.mkDerivation rec {
 	name = "kqemu-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [preConfigure doConfigure debugStep doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [preConfigure doConfigure debugStep doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 		Kernel module for Qemu acceleration
diff --git a/pkgs/os-specific/linux/kvm/57.nix b/pkgs/os-specific/linux/kvm/57.nix
new file mode 100644
index 00000000000..c7859eed178
--- /dev/null
+++ b/pkgs/os-specific/linux/kvm/57.nix
@@ -0,0 +1,24 @@
+{stdenv, fetchurl, kernelHeaders, zlib, e2fsprogs, SDL, alsaLib}:
+   
+assert stdenv.isLinux;
+   
+stdenv.mkDerivation {
+  name = "kvm-57";
+   
+  src = fetchurl {
+    url = mirror://sourceforge/kvm/kvm-57.tar.gz;
+    sha256 = "016h5pf59fyz7skzsaprii2mdpxpb8hfnnr1w475qcfyy6ccr9r0";
+  };
+
+  configureFlags = "--with-patched-kernel --kerneldir=${kernelHeaders}";
+
+  # e2fsprogs is needed for libuuid.
+  buildInputs = [zlib e2fsprogs SDL alsaLib];
+
+  preConfigure = "for i in configure user/configure; do substituteInPlace $i --replace /bin/bash $shell; done";
+
+  meta = {
+    homepage = http://kvm.qumranet.com/;
+    description = "A full virtualization solution for Linux on x86 hardware containing virtualization extensions";
+  };
+}
diff --git a/pkgs/os-specific/linux/module-init-tools/aggregator.nix b/pkgs/os-specific/linux/module-init-tools/aggregator.nix
index cfd49cc0813..76111eacfd2 100644
--- a/pkgs/os-specific/linux/module-init-tools/aggregator.nix
+++ b/pkgs/os-specific/linux/module-init-tools/aggregator.nix
@@ -1,10 +1,11 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		addSbinPath = true;
 		src = "";
 		buildInputs = [module_init_tools];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let 
 
 doCollect = FullDepEntry (''
@@ -17,7 +18,8 @@ done
 rm -rf nix-support
 cd lib/modules/
 rm */modules.*
-MODULE_DIR=$PWD/ depmod -a 
+#  linux-* will pass the new kernel version to depmod to take rather than `uname -r` (see man page)
+MODULE_DIR=$PWD/ depmod -a $(basename lib/modules/2.*)
 cd $out/
 '') [minInit addInputs defEnsureDir];
 in
@@ -25,7 +27,7 @@ stdenv.mkDerivation rec {
 	name = "kernel-modules";
 	inherit moduleSources;
 	builder = writeScript (name + "-builder")
-		(textClosure [doCollect doForceShare doPropagate]);
+		(textClosure localDefs [doCollect doForceShare doPropagate]);
 	meta = {
 		description = "
 		A directory to hold all  the modules, including those 
diff --git a/pkgs/os-specific/linux/ndiswrapper/default.nix b/pkgs/os-specific/linux/ndiswrapper/default.nix
index 1eed97d7c51..5138ae4f9b8 100644
--- a/pkgs/os-specific/linux/ndiswrapper/default.nix
+++ b/pkgs/os-specific/linux/ndiswrapper/default.nix
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
   ";
 
   # should we use unstable? 
-  src = fetchurl {
+  src = args.fetchurl {
     url = http://kent.dl.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-1.49.tar.gz;
     sha256 = "1b9nqkk7gv6gffzj9b8mjy5myxf2afwpyr2n5wbfsylf15dvvvjr";
   };
diff --git a/pkgs/os-specific/linux/nfs-utils/default.nix b/pkgs/os-specific/linux/nfs-utils/default.nix
index 5240bba5d14..18278ef3c34 100644
--- a/pkgs/os-specific/linux/nfs-utils/default.nix
+++ b/pkgs/os-specific/linux/nfs-utils/default.nix
@@ -1,13 +1,13 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "nfs-utils-1.1.1";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = mirror://sourceforge/nfs/nfs-utils-1.1.1.tar.gz;
     sha256 = "0aa434cv7lgbrhks0rzhwxvbk2zsa17kjwxqjrrh87zrv9d2sr1x";
   };
 
-  buildInputs =(with args; [kernelHeaders tcp_wrapper]);
+  buildInputs = [kernelHeaders tcp_wrapper];
 
   meta = { 
       description = "nfs utils";
diff --git a/pkgs/os-specific/linux/nvidia/default.nix b/pkgs/os-specific/linux/nvidia/default.nix
index 11906b60658..c8eaa0a8936 100644
--- a/pkgs/os-specific/linux/nvidia/default.nix
+++ b/pkgs/os-specific/linux/nvidia/default.nix
@@ -2,7 +2,7 @@
 
 let 
 
-  versionNumber = "169.07";
+  versionNumber = "169.09";
 
 in
 
@@ -12,7 +12,7 @@ stdenv.mkDerivation {
   
   src = fetchurl {
     url = "http://us.download.nvidia.com/XFree86/Linux-x86/${versionNumber}/NVIDIA-Linux-x86-${versionNumber}-pkg1.run";
-    sha256 = "1q4sbwcf24rvx72sj19pvhsmg5n8v2rfzsxf56mfxjbiy2jhjbaa";
+    sha256 = "1m3k2jyxi3xxpm6890y0d97jisnxiyyay59ss2r9abyvpkv3by8i";
   };
 
   #xenPatch = ./nvidia-2.6.24-xen.patch;
diff --git a/pkgs/os-specific/linux/radeontools/default.nix b/pkgs/os-specific/linux/radeontools/default.nix
index 67d6cc4575f..d4d39606d62 100644
--- a/pkgs/os-specific/linux/radeontools/default.nix
+++ b/pkgs/os-specific/linux/radeontools/default.nix
@@ -1,8 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "radeontool-1.5";
 
-  inherit (args) pciutils;
+  inherit pciutils;
 
   # Don't know wether it's a good idea to hardcode the lspci path..
   # But it will work on nix..
@@ -12,7 +12,7 @@ args.stdenv.mkDerivation {
     cd ..
   ";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://fdd.com/software/radeon/radeontool-1.5.tar.gz;
     sha256 = "0qbkawhhq0y0gqbbql7q04y0v0hims5c4jkjsbc1y03rf9kr10ar";
   };
diff --git a/pkgs/os-specific/linux/reiser4progs/default.nix b/pkgs/os-specific/linux/reiser4progs/default.nix
new file mode 100644
index 00000000000..235b2b8381b
--- /dev/null
+++ b/pkgs/os-specific/linux/reiser4progs/default.nix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, libaal}:
+
+stdenv.mkDerivation {
+  name = "reiser4progs-1.0.6";
+
+  src = fetchurl {
+    url = http://chichkin_i.zelnet.ru/namesys/reiser4progs-1.0.6.tar.gz;
+    sha256 = "0x6m6px19hz54r8q4wwpf437qmqh44c5ddw9846isr64zs2rpld0";
+  };
+
+  buildInputs = [libaal];
+
+  preInstall = ''
+    substituteInPlace Makefile --replace ./run-ldconfig true
+  '';
+
+  meta = {
+    homepage = http://www.namesys.com/;
+    description = "Reiser4 utilities";
+  };
+}
diff --git a/pkgs/os-specific/linux/reiserfsprogs/default.nix b/pkgs/os-specific/linux/reiserfsprogs/default.nix
index 324ba28524c..1fc4fed12d5 100644
--- a/pkgs/os-specific/linux/reiserfsprogs/default.nix
+++ b/pkgs/os-specific/linux/reiserfsprogs/default.nix
@@ -2,15 +2,15 @@ args: with args;
 
 stdenv.mkDerivation {
   name = "reiserfsprogs-3.6.19";
+
   src = fetchurl {
-      url = ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.6.19.tar.gz;
-      sha256 = "1gv8gr0l5l2j52540y2wj9c9h7fn0r3vabykf95748ydmr9jr1n0";
-    };
+    url = http://chichkin_i.zelnet.ru/namesys/reiserfsprogs-3.6.19.tar.gz;
+    sha256 = "1gv8gr0l5l2j52540y2wj9c9h7fn0r3vabykf95748ydmr9jr1n0";
+  };
 
-  patches = [./headers-fix.patch];
   meta = {
-  homepage=http://www.namesys.com/;
-  description="Reiserfs Utilities";
-  license="GPL-2";
+    homepage = http://www.namesys.com/;
+    description = "Reiserfs utilities";
+    license = "GPL-2";
   };
 }
diff --git a/pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch b/pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch
deleted file mode 100644
index 2c6693dae75..00000000000
--- a/pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -pruN 1:3.6.19-4/include/reiserfs_fs.h 1:3.6.19-4ubuntu2/include/reiserfs_fs.h
---- 1:3.6.19-4/include/reiserfs_fs.h	2004-09-16 08:49:05.000000000 +0100
-+++ 1:3.6.19-4ubuntu2/include/reiserfs_fs.h	2006-12-14 18:08:28.000000000 +0000
-@@ -38,15 +38,10 @@
- # define extern_inline
- #endif
- 
--#include <asm/unaligned.h>
--
- #ifndef get_unaligned
--#if defined(__ppc__) || defined(ppc) || defined(__ppc) || \
--    defined(__PPC) || defined(powerpc) || defined(__powerpc__)
- #	define get_unaligned(ptr)	(*(ptr))
- #	define put_unaligned(val,ptr)	((void)(*(ptr) = (val)))
- #endif
--#endif
- 
- #define get_leXX(xx,p,field)	(le##xx##_to_cpu ((p)->field))
- #define set_leXX(xx,p,field,val) do { (p)->field = cpu_to_le##xx(val); } while (0)
diff --git a/pkgs/os-specific/linux/sdparm/1.02.nix b/pkgs/os-specific/linux/sdparm/1.02.nix
index 0616ac83563..edff04444e0 100644
--- a/pkgs/os-specific/linux/sdparm/1.02.nix
+++ b/pkgs/os-specific/linux/sdparm/1.02.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://sg.torque.net/sg/p/sdparm-1.02.tgz;
@@ -9,10 +9,11 @@ args : with args;
 		buildInputs = [];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "sdparm-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	SCSI parameters utility.
diff --git a/pkgs/os-specific/linux/tcp-wrapper/default.nix b/pkgs/os-specific/linux/tcp-wrapper/default.nix
index 35c68a6d9a4..9c952bcabf8 100644
--- a/pkgs/os-specific/linux/tcp-wrapper/default.nix
+++ b/pkgs/os-specific/linux/tcp-wrapper/default.nix
@@ -1,8 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "tcp-wrappers-7.6";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://ftp.debian.org/debian/pool/main/t/tcp-wrappers/tcp-wrappers_7.6.dbs.orig.tar.gz;
     sha256 = "0k68ziinx6biwar5lcb9jvv0rp6b3vmj6861n75bvrz4w1piwkdp";
   };
@@ -20,7 +20,7 @@ args.stdenv.mkDerivation {
     make CFLAGS='-DSYS_ERRLIST_DEFINED=1  -Dvsyslog=1' tcpd
   "
 
-  buildInputs =(with args; [kernelHeaders gnused]);
+  buildInputs = [kernelHeaders gnused];
 
   # meta = ...
 }
diff --git a/pkgs/os-specific/linux/udev/default.nix b/pkgs/os-specific/linux/udev/default.nix
index 14393f59958..a2de2e08ce9 100644
--- a/pkgs/os-specific/linux/udev/default.nix
+++ b/pkgs/os-specific/linux/udev/default.nix
@@ -1,11 +1,25 @@
 {stdenv, fetchurl}:
 
 stdenv.mkDerivation {
-  name = "udev-112";
+  name = "udev-118";
+
   src = fetchurl {
-    url = mirror://kernel/linux/utils/kernel/hotplug/udev-112.tar.bz2;
-    sha256 = "0vhqnli4va3yzvr90rcpbgs42sphpk9prdis9x2qmlmdynzangw2";
+    url = mirror://kernel/linux/utils/kernel/hotplug/udev-118.tar.bz2;
+    sha256 = "1i488wqm7i6nz6gidbkxkb47hr427ika48i8imwrvvnpg1kzhska";
+  };
+
+  # "DESTDIR=/" is a hack to prevent "make install" from trying to
+  # mess with /dev.
+  preBuild = ''
+    makeFlagsArray=(etcdir=$out/etc sbindir=$out/sbin usrbindir=$out/bin usrsbindir=$out/sbin mandir=$out/share/man INSTALL='install -c' DESTDIR=/)
+  '';
+
+  preInstall = ''
+    installFlagsArray=(udevdir=$TMPDIR/dummy)
+  '';
+
+  meta = {
+    homepage = http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html;
+    description = "Udev manages the /dev filesystem";
   };
-  preBuild = "makeFlagsArray=(etcdir=$out/etc sbindir=$out/sbin usrbindir=$out/bin usrsbindir=$out/sbin mandir=$out/share/man INSTALL='install -c')";
-  preInstall = "installFlagsArray=(udevdir=dummy)";
 }
diff --git a/pkgs/os-specific/linux/usbutils/default.nix b/pkgs/os-specific/linux/usbutils/default.nix
index b7d2c349e25..1f123fadc87 100644
--- a/pkgs/os-specific/linux/usbutils/default.nix
+++ b/pkgs/os-specific/linux/usbutils/default.nix
@@ -3,17 +3,17 @@
 let
 
   usbids = fetchurl {
-    url = http://nix.cs.uu.nl/dist/tarballs/usb.ids.20061212.bz2;
-    sha256 = "112l4fzjn5p3y6fv3x10vbrd36n2v5n04s7pjdlkb2yqv4crp84m";
+    url = http://nix.cs.uu.nl/dist/tarballs/usb.ids.20080115.bz2;
+    sha256 = "0xymp8fpp9pnkj2i4ry8zpsvy18zw14sx03pnz316lpgwc6dx12n";
   };
 
 in
 
 stdenv.mkDerivation {
-  name = "usbutils-0.72";
+  name = "usbutils-0.73";
   src = fetchurl {
-    url = mirror://sourceforge/linux-usb/usbutils-0.72.tar.gz;
-    sha256 = "08s4g4sz7p3a1afvphxd7h5bbfywvp0j611y85wbhwr14i9m6f00";
+    url = mirror://sourceforge/linux-usb/usbutils-0.73.tar.gz;
+    sha256 = "1x27mc2apyipf8fa2ac49rfnkm7f5dwv784b1ncgc5yjiz4prp1f";
   };
   buildInputs = [libusb];
   preBuild = "bunzip2 < ${usbids} > usb.ids";
diff --git a/pkgs/os-specific/linux/wis-go7007/default.nix b/pkgs/os-specific/linux/wis-go7007/default.nix
new file mode 100644
index 00000000000..3e35c83488a
--- /dev/null
+++ b/pkgs/os-specific/linux/wis-go7007/default.nix
@@ -0,0 +1,59 @@
+{stdenv, fetchurl, kernel, ncurses, fxload}:
+
+stdenv.mkDerivation {
+  name = "wis-go7007-0.9.8";
+
+  src = fetchurl {
+    url = http://gentoo.osuosl.org/distfiles/wis-go7007-linux-0.9.8.tar.bz2;
+    sha256 = "06lvlz42c5msvwc081p8vjcbv8qq1j1g1myxhh27xi8zi06n1mzg";
+  };
+
+  patches = map fetchurl [
+    { url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/media-tv/wis-go7007/files/wis-go7007-0.9.8-kernel-2.6.17.diff?rev=1.1";
+      sha256 = "0cizbg82fdl5byhvpkdx64qa02xcahdyddi2l2jn95sxab28a5yg";
+    }
+    { url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/media-tv/wis-go7007/files/wis-go7007-0.9.8-fix-udev.diff?rev=1.2";
+      sha256 = "1985lcb7gh5zsf3lm0b43zd6q0cb9q4z376n9q060bh99yw6m0w1";
+    }
+    { url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/media-tv/wis-go7007/files/snd.patch?rev=1.1";
+      sha256 = "0a6dz1l16pz1fk77s3awxh635cacbivfcfnd1carbx5jp2gq3jna";
+    }
+  ];
+
+  buildInputs = [ncurses];
+
+  preBuild = ''
+    # Urgh, we need the complete kernel sources for some header
+    # files.  So unpack the original kernel source tarball and copy
+    # the configured include directory etc. on top of it.
+    kernelVersion=$(cd ${kernel}/lib/modules && ls)
+    kernelBuild=$(echo ${kernel}/lib/modules/$kernelVersion/source)
+    tar xvfj ${kernel.src}
+    kernelSource=$(echo $(pwd)/linux-*)
+    cp -prd $kernelBuild/* $kernelSource
+
+    #includeDir=$out/lib/modules/$kernelVersion/source/include/linux
+    includeDir=$TMPDIR/scratch
+    substituteInPlace Makefile \
+        --replace '$(DESTDIR)$(KSRC)/include/linux' $includeDir \
+        --replace '$(DESTDIR)$(FIRMWARE_DIR)' '$(FIRMWARE_DIR)'
+    ensureDir $includeDir
+    ensureDir $out/etc/hotplug/usb
+    ensureDir $out/etc/udev/rules.d
+ 
+    makeFlagsArray=(KERNELSRC=$kernelSource \
+        FIRMWARE_DIR=$out/firmware FXLOAD=${fxload}/sbin/fxload \
+        DESTDIR=$out SKIP_DEPMOD=1 \
+        USE_UDEV=y)
+  ''; # */
+
+  postInstall = ''
+    ensureDir $out/bin
+    cp apps/gorecord apps/modet $out/bin/
+  '';
+
+  meta = {
+    description = "Kernel module for the Micronas GO7007, used in a number of USB TV devices";
+    homepage = http://oss.wischip.com/;
+  };
+}
diff --git a/pkgs/servers/fingerd/bsd-fingerd/default.nix b/pkgs/servers/fingerd/bsd-fingerd/default.nix
new file mode 100644
index 00000000000..eacf2371d36
--- /dev/null
+++ b/pkgs/servers/fingerd/bsd-fingerd/default.nix
@@ -0,0 +1,17 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "bsd-fingerd-0.17";
+
+	src = fetchurl {
+		url = "ftp://ftp.metalab.unc.edu/pub/linux/system/network/finger/bsd-finger-0.17.tar.gz";
+		sha256 = "1yhkiv0in588il7f84k2xiy78g9lv12ll0y7047gazhiimk5v244";
+	};
+
+	NIX_CFLAGS_COMPILE="-D_GNU_SOURCE";
+
+	patches = [./ubuntu-0.17-9.patch];
+
+	preBuild = "cd fingerd";
+
+	preInstall = '' ensureDir $out/man/man8 $out/sbin '';
+}
diff --git a/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch b/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch
new file mode 100644
index 00000000000..80968d587ba
--- /dev/null
+++ b/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch
@@ -0,0 +1,67 @@
+--- bsd-finger-0.17.orig/fingerd/fingerd.8
++++ bsd-finger-0.17/fingerd/fingerd.8
+@@ -36,10 +36,10 @@
+ .Dt FINGERD 8
+ .Os "Linux NetKit (0.17)"
+ .Sh NAME
+-.Nm fingerd
++.Nm in.fingerd
+ .Nd remote user information server
+ .Sh SYNOPSIS
+-.Nm fingerd
++.Nm in.fingerd
+ .Op Fl wulf
+ .Op Fl pL Ar path
+ .Op Fl t Ar timeout
+@@ -61,7 +61,7 @@
+ banner
+ which also shows some informations (e.g. uptime, operating system name and
+ release) about the system the
+-.Nm fingerd
++.Nm in.fingerd
+ is running on. Some sites may consider this a security risk as it
+ gives out information that may be useful to crackers. 
+ .Pp
+@@ -85,7 +85,7 @@
+ .Pp
+ The 
+ .Fl p
+-option allows specification of an alternate location for fingerd to find
++option allows specification of an alternate location for in.fingerd to find
+ the 
+ .Dq finger
+ program. The
+@@ -97,7 +97,7 @@
+ option specifies the time to wait for a request before closing the
+ connection.  A value of 0 waits forever.  The default is 60 seconds.
+ .Pp
+-Options to fingerd should be specified in 
++Options to in.fingerd should be specified in 
+ .Pa /etc/inetd.conf .
+ .Pp
+ The finger protocol consists mostly of specifying command arguments.
+@@ -105,12 +105,12 @@
+ .Xr inetd 8
+ .Dq super-server
+ runs
+-.Nm fingerd
++.Nm in.fingerd
+ for 
+ .Tn TCP
+ requests received on port 79.
+ Once connected 
+-.Nm fingerd
++.Nm in.fingerd
+ reads a single command line
+ terminated by a
+ .Aq Tn CRLF
+--- bsd-finger-0.17.orig/fingerd/fingerd.c
++++ bsd-finger-0.17/fingerd/fingerd.c
+@@ -55,6 +55,7 @@
+ #include <netinet/in.h>
+ #include <sys/utsname.h>
+ #include <sys/wait.h>
++#include <sys/socket.h>
+ 
+ #include "pathnames.h"
+ #include "../version.h"
diff --git a/pkgs/servers/ftp/vsftpd/default.nix b/pkgs/servers/ftp/vsftpd/default.nix
index 861845ab24f..7961448428d 100644
--- a/pkgs/servers/ftp/vsftpd/default.nix
+++ b/pkgs/servers/ftp/vsftpd/default.nix
@@ -1,16 +1,20 @@
-{stdenv, fetchurl, openssl}:
+args: with args;
 
-stdenv.mkDerivation {
-  name = "vsftpd-2.0.3";
+stdenv.mkDerivation rec {
+  name = "vsftpd-2.0.5";
   src = fetchurl {
-    url = ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz;
-    md5 = "74936cbd8e8251deb1cd99c5fb18b6f8";
+    url = "ftp://vsftpd.beasts.org/users/cevans/${name}.tar.gz";
+    sha256 = "0nzsxknnaqnfk853yjsmi31sl02jf5ydix9wxbldv4i7vzqfnqjl";
   };
   
-  NIX_LDFLAGS = [ "-lcrypt" "-lssl" "-lcrypto" ];
+  NIX_LDFLAGS = "-lcrypt -lssl -lcrypto -lpam -lcap";
 
-  builder = ./builder.sh ;
+  preInstall = ''
+  ensureDir $out/{,s}bin
+  ensureDir $out/man/man{5,8}
+  '';
 
   patches = [ ./fix.patch ] ;
-  buildInputs = [ openssl ];
+  preConfigure = ''sed -i "/VSF_BUILD_SSL/s/^#undef/#define/" builddefs.h'';
+  buildInputs = [ openssl libcap pam ];
 }
diff --git a/pkgs/servers/http/apache-httpd/builder.sh b/pkgs/servers/http/apache-httpd/builder.sh
deleted file mode 100644
index 3a5ccd846ee..00000000000
--- a/pkgs/servers/http/apache-httpd/builder.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-buildInputs="$openssl $db4 $expat $perl"
-source $stdenv/setup
-
-configureFlags="\
- --with-expat=$expat \
- --with-z=$zlib \
- --enable-mods-shared=all \
- --enable-authn-alias \
- --without-gdbm \
- --enable-threads \
- --with-devrandom=/dev/urandom"
-
-if test $db4Support; then
-    configureFlags="--with-berkeley-db=$db4 $configureFlags"
-fi
-
-if test $sslSupport; then
-    configureFlags="--enable-ssl --with-ssl=$openssl $configureFlags"
-fi
-
-
-postInstall() {
-    echo "removing manual"
-    rm -rf $out/manual
-}
-postInstall=postInstall
-
-
-genericBuild
diff --git a/pkgs/servers/http/apache-httpd/default.nix b/pkgs/servers/http/apache-httpd/default.nix
index 92a442728d8..4e2af7ff900 100644
--- a/pkgs/servers/http/apache-httpd/default.nix
+++ b/pkgs/servers/http/apache-httpd/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, openssl, db4, expat, perl, zlib
-, sslSupport, db4Support
+, sslSupport, db4Support, proxySupport ? true
 }:
 
 assert sslSupport -> openssl != null;
@@ -7,19 +7,36 @@ assert db4Support -> db4 != null;
 assert expat != null && perl != null;
 
 stdenv.mkDerivation {
-  name = "apache-httpd-2.2.6";
+  name = "apache-httpd-2.2.8x";
 
-  builder = ./builder.sh;
   src = fetchurl {
-    url = http://archive.apache.org/dist/httpd/httpd-2.2.6.tar.bz2;
-    md5 = "203bea91715064f0c787f6499d33a377";
+    url = http://archive.apache.org/dist/httpd/httpd-2.2.8.tar.bz2;
+    md5 = "76d2598a4797163d07cd50e5304aa7cd";
   };
 
-  inherit sslSupport db4Support;
+  #inherit sslSupport db4Support;
 
-  inherit perl expat zlib;
-  openssl = if sslSupport then openssl else null;
-  db4 = if db4Support then db4 else null;
+  buildInputs = [expat perl] ++
+    stdenv.lib.optional sslSupport openssl ++
+    stdenv.lib.optional db4Support db4;
+
+  configureFlags = ''
+    --with-expat=${expat}
+    --with-z=${zlib}
+    --enable-mods-shared=all
+    --enable-authn-alias
+    ${if proxySupport then "--enable-proxy" else ""}
+    --without-gdbm
+    --enable-threads
+    --with-devrandom=/dev/urandom
+    ${if sslSupport then "--enable-ssl --with-ssl=${openssl}" else ""}
+    ${if db4Support then "--with-berkeley-db=${db4}" else ""}
+  '';
+
+  postInstall = ''
+    echo "removing manual"
+    rm -rf $out/manual
+  '';
 
   # For now, disable detection of epoll to ensure that Apache still
   # runs on Linux 2.4 kernels.  Once we've dropped support for 2.4 in
@@ -27,8 +44,13 @@ stdenv.mkDerivation {
   # detects characteristics of the build system's kernel to decide
   # what to use at runtime, since it's impure.
   apr_cv_epoll = "no";
+
+  passthru = {
+    inherit expat sslSupport db4Support proxySupport;
+  };
   
   meta = {
     description = "Apache HTTPD, the world's most popular web server";
+    homepage = http://httpd.apache.org/;
   };
 }
diff --git a/pkgs/servers/http/apache-modules/mod_python/default.nix b/pkgs/servers/http/apache-modules/mod_python/default.nix
index 16d247fe8dc..4c83070e9ca 100644
--- a/pkgs/servers/http/apache-modules/mod_python/default.nix
+++ b/pkgs/servers/http/apache-modules/mod_python/default.nix
@@ -1,13 +1,13 @@
 {stdenv, fetchurl, apacheHttpd, python}:
 
 stdenv.mkDerivation {
-  name = "mod_python-3.2.10";
+  name = "mod_python-3.3.1";
 
   builder = ./builder.sh;
 
   src = fetchurl {
-    url = http://apache.surfnet.nl/httpd/modpython/mod_python-3.2.10.tgz;
-    md5 = "cc6439f546a6e70cfff7ca51b8c62541";
+    url = http://archive.eu.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz;
+    sha256 = "0sss2xi6l1a2z8y6ji0cp8vgyvnhq8zrg0ilkvpj1mygbzyk28xd";
   };
 
   patches = [./install.patch];
diff --git a/pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh b/pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh
new file mode 100644
index 00000000000..70b609e6465
--- /dev/null
+++ b/pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh
@@ -0,0 +1,8 @@
+source $stdenv/setup
+
+tar xfvz $src
+cd tomcat-connectors-*-src/native
+./configure --with-apxs=$apacheHttpd/bin/apxs --with-java-home=$jdk
+make
+ensureDir $out/modules
+cp apache-2.0/mod_jk.so $out/modules
diff --git a/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix b/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix
new file mode 100644
index 00000000000..5c33c444c0d
--- /dev/null
+++ b/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix
@@ -0,0 +1,14 @@
+{stdenv, fetchurl, apacheHttpd, jdk}:
+
+stdenv.mkDerivation {
+  name = "tomcat-connectors-1.2.26";
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = http://apache.proserve.nl/tomcat/tomcat-connectors/jk/source/jk-1.2.26/tomcat-connectors-1.2.26-src.tar.gz;
+    md5 = "feaec245136bc4d99a9dde95a00ea93c";
+  };
+
+  inherit apacheHttpd;
+  buildInputs = [apacheHttpd jdk];
+}
diff --git a/pkgs/servers/http/jboss/builder.sh b/pkgs/servers/http/jboss/builder.sh
new file mode 100644
index 00000000000..33562000919
--- /dev/null
+++ b/pkgs/servers/http/jboss/builder.sh
@@ -0,0 +1,15 @@
+buildInputs="$jdk5"
+source $stdenv/setup
+
+export JDK_HOME=$jdk5
+export JAVA_HOME=$jdk5
+
+tar xfvz $src
+cd jboss-*
+cd build
+sh build.sh
+ensureDir $out
+cp -av output/jboss-*/* $out
+
+# Insert JAVA_HOME variable to make sure the latest JRE is used and not version 5
+sed -i -e "/GREP/aJAVA_HOME=$jdk" $out/bin/run.sh
diff --git a/pkgs/servers/http/jboss/default.nix b/pkgs/servers/http/jboss/default.nix
new file mode 100644
index 00000000000..279e4bfae71
--- /dev/null
+++ b/pkgs/servers/http/jboss/default.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, jdk5, jdk }:
+
+stdenv.mkDerivation {
+  name = "jboss-4.2.2.GA";
+
+  builder = ./builder.sh;
+  src = 
+    fetchurl {
+      url = http://garr.dl.sourceforge.net/sourceforge/jboss/jboss-4.2.2.GA-src.tar.gz;
+      md5 = "2a626cdccabe712628555676d67ad44a";
+    };
+
+  inherit jdk5 jdk;
+
+  meta = {
+    homepage = "http://www.jboss.org/";
+    description = "JBoss, Open Source J2EE application server";
+    license = "GPL/LGPL";
+  };
+}
diff --git a/pkgs/servers/http/jboss/jdbc/mysql/builder.sh b/pkgs/servers/http/jboss/jdbc/mysql/builder.sh
new file mode 100644
index 00000000000..06d60fc5e12
--- /dev/null
+++ b/pkgs/servers/http/jboss/jdbc/mysql/builder.sh
@@ -0,0 +1,5 @@
+buildInputs="$mysql_jdbc"
+source $stdenv/setup
+
+ensureDir $out/server/default/lib
+ln -s $mysql_jdbc/share/java/mysql-connector-java.jar $out/server/default/lib/mysql-connector-java.jar
diff --git a/pkgs/servers/http/jboss/jdbc/mysql/default.nix b/pkgs/servers/http/jboss/jdbc/mysql/default.nix
new file mode 100644
index 00000000000..8544ce050af
--- /dev/null
+++ b/pkgs/servers/http/jboss/jdbc/mysql/default.nix
@@ -0,0 +1,9 @@
+{ stdenv, jboss, mysql_jdbc }:
+
+stdenv.mkDerivation {
+  name = "jboss-mysql-jdbc";
+
+  builder = ./builder.sh;
+
+  inherit mysql_jdbc;
+}
diff --git a/pkgs/servers/http/tomcat/6.0.nix b/pkgs/servers/http/tomcat/6.0.nix
new file mode 100644
index 00000000000..32a3dedde47
--- /dev/null
+++ b/pkgs/servers/http/tomcat/6.0.nix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl, jdk}:
+
+stdenv.mkDerivation {
+
+  name = "apache-tomcat-6.0.14";
+
+  builder = ./builder-6.0.sh;
+
+  src = fetchurl {
+    url = http://apache.mirrors.webazilla.nl/tomcat/tomcat-6/v6.0.14/bin/apache-tomcat-6.0.14.tar.gz;
+    md5 = "3b18ff250d8172737c4f67f11631f68a";
+  };
+
+  inherit jdk;
+}
diff --git a/pkgs/servers/http/tomcat/axis2/builder.sh b/pkgs/servers/http/tomcat/axis2/builder.sh
new file mode 100644
index 00000000000..fa58a9e5292
--- /dev/null
+++ b/pkgs/servers/http/tomcat/axis2/builder.sh
@@ -0,0 +1,15 @@
+buildInputs="$unzip $apacheAnt $jdk"
+source $stdenv/setup
+
+unzip $src
+cd axis2-*
+ensureDir $out/share/java/axis2
+cp lib/* $out/share/java/axis2
+cd webapp
+ant
+ensureDir $out/webapps
+cp ../dist/axis2.war $out/webapps
+cd $out/webapps
+mkdir axis2
+cd axis2
+unzip ../axis2.war
diff --git a/pkgs/servers/http/tomcat/axis2/default.nix b/pkgs/servers/http/tomcat/axis2/default.nix
new file mode 100644
index 00000000000..aeb103c0e7d
--- /dev/null
+++ b/pkgs/servers/http/tomcat/axis2/default.nix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl, apacheAnt, jdk, unzip}:
+
+stdenv.mkDerivation {
+
+  name = "axis2-1.3";
+
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = http://apache.hippo.nl/ws/axis2/1_3/axis2-1.3-bin.zip;
+    md5 = "ab2bc77452288ebf80d861270734a83e";
+  };
+
+  inherit apacheAnt jdk unzip;
+}
diff --git a/pkgs/servers/http/tomcat/builder-6.0.sh b/pkgs/servers/http/tomcat/builder-6.0.sh
new file mode 100644
index 00000000000..ae2f934af59
--- /dev/null
+++ b/pkgs/servers/http/tomcat/builder-6.0.sh
@@ -0,0 +1,6 @@
+source $stdenv/setup
+
+tar zxf $src
+
+mkdir $out
+mv apache-tomcat*/* $out
diff --git a/pkgs/servers/irc/ircd-hybrid/default.nix b/pkgs/servers/irc/ircd-hybrid/default.nix
index 3f9fd380d14..572cc28e55b 100644
--- a/pkgs/servers/irc/ircd-hybrid/default.nix
+++ b/pkgs/servers/irc/ircd-hybrid/default.nix
@@ -1,17 +1,17 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "ircd-hybrid-7.2.2";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = mirror://sourceforge/ircd-hybrid/ircd-hybrid-7.2.2.tgz;
     sha256 = "1xn4dfbgx019mhismfnr2idhslvarlajyahj7c6bqzmarcwwrvck";
   };
 
-  buildInputs =(with args; [openssl zlib]);
+  buildInputs = [openssl zlib];
 
-  configureFlags = (with args; ["--with-nicklen=100" 
+  configureFlags =  ["--with-nicklen=100" 
 	"--with-topiclen=360" 
-	("--enable-openssl=" + openssl)]);
+	("--enable-openssl=" + openssl)];
 
   preInstall = "mkdir -p \${out}/ ; ln -s /home/ircd \${out}/logs;";
 
diff --git a/pkgs/servers/samba/default.nix b/pkgs/servers/samba/default.nix
index e94c2d1c554..629ac2a31b8 100644
--- a/pkgs/servers/samba/default.nix
+++ b/pkgs/servers/samba/default.nix
@@ -1,17 +1,23 @@
 args: with args;
 
-stdenv.mkDerivation {
-  name = "samba-3.0.26a";
+stdenv.mkDerivation rec {
+  name = "samba-3.0.28";
 
   src = fetchurl {
-    url = http://us1.samba.org/samba/ftp/stable/samba-3.0.26a.tar.gz;
-    sha256 = "41e11f69288b2291f12f8db093e2c55dc1360555d4542c83c0758c4c7a3d4d37";
+    url = "http://us1.samba.org/samba/ftp/stable/${name}.tar.gz";
+    sha256 = "13nr4mvh6vxgl7nb94qnqx3njcyd10cf4ji18srlkizpp49r5byw";
   };
 
-  buildInputs = [readline pam openldap];
-  configureFlags = [" --with-pam " " --with-smbmount " 
-  	" --datadir=\$out/share " " --with-acl-support "
-	" --with-aio-support "];
+  buildInputs = [readline pam openldap kerberos popt iniparser libunwind fam];
+  configureFlags = ''--with-pam --with-smbmount --datadir=$out/share
+  --with-aio-support ''
+  + (if (stdenv.gcc.libc != null) then "--with-libiconv=${stdenv.gcc.libc}" else "");
   postUnpack = "sourceRoot=\$sourceRoot/source";
-  postInstall = "rm -rf \$out/var ; ln -s /var/samba $out/var ";
+  
+  configFile = ./smb.conf;
+  postInstall = ''
+  rm -rf $out/var
+  ln -s /var/samba $out/var
+  cp ${configFile} $out/lib/smb.conf
+  '';
 }
diff --git a/pkgs/servers/samba/smb.conf b/pkgs/servers/samba/smb.conf
new file mode 100644
index 00000000000..c9da0d2cbb5
--- /dev/null
+++ b/pkgs/servers/samba/smb.conf
@@ -0,0 +1,271 @@
+# This is the main Samba configuration file. You should read the
+# smb.conf(5) manual page in order to understand the options listed
+# here. Samba has a huge number of configurable options (perhaps too
+# many!) most of which are not shown in this example
+#
+# For a step to step guide on installing, configuring and using samba, 
+# read the Samba-HOWTO-Collection. This may be obtained from:
+#  http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
+#
+# Many working examples of smb.conf files can be found in the 
+# Samba-Guide which is generated daily and can be downloaded from: 
+#  http://www.samba.org/samba/docs/Samba-Guide.pdf
+#
+# Any line which starts with a ; (semi-colon) or a # (hash) 
+# is a comment and is ignored. In this example we will use a #
+# for commentry and a ; for parts of the config file that you
+# may wish to enable
+#
+# NOTE: Whenever you modify this file you should run the command "testparm"
+# to check that you have not made any basic syntactic errors. 
+#
+#======================= Global Settings =====================================
+[global]
+
+# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
+   workgroup = NIXOSGROUP
+
+# server string is the equivalent of the NT Description field
+   server string = Samba Server
+
+# Security mode. Defines in which mode Samba will operate. Possible 
+# values are share, user, server, domain and ads. Most people will want 
+# user level security. See the Samba-HOWTO-Collection for details.
+   security = user
+
+# This option is important for security. It allows you to restrict
+# connections to machines which are on your local network. The
+# following example restricts access to two C class networks and
+# the "loopback" interface. For more examples of the syntax see
+# the smb.conf man page
+;   hosts allow = 192.168.1. 192.168.2. 127.
+
+# If you want to automatically load your printer list rather
+# than setting them up individually then you'll need this
+   load printers = yes
+
+# you may wish to override the location of the printcap file
+;   printcap name = /etc/printcap
+
+# on SystemV system setting printcap name to lpstat should allow
+# you to automatically obtain a printer list from the SystemV spool
+# system
+;   printcap name = lpstat
+
+# It should not be necessary to specify the print system type unless
+# it is non-standard. Currently supported print systems include:
+# bsd, cups, sysv, plp, lprng, aix, hpux, qnx
+;   printing = cups
+
+# Uncomment this if you want a guest account, you must add this to /etc/passwd
+# otherwise the user "nobody" is used
+  guest account = smbguest
+
+# this tells Samba to use a separate log file for each machine
+# that connects
+   log file = /var/samba/sambalog/log.%m
+
+# Put a capping on the size of the log files (in Kb).
+   max log size = 50
+
+# Use password server option only with security = server
+# The argument list may include:
+#   password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
+# or to auto-locate the domain controller/s
+#   password server = *
+;   password server = <NT-Server-Name>
+
+# Use the realm option only with security = ads
+# Specifies the Active Directory realm the host is part of
+;   realm = MY_REALM
+
+# Backend to store user information in. New installations should 
+# use either tdbsam or ldapsam. smbpasswd is available for backwards 
+# compatibility. tdbsam requires no further configuration.
+   passdb backend = tdbsam:/var/samba/passdb.tdb
+
+# Using the following line enables you to customise your configuration
+# on a per machine basis. The %m gets replaced with the netbios name
+# of the machine that is connecting.
+# Note: Consider carefully the location in the configuration file of
+#       this line.  The included file is read at that point.
+;   include = /usr/local/samba/lib/smb.conf.%m
+
+# Configure Samba to use multiple interfaces
+# If you have multiple network interfaces then you must list them
+# here. See the man page for details.
+;   interfaces = 192.168.12.2/24 192.168.13.2/24 
+
+# Browser Control Options:
+# set local master to no if you don't want Samba to become a master
+# browser on your network. Otherwise the normal election rules apply
+;   local master = no
+
+# OS Level determines the precedence of this server in master browser
+# elections. The default value should be reasonable
+;   os level = 33
+
+# Domain Master specifies Samba to be the Domain Master Browser. This
+# allows Samba to collate browse lists between subnets. Don't use this
+# if you already have a Windows NT domain controller doing this job
+;   domain master = yes 
+
+# Preferred Master causes Samba to force a local browser election on startup
+# and gives it a slightly higher chance of winning the election
+;   preferred master = yes
+
+# Enable this if you want Samba to be a domain logon server for 
+# Windows95 workstations. 
+;   domain logons = yes
+
+# if you enable domain logons then you may want a per-machine or
+# per user logon script
+# run a specific logon batch file per workstation (machine)
+;   logon script = %m.bat
+# run a specific logon batch file per username
+;   logon script = %U.bat
+
+# Where to store roving profiles (only for Win95 and WinNT)
+#        %L substitutes for this servers netbios name, %U is username
+#        You must uncomment the [Profiles] share below
+;   logon path = \\%L\Profiles\%U
+
+# Windows Internet Name Serving Support Section:
+# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
+;   wins support = yes
+
+# WINS Server - Tells the NMBD components of Samba to be a WINS Client
+#	Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
+;   wins server = w.x.y.z
+
+# WINS Proxy - Tells Samba to answer name resolution queries on
+# behalf of a non WINS capable client, for this to work there must be
+# at least one	WINS Server on the network. The default is NO.
+;   wins proxy = yes
+
+# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
+# via DNS nslookups. The default is NO.
+   dns proxy = no 
+
+# These scripts are used on a domain controller or stand-alone 
+# machine to add or delete corresponding unix accounts
+;  add user script = /usr/sbin/useradd %u
+;  add group script = /usr/sbin/groupadd %g
+;  add machine script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/null -s /bin/false %u
+;  delete user script = /usr/sbin/userdel %u
+;  delete user from group script = /usr/sbin/deluser %u %g
+;  delete group script = /usr/sbin/groupdel %g
+
+
+#============================ Share Definitions ==============================
+[homes]
+   comment = Home Directories
+   browseable = yes
+   writable = yes
+
+# Un-comment the following and create the netlogon directory for Domain Logons
+; [netlogon]
+;   comment = Network Logon Service
+;   path = /usr/local/samba/lib/netlogon
+;   guest ok = yes
+;   writable = no
+;   share modes = no
+
+
+# Un-comment the following to provide a specific roving profile share
+# the default is to use the user's home directory
+;[Profiles]
+;    path = /usr/local/samba/profiles
+;    browseable = no
+;    guest ok = yes
+
+
+# NOTE: If you have a BSD-style print system there is no need to 
+# specifically define each individual printer
+[printers]
+   comment = All Printers
+   path = /usr/spool/samba
+   browseable = no
+# Set public = yes to allow user 'guest account' to print
+   guest ok = no
+   writable = no
+   printable = yes
+
+# This one is useful for people to share files
+;[tmp]
+;   comment = Temporary file space
+;   path = /tmp
+;   read only = no
+;   public = yes
+
+# A publicly accessible directory, but read only, except for people in
+# the "staff" group
+;[public]
+;   comment = Public Stuff
+;   path = /home/samba
+;   public = yes
+;   writable = yes
+;   printable = no
+;   write list = @staff
+
+# Other examples. 
+#
+# A private printer, usable only by fred. Spool data will be placed in fred's
+# home directory. Note that fred must have write access to the spool directory,
+# wherever it is.
+;[fredsprn]
+;   comment = Fred's Printer
+;   valid users = fred
+;   path = /homes/fred
+;   printer = freds_printer
+;   public = no
+;   writable = no
+;   printable = yes
+
+# A private directory, usable only by fred. Note that fred requires write
+# access to the directory.
+;[fredsdir]
+;   comment = Fred's Service
+;   path = /usr/somewhere/private
+;   valid users = fred
+;   public = no
+;   writable = yes
+;   printable = no
+
+# a service which has a different directory for each machine that connects
+# this allows you to tailor configurations to incoming machines. You could
+# also use the %U option to tailor it by user name.
+# The %m gets replaced with the machine name that is connecting.
+;[pchome]
+;  comment = PC Directories
+;  path = /usr/pc/%m
+;  public = no
+;  writable = yes
+
+# A publicly accessible directory, read/write to all users. Note that all files
+# created in the directory by users will be owned by the default user, so
+# any user with access can delete any other user's files. Obviously this
+# directory must be writable by the default user. Another user could of course
+# be specified, in which case all files would be owned by that user instead.
+;[public]
+;   path = /usr/somewhere/else/public
+;   public = yes
+;   only guest = yes
+;   writable = yes
+;   printable = no
+
+# The following two entries demonstrate how to share a directory so that two
+# users can place files there that will be owned by the specific users. In this
+# setup, the directory should be writable by both users and should have the
+# sticky bit set on it to prevent abuse. Obviously this could be extended to
+# as many users as required.
+;[myshare]
+;   comment = Mary's and Fred's stuff
+;   path = /usr/somewhere/shared
+;   valid users = mary fred
+;   public = no
+;   writable = yes
+;   printable = no
+;   create mask = 0765
+
+
diff --git a/pkgs/servers/sql/mysql5/default.nix b/pkgs/servers/sql/mysql5/default.nix
index d76a81184d2..89107d10864 100644
--- a/pkgs/servers/sql/mysql5/default.nix
+++ b/pkgs/servers/sql/mysql5/default.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, ps, ncurses, zlib ? null, perl}:
+args: with args;
 
 # Note: zlib is not required; MySQL can use an internal zlib.
 
@@ -10,7 +10,8 @@ stdenv.mkDerivation {
     sha256 = "e4443d8dc859ed53bd9f3bef143ce30c7f5dee66a02748e9a003136be25e0060";
   };
 
-  buildInputs = [ps ncurses zlib perl];
+  buildInputs = [ps ncurses zlib perl openssl];
+  postInstall = "ln -s mysqld_safe $out/bin/mysqld";
 
-  configureFlags = "--enable-thread-safe-client";
+  configureFlags = "--enable-thread-safe-client --with-embedded-server --disable-static --with-openssl=${openssl} --with-berkeley-db";
 }
diff --git a/pkgs/servers/sql/postgresql/8.2.6.nix b/pkgs/servers/sql/postgresql/8.2.6.nix
new file mode 100644
index 00000000000..f5ce8741f86
--- /dev/null
+++ b/pkgs/servers/sql/postgresql/8.2.6.nix
@@ -0,0 +1,14 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "postgresql-" + version;
+  LC_ALL = "en_US";
+
+  src = fetchurl {
+    url = "ftp://ftp.de.postgresql.org/mirror/postgresql/source/v${version}/${name}.tar.bz2";
+    sha256="056ixbsfmdwhniryc0mr1kl66jywkqqhqvjdi7i3v4qzh9z34hgf";
+  };
+
+  passthru = { inherit readline; };
+  buildInputs = [zlib ncurses readline];
+}
diff --git a/pkgs/servers/sql/postgresql/8.3.0.nix b/pkgs/servers/sql/postgresql/8.3.0.nix
new file mode 100644
index 00000000000..04244fff85b
--- /dev/null
+++ b/pkgs/servers/sql/postgresql/8.3.0.nix
@@ -0,0 +1,14 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "postgresql-" + version;
+  LC_ALL = "en_US";
+
+  src = fetchurl {
+    url = "ftp://ftp.de.postgresql.org/mirror/postgresql/source/v${version}/${name}.tar.bz2";
+    sha256="19kf0q45d5zd1rxffin0iblizckk8cp6fpgb52sipqkpnmm6sdc5";
+  };
+
+  passthru = { inherit readline; };
+  buildInputs = [zlib ncurses readline];
+}
diff --git a/pkgs/servers/sql/postgresql/default.nix b/pkgs/servers/sql/postgresql/default.nix
index b9ed02ffd20..d04712d3418 100644
--- a/pkgs/servers/sql/postgresql/default.nix
+++ b/pkgs/servers/sql/postgresql/default.nix
@@ -5,14 +5,21 @@ assert ncurses != null;
 assert readline != null;
 
 stdenv.mkDerivation {
-  name = "postgresql-8.0.6";
-  builder = ./builder.sh;
+  name = "postgresql-8.3.0";
 
   src = fetchurl {
-    url = ftp://ftp2.nl.postgresql.org/mirror/postgresql/source/v8.0.6/postgresql-8.0.6.tar.bz2;
-    md5 = "f3b27b8171267f9a87592f931c09f0ee";
+    url = http://ftp2.nl.postgresql.org/source/v8.3.0/postgresql-8.3.0.tar.bz2;
+    sha256 = "19kf0q45d5zd1rxffin0iblizckk8cp6fpgb52sipqkpnmm6sdc5";
   };
 
   inherit readline;
+  
   buildInputs = [zlib ncurses readline];
+
+  LANG = "en_US"; # is this needed anymore?
+
+  meta = {
+    description = "The world's most advanced open source database";
+    homepage = http://www.postgresql.org/;
+  };
 }
diff --git a/pkgs/servers/x11/xorg/builder.sh b/pkgs/servers/x11/xorg/builder.sh
index 0a145cc0a6c..8bde2867e10 100644
--- a/pkgs/servers/x11/xorg/builder.sh
+++ b/pkgs/servers/x11/xorg/builder.sh
@@ -4,13 +4,11 @@ source $stdenv/setup
 
 # After installation, automatically add all "Requires" fields in the
 # pkgconfig files (*.pc) to the propagated build inputs.
-if test -n "$postInstall"; then
-	postInstall="$postInstall; autoPropagateBuildInputs"
-else
-	postInstall=autoPropagateBuildInputs
-fi
+origPostInstall=$postInstall
+postInstall=postInstall
+postInstall() {
+    if test -n "$origPostInstall"; then eval "$origPostInstall"; fi
 
-autoPropagateBuildInputs() {
     local r p requires
     requires=$(grep "Requires:" $out/lib/pkgconfig/*.pc | \
         sed "s/Requires://" | sed "s/,/ /g")
diff --git a/pkgs/servers/x11/xorg/default.nix b/pkgs/servers/x11/xorg/default.nix
index 0fc27acbc1f..9ce0ce47bc8 100644
--- a/pkgs/servers/x11/xorg/default.nix
+++ b/pkgs/servers/x11/xorg/default.nix
@@ -1,8 +1,5 @@
 # This is a generated file.  Do not edit!
-{ stdenv, fetchurl, pkgconfig, freetype, fontconfig
-, libxslt, expat, libdrm, libpng, zlib, perl, mesa, mesaHeaders
-, xkeyboard_config, gettext
-}:
+args: with args;
 
 rec {
 
@@ -883,8 +880,9 @@ rec {
       url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/libXpm-3.5.7.tar.bz2;
       sha256 = "1aibr6y6hnlgc7m1a1y5s1qx7863praq4pdp0xrpkc75gkk1lw34";
     };
-    buildInputs = [pkgconfig gettext libX11 libXext xextproto xproto libXt ];
-  }) // {inherit gettext libX11 libXext xextproto xproto libXt ;};
+    buildInputs = [pkgconfig libX11 libXext xextproto xproto libXt ];
+    patchPhase = "sed -i '/USE_GETTEXT_TRUE/d' sxpm/Makefile.in cxpm/Makefile.in";
+  }) // {inherit libX11 libXext xextproto xproto libXt ;};
     
   libXprintAppUtil = (stdenv.mkDerivation {
     name = "libXprintAppUtil-1.0.1";
@@ -1283,7 +1281,7 @@ rec {
       url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/setxkbmap-1.0.4.tar.bz2;
       sha256 = "1b1brw1v98q2rqhr5x7f8mr3clxq62nw5175gpamg5s172916nwv";
     };
-    buildInputs = [pkgconfig libX11 libxkbfile ]; postInstall = "ensureDir $out/share; ln -sfn ${xkeyboard_config}/etc/X11 $out/share/X11"; 
+    buildInputs = [pkgconfig libX11 libxkbfile ]; postInstall = "ensureDir $out/share; ln -sfn ${xkeyboard_config}/etc/X11 $out/share/X11";
   }) // {inherit libX11 libxkbfile ;};
     
   showfont = (stdenv.mkDerivation {
@@ -1744,7 +1742,7 @@ rec {
       sha256 = "15avwy8isbqagzcdj20ngqajl22k40pssfx7vjirhrqyyq19fiwb";
     };
     preBuild = "
-  	sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c
+    sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c
     ";
     buildInputs = [pkgconfig inputproto kbproto randrproto xorgserver xproto ];
   }) // {inherit inputproto kbproto randrproto xorgserver xproto ;};
@@ -2716,8 +2714,8 @@ rec {
       url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/xorg-server-1.4.tar.bz2;
       sha256 = "1hpbq0bl1jkq84gvksp0xzbbrwwgl0wz2wakf11p2hld6bgl5cai";
     };
-    buildInputs = [pkgconfig pixman renderproto bigreqsproto compositeproto damageproto libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ]; mesaSrc = mesa.src; x11BuildHook = ./xorgserver.sh; patches = [./xorgserver-dri-path.patch ./xorgserver-xkbcomp-path.patch ./xorgserver-xkb-leds.patch ]; 
-  }) // {inherit pixman renderproto bigreqsproto compositeproto damageproto libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ;};
+    buildInputs = [pkgconfig pixman renderproto bigreqsproto compositeproto damageproto dbus.libs libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto hal inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ]; mesaSrc = mesa.src; x11BuildHook = ./xorgserver.sh; patches = [./xorgserver-dri-path.patch ./xorgserver-xkbcomp-path.patch ./xorgserver-xkb-leds.patch ]; 
+  }) // {inherit pixman renderproto bigreqsproto compositeproto damageproto libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto hal inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ;};
     
   xorgsgmldoctools = (stdenv.mkDerivation {
     name = "xorg-sgml-doctools-1.2";
diff --git a/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl b/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl
index d68944bf71a..7fb12233044 100755
--- a/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl
+++ b/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl
@@ -35,7 +35,8 @@ $pcMap{"mkfontscale"} = "mkfontscale";
 $pcMap{"mkfontdir"} = "mkfontdir";
 $pcMap{"bdftopcf"} = "bdftopcf";
 $pcMap{"libxslt"} = "libxslt";
-$pcMap{"gettext"} = "gettext";
+$pcMap{"dbus-1"} = "dbus";
+$pcMap{"hal"} = "hal";
 
 $pcMap{"\$PIXMAN"} = "pixman";
 $pcMap{"\$RENDERPROTO"} = "renderproto";
@@ -56,6 +57,8 @@ $extraAttrs{"xf86inputevdev"} = "
     sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c
     \";";
 
+$extraAttrs{"libXpm"} = "
+    patchPhase = \"sed -i '/USE_GETTEXT_TRUE/d' sxpm/Makefile.in cxpm/Makefile.in\";";
 
 my $downloadCache = "./download-cache";
 $ENV{'NIX_DOWNLOAD_CACHE'} = $downloadCache;
@@ -112,7 +115,7 @@ while (<>) {
     my $file;
     {
         local $/;
-        open FOO, "cd '$tmpDir'/* && cat configure.ac |";
+        open FOO, "cd '$tmpDir'/* && grep -v '^ *#' configure.ac |";
         $file = <FOO>;
         close FOO;
     }
@@ -184,7 +187,6 @@ while (<>) {
     push @requires, "zlib" if $pkg =~ /xorgserver/;
     push @requires, "xf86bigfontproto" if $pkg =~ /xorgserver/;
     push @requires, "libxslt" if $pkg =~ /libxcb/;
-    push @requires, "gettext" if $pkg =~ /libXpm/;
     
     print "REQUIRES @requires => $pkg\n";
     $pkgRequires{$pkg} = \@requires;
@@ -200,10 +202,7 @@ open OUT, ">default2.nix";
 print OUT "";
 print OUT <<EOF;
 # This is a generated file.  Do not edit!
-{ stdenv, fetchurl, pkgconfig, freetype, fontconfig
-, libxslt, expat, libdrm, libpng, zlib, perl, mesa, mesaHeaders
-, xkeyboard_config, gettext
-}:
+args: with args;
 
 rec {
 
diff --git a/pkgs/servers/xmpp/ejabberd/builder.sh b/pkgs/servers/xmpp/ejabberd/builder.sh
new file mode 100644
index 00000000000..3d746054f38
--- /dev/null
+++ b/pkgs/servers/xmpp/ejabberd/builder.sh
@@ -0,0 +1,9 @@
+buildInputs="$expat $erlang $zlib $openssl"
+
+source $stdenv/setup
+
+tar xfvz $src
+cd ejabberd-*/src
+./configure --prefix=$out
+make
+make install
diff --git a/pkgs/servers/xmpp/ejabberd/default.nix b/pkgs/servers/xmpp/ejabberd/default.nix
new file mode 100644
index 00000000000..c3c88337c5d
--- /dev/null
+++ b/pkgs/servers/xmpp/ejabberd/default.nix
@@ -0,0 +1,11 @@
+{stdenv, fetchurl, expat, erlang, zlib, openssl}:
+
+stdenv.mkDerivation {
+  name = "ejabberd-2.0.0-rc1";
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.process-one.net/downloads/ejabberd/2.0.0-rc1/ejabberd-2.0.0-rc1.tar.gz;
+    sha256 = "02ldssvsy0rkvxm96018fpk5lc3iqgkrira9cw1ym2snas0k8nzy";
+  };
+  inherit expat erlang zlib openssl;
+}
diff --git a/pkgs/shells/bash/default.nix b/pkgs/shells/bash/default.nix
index 9e709047288..31fa5e77649 100644
--- a/pkgs/shells/bash/default.nix
+++ b/pkgs/shells/bash/default.nix
@@ -3,11 +3,11 @@
 assert interactive -> ncurses != null;
 
 stdenv.mkDerivation {
-  name = "bash-3.2-p25";
+  name = "bash-3.2-p33";
 
   src = fetchurl {
-    url = http://losser.st-lab.cs.uu.nl/~eelco/dist/bash-3.2-p25.tar.bz2;
-    sha256 = "1x19z386ysvwk00zigzf3nkv1x1xq4kvyckz9ah8qz65a7626cs4";
+    url = http://losser.st-lab.cs.uu.nl/~eelco/dist/bash-3.2-p33.tar.bz2;
+    sha256 = "11fv73nbcckmm4f1q9cf73754chsgfps9pklwcaj2ryfd5ql9wnb";
   };
 
   postInstall = "ln -s bash $out/bin/sh";
@@ -21,6 +21,7 @@ stdenv.mkDerivation {
   buildInputs = [bison] ++ stdenv.lib.optional interactive ncurses;
 
   meta = {
+    homepage = http://www.gnu.org/software/bash/;
     description =
       "GNU Bourne-Again Shell, the de facto standard shell on Linux" +
         (if interactive then " (for interactive use)" else "");
diff --git a/pkgs/shells/zsh/default.nix b/pkgs/shells/zsh/4.3.4.nix
index 0b227b031b8..ea9a82cf683 100644
--- a/pkgs/shells/zsh/default.nix
+++ b/pkgs/shells/zsh/4.3.4.nix
@@ -1,4 +1,4 @@
-{stdenv, fetchurl, coreutils, ncurses}:
+args: with args;
 stdenv.mkDerivation {
   name = "zsh-4.3.4";
 
diff --git a/pkgs/shells/zsh/4.3.5.nix b/pkgs/shells/zsh/4.3.5.nix
new file mode 100644
index 00000000000..227da7995fb
--- /dev/null
+++ b/pkgs/shells/zsh/4.3.5.nix
@@ -0,0 +1,22 @@
+args: with args;
+let documentation = fetchurl {
+    url = http://www.math.technion.ac.il/pub/zsh/zsh-4.3.5-doc.tar.bz2;
+    sha256 = "0jf35xibp8wfka7rdk9q8spkwprlhjx1sp7vp6img8wks12cvlkx";
+  };
+in
+stdenv.mkDerivation {
+  name = "zsh-${version}";
+
+  src = fetchurl {
+    url = http://www.math.technion.ac.il/pub/zsh/zsh-4.3.5.tar.bz2;
+    sha256 = "0191j3liflkjrj39i2yrs3ab9jcx4zd93rirx3j17dymfgqlvrzb";
+  };
+  configureFlags = "--with-tcsetpgrp --enable-maildir-support --enable-multibyte";
+
+  postInstall = ''
+    ensureDir $out/share/
+    tar xf ${documentation} -C $out/share
+  '';
+
+  buildInputs = [ncurses coreutils];
+}
diff --git a/pkgs/stdenv/common-path.nix b/pkgs/stdenv/common-path.nix
index 0ad0d83255b..3b267a543c6 100644
--- a/pkgs/stdenv/common-path.nix
+++ b/pkgs/stdenv/common-path.nix
@@ -11,4 +11,5 @@
   pkgs.gnumake
   pkgs.bash
   pkgs.patch
+  pkgs.replace
 ]
diff --git a/pkgs/stdenv/cygwin/prehook.sh b/pkgs/stdenv/cygwin/prehook.sh
index 673640c0d4a..b2ada869b29 100644
--- a/pkgs/stdenv/cygwin/prehook.sh
+++ b/pkgs/stdenv/cygwin/prehook.sh
@@ -3,3 +3,5 @@ export NIX_ENFORCE_PURITY=
 if test -z "$cygwinConfigureEnableShared"; then
   export configureFlags="$configureFlags --disable-shared"
 fi
+
+PATH_DELIMITER=';'
diff --git a/pkgs/stdenv/generic/builder.sh b/pkgs/stdenv/generic/builder.sh
index ee2dbb3d0f9..0af3210dbc9 100644
--- a/pkgs/stdenv/generic/builder.sh
+++ b/pkgs/stdenv/generic/builder.sh
@@ -3,19 +3,26 @@ p2=$param2
 p3=$param3
 p4=$param4
 p5=$param5
+_preHook="$preHook"
+_postHook="$postHook"
+preHook=
+postHook=
 
 source $stdenv/setup
 
 mkdir $out
 
-substitute "$setup" "$out/setup" \
-    --subst-var preHook \
-    --subst-var postHook \
-    --subst-var initialPath \
-    --subst-var gcc \
-    --subst-var shell \
-    --subst-var-by param1 "$p1" \
-    --subst-var-by param2 "$p2" \
-    --subst-var-by param3 "$p3" \
-    --subst-var-by param4 "$p4" \
-    --subst-var-by param5 "$p5"
+# Can't use substitute() here, because replace may not have been
+# built yet (in the bootstrap).
+sed \
+    -e "s^@preHook@^$_preHook^g" \
+    -e "s^@postHook@^$_postHook^g" \
+    -e "s^@initialPath@^$initialPath^g" \
+    -e "s^@gcc@^$gcc^g" \
+    -e "s^@shell@^$shell^g" \
+    -e "s^@param1@^$p1^g" \
+    -e "s^@param2@^$p2^g" \
+    -e "s^@param3@^$p3^g" \
+    -e "s^@param4@^$p4^g" \
+    -e "s^@param5@^$p5^g" \
+    < "$setup" > "$out/setup"
diff --git a/pkgs/stdenv/generic/setup-sh-defs.nix b/pkgs/stdenv/generic/setup-sh-defs.nix
deleted file mode 100644
index 9f080307178..00000000000
--- a/pkgs/stdenv/generic/setup-sh-defs.nix
+++ /dev/null
@@ -1,902 +0,0 @@
-with (import ../../lib/strings-with-deps.nix (import ../../lib/default-unstable.nix)); 
-
-rec {
-	setStrictMode = noDepEntry "set -e;";
-	setNixGcc = noDepEntry "test -z \$NIX_GCC && NIX_GCC=@gcc@;";
-
-	setPathDelimiter = noDepEntry "
-if [ -z ${system##*cygwin*} ]; then
-  PATH_DELIMITER=;
-else
-  PATH_DELIMITER=;
-fi
-" ;
-
-	
-	initPath = noDepEntry "# Set up the initial path.
-PATH=
-for i in \$NIX_GCC @initialPath@; do
-    PATH=\$PATH\${PATH:+:}\$i/bin
-done
-
-if test \"\$NIX_DEBUG\" = \"1\"; then
-    echo \"Initial path: \$PATH\"
-fi
-";
-
-	execPreHook = FullDepEntry "# Execute the pre-hook.
-export SHELL=@shell@
-if test -z \"\$shell\"; then
-    export shell=@shell@
-fi
-param1=@param1@
-param2=@param2@
-param3=@param3@
-param4=@param4@
-param5=@param5@
-if test -n \"@preHook@\"; then
-    source @preHook@
-fi
-" [];
-
-	checkShellEnv = FullDepEntry "# Check that the pre-hook initialised SHELL.
-if test -z \"\$SHELL\"; then echo \"SHELL not set\"; exit 1; fi
-" [];
-
-	gccSetupHook = FullDepEntry "# Hack: run gcc's setup hook.
-envHooks=()
-if test -f \$NIX_GCC/nix-support/setup-hook; then
-    source \$NIX_GCC/nix-support/setup-hook
-fi
-" [setNixGcc];
-
-    
-	defEnsureDir = FullDepEntry "# Ensure that the given directories exists.
-ensureDir() {
-    local dir
-    for dir in \"\$@\"; do
-        if ! test -x \"\$dir\"; then mkdir -p \"\$dir\"; fi
-    done
-}
-" [];
-
-	defInstallBin = FullDepEntry "
-
-installBin() {
-  ensureDir $out/bin
-  cp "$@" $out/bin
-}
-
-" [];
-
-	defAssertEnvExists = FullDepEntry "
-assertEnvExists(){
-  if test -z "${!1}"; then
-      msg=${2:-error: assertion failed: env var $1 is required}
-      echo $msg >&2; exit 1
-  fi
-}
-" [];
-
-	defFail = FullDepEntry "# Called when some build action fails.  If \$succeedOnFailure is set,
-# create the file `\$out/nix-support/failed' to signal failure, and
-# exit normally.  Otherwise, exit with failure.
-fail() {
-    exitCode=\$?
-    if test \"\$succeedOnFailure\" = 1; then
-        ensureDir \"\$out/nix-support\"
-        touch \"\$out/nix-support/failed\"
-        exit 0
-    else
-        exit \$?
-    fi
-}
-" [];
-
-	runAddInputsHook = FullDepEntry "# Allow the caller to augment buildInputs (it's not always possible to
-# do this before the call to setup.sh, since the PATH is empty at that
-# point; here we have a basic Unix environment).
-eval \"\$addInputsHook\"
-" [defFail];
-
-	defFindInputs = FullDepEntry "# Recursively find all build inputs.
-findInputs()
-{
-    local pkg=\$1
-
-    case \$pkgs in
-        *\ \$pkg\ *)
-            return 0
-            ;;
-    esac
-    
-    pkgs=\"\$pkgs \$pkg \"
-
-    if test -f \$pkg/nix-support/setup-hook; then
-        source \$pkg/nix-support/setup-hook
-    fi
-    
-    if test -f \$pkg/nix-support/propagated-build-inputs; then
-        for i in \$(cat \$pkg/nix-support/propagated-build-inputs); do
-            findInputs \$i
-        done
-    fi
-}
-" [];
-
-	getInputs = FullDepEntry "pkgs=\"\"
-if test -n \"\$buildinputs\"; then
-    buildInputs=\"\$buildinputs\" # compatibility
-fi
-for i in \$buildInputs \$propagatedBuildInputs; do
-    findInputs \$i
-done
-" [defFindInputs];
-
-	defAddToEnv = FullDepEntry "# Set the relevant environment variables to point to the build inputs
-# found above.
-addToEnv()
-{
-    local pkg=\$1
-
-    if test \"\$ignoreFailedInputs\" != \"1\" -a -e \$1/nix-support/failed; then
-        echo \"failed input \$1\" >&2
-        fail
-    fi
-
-    if test -d \$1/bin; then
-        export _PATH=\$_PATH\${_PATH:+:}\$1/bin
-    fi
-
-    for i in \"\${envHooks[@]}\"; do
-        \$i \$pkg
-    done
-}
-" [defFail];
-
-	preparePackageEnv = FullDepEntry "for i in \$pkgs; do
-    addToEnv \$i
-done
-" [getInputs defAddToEnv];
-
-	putOutInRpath = FullDepEntry "# Add the output as an rpath.
-if test \"\$NIX_NO_SELF_RPATH\" != \"1\"; then
-    export NIX_LDFLAGS=\"-rpath \$out/lib \$NIX_LDFLAGS\"
-fi
-" [initPath];
-
-	setupStripping = FullDepEntry "# Strip debug information by default.
-if test -z \"\$NIX_STRIP_DEBUG\"; then
-    export NIX_STRIP_DEBUG=1
-    export NIX_CFLAGS_STRIP=\"-g0 -Wl,--strip-debug\"
-fi
-" [initPath];
-
-	checkNixEnv = FullDepEntry "# Do we know where the store is?  This is required for purity checking.
-if test -z \"\$NIX_STORE\"; then
-    echo \"Error: you have an old version of Nix that does not set the\" \
-        \"NIX_STORE variable.  Please upgrade.\" >&2
-    exit 1
-fi
-
-
-# We also need to know the root of the build directory for purity checking.
-if test -z \"\$NIX_BUILD_TOP\"; then
-    echo \"Error: you have an old version of Nix that does not set the\" \
-        \"NIX_BUILD_TOP variable.  Please upgrade.\" >&2
-    exit 1
-fi
-" [initPath];
-
-	setTZ = noDepEntry "# Set the TZ (timezone) environment variable, otherwise commands like
-# `date' will complain (e.g., `Tue Mar 9 10:01:47 Local time zone must
-# be set--see zic manual page 2004').
-export TZ=UTC
-" ;
-
-	setPrefix = FullDepEntry "# Set the prefix.  This is generally \$out, but it can be overriden,
-# for instance if we just want to perform a test build/install to a
-# temporary location and write a build report to \$out.
-if test -z \"\$prefix\"; then
-    prefix=\"\$out\";
-fi
-
-if test \"\$useTempPrefix\" = \"1\"; then
-    prefix=\"\$NIX_BUILD_TOP/tmp_prefix\";
-fi
-" [checkNixEnv];
-
-	runPostHook = FullDepEntry "# Execute the post-hook.
-if test -n \"@postHook@\"; then
-    source @postHook@
-fi
-" [setTZ setPrefix execPreHook gccSetupHook preparePackageEnv];
-
-	finalSetPath = FullDepEntry "PATH=\$_PATH\${_PATH:+:}\$PATH
-if test \"\$NIX_DEBUG\" = \"1\"; then
-    echo \"Final path: \$PATH\"
-fi
-" [runPostHook];
-
-	defSubstitute = FullDepEntry "######################################################################
-# Textual substitution functions.
-
-
-# Some disgusting hackery to escape replacements in Sed substitutions.
-# We should really have a tool that replaces literal values by other
-# literal values, without any need for escaping.
-escapeSed() {
-    local s=\"\$1\"
-    # The `tr' hack is to escape newlines.  Sed handles newlines very
-    # badly, so we just replace newlines with the magic character 0xff
-    # (377 octal).  So don't use that character in replacements :-P
-    echo -n \"\$1\" | tr '\012' '\377' | sed -e 's^\\^\\\\^g' -e 's^\xff^\\n^g' -e 's/\^/\\^/g' -e 's/&/\\&/g'
-}
-
-
-substitute() {
-    local input=\"\$1\"
-    local output=\"\$2\"
-
-    local -a params=(\"\$@\")
-
-    local sedScript=\$NIX_BUILD_TOP/.sedargs
-    rm -f \$sedScript
-    touch \$sedScript
-
-    local n p pattern replacement varName
-    
-    for ((n = 2; n < \${#params[*]}; n += 1)); do
-        p=\${params[\$n]}
-
-        if test \"\$p\" = \"--replace\"; then
-            pattern=\"\${params[\$((n + 1))]}\"
-            replacement=\"\${params[\$((n + 2))]}\"
-            n=\$((n + 2))
-        fi
-
-        if test \"\$p\" = \"--subst-var\"; then
-            varName=\"\${params[\$((n + 1))]}\"
-            pattern=\"@\$varName@\"
-            replacement=\"\${!varName}\"
-            n=\$((n + 1))
-        fi
-
-        if test \"\$p\" = \"--subst-var-by\"; then
-            pattern=\"@\${params[\$((n + 1))]}@\"
-            replacement=\"\${params[\$((n + 2))]}\"
-            n=\$((n + 2))
-        fi
-
-        replacement=\"\$(escapeSed \"\$replacement\")\"
-
-        echo \"s^\$pattern^\$replacement^g\" >> \$sedScript
-    done
-
-    sed -f \$sedScript < \"\$input\" > \"\$output\".tmp
-    if test -x \"\$output\"; then
-        chmod +x \"\$output\".tmp
-    fi
-    mv -f \"\$output\".tmp \"\$output\"
-}
-
-
-substituteInPlace() {
-    local fileName=\"\$1\"
-    shift
-    substitute \"\$fileName\" \"\$fileName\" \"\$@\"
-}
-
-
-substituteAll() {
-    local input=\"\$1\"
-    local output=\"\$2\"
-    
-    # Select all environment variables that start with a lowercase character.
-    for envVar in \$(env | sed \"s/^[^a-z].*//\" | sed \"s/^\([^=]*\)=.*/\1/\"); do
-        if test \"\$NIX_DEBUG\" = \"1\"; then
-            echo \"\$envVar -> \${!envVar}\"
-        fi
-        args=\"\$args --subst-var \$envVar\"
-    done
-
-    substitute \"\$input\" \"\$output\" \$args
-}  
-" [initPath];
-
-	defNest = NoDepEntry "######################################################################
-# What follows is the generic builder.
-
-
-nestingLevel=0
-
-startNest() {
-    nestingLevel=\$((\$nestingLevel + 1))
-    echo -en \"\e[\$1p\"
-}
-
-stopNest() {
-    nestingLevel=\$((\$nestingLevel - 1))
-    echo -en \"\e[q\"
-}
-
-header() {
-    startNest \"\$2\"
-    echo \"\$1\"
-}
-
-# Make sure that even when we exit abnormally, the original nesting
-# level is properly restored.
-closeNest() {
-    while test \$nestingLevel -gt 0; do
-        stopNest
-    done
-}
-
-trap \"closeNest\" EXIT
-" ;
-
-
-	defDumpVars = FullDepEntry "# This function is useful for debugging broken Nix builds.  It dumps
-# all environment variables to a file `env-vars' in the build
-# directory.  If the build fails and the `-K' option is used, you can
-# then go to the build directory and source in `env-vars' to reproduce
-# the environment used for building.
-dumpVars() {
-    if test \"\$noDumpEnvVars\" != \"1\"; then
-        export > \$NIX_BUILD_TOP/env-vars
-    fi
-}
-" [checkNixEnv];
-
-
-	defStartStopLog = FullDepEntry  "# Redirect stdout/stderr to a named pipe connected to a `tee' process
-# that writes the specified file (and also to our original stdout).
-# The original stdout is saved in descriptor 3.
-startLog() {
-    local logFile=\${logNr}_\$1
-    logNr=\$((logNr + 1))
-    if test \"\$logPhases\" = 1; then
-        ensureDir \$logDir
-
-        exec 3>&1
-
-        if test \"\$dontLogThroughTee\" != 1; then
-            # This required named pipes (fifos).
-            logFifo=\$NIX_BUILD_TOP/log_fifo
-            test -p \$logFifo || mkfifo \$logFifo
-            startLogWrite \"\$logDir/\$logFile\" \"\$logFifo\"
-            exec > \$logFifo 2>&1
-        else
-            exec > \$logDir/\$logFile 2>&1
-        fi
-    fi
-}
-
-# Factored into a separate function so that it can be overriden.
-startLogWrite() {
-    tee \"\$1\" < \"\$2\" &
-    logWriterPid=\$!
-}
-
-# Restore the original stdout/stderr.
-stopLog() {
-    if test \"\$logPhases\" = 1; then
-        exec >&3 2>&1
-
-        # Wait until the tee process has died.  Otherwise output from
-        # different phases may be mixed up.
-        if test -n \"\$logWriterPid\"; then
-            wait \$logWriterPid
-            logWriterPid=
-            rm \$logFifo
-        fi
-    fi
-}
-
-
-" [setLogVars checkNixEnv ];
-
-
-	setLogVars = FullDepEntry "if test -z \"\$logDir\"; then
-    logDir=\$out/log
-fi
-
-logNr=0
-" [initPath];
-
-	defStripHash = FullDepEntry "# Utility function: return the base name of the given path, with the
-# prefix `HASH-' removed, if present.
-stripHash() {
-    strippedName=\$(basename \$1);
-    if echo \"\$strippedName\" | grep -q '^[a-z0-9]\{32\}-'; then
-        strippedName=\$(echo \"\$strippedName\" | cut -c34-)
-    fi
-}
-" [initPath];
-
-	defUnpack = FullDepEntry "
-unpackFile() {
-    local file=\$1
-    local cmd
-
-    header \"unpacking source archive \$file\" 3
-
-    case \$file in
-        *.tar)
-            tar xvf \$file || fail
-            ;;
-        *.tar.gz | *.tgz | *.tar.Z)
-            gunzip < \$file | tar xvf - || fail
-            ;;
-        *.tar.bz2 | *.tbz2)
-            bunzip2 < \$file | tar xvf - || fail
-            ;;
-        *.zip)
-            unzip \$file || fail
-            ;;
-        *)
-            if test -d \"\$file\"; then
-                stripHash \$file
-                cp -prvd \$file \$strippedName || fail
-            else
-                if test -n \"\$findUnpacker\"; then
-                    \$findUnpacker \$1;
-                fi
-                if test -z \"\$unpackCmd\"; then
-                    echo \"source archive \$file has unknown type\"
-                    exit 1
-                fi
-                eval \"\$unpackCmd\" || fail
-            fi
-            ;;
-    esac
-
-    stopNest
-}
-" [preparePackageEnv];
-
-	defUnpackW = FullDepEntry "
-unpackW() {
-    if test -n \"\$unpackPhase\"; then
-        eval \"\$unpackPhase\"
-        return
-    fi
-
-    if test -z \"\$srcs\"; then
-        if test -z \"\$src\"; then
-            echo 'variable \$src or \$srcs should point to the source'
-            exit 1
-        fi
-        srcs=\"\$src\"
-    fi
-
-    # To determine the source directory created by unpacking the
-    # source archives, we record the contents of the current
-    # directory, then look below which directory got added.  Yeah,
-    # it's rather hacky.
-    local dirsBefore=\"\"
-    for i in *; do
-        if test -d \"\$i\"; then
-            dirsBefore=\"\$dirsBefore \$i \"
-        fi
-    done
-
-    # Unpack all source archives.
-    for i in \$srcs; do
-        unpackFile \$i
-    done
-
-    # Find the source directory.
-    if test -n \"\$setSourceRoot\"; then
-        eval \"\$setSourceRoot\"
-    else
-        sourceRoot=
-        for i in *; do
-            if test -d \"\$i\"; then
-                case \$dirsBefore in
-                    *\ \$i\ *)
-                        ;;
-                    *)
-                        if test -n \"\$sourceRoot\"; then
-                            echo \"unpacker produced multiple directories\"
-                            exit 1
-                        fi
-                        sourceRoot=\$i
-                        ;;
-                esac
-            fi
-        done
-    fi
-
-    if test -z \"\$sourceRoot\"; then
-        echo \"unpacker appears to have produced no directories\"
-        exit 1
-    fi
-
-    echo \"source root is \$sourceRoot\"
-
-    # By default, add write permission to the sources.  This is often
-    # necessary when sources have been copied from other store
-    # locations.
-    if test \"dontMakeSourcesWritable\" != 1; then
-        chmod -R +w \$sourceRoot
-    fi
-
-    eval \"\$postUnpack\"
-}
-" [defUnpack];
-
-
-
-defUnpackPhase = FullDepEntry "
-unpackPhase() {
-    sourceRoot=. # don't change to user dir homeless shelter if custom unpackSource does'nt set sourceRoot
-    header \"unpacking sources\"
-    startLog \"unpack\"
-    unpackW
-    stopLog
-    stopNest
-    cd \$sourceRoot
-}
-" [unpackW];
-
-
-	defPatchW = FullDepEntry "
-patchW() {
-    if test -n \"\$patchPhase\"; then
-        eval \"\$patchPhase\"
-        return
-    fi
-
-    if test -z \"\$patchFlags\"; then
-        patchFlags=\"-p1\"
-    fi
-
-    for i in \$patches; do
-        header \"applying patch \$i\" 3
-        local uncompress=cat
-        case \$i in
-            *.gz)
-                uncompress=gunzip
-                ;;
-            *.bz2)
-                uncompress=bunzip2
-                ;;
-        esac
-        \$uncompress < \$i | patch \$patchFlags || fail
-        stopNest
-    done
-}
-" [getInputs]
-
-	defPatchPhase = FullDepEntry "
-patchPhase() {
-    if test -z \"\$patchPhase\" -a -z \"\$patches\"; then return; fi
-    header \"patching sources\"
-    startLog \"patch\"
-    patchW
-    stopLog
-    stopNest
-}
-" [defPatchW];
-
-	defFixLibTool = FullDepEntry "fixLibtool() {
-    sed 's^eval sys_lib_.*search_path=.*^^' < \$1 > \$1.tmp
-    mv \$1.tmp \$1
-}
-" [initPath];
-
-	defConfigureW = FullDepEntry "
-configureW() {
-    if test -n \"\$configurePhase\"; then
-        eval \"\$configurePhase\"
-        return
-    fi
-
-    eval \"\$preConfigure\"
-
-    if test -z \"\$configureScript\"; then
-        configureScript=./configure
-        if ! test -x \$configureScript; then
-            echo \"no configure script, doing nothing\"
-            return
-        fi
-    fi
-
-    if test -z \"\$dontFixLibtool\"; then
-        for i in \$(find . -name \"ltmain.sh\"); do
-            echo \"fixing libtool script \$i\"
-            fixLibtool \$i
-        done
-    fi
-
-    if test -z \"\$dontAddPrefix\"; then
-        configureFlags=\"--prefix=\$prefix \$configureFlags\"
-    fi
-
-    echo \"configure flags: \$configureFlags \${configureFlagsArray[@]}\"
-    \$configureScript \$configureFlags\"\${configureFlagsArray[@]}\" || fail
-
-    eval \"\$postConfigure\"
-}
-" [initPath];
-
-
-	defConfigurePhase = FullDepEntry "
-configurePhase() {
-    header \"configuring\"
-    startLog \"configure\"
-    configureW
-    stopLog
-    stopNest
-}
-" [defConfigureW];
-
-	defBuildW = FullDepEntry "
-buildW() {
-    if test -n \"\$buildPhase\"; then
-        eval \"\$buildPhase\"
-        return
-    fi
-
-    eval \"\$preBuild\"
-    
-    echo \"make flags: \$makeFlags \${makeFlagsArray[@]} \$buildFlags \${buildFlagsArray[@]}\"
-    make \
-        \$makeFlags \"\${makeFlagsArray[@]}\" \
-        \$buildFlags \"\${buildFlagsArray[@]}\" || fail
-
-    eval \"\$postBuild\"
-}
-" [initPath];
-
-	defBuildPhase = FullDepEntry "
-buildPhase() {
-    if test \"\$dontBuild\" = 1; then
-        return
-    fi
-    header \"building\"
-    startLog \"build\"
-    buildW
-    stopLog
-    stopNest
-}
-" [defBuildW];
-
-
-	defCheckW = FullDepEntry "
-checkW() {
-    if test -n \"\$checkPhase\"; then
-        eval \"\$checkPhase\"
-        return
-    fi
-
-    if test -z \"\$checkTarget\"; then
-        checkTarget=\"check\"
-    fi
-
-    echo \"check flags: \$makeFlags \${makeFlagsArray[@]} \$checkFlags \${checkFlagsArray[@]}\"
-    make \
-        \$makeFlags \"\${makeFlagsArray[@]}\" \
-        \$checkFlags \"\${checkFlagsArray[@]}\" \$checkTarget || fail
-}
-" [initPath];
-
-
-	defCheckPhase = FullDepEntry "
-checkPhase() {
-    if test \"\$doCheck\" != 1; then
-        return
-    fi
-    header \"checking\"
-    startLog \"check\"
-    checkW
-    stopLog
-    stopNest
-}
-" [checkPhase];
-
-
-	defPatchElf = FullDepEntry "
-patchELF() {
-    # Patch all ELF executables and shared libraries.
-    header \"patching ELF executables and libraries\"
-    find \"\$prefix\" \( \
-        \( -type f -a -name \"*.so*\" \) -o \
-        \( -type f -a -perm +0100 \) \
-        \) -print -exec patchelf --shrink-rpath {} \;
-    stopNest
-}
-" [initPath defNest];
-
-
-	defInstallW = FullDepEntry "
-installW() {
-    if test -n \"\$installPhase\"; then
-        eval \"\$installPhase\"
-        return
-    fi
-
-    eval \"\$preInstall\"
-
-    ensureDir \"\$prefix\"
-
-    if test -z \"\$installCommand\"; then
-        if test -z \"\$installTargets\"; then
-            installTargets=install
-        fi
-        echo \"install flags: \$installTargets \$makeFlags \${makeFlagsArray[@]} \$installFlags \${installFlagsArray[@]}\"
-        make \$installTargets \
-            \$makeFlags \"\${makeFlagsArray[@]}\" \
-            \$installFlags \"\${installFlagsArray[@]}\" || fail
-    else
-        eval \"\$installCommand\"
-    fi
-
-    eval \"\$postInstall\"
-}
-" [initPath];
-
-	
-	defInstallPhase = FullDepEntry "
-installPhase() {
-    if test \"\$dontInstall\" = 1; then
-        return
-    fi
-    header \"installing\"
-    startLog \"install\"
-    installW
-    stopLog
-    stopNest
-}
-" [defInstallW defNest defStartStopLog];
-
-
-	defFixupW = FullDepEntry "
-
-# The fixup phase performs generic, package-independent, Nix-related
-# stuff, like running patchelf and setting the
-# propagated-build-inputs.  It should rarely be overriden.
-fixupW() {
-    if test -n "$fixupPhase"; then
-        eval "$fixupPhase"
-        return
-    fi
-
-    eval "$preFixup"
-
- 	forceShare=${forceShare:=man doc info}
- 	if test -n "$forceShare"; then
- 		for d in $forceShare; do
- 			if test -d "$prefix/$d"; then
- 				if test -d "$prefix/share/$d"; then
- 					echo "Both $d/ and share/$d/ exists!"
- 				else
-					echo Fixing location of $dir/ subdirectory
- 					ensureDir $prefix/share
-					if test -w $prefix/share; then
-	 					mv -v $prefix/$d $prefix/share
- 						ln -sv share/$d $prefix
-					fi
- 				fi
-			else
-				echo "No $d/ subdirectory, skipping."
- 			fi
- 		done;
- 	fi
-
-
-# TODO : strip _only_ ELF executables, and return || fail here...
-    if test -z "$dontStrip"; then
-		echo "Stripping debuging symbols from files in"
-		stripDirs "${stripDebugList:-lib}" -S
-		echo "Stripping all symbols from files in"
-		stripDirs "${stripAllList:-bin sbin}" -s
-    fi
-
-    if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then
-        patchELF "$prefix"
-    fi
-
-    if test -n "$propagatedBuildInputs"; then
-        ensureDir "$out/nix-support"
-        echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs"
-    fi
-
-	if test -n "$setupHook"; then
-		ensureDir "$out/nix-support"
-		substituteAll "$setupHook" "$out/nix-support/setup-hook"
-	fi
-
-    eval "$postFixup"
-}
-" [defPatchElf initPath];
-
-
-	defFixupPhase = FullDepEntry "
-fixupPhase() {
-    if test \"\$dontFixup\" = 1; then
-        return
-    fi
-    header \"post-installation fixup\"
-    startLog \"fixup\"
-    fixupW
-    stopLog
-    stopNest
-}
-" [defFixupW defNest defStartStopLog];
-
-
-	defDistW = FullDepEntry "
-distW() {
-    if test -n \"\$distPhase\"; then
-        eval \"\$distPhase\"
-        return
-    fi
-
-    eval \"\$preDist\"
-    
-    if test -z \"\$distTarget\"; then
-        distTarget=\"dist\"
-    fi
-
-    echo \"dist flags: \$distFlags \${distFlagsArray[@]}\"
-    make \$distFlags \"\${distFlagsArray[@]}\" \$distTarget || fail
-
-    if test \"\$dontCopyDist\" != 1; then
-        ensureDir \"\$out/tarballs\"
-
-        if test -z \"\$tarballs\"; then
-            tarballs=\"*.tar.gz\"
-        fi
-
-        # Note: don't quote \$tarballs, since we explicitly permit
-        # wildcards in there.
-        cp -pvd \$tarballs \$out/tarballs
-    fi
-
-    eval \"\$postDist\"
-}
-" [initPath ];
-
-
-	defDistPhase = FullDepEntry "
-distPhase() {
-    if test \"\$doDist\" != 1; then
-        return
-    fi
-    header \"creating distribution\"
-    startLog \"dist\"
-    distW
-    stopLog
-    stopNest
-}
-" [defDistW defNest defStartStopLog];
-
-	defGenericBuild = FullDepEntry "
-genericBuild() {
-    header \"building \$out\"
-
-    if test -n \"\$buildCommand\"; then
-        eval \"\$buildCommand\"
-        return
-    fi
-
-    if test -z \"\$phases\"; then
-        phases=\"unpackPhase patchPhase configurePhase buildPhase checkPhase \
-            installPhase fixupPhase distPhase\";
-    fi
-
-    for i in \$phases; do
-        dumpVars
-        eval \"\$i\"
-    done
-    
-    stopNest
-}
-" [defUnpackPhase defBuildPhase defInstallPhase];
-
-doDumpVars = FullDepEntry "
-dumpVars
-" [defDumpVars];
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh
index e91a9ce4dfd..395de988e4c 100644
--- a/pkgs/stdenv/generic/setup.sh
+++ b/pkgs/stdenv/generic/setup.sh
@@ -1,12 +1,6 @@
-set -e
+######################################################################
+# Helper functions that might be useful in setup hooks.
 
-test -z $NIX_GCC && NIX_GCC=@gcc@
-
-if [ -z ${system##*cygwin*} ]; then
-  PATH_DELIMITER=';'
-else
-  PATH_DELIMITER=':'
-fi
 
 addToSearchPathWithCustomDelimiter() {
     local delimiter=$1
@@ -28,6 +22,15 @@ addToSearchPath()
     addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@"
 }
 
+
+######################################################################
+# Initialisation.
+
+set -e
+
+test -z $NIX_GCC && NIX_GCC=@gcc@
+
+
 # Set up the initial path.
 PATH=
 for i in $NIX_GCC @initialPath@; do
@@ -35,12 +38,13 @@ for i in $NIX_GCC @initialPath@; do
 done
 
 if test "$NIX_DEBUG" = "1"; then
-    echo "Initial path: $PATH"
+    echo "initial path: $PATH"
 fi
 
 
 # Execute the pre-hook.
 export SHELL=@shell@
+PATH_DELIMITER=':'
 if test -z "$shell"; then
     export shell=@shell@
 fi
@@ -49,9 +53,8 @@ param2=@param2@
 param3=@param3@
 param4=@param4@
 param5=@param5@
-if test -n "@preHook@"; then
-    source @preHook@
-fi
+if test -n "@preHook@"; then source @preHook@; fi
+eval "$preHook"
 
 
 # Check that the pre-hook initialised SHELL.
@@ -206,16 +209,16 @@ if test "$useTempPrefix" = "1"; then
 fi
 
 
-# Execute the post-hook.
-if test -n "@postHook@"; then
-    source @postHook@
-fi
-
 PATH=$_PATH${_PATH:+:}$PATH
 if test "$NIX_DEBUG" = "1"; then
-    echo "Final path: $PATH"
+    echo "final path: $PATH"
 fi
 
+
+######################################################################
+# Misc. helper functions.
+
+
 stripDirs() {
     local dirs="$1"
     local stripFlags="$2"
@@ -234,27 +237,17 @@ stripDirs() {
     fi
 }
 
+
 ######################################################################
 # Textual substitution functions.
 
 
-# Some disgusting hackery to escape replacements in Sed substitutions.
-# We should really have a tool that replaces literal values by other
-# literal values, without any need for escaping.
-escapeSed() {
-    local s="$1"
-    # The `tr' hack is to escape newlines.  Sed handles newlines very
-    # badly, so we just replace newlines with the magic character 0xff
-    # (377 octal).  So don't use that character in replacements :-P
-    echo -n "$1" | tr '\012' '\377' | sed -e 's^\\^\\\\^g' -e 's^\xff^\\n^g' -e 's/\^/\\^/g' -e 's/&/\\&/g'
-}
-
-
 substitute() {
     local input="$1"
     local output="$2"
 
     local -a params=("$@")
+    local -a args=()
 
     local sedScript=$NIX_BUILD_TOP/.sedargs
     rm -f $sedScript
@@ -284,12 +277,14 @@ substitute() {
             n=$((n + 2))
         fi
 
-        replacement="$(escapeSed "$replacement")"
-
-        echo "s^$pattern^$replacement^g" >> $sedScript
+        if test ${#args[@]} != 0; then
+            args[${#args[@]}]="-a"
+        fi
+        args[${#args[@]}]="$pattern"
+        args[${#args[@]}]="$replacement"
     done
 
-    sed -f $sedScript < "$input" > "$output".tmp
+    replace-literal -e -s "${args[@]}" < "$input" > "$output".tmp
     if test -x "$output"; then
         chmod +x "$output".tmp
     fi
@@ -427,12 +422,12 @@ stripHash() {
 
 
 unpackFile() {
-    local file=$1
+    local file="$1"
     local cmd
 
     header "unpacking source archive $file" 3
 
-    case $file in
+    case "$file" in
         *.tar)
             tar xvf $file || fail
             ;;
@@ -466,7 +461,7 @@ unpackFile() {
 }
 
 
-unpackW() {
+unpackPhase() {
     if test -n "$unpackPhase"; then
         eval "$unpackPhase"
         return
@@ -536,23 +531,14 @@ unpackW() {
 }
 
 
-unpackPhase() {
-    sourceRoot=. # don't change to user dir homeless shelter if custom unpackSource does'nt set sourceRoot
-    header "unpacking sources"
-    startLog "unpack"
-    unpackW
-    stopLog
-    stopNest
-    cd $sourceRoot
-}
-
-
-patchW() {
+patchPhase() {
     if test -n "$patchPhase"; then
         eval "$patchPhase"
         return
     fi
 
+    if test -z "$patchPhase" -a -z "$patches"; then return; fi
+    
     if test -z "$patchFlags"; then
         patchFlags="-p1"
     fi
@@ -574,23 +560,13 @@ patchW() {
 }
 
 
-patchPhase() {
-    if test -z "$patchPhase" -a -z "$patches"; then return; fi
-    header "patching sources"
-    startLog "patch"
-    patchW
-    stopLog
-    stopNest
-}
-
-
 fixLibtool() {
     sed 's^eval sys_lib_.*search_path=.*^^' < $1 > $1.tmp
     mv $1.tmp $1
 }
 
 
-configureW() {
+configurePhase() {
     if test -n "$configurePhase"; then
         eval "$configurePhase"
         return
@@ -617,6 +593,13 @@ configureW() {
         configureFlags="${prefixKey:---prefix=}$prefix $configureFlags"
     fi
 
+    # Add --disable-dependency-tracking to speed up some builds.
+    if test -z "$dontAddDisableDepTrack"; then
+        if grep -q dependency-tracking $configureScript; then
+            configureFlags="--disable-dependency-tracking ${prefixKey:---prefix=}$prefix $configureFlags"
+        fi
+    fi
+
     echo "configure flags: $configureFlags ${configureFlagsArray[@]}"
     $configureScript $configureFlags"${configureFlagsArray[@]}" || fail
 
@@ -624,16 +607,7 @@ configureW() {
 }
 
 
-configurePhase() {
-    header "configuring"
-    startLog "configure"
-    configureW
-    stopLog
-    stopNest
-}
-
-
-buildW() {
+buildPhase() {
     if test -n "$buildPhase"; then
         eval "$buildPhase"
         return
@@ -641,8 +615,13 @@ buildW() {
 
     eval "$preBuild"
 
+    if ! test -n "$makefile" -o -e "Makefile" -o -e "makefile" -o -e "GNUmakefile"; then
+        echo "no Makefile, doing nothing"
+        return
+    fi
+
     echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}"
-    make \
+    make ${makefile:+-f $makefile} \
         $makeFlags "${makeFlagsArray[@]}" \
         $buildFlags "${buildFlagsArray[@]}" || fail
 
@@ -650,19 +629,7 @@ buildW() {
 }
 
 
-buildPhase() {
-    if test "$dontBuild" = 1; then
-        return
-    fi
-    header "building"
-    startLog "build"
-    buildW
-    stopLog
-    stopNest
-}
-
-
-checkW() {
+checkPhase() {
     if test -n "$checkPhase"; then
         eval "$checkPhase"
         return
@@ -673,24 +640,12 @@ checkW() {
     fi
 
     echo "check flags: $makeFlags ${makeFlagsArray[@]} $checkFlags ${checkFlagsArray[@]}"
-    make \
+    make ${makefile:+-f $makefile} \
         $makeFlags "${makeFlagsArray[@]}" \
         $checkFlags "${checkFlagsArray[@]}" $checkTarget || fail
 }
 
 
-checkPhase() {
-    if test "$doCheck" != 1; then
-        return
-    fi
-    header "checking"
-    startLog "check"
-    checkW
-    stopLog
-    stopNest
-}
-
-
 patchELF() {
     # Patch all ELF executables and shared libraries.
     header "patching ELF executables and libraries"
@@ -702,7 +657,7 @@ patchELF() {
 }
 
 
-installW() {
+installPhase() {
     if test -n "$installPhase"; then
         eval "$installPhase"
         return
@@ -717,7 +672,7 @@ installW() {
             installTargets=install
         fi
         echo "install flags: $installTargets $makeFlags ${makeFlagsArray[@]} $installFlags ${installFlagsArray[@]}"
-        make $installTargets \
+        make ${makefile:+-f $makefile} $installTargets \
             $makeFlags "${makeFlagsArray[@]}" \
             $installFlags "${installFlagsArray[@]}" || fail
     else
@@ -728,22 +683,10 @@ installW() {
 }
 
 
-installPhase() {
-    if test "$dontInstall" = 1; then
-        return
-    fi
-    header "installing"
-    startLog "install"
-    installW
-    stopLog
-    stopNest
-}
-
-
 # The fixup phase performs generic, package-independent, Nix-related
 # stuff, like running patchelf and setting the
 # propagated-build-inputs.  It should rarely be overriden.
-fixupW() {
+fixupPhase() {
     if test -n "$fixupPhase"; then
         eval "$fixupPhase"
         return
@@ -751,33 +694,33 @@ fixupW() {
 
     eval "$preFixup"
 
-     forceShare=${forceShare:=man doc info}
-     if test -n "$forceShare"; then
-         for d in $forceShare; do
-             if test -d "$prefix/$d"; then
-                 if test -d "$prefix/share/$d"; then
-                     echo "Both $d/ and share/$d/ exists!"
-                 else
-                    echo Fixing location of $d/ subdirectory
-                     ensureDir $prefix/share
+    # Put man/doc/info under $out/share.
+    forceShare=${forceShare:=man doc info}
+    if test -n "$forceShare"; then
+        for d in $forceShare; do
+            if test -d "$prefix/$d"; then
+                if test -d "$prefix/share/$d"; then
+                    echo "both $d/ and share/$d/ exists!"
+                else
+                    echo "fixing location of $d/ subdirectory"
+                    ensureDir $prefix/share
                     if test -w $prefix/share; then
-                         mv -v $prefix/$d $prefix/share
-                         ln -sv share/$d $prefix
+                        mv -v $prefix/$d $prefix/share
+                        ln -sv share/$d $prefix
                     fi
-                 fi
-            else
-                echo "No $d/ subdirectory, skipping."
-             fi
-         done;
-     fi
-
+                fi
+            fi
+        done;
+    fi
 
-# TODO : strip _only_ ELF executables, and return || fail here...
+    # TODO: strip _only_ ELF executables, and return || fail here...
     if test -z "$dontStrip"; then
-        echo "Stripping debuging symbols from files in"
-        stripDirs "${stripDebugList:-lib}" -S
-        echo "Stripping all symbols from files in"
-        stripDirs "${stripAllList:-bin sbin}" -s
+        stripDebugList=${stripDebugList:-lib}
+        echo "stripping debuging symbols from files in $stripDebugList"
+        stripDirs "$stripDebugList" -S
+        stripAllList=${stripAllList:-bin sbin}
+        echo "stripping all symbols from files in $stripAllList"
+        stripDirs "$stripAllList" -s
     fi
 
     if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then
@@ -798,19 +741,7 @@ fixupW() {
 }
 
 
-fixupPhase() {
-    if test "$dontFixup" = 1; then
-        return
-    fi
-    header "post-installation fixup"
-    startLog "fixup"
-    fixupW
-    stopLog
-    stopNest
-}
-
-
-distW() {
+distPhase() {
     if test -n "$distPhase"; then
         eval "$distPhase"
         return
@@ -823,7 +754,7 @@ distW() {
     fi
 
     echo "dist flags: $distFlags ${distFlagsArray[@]}"
-    make $distFlags "${distFlagsArray[@]}" $distTarget || fail
+    make ${makefile:+-f $makefile} $distFlags "${distFlagsArray[@]}" $distTarget || fail
 
     if test "$dontCopyDist" != 1; then
         ensureDir "$out/tarballs"
@@ -841,15 +772,18 @@ distW() {
 }
 
 
-distPhase() {
-    if test "$doDist" != 1; then
-        return
-    fi
-    header "creating distribution"
-    startLog "dist"
-    distW
-    stopLog
-    stopNest
+showPhaseHeader() {
+    local phase="$1"
+    case $phase in
+        unpackPhase) header "unpacking sources";;
+        patchPhase) header "patching sources";;
+        configurePhase) header "configuring";;
+        buildPhase) header "building";;
+        checkPhase) header "running tests";;
+        installPhase) header "installing";;
+        fixupPhase) header "post-installation fixup";;
+        *) header "$phase";;
+    esac
 }
 
 
@@ -863,16 +797,39 @@ genericBuild() {
 
     if test -z "$phases"; then
         phases="unpackPhase patchPhase configurePhase buildPhase checkPhase \
-            installPhase fixupPhase distPhase";
-    fi
-
-    for i in $phases; do
+            installPhase fixupPhase distPhase $extraPhases";
+    fi
+
+    for curPhase in $phases; do
+        if test "$curPhase" = buildPhase -a -n "$dontBuild"; then continue; fi
+        if test "$curPhase" = checkPhase -a -z "$doCheck"; then continue; fi
+        if test "$curPhase" = installPhase -a -n "$dontInstall"; then continue; fi
+        if test "$curPhase" = fixupPhase -a -n "$dontFixup"; then continue; fi
+        if test "$curPhase" = distPhase -a -z "$doDist"; then continue; fi
+        
+        showPhaseHeader "$curPhase"
+        startLog "$curPhase"
         dumpVars
-        eval "$i"
+        
+        # Evaluate the variable named $curPhase if it exists, otherwise the
+        # function named $curPhase.
+        eval "${!curPhase:-$curPhase}"
+
+        if test "$curPhase" = unpackPhase; then
+            cd "${sourceRoot:-.}"
+        fi
+        
+        stopLog
+        stopNest
     done
 
     stopNest
 }
 
 
+# Execute the post-hook.
+if test -n "@postHook@"; then source @postHook@; fi
+eval "$postHook"
+
+
 dumpVars
diff --git a/pkgs/stdenv/linux/bootstrap/powerpc/bunzip2 b/pkgs/stdenv/linux/bootstrap/powerpc/bunzip2
deleted file mode 100755
index 730214a404b..00000000000
--- a/pkgs/stdenv/linux/bootstrap/powerpc/bunzip2
+++ /dev/null
Binary files differdiff --git a/pkgs/stdenv/linux/bootstrap/powerpc/bzip2 b/pkgs/stdenv/linux/bootstrap/powerpc/bzip2
new file mode 100755
index 00000000000..a9eb626e1ca
--- /dev/null
+++ b/pkgs/stdenv/linux/bootstrap/powerpc/bzip2
Binary files differdiff --git a/pkgs/stdenv/linux/bootstrap/powerpc/cp b/pkgs/stdenv/linux/bootstrap/powerpc/cp
index 4477d7eb6e0..972a653851c 100755
--- a/pkgs/stdenv/linux/bootstrap/powerpc/cp
+++ b/pkgs/stdenv/linux/bootstrap/powerpc/cp
Binary files differdiff --git a/pkgs/stdenv/linux/bootstrap/powerpc/curl.bz2 b/pkgs/stdenv/linux/bootstrap/powerpc/curl.bz2
index 90f0fa69ab2..4f0d64341e8 100755
--- a/pkgs/stdenv/linux/bootstrap/powerpc/curl.bz2
+++ b/pkgs/stdenv/linux/bootstrap/powerpc/curl.bz2
Binary files differdiff --git a/pkgs/stdenv/linux/bootstrap/powerpc/default.nix b/pkgs/stdenv/linux/bootstrap/powerpc/default.nix
index 1cb29ee4a62..a354cc01d85 100644
--- a/pkgs/stdenv/linux/bootstrap/powerpc/default.nix
+++ b/pkgs/stdenv/linux/bootstrap/powerpc/default.nix
@@ -1,27 +1,27 @@
 {
   bash = ./bash;
-  bunzip2 = ./bunzip2;
+  bzip2 = ./bzip2;
   cp = ./cp;
   curl = ./curl.bz2;
   tar = ./tar.bz2;
 
   staticToolsURL = {
-    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r6888/static-tools.tar.bz2;
-    sha1 = "82acee6c1a895f3a45fdbf921d49be6c996abc5b";
+    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r9828/static-tools.tar.bz2;
+    sha1 = "e4d1680e3dfa752e49a996a31140db53b10061cb";
   };
 
   binutilsURL = {
-    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r6888/binutils.tar.bz2;
-    sha1 = "bc4f9fc931b0d139d0b16e548b1605d5181c74c0";
+    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r9828/binutils.tar.bz2;
+    sha1 = "2609f4d9277a60fcd178395d3d49911190e08f36";
   };
 
   gccURL = {
-    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r6888/gcc.tar.bz2;
-    sha1 = "ade3225a3135b0e3415cc8cb9e1bec61a742e200";
+    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r9828/gcc.tar.bz2;
+    sha1 = "71d79d736bfef6252208fe6239e528a591becbed";
   };
 
   glibcURL = {
-    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r6888/glibc.tar.bz2;
-    sha1 = "e28476443e02b9c2e7881ced27c23cb039421cda";
+    url = http://nix.cs.uu.nl/dist/tarballs/stdenv-linux/powerpc/r9828/glibc.tar.bz2;
+    sha1 = "bf0245e16235800c8aa9c6a5de6565583a66e46d";
   };
 }
diff --git a/pkgs/stdenv/linux/bootstrap/powerpc/tar.bz2 b/pkgs/stdenv/linux/bootstrap/powerpc/tar.bz2
index 999bca557e2..c014e9cc044 100755
--- a/pkgs/stdenv/linux/bootstrap/powerpc/tar.bz2
+++ b/pkgs/stdenv/linux/bootstrap/powerpc/tar.bz2
Binary files differdiff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh
index 0ec0435fce9..cadc2129b31 100644
--- a/pkgs/stdenv/linux/make-bootstrap-tools.sh
+++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh
@@ -100,8 +100,11 @@ rm -f gcc/lib*/libmud* gcc/lib*/libiberty* gcc/lib*/libssp* gcc/lib*/libgomp*
 rm -rf gcc/lib/gcc/*/*/install-tools
 rm -rf gcc/lib/gcc/*/*/include/root
 rm -rf gcc/lib/gcc/*/*/include/linux
-if test -e gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h; then
-    nukeRefs gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h
+if test "$system" = "powerpc-linux"; then
+    nukeRefs gcc/lib/gcc/powerpc-unknown-linux-gnu/*/include/bits/mathdef.h
+    # Dangling symlink "sound", probably produced by fixinclude.
+    # Should investigate why it's there in the first place.
+    rm -f gcc/lib/gcc/powerpc-unknown-linux-gnu/*/include/sound
 fi
 
 
@@ -117,12 +120,20 @@ chmod -R +w glibc
 rm glibc/include/linux
 cp -prd $(readlink $glibc/include/linux) glibc/include
 rm glibc/include/asm
-ln -s $(readlink $(readlink $glibc/include/asm)) glibc/include/asm
+if test -L "$(readlink $glibc/include/asm)"; then
+    ln -s $(readlink $(readlink $glibc/include/asm)) glibc/include/asm
+else
+    cp -prd "$(readlink $glibc/include/asm)" glibc/include
+fi
 for i in glibc/include/asm-*; do
     target=$(readlink $i)
     rm $i
     cp -prd $target glibc/include
 done
+if test "$system" = "powerpc-linux"; then
+    # Hopefully we won't need these.
+    rm -f glibc/include/mtd glibc/include/rdma glibc/include/sound glibc/include/video
+fi
 
 
 # Strip executables even further.
diff --git a/pkgs/tools/X11/xmacro/default.nix b/pkgs/tools/X11/xmacro/default.nix
index c1f039a9215..4cceb720e19 100644
--- a/pkgs/tools/X11/xmacro/default.nix
+++ b/pkgs/tools/X11/xmacro/default.nix
@@ -1,8 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "xmacro";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = mirror://sourceforge/xmacro/xmacro-pre0.3-20000911.tar.gz;
     md5 = "d2956b82f3d5380e58a75ccc721fb746";
   };
@@ -11,6 +11,5 @@ args.stdenv.mkDerivation {
 
   preInstall="echo -e 'install:\n	mkdir \${out}/bin;\n	cp xmacrorec xmacrorec2 xmacroplay \${out}/bin;' >>Makefile; ";
 
-  buildInputs = (with args; 
-	[libX11 libXtst xextproto libXi inputproto]);
+  buildInputs = [libX11 libXtst xextproto libXi inputproto];
 }
diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix
index 9205612f3bc..7242f32f71c 100644
--- a/pkgs/tools/archivers/gnutar/default.nix
+++ b/pkgs/tools/archivers/gnutar/default.nix
@@ -2,9 +2,16 @@
 
 stdenv.mkDerivation {
   name = "gnutar-1.19";
+  
   src = fetchurl {
     url = mirror://gnu/tar/tar-1.19.tar.bz2;
     sha256 = "1d4wh27wlgryz3ld6gp6fn56knh7dmny93bmgixy07kvlxnx9466";
   };
+  
   patches = [./implausible.patch];
+
+  meta = {
+    homepage = http://www.gnu.org/software/grep/;
+    description = "GNU implementation of the tar archiver";
+  };
 }
diff --git a/pkgs/tools/archivers/p7zip/default.nix b/pkgs/tools/archivers/p7zip/default.nix
index c9d97033500..00bc47878f4 100644
--- a/pkgs/tools/archivers/p7zip/default.nix
+++ b/pkgs/tools/archivers/p7zip/default.nix
@@ -1,11 +1,11 @@
 {stdenv, fetchurl}:
 
 stdenv.mkDerivation {
-  name = "p7zip-4.53";
+  name = "p7zip-4.57";
   
   src = fetchurl {
-    url = mirror://sourceforge/p7zip/p7zip_4.53_src_all.tar.bz2;
-    sha256 = "0pbgvpq852qnzq4isgc13p4nnp416xhy5vmn1rcwm8fk43l5rbqd";
+    url = mirror://sourceforge/p7zip/p7zip_4.57_src_all.tar.bz2;
+    sha256 = "0lsvw1bh6dzpxn8kyl7s79w2drpfxaa1c79khqm56gfmdlw27s80";
   };
   
   preConfigure = "
diff --git a/pkgs/tools/archivers/sharutils/4.6.3.nix b/pkgs/tools/archivers/sharutils/4.6.3.nix
new file mode 100644
index 00000000000..830c2a072b6
--- /dev/null
+++ b/pkgs/tools/archivers/sharutils/4.6.3.nix
@@ -0,0 +1,13 @@
+args: with args;
+stdenv.mkDerivation rec {
+  name = "sharutils-" + version;
+
+  src = fetchurl {
+    url = "mirror://gnu/sharutils/REL-${version}/${name}.tar.bz2";
+    sha256 = "1sirrzas8llcsd8gnh56pns39wa1f803vff1kmy5islfi1p9vqk8";
+  };
+
+  meta = {
+    homepage = http://www.gnu.org/software/sharutils;
+  };
+}
diff --git a/pkgs/tools/archivers/unzip/default.nix b/pkgs/tools/archivers/unzip/default.nix
index e19e564a421..a690a8e7163 100644
--- a/pkgs/tools/archivers/unzip/default.nix
+++ b/pkgs/tools/archivers/unzip/default.nix
@@ -7,4 +7,8 @@ stdenv.mkDerivation {
     url = http://nix.cs.uu.nl/dist/tarballs/unzip552.tar.gz;
     md5 = "9d23919999d6eac9217d1f41472034a9";
   };
+
+  meta = {
+	  homepage = http://www.info-zip.org;
+  };
 }
diff --git a/pkgs/tools/archivers/zip/default.nix b/pkgs/tools/archivers/zip/default.nix
index f3fb96ae1e5..9498bf089ff 100644
--- a/pkgs/tools/archivers/zip/default.nix
+++ b/pkgs/tools/archivers/zip/default.nix
@@ -5,4 +5,8 @@
     url = ftp://ftp.info-zip.org/pub/infozip/src/zip232.tgz;
     md5 = "8a4da4460386e324debe97f3b7fe4d96";
   };
+
+  meta = {
+    homepage = http://www.info-zip.org;
+  };
 }
diff --git a/pkgs/tools/backup/rdiff-backup/default.nix b/pkgs/tools/backup/rdiff-backup/default.nix
index 43fd17a6178..8cd660adc8c 100644
--- a/pkgs/tools/backup/rdiff-backup/default.nix
+++ b/pkgs/tools/backup/rdiff-backup/default.nix
@@ -1,8 +1,8 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "rdiff-backup-1.1.14";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.1.14.tar.gz;
     sha256 = "0sh2kz90z47yfa9786dyn3q9ba1xcmjvd65rykvm7mg5apnrg27h";
   };
@@ -14,7 +14,7 @@ args.stdenv.mkDerivation {
     
   ";
 
-  buildInputs = (with args; [python librsync gnused ]);
+  buildInputs = [python librsync gnused ];
 
   meta = {
       description = "backup system trying to combine best a mirror and an incremental backup system";
diff --git a/pkgs/tools/compression/bzip2/default.nix b/pkgs/tools/compression/bzip2/default.nix
index 1a5dd61803a..9ed3e941bf6 100644
--- a/pkgs/tools/compression/bzip2/default.nix
+++ b/pkgs/tools/compression/bzip2/default.nix
@@ -11,4 +11,7 @@ stdenv.mkDerivation {
 
   sharedLibrary =
     !stdenv.isDarwin && !(stdenv ? isDietLibC) && stdenv.system != "i686-cygwin";
+  meta = {
+    homepage = http://www.bzip.org;
+  };
 }
diff --git a/pkgs/tools/compression/gzip/default.nix b/pkgs/tools/compression/gzip/default.nix
index 58d6e8b9707..0a2afd05372 100644
--- a/pkgs/tools/compression/gzip/default.nix
+++ b/pkgs/tools/compression/gzip/default.nix
@@ -2,9 +2,16 @@
 
 stdenv.mkDerivation {
   name = "gzip-1.3.12";
+  
   src = fetchurl {
     url = http://ftp.gnu.org/gnu/gzip/gzip-1.3.12.tar.gz;
     sha256 = "1bw7sm68xjlnlzgcx66hnw80ac1qqyvhw0vw27zilgbzbzh5nmiz";
   };
-	patches = [./gnulib-futimens.patch];
+
+  meta = {
+    homepage = http://www.gzip.org/;
+    description = "The gzip compression program";
+  };
+  
+  patches = [./gnulib-futimens.patch];
 }
diff --git a/pkgs/tools/compression/lzma/default.nix b/pkgs/tools/compression/lzma/default.nix
new file mode 100644
index 00000000000..67ef9c3add1
--- /dev/null
+++ b/pkgs/tools/compression/lzma/default.nix
@@ -0,0 +1,18 @@
+{stdenv, fetchurl}:
+
+stdenv.mkDerivation {
+  name = "lzma-4.32.5";
+  
+  src = fetchurl {
+    url = http://tukaani.org/lzma/lzma-4.32.5.tar.gz;
+    sha256 = "1mqy1biy46gqky6n3gyr2l395hwckh0xyi96waz5p5x8mgp372ch";
+  };
+
+  CFLAGS = "-O3";
+  CXXFLAGS = "-O3";
+
+  meta = {
+    homepage = http://tukaani.org/lzma/;
+    description = "The LZMA compression program";
+  };
+}
diff --git a/pkgs/tools/compression/zdelta/default.nix b/pkgs/tools/compression/zdelta/default.nix
index 8bd6d8a0e16..a07deac4148 100644
--- a/pkgs/tools/compression/zdelta/default.nix
+++ b/pkgs/tools/compression/zdelta/default.nix
@@ -1,10 +1,14 @@
 {stdenv, fetchurl}:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   name = "zdelta-2.1";
   builder = ./builder.sh;
   src = fetchurl {
-    url = http://cis.poly.edu/zdelta/downloads/zdelta-2.1.tar.gz;
+    url = "${meta.homepage}/downloads/${name}.tar.gz";
     md5 = "c69583a64f42f69a39e297d0d27d77e5";
   };
+
+  meta = {
+	  homepage = http://cis.poly.edu/zdelta;
+  };
 }
diff --git a/pkgs/tools/hddtemp/default.nix b/pkgs/tools/hddtemp/default.nix
index 0bb51287474..9f285a6cd51 100644
--- a/pkgs/tools/hddtemp/default.nix
+++ b/pkgs/tools/hddtemp/default.nix
@@ -1,12 +1,12 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "hddtemp-0.3-beta15";
 
-  db = args.fetchurl{
+  db = fetchurl{
               url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp.db;
               sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya";
        };
-  src = args.fetchurl {
+  src = fetchurl {
             url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp-0.3-beta15.tar.bz2;
             sha256 = "0nzgg4nl8zm9023wp4dg007z6x3ir60rwbcapr9ks2al81c431b1";
   };
@@ -17,8 +17,6 @@ args.stdenv.mkDerivation {
     ./configure --prefix=\$out --with-db-path=\$out/nix-support/hddtemp.db
   "; 
 
-  buildInputs =(with args; []);
-
   meta = { 
       description = "shows the harddisk temperature";
       homepage = https://savannah.nongnu.org/projects/hddtemp/;
diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix
index 770a1dbfbc9..8292c56f0ea 100644
--- a/pkgs/tools/misc/coreutils/default.nix
+++ b/pkgs/tools/misc/coreutils/default.nix
@@ -1,10 +1,15 @@
 {stdenv, fetchurl}:
 
 stdenv.mkDerivation {
-  name = "coreutils-6.9";
+  name = "coreutils-6.10";
+  
   src = fetchurl {
-    url = mirror://gnu/coreutils/coreutils-6.9.tar.bz2;
-    sha256 = "1c4p2kiy4m024qcl1przvphy8vhivf8jvclq6bjm1pjps5d8khl9";
+    url = mirror://gnu/coreutils/coreutils-6.10.tar.gz;
+    sha256 = "0zpbxfl16sq45s53fxw43i9i8lrdcc845714c1j5f84zi13ka08x";
+  };
+
+  meta = {
+    homepage = http://www.gnu.org/software/coreutils/;
+    description = "The basic file, shell and text manipulation utilities of the GNU operating system";
   };
-  patches = [ ./gnulib-futimens.patch ] ;
 }
diff --git a/pkgs/tools/misc/dosfstools/2.11deb.nix b/pkgs/tools/misc/dosfstools/2.11deb.nix
new file mode 100644
index 00000000000..13f327dcff5
--- /dev/null
+++ b/pkgs/tools/misc/dosfstools/2.11deb.nix
@@ -0,0 +1,33 @@
+args : with args; with builderDefs {src="";} null;
+    let patch = 
+        fetchurl {
+          url = http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_2.11-2.3.diff.gz;
+          sha256 = "0bzjhpgg4ih6c76ax8byis9vxgkr2c7bbbshqrkfq8j7ar48n5ld";
+        };	
+      localDefs = builderDefs (rec {
+        src = /* put a fetchurl here */
+          fetchurl {
+            url = http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_2.11.orig.tar.gz;
+            sha256 = "1154k0y04npblgac81p4pcmglilk1ldrqll4hvbrwgcb7096vb0f";
+          };
+	preBuild = FullDepEntry (''
+	  gunzip < ${patch} | patch -Np1
+	'')["minInit" "doUnpack"];
+
+        buildInputs = [];
+        configureFlags = [];
+	makeFlags = " PREFIX=$out ";
+    }) null; /* null is a terminator for sumArgs */
+    in with localDefs;
+stdenv.mkDerivation rec {
+    name = "dosfstools-"+version;
+    builder = writeScript (name + "-builder")
+        (textClosure localDefs 
+            [preBuild "doMakeInstall" doForceShare doPropagate]);
+    meta = {
+        description = "
+        Dosfstools - utilities for vfat file system.
+";
+	homepage = "http://sixpak.org/dosfstools/dosfstools-2.8vb2.tar.gz";
+    };
+}
diff --git a/pkgs/tools/misc/findutils/default.nix b/pkgs/tools/misc/findutils/default.nix
index 5aa28d0c451..acfbf90d946 100644
--- a/pkgs/tools/misc/findutils/default.nix
+++ b/pkgs/tools/misc/findutils/default.nix
@@ -1,10 +1,10 @@
 {stdenv, fetchurl, coreutils}:
 
 stdenv.mkDerivation {
-  name = "findutils-4.2.31";
+  name = "findutils-4.2.32";
   src = fetchurl {
-    url = mirror://gnu/findutils/findutils-4.2.31.tar.gz;
-    sha256 = "01329mrgg7pc2069hdbcl45jzrzvi94nnv1zf2hcrcx0mj7lplz0";
+    url = mirror://gnu/findutils/findutils-4.2.32.tar.gz;
+    sha256 = "05sj0154kl4mbqg7dcabiaa16snjv2ppfwwhcvl2zyn2yc28igc7";
   };
   buildInputs = [coreutils];
 
@@ -12,4 +12,9 @@ stdenv.mkDerivation {
     # Note: the dietlibc patch is just to get findutils to compile.
     # The locate command probably won't work though.
     ++ stdenv.lib.optional (stdenv ? isDietLibC) ./dietlibc-hack.patch;
+
+  meta = {
+    homepage = http://www.gnu.org/software/findutils/;
+    description = "The basic directory searching utilities of the GNU operating system";
+  };
 }
diff --git a/pkgs/tools/misc/grub/default.nix b/pkgs/tools/misc/grub/default.nix
index 1b7f052dfdf..9f021a66955 100644
--- a/pkgs/tools/misc/grub/default.nix
+++ b/pkgs/tools/misc/grub/default.nix
@@ -11,22 +11,25 @@ stdenv.mkDerivation {
     url = ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz;
     md5 = "cd3f3eb54446be6003156158d51f4884";
   };
-  
-  patches = [
-    # Patch to add primitive splash screen support (not the fancy SUSE gfxmenu stuff).
-    # With this you can set splashimage=foo.xpm.gz in menu.lst to get
-    # a 640x480, 14-colour background.
-    (fetchurl {
-      url = "http://cvs.archlinux.org/cgi-bin/viewcvs.cgi/*checkout*/system/grub-gfx/grub-0.97-graphics.patch?rev=HEAD&cvsroot=AUR&only_with_tag=CURRENT&content-type=text/plain";
-      sha256 = "0m6min9cbj71kvp0kxkxdq8dx2dwm3dj0rd5sjz5xdl13ihaj5hy";
-    })
-  ];
+
+  # Lots of patches from Gentoo, in particular splash screen support
+  # (not the fancy SUSE gfxmenu stuff though).  Also a fix for boot
+  # failures on systems with more than 2 GiB RAM.
+  gentooPatches = fetchurl {
+    url = mirror://gentoo/distfiles/grub-0.97-patches-1.4.tar.bz2;
+    sha256 = "1nki5q1b61ahxcmnw6mq7b8ghcysri4lj7q6dx8iqixrvrpxj399";
+  };
 
   # Autoconf/automake required for the splashimage patch.
   buildInputs = [autoconf automake];
 
   preConfigure = ''
+    unpackFile $gentooPatches
+    rm patch/400_all_grub-0.97-reiser4-20050808-gentoo.patch
+    for i in patch/*.patch; do
+      echo "applying patch $i"
+      patch -p1 < $i || patch -p0 < $i
+    done
     autoreconf
   '';
-  
 }
diff --git a/pkgs/tools/misc/man-db/default.nix b/pkgs/tools/misc/man-db/default.nix
new file mode 100644
index 00000000000..54367e671ea
--- /dev/null
+++ b/pkgs/tools/misc/man-db/default.nix
@@ -0,0 +1,32 @@
+{stdenv, fetchurl, db4, groff}:
+ 
+stdenv.mkDerivation {
+  name = "man-db-2.5.1";
+  
+  src = fetchurl {
+    url = http://download.savannah.nongnu.org/releases/man-db/man-db-2.5.1.tar.gz;
+    sha256 = "178w1fk23ffh8vabj29cn0yyg5ps7bwy1zrrrcsw8aypbh3sfjy3";
+  };
+  
+  buildInputs = [db4 groff];
+  
+  configureFlags = ''
+    --disable-setuid
+    --with-nroff=${groff}/bin/nroff
+    --with-tbl=${groff}/bin/tbl
+    --with-eqn=${groff}/bin/eqn
+    --with-neqn=${groff}/bin/neqn
+  '';
+
+  troff = "${groff}/bin/troff";
+  
+  patches = [
+    # Search in "share/man" relative to each path in $PATH (in addition to "man").
+    ./share.patch
+  ];
+
+  meta = {
+    homepage = http://www.nongnu.org/man-db/;
+    description = "An implementation of the standard Unix documentation system accessed using the man command";
+  };
+}
diff --git a/pkgs/tools/misc/man-db/share.patch b/pkgs/tools/misc/man-db/share.patch
new file mode 100644
index 00000000000..95582a50269
--- /dev/null
+++ b/pkgs/tools/misc/man-db/share.patch
@@ -0,0 +1,110 @@
+diff -rc man-db-2.5.1-orig/src/manp.c man-db-2.5.1/src/manp.c
+*** man-db-2.5.1-orig/src/manp.c	2008-01-07 03:23:11.000000000 +0100
+--- man-db-2.5.1/src/manp.c	2008-02-07 14:20:20.000000000 +0100
+***************
+*** 96,102 ****
+  
+  static void mkcatdirs (const char *mandir, const char *catdir);
+  static inline char *get_manpath_from_path (const char *path);
+! static inline char *has_mandir (const char *p);
+  static inline char *fsstnd (const char *path);
+  static char *def_path (int flag);
+  static void add_dir_to_list (char **lp, const char *dir);
+--- 96,102 ----
+  
+  static void mkcatdirs (const char *mandir, const char *catdir);
+  static inline char *get_manpath_from_path (const char *path);
+! static inline char *has_mandir (const char *p, const char *mandir);
+  static inline char *fsstnd (const char *path);
+  static char *def_path (int flag);
+  static void add_dir_to_list (char **lp, const char *dir);
+***************
+*** 928,934 ****
+  		} else {
+  			debug ("is not in the config file\n");
+  
+! 		 	t = has_mandir (p);
+  		 	if (t) {
+  				debug ("but does have a ../man or man "
+  				       "subdirectory\n");
+--- 928,934 ----
+  		} else {
+  			debug ("is not in the config file\n");
+  
+! 		 	t = has_mandir (p, "man");
+  		 	if (t) {
+  				debug ("but does have a ../man or man "
+  				       "subdirectory\n");
+***************
+*** 938,943 ****
+--- 938,952 ----
+  		 	} else
+  				debug ("and doesn't have ../man or man "
+  				       "subdirectories\n");
++  
++  		 	t = has_mandir (p, "share/man");
++  		 	if (t) {
++                                 debug ("but does have a ../share/man or share/man subdirectory\n");
++  	
++  				add_dir_to_list (tmplist, t);
++  				free (t);
++  		 	} else
++  				debug ("and doesn't have ../share/man or share/man subdirectories\n");
+  		}
+  	}
+  
+***************
+*** 1013,1019 ****
+  
+  /* path does not exist in config file: check to see if path/../man or 
+     path/man exist.  If so return it, if not return NULL. */
+! static inline char *has_mandir (const char *path)
+  {
+  	char *newpath = NULL;
+  
+--- 1022,1028 ----
+  
+  /* path does not exist in config file: check to see if path/../man or 
+     path/man exist.  If so return it, if not return NULL. */
+! static inline char *has_mandir (const char *path, const char *mandir)
+  {
+  	char *newpath = NULL;
+  
+***************
+*** 1023,1031 ****
+  	char *subdir = strrchr (path, '/');
+  	if (subdir) {
+  		const int prefix_len = subdir + 1 - path;
+! 		newpath = xmalloc (prefix_len + sizeof ("man") + 1);
+  		strncpy (newpath, path, prefix_len);
+! 		strcpy (newpath + prefix_len, "man");
+  
+  		if (is_directory (newpath) == 1)
+  			return newpath;
+--- 1032,1040 ----
+  	char *subdir = strrchr (path, '/');
+  	if (subdir) {
+  		const int prefix_len = subdir + 1 - path;
+! 		newpath = xmalloc (prefix_len + strlen (mandir) + 2);
+  		strncpy (newpath, path, prefix_len);
+! 		strcpy (newpath + prefix_len, mandir);
+  
+  		if (is_directory (newpath) == 1)
+  			return newpath;
+***************
+*** 1033,1039 ****
+  			*newpath = '\0';
+  	}
+  
+! 	newpath = appendstr (newpath, path, "/man", NULL);
+  
+  	if (is_directory (newpath) == 1)
+  		return newpath;
+--- 1042,1048 ----
+  			*newpath = '\0';
+  	}
+  
+! 	newpath = appendstr (newpath, path, "/", mandir, NULL);
+  
+  	if (is_directory (newpath) == 1)
+  		return newpath;
diff --git a/pkgs/tools/misc/man/default.nix b/pkgs/tools/misc/man/default.nix
index deb0f83ad8a..490aa4606ab 100644
--- a/pkgs/tools/misc/man/default.nix
+++ b/pkgs/tools/misc/man/default.nix
@@ -1,15 +1,26 @@
-{stdenv, fetchurl, db4, groff}:
+{stdenv, fetchurl, groff, less}:
  
 stdenv.mkDerivation {
-  name = "man-2.4.3";
+  name = "man-1.6f";
+  
   src = fetchurl {
-    url = http://savannah.nongnu.org/download/man-db/man-db-2.4.3.tar.gz;
-    md5 = "30814a47f209f43b152659ba51fc7937";
+    url = http://primates.ximian.com/~flucifredi/man/man-1.6f.tar.gz;
+    sha256 = "0v2z6ywhy8kd2fa3ywkqayhjdivbaqn6qvhx93a1ldw135z8q84z";
   };
-  buildInputs = [db4 groff];
-  configureFlags = "--disable-setuid";
+  
+  buildInputs = [groff less];
+
+  preBuild = ''
+    makeFlagsArray=(bindir=$out/bin sbindir=$out/sbin libdir=$out/lib mandir=$out/share/man)
+  '';
+
   patches = [
     # Search in "share/man" relative to each path in $PATH (in addition to "man").
     ./share.patch
   ];
+
+  meta = {
+    homepage = http://primates.ximian.com/~flucifredi/man/;
+    description = "Tool to read online Unix documentation";
+  };
 }
diff --git a/pkgs/tools/misc/man/share.patch b/pkgs/tools/misc/man/share.patch
index 3367f4ceb61..837786e28eb 100644
--- a/pkgs/tools/misc/man/share.patch
+++ b/pkgs/tools/misc/man/share.patch
@@ -1,113 +1,116 @@
-diff -rc man-db-2.4.3/src/manp.c man-db-2.4.3-new/src/manp.c
-*** man-db-2.4.3/src/manp.c	Mon Nov  8 10:06:03 2004
---- man-db-2.4.3-new/src/manp.c	Tue Jan  9 17:08:31 2007
+diff -rc man-1.6f-orig/src/manpath.c man-1.6f/src/manpath.c
+*** man-1.6f-orig/src/manpath.c	2006-08-03 23:18:33.000000000 +0200
+--- man-1.6f/src/manpath.c	2008-02-07 15:31:43.000000000 +0100
 ***************
-*** 101,107 ****
-  
-  static void mkcatdirs (const char *mandir, const char *catdir);
-  static __inline__ char *get_manpath (char *path);
-! static __inline__ char *has_mandir (const char *p);
-  static __inline__ char *fsstnd (const char *path);
-  static char *def_path (int flag);
-  static void add_dir_to_list (char **lp, const char *dir);
---- 101,107 ----
-  
-  static void mkcatdirs (const char *mandir, const char *catdir);
-  static __inline__ char *get_manpath (char *path);
-! static __inline__ char *has_mandir (const char *p, const char *mandir);
-  static __inline__ char *fsstnd (const char *path);
-  static char *def_path (int flag);
-  static void add_dir_to_list (char **lp, const char *dir);
-***************
-*** 885,891 ****
-  			if (debug)
-  				fputs ("is not in the config file\n", stderr);
-  
-! 		 	t = has_mandir (p);
-  		 	if (t) {
-  				if (debug)
-  					fprintf (stderr, "but does have a ../man or man subdirectory\n");
---- 885,891 ----
-  			if (debug)
-  				fputs ("is not in the config file\n", stderr);
-  
-! 		 	t = has_mandir (p, "man");
-  		 	if (t) {
-  				if (debug)
-  					fprintf (stderr, "but does have a ../man or man subdirectory\n");
-***************
-*** 895,900 ****
---- 895,911 ----
-  		 	} else
-  				if (debug)
-  					fprintf (stderr, "and doesn't have ../man or man subdirectories\n");
-+ 
-+ 		 	t = has_mandir (p, "share/man");
-+ 		 	if (t) {
-+ 				if (debug)
-+ 					fprintf (stderr, "but does have a ../share/man or share/man subdirectory\n");
-+ 	
-+ 				add_dir_to_list (tmplist, t);
-+ 				free (t);
-+ 		 	}
-+ 				if (debug)
-+ 					fprintf (stderr, "and doesn't have ../share/man or share/man subdirectories\n");
-  		}
-  	}
+*** 109,121 ****
+   * or ../man or ../man1 or ../man8 subdirectories. 
+   */
+  static char *
+! find_man_subdir (char *p) {
+       int len;
+       char *t, *sp;
   
-***************
-*** 973,979 ****
+       len = strlen (p);
   
-  /* path does not exist in config file: check to see if path/../man or 
-     path/man exist.  If so return it, if not return NULL. */
-! static __inline__ char *has_mandir (const char *path)
-  {
-  	char *newpath = NULL;
+!      t = my_malloc ((unsigned) len + 20);
   
---- 984,990 ----
+       memcpy (t, p, len);
+       strcpy (t + len, "/man");
+--- 109,121 ----
+   * or ../man or ../man1 or ../man8 subdirectories. 
+   */
+  static char *
+! find_man_subdir (char *p, char * maybe_share) {
+       int len;
+       char *t, *sp;
   
-  /* path does not exist in config file: check to see if path/../man or 
-     path/man exist.  If so return it, if not return NULL. */
-! static __inline__ char *has_mandir (const char *path, const char *mandir)
-  {
-  	char *newpath = NULL;
+       len = strlen (p);
   
+!      t = my_malloc ((unsigned) len + 30);
+  
+       memcpy (t, p, len);
+       strcpy (t + len, "/man");
 ***************
-*** 983,991 ****
-  	char *subdir = strrchr (path, '/');
-  	if (subdir) {
-  		const int prefix_len = subdir + 1 - path;
-! 		newpath = xmalloc (prefix_len + sizeof ("man") + 1);
-  		strncpy (newpath, path, prefix_len);
-! 		strcpy (newpath + prefix_len, "man");
-  
-  		if (is_directory (newpath) == 1)
-  			return newpath;
---- 994,1002 ----
-  	char *subdir = strrchr (path, '/');
-  	if (subdir) {
-  		const int prefix_len = subdir + 1 - path;
-! 		newpath = xmalloc (prefix_len + strlen (mandir) + 2);
-  		strncpy (newpath, path, prefix_len);
-! 		strcpy (newpath + prefix_len, mandir);
-  
-  		if (is_directory (newpath) == 1)
-  			return newpath;
-***************
-*** 993,999 ****
-  			*newpath = '\0';
-  	}
+*** 139,159 ****
+       }
+  
+       /* look for the situation with packagedir/bin and packagedir/man */
+!      strcpy (t + len, "/man");
+  
+       if (is_directory (t) == 1)
+  	  return t;
+  
+       /* look for the situation with pkg/bin and pkg/man1 or pkg/man8 */
+       /* (looking for all man[1-9] would probably be a waste of stats) */
+!      strcpy (t + len, "/man1");
+  
+       if (is_directory (t) == 1) {
+  	  t[len] = 0;
+  	  return t;
+       }
   
-! 	newpath = strappend (newpath, path, "/man", NULL);
+!      strcpy (t + len, "/man8");
   
-  	if (is_directory (newpath) == 1)
-  		return newpath;
---- 1004,1010 ----
-  			*newpath = '\0';
-  	}
+       if (is_directory (t) == 1) {
+  	  t[len] = 0;
+--- 139,159 ----
+       }
   
-! 	newpath = strappend (newpath, path, "/", mandir, NULL);
+       /* look for the situation with packagedir/bin and packagedir/man */
+!      sprintf (t + len, "%s/man", maybe_share);
+  
+       if (is_directory (t) == 1)
+  	  return t;
+  
+       /* look for the situation with pkg/bin and pkg/man1 or pkg/man8 */
+       /* (looking for all man[1-9] would probably be a waste of stats) */
+!      sprintf (t + len, "%s/man1", maybe_share);
+  
+       if (is_directory (t) == 1) {
+  	  t[len] = 0;
+  	  return t;
+       }
+  
+!      sprintf (t + len, "%s/man8", maybe_share);
+  
+       if (is_directory (t) == 1) {
+  	  t[len] = 0;
+***************
+*** 341,347 ****
+          if (debug)
+              gripe (IS_NOT_IN_CONFIG);
+            
+!         t = find_man_subdir (dir);
+          if (t != NULL) {
+              if (debug)
+                  gripe (MAN_NEARBY);
+--- 341,347 ----
+          if (debug)
+              gripe (IS_NOT_IN_CONFIG);
+            
+!         t = find_man_subdir (dir, "");
+          if (t != NULL) {
+              if (debug)
+                  gripe (MAN_NEARBY);
+***************
+*** 352,357 ****
+--- 352,370 ----
+              if (debug)
+                  gripe (NO_MAN_NEARBY);
+          }
++ 
++         t = find_man_subdir (dir, "/share");
++         if (t != NULL) {
++             if (debug)
++                 gripe (MAN_NEARBY);
++               
++             add_to_mandirlist (t, perrs);
++             free (t);
++         } else {
++             if (debug)
++                 gripe (NO_MAN_NEARBY);
++         }
++ 
+      }
+  }
   
-  	if (is_directory (newpath) == 1)
-  		return newpath;
-Only in man-db-2.4.3-new/src: manp.c~
diff --git a/pkgs/tools/misc/mc/default.nix b/pkgs/tools/misc/mc/default.nix
new file mode 100644
index 00000000000..8f03756a2d3
--- /dev/null
+++ b/pkgs/tools/misc/mc/default.nix
@@ -0,0 +1,20 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "mc-4.6.1";
+  src = fetchurl {
+    url = "http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/${name}.tar.gz";
+    sha256 = "0zly25mwdn84s0wqx9mzyqi177mm828716nv1n6a4a5cm8yv0sh8";
+  };
+  buildInputs = [pkgconfig glib ncurses libX11 shebangfix perl zip];
+  configureFlags = "--with-screen=ncurses";
+  makeFlags = "UNZIP=unzip";
+  postInstall = ''
+    find $out -iname "*.pl" | xargs shebangfix;
+  '';
+  meta = {
+    description = "File Manager and User Shell for the GNU Project";
+    homepage = http://www.ibiblio.org/mc;
+  };
+}
+
diff --git a/pkgs/tools/misc/mssys/default.nix b/pkgs/tools/misc/mssys/default.nix
new file mode 100644
index 00000000000..a9d32205cea
--- /dev/null
+++ b/pkgs/tools/misc/mssys/default.nix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, gettext}:
+
+stdenv.mkDerivation {
+  name = "ms-sys-2.1.3";
+  
+  src = fetchurl {
+    url = mirror://sourceforge/ms-sys/ms-sys-2.1.3.tgz;
+    md5 = "6fad0a69ac89440ad4f696dbbbf11497";
+  };
+
+  buildInputs = [gettext];
+
+  preBuild = ''
+    makeFlags=(PREFIX=$out)
+  '';
+
+  meta = {
+    homepage = http://ms-sys.sourceforge.net/;
+    license = "GPL";
+    description = "A program for writing Microsoft compatible boot records";
+  };
+}
diff --git a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix
index cffa01b9b95..83beb68151f 100644
--- a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix
+++ b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix
@@ -1,7 +1,7 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 	src = /* put a fetchurl here */
-	fetchcvs {
+	if args ? src then args.src else fetchcvs {
 		url = ":pserver:anonymous@relfs.cvs.sourceforge.net:/cvsroot/relfs";
 		module = "relfs";
 		date = "2007-12-01";
@@ -12,6 +12,7 @@ args : with args;
 			e2fsprogs gnomevfs pkgconfig GConf];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 let build = FullDepEntry ("
 	cd deps 
 	sed -e 's/^CPP/#&/ ; s/^# CPP=gcc/CPP=gcc/' -i Makefile.camlidl
@@ -24,16 +25,16 @@ let build = FullDepEntry ("
 	mkdir -p \$out/bin
 	echo '
 		createuser -A -D \$1
-		dropdb relfs_\$1 ;
-		rm -rf /tmp/relfs-\$1-tmp;
-		mkdir /tmp/relfs-\$1-tmp;
-		USER=\$1 relfs -f -s /tmp/relfs-raskin-tmp  &
-		sleep 1 &&
+		dropdb relfs_\$1 ; 
+		rm -rf /tmp/relfs-\$1-tmp;  
+		mkdir /tmp/relfs-\$1-tmp;  
+		USER=\$1 relfs -f -s /tmp/relfs-raskin-tmp  & 
+		sleep 1 && 
 		kill -15 \${!};
-		rm -rf /tmp/relfs-\$1-tmp ;
-		psql -d relfs_\$1 <<< \"ALTER DATABASE relfs_raskin OWNER TO raskin;
-			ALTER TABLE obj OWNER TO \$1;
-			ALTER TABLE obj_mimetype OWNER TO \$1;
+		rm -rf /tmp/relfs-\$1-tmp ; 
+		psql -d relfs_\$1 <<< \"ALTER DATABASE relfs_raskin OWNER TO raskin; 
+			ALTER TABLE obj OWNER TO \$1; 
+			ALTER TABLE obj_mimetype OWNER TO \$1; 
 			ALTER TABLE membership OWNER TO \$1;\"' > \$out/bin/relfs_grant;
 	chmod a+x \$out/bin/relfs_grant;
 ") [minInit doUnpack addInputs];
@@ -41,7 +42,7 @@ in
 stdenv.mkDerivation rec {
 	name = "relfs-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [build doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [build doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	Relational FS over FUSE.
diff --git a/pkgs/tools/misc/rlwrap/0.28.nix b/pkgs/tools/misc/rlwrap/0.28.nix
new file mode 100644
index 00000000000..695c077ce67
--- /dev/null
+++ b/pkgs/tools/misc/rlwrap/0.28.nix
@@ -0,0 +1,23 @@
+args : with args; with builderDefs {src="";} null;
+	let localDefs = builderDefs {
+		src = /* put a fetchurl here */
+		fetchurl {
+			url = ftp://ftp.chg.ru/mirrors/ftp.freebsd.org/pub/FreeBSD/ports/distfiles/rlwrap-0.28.tar.gz;
+			sha256 = "07jzhcqzb8jsmsscc28dk4md7swnhn3vyai5fpxwdj6a1kbn4y3p";
+		};
+
+		buildInputs = [readline ];
+		configureFlags = [];
+	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
+stdenv.mkDerivation rec {
+	name = "rlwrap-"+version;
+	builder = writeScript (name + "-builder")
+		(textClosure localDefs 
+			[doConfigure doMakeInstall doForceShare doPropagate]);
+	meta = {
+		description = "
+		Readline wrapper for console programs.
+";
+	};
+}
diff --git a/pkgs/tools/misc/shebangfix/default.nix b/pkgs/tools/misc/shebangfix/default.nix
index 94ecc1e00f7..ca4a0004d19 100644
--- a/pkgs/tools/misc/shebangfix/default.nix
+++ b/pkgs/tools/misc/shebangfix/default.nix
@@ -1,20 +1,21 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "shebangfix-0.0";
 
-  buildInputs = [args.perl];
+  buildInputs = [perl];
 
   file = ./shebangfix.pl;
 
   phases = "buildPhase";
 
-  buildPhase = "
-    ensureDir \$out/bin
-    s=\$out/bin/shebangfix
-    cp \$file \$s
-    chmod +x \$s
-    perl \$s \$s
-  ";
+  buildPhase = ''
+    ensureDir $out/bin
+    s=$out/bin/shebangfix
+    cp $file $s
+    chmod +wx $s
+    ls -l $s
+    perl $s $s
+  '';
 
   meta = { description = "replaces the #!executable with $#!correctpath/executable "; };
 }
diff --git a/pkgs/tools/misc/wv/default.nix b/pkgs/tools/misc/wv/default.nix
index 1bf88edef2a..9fe71248e8d 100644
--- a/pkgs/tools/misc/wv/default.nix
+++ b/pkgs/tools/misc/wv/default.nix
@@ -1,15 +1,14 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "wv-1.2.4";
 
-  src = args.
-	fetchurl {
+  src = fetchurl {
 		url = mirror://sourceforge/wvware/wv-1.2.4.tar.gz;
 		sha256 = "1mn2ax6qjy3pvixlnvbkn6ymy6y4l2wxrr4brjaczm121s8hjcb7";
 	};
 
-  buildInputs =(with args; [zlib imagemagick libpng glib
-	pkgconfig libgsf libxml2 bzip2]);
+  buildInputs = [zlib imagemagick libpng glib
+	pkgconfig libgsf libxml2 bzip2];
 
   meta = {
     description = "
diff --git a/pkgs/tools/misc/xclip/default.nix b/pkgs/tools/misc/xclip/default.nix
index 305e38da464..fbf148721ca 100644
--- a/pkgs/tools/misc/xclip/default.nix
+++ b/pkgs/tools/misc/xclip/default.nix
@@ -1,15 +1,15 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "xclip-0.08";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://people.debian.org/~kims/xclip/xclip-0.08.tar.gz;
     sha256 = "0py6ijw7ln892gzxxm2w47nn97nb6psb8g6clkpz86gg706yjxpf";
   };
 
   patchPhase = "sed -i s=/usr/X11R6/bin=/bin=  Makefile";
 
-  buildInputs =(with args; [x11 libXmu]);
+  buildInputs = [x11 libXmu];
 
   installPhase="make install DESTDIR=\$out";
 
diff --git a/pkgs/tools/networking/bsd-finger/default.nix b/pkgs/tools/networking/bsd-finger/default.nix
new file mode 100644
index 00000000000..d627235494b
--- /dev/null
+++ b/pkgs/tools/networking/bsd-finger/default.nix
@@ -0,0 +1,17 @@
+args: with args;
+stdenv.mkDerivation rec {
+	name = "bsd-finger-0.17";
+
+	src = fetchurl {
+		url = "ftp://ftp.metalab.unc.edu/pub/linux/system/network/finger/${name}.tar.gz";
+		sha256 = "1yhkiv0in588il7f84k2xiy78g9lv12ll0y7047gazhiimk5v244";
+	};
+
+	NIX_CFLAGS_COMPILE="-D_GNU_SOURCE";
+
+	patches = [./ubuntu-0.17-9.patch];
+
+	preBuild = "cd finger";
+
+	preInstall = '' ensureDir $out/man/man1 $out/bin '';
+}
diff --git a/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch b/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch
new file mode 100644
index 00000000000..24decb60281
--- /dev/null
+++ b/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch
@@ -0,0 +1,261 @@
+--- bsd-finger-0.17.orig/finger/finger.1
++++ bsd-finger-0.17/finger/finger.1
+@@ -169,16 +169,14 @@
+ must be able to see the
+ .Pa .nofinger
+ file. This generally means that the home directory containing the file
+-must have the other-users-execute bit set (o+w). See
++must have the other-users-execute bit set (o+x). See
+ .Xr chmod 1 .
+ If you use this feature for privacy, please test it with ``finger
+ @localhost'' before relying on it, just in case.
+ .It ~/.plan
+ .It ~/.project
+-.It ~/.pgp
++.It ~/.pgpkey
+ These files are printed as part of a long-format request. The
+-.Pa .project
+-file is limited to one line; the
+ .Pa .plan
+ file may be arbitrarily long.
+ .El
+--- bsd-finger-0.17.orig/finger/finger.c
++++ bsd-finger-0.17/finger/finger.c
+@@ -77,7 +77,7 @@
+ #include "../version.h"
+ 
+ static void loginlist(void);
+-static void userlist(int argc, char *argv[]);
++static int userlist(int argc, char *argv[]);
+ 
+ int lflag, pplan;
+ static int sflag, mflag;
+@@ -92,6 +92,7 @@
+ 
+ int main(int argc, char *argv[]) {
+ 	int ch;
++	int err = 0;
+ 	struct sockaddr_in sin;
+ 	socklen_t slen = sizeof(sin);
+ 
+@@ -159,7 +160,7 @@
+ 		}
+ 	} 
+ 	else {
+-		userlist(argc, argv);
++		err = userlist(argc, argv);
+ 		/*
+ 		 * Assign explicit "large" format if names given and -s not
+ 		 * explicitly stated.  Force the -l AFTER we get names so any
+@@ -172,7 +173,7 @@
+ 		if (lflag) lflag_print();
+ 		else sflag_print();
+ 	}
+-	return 0;
++	return err;
+ }
+ 
+ /* Returns 1 if .nofinger is found and enable_nofinger is set. */
+@@ -181,10 +182,16 @@
+ check_nofinger(struct passwd *pw)
+ {
+ 	if (enable_nofinger) {
+-		char path[PATH_MAX];
+ 		struct stat tripe;
+-		snprintf(path, sizeof(path), "%s/.nofinger", pw->pw_dir);
+-		if (stat(path, &tripe)==0) {
++		int ret;
++		char *path;
++		if (asprintf(&path, "%s/.nofinger", pw->pw_dir) < 0) {
++			eprintf("finger: Out of space.\n");
++			exit(1);
++		}
++		ret = stat(path, &tripe);
++		free(path);
++		if (!ret) {
+ 			return 1;
+ 		}
+ 	}
+@@ -264,10 +271,11 @@
+ 
+ }
+ 
+-static void
++static int
+ userlist(int argc, char *argv[])
+ {
+ 	int i;
++	int err = 0;
+ 	PERSON *pn;
+ 	PERSON *nethead, **nettail;
+ 	struct utmp *uptr;
+@@ -297,13 +305,13 @@
+ 
+ 	/* handle network requests */
+ 	for (pn = nethead; pn; pn = pn->next) {
+-		netfinger(pn->name);
++		err |= netfinger(pn->name);
+ 		if (pn->next || entries)
+ 			xputc('\n');
+ 	}
+ 
+ 	if (entries == 0)
+-		return;
++		return err;
+ 
+ 	/*
+ 	 * Scan thru the list of users currently logged in, saving
+@@ -331,4 +339,6 @@
+ 		enter_lastlog(pn);
+ 	}
+ 	endutent();
++
++	return err;
+ }
+--- bsd-finger-0.17.orig/finger/finger.h
++++ bsd-finger-0.17/finger/finger.h
+@@ -92,7 +92,7 @@
+ void enter_where(struct utmp *ut, PERSON *pn);
+ void enter_lastlog(PERSON *pn);
+ int match(struct passwd *pw, const char *user);
+-void netfinger(const char *name);
++int netfinger(const char *name);
+ const char *prphone(const char *num);
+ 
+ #ifndef DAYSPERNYEAR
+--- bsd-finger-0.17.orig/finger/lprint.c
++++ bsd-finger-0.17/finger/lprint.c
+@@ -48,7 +48,7 @@
+ #include <sys/types.h>
+ #include <sys/file.h>
+ #include <sys/stat.h>
+-#include <sys/time.h>
++#include <time.h>
+ #include "finger.h"
+ 
+ static void lprint(PERSON *pn);
+@@ -100,7 +100,7 @@
+ 	 *	office, office phone, home phone if available
+ 	 */
+ 	xprintf("Login: %-15s\t\t\tName: %s\nDirectory: %-25s",
+-		pn->name, pn->realname, pn->dir);
++		pn->name, pn->realname ? pn->realname : "", pn->dir);
+ 	xprintf("\tShell: %-s\n", *pn->shell ? pn->shell : _PATH_BSHELL);
+ 
+ 	/*
+--- bsd-finger-0.17.orig/finger/net.c
++++ bsd-finger-0.17/finger/net.c
+@@ -51,7 +51,7 @@
+ #include <ctype.h>
+ #include "finger.h"
+ 
+-void netfinger(const char *name) {
++int netfinger(const char *name) {
+ 	register FILE *fp;
+ 	struct in_addr defaddr;
+ 	register int c, sawret, ateol;
+@@ -62,7 +62,7 @@
+ 	char *alist[1], *host;
+ 
+ 	host = strrchr(name, '@');
+-	if (!host) return;
++	if (!host) return 1;
+ 	*host++ = '\0';
+ 
+ 	memset(&sn, 0, sizeof(sn));
+@@ -70,7 +70,7 @@
+ 	sp = getservbyname("finger", "tcp");
+ 	if (!sp) {
+ 		eprintf("finger: tcp/finger: unknown service\n");
+-		return;
++		return 1;
+ 	}
+ 	sn.sin_port = sp->s_port;
+ 
+@@ -78,7 +78,7 @@
+ 	if (!hp) {
+ 		if (!inet_aton(host, &defaddr)) {
+ 			eprintf("finger: unknown host: %s\n", host);
+-			return;
++			return 1;
+ 		}
+ 		def.h_name = host;
+ 		def.h_addr_list = alist;
+@@ -96,7 +96,7 @@
+ 
+ 	if ((s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) {
+ 		eprintf("finger: socket: %s\n", strerror(errno));
+-		return;
++		return 1;
+ 	}
+ 
+ 	/* print hostname before connecting, in case it takes a while */
+@@ -104,7 +104,7 @@
+ 	if (connect(s, (struct sockaddr *)&sn, sizeof(sn)) < 0) {
+ 		eprintf("finger: connect: %s\n", strerror(errno));
+ 		close(s);
+-		return;
++		return 1;
+ 	}
+ 
+ 	/* -l flag for remote fingerd  */
+@@ -128,7 +128,7 @@
+ 	if (!fp) {
+ 		eprintf("finger: fdopen: %s\n", strerror(errno));
+ 		close(s);
+-		return;
++		return 1;
+ 	}
+ 
+ 	sawret = 0;
+@@ -152,4 +152,6 @@
+ 	}
+ 	if (!ateol) xputc('\n');
+ 	fclose(fp);
++
++	return 0;
+ }
+--- bsd-finger-0.17.orig/finger/sprint.c
++++ bsd-finger-0.17/finger/sprint.c
+@@ -40,7 +40,7 @@
+ #endif /* not lint */
+ 
+ #include <sys/types.h>
+-#include <sys/time.h>
++#include <time.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+--- bsd-finger-0.17.orig/finger/util.c
++++ bsd-finger-0.17/finger/util.c
+@@ -64,7 +64,7 @@
+ 	struct stat sb;
+ 
+ 	/* No device for X console. Utmp entry by XDM login (":0"). */
+-	if (w->tty[0] == ':') {
++	if (strchr(w->tty, ':')) {
+ 		w->idletime = 0;  /* would be nice to have it emit ??? */
+ 		w->writable = 0;
+ 		return;
+@@ -109,9 +109,8 @@
+ 	 * fields[3] -> homephone
+ 	 */
+ 	nfields = 0;
+-	for (p = strtok(bp, ","); p; p = strtok(NULL, ",")) {
+-		if (*p==0) p = NULL;  // skip empties
+-		if (nfields < 4) fields[nfields++] = p;
++	while ((p = strsep(&bp, ","))) {
++		if (nfields < 4) fields[nfields++] = *p ? p : NULL;
+ 	}
+ 	while (nfields<4) fields[nfields++] = NULL;
+ 
+@@ -150,6 +149,9 @@
+ 
+ 		pn->realname = rname;
+ 	}
++	else {
++		pn->realname = NULL;
++	}
+ 
+ 	pn->office =      fields[1] ? strdup(fields[1]) : NULL;
+ 	pn->officephone = fields[2] ? strdup(fields[2]) : NULL;
diff --git a/pkgs/tools/networking/dnsmasq/default.nix b/pkgs/tools/networking/dnsmasq/default.nix
index 7b3cd59ba6c..b50cdeadfa3 100644
--- a/pkgs/tools/networking/dnsmasq/default.nix
+++ b/pkgs/tools/networking/dnsmasq/default.nix
@@ -1,16 +1,14 @@
-args:
-args.stdenv.mkDerivation {
+args: with args;
+stdenv.mkDerivation {
   name = "dnsmasq-2.40";
 
-  src = args.fetchurl {
+  src = fetchurl {
     url = http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.40.tar.gz;
     sha256 = "1q346l403rvvmvr14fk2l201p8fl3p5417vkp95zlx00jdb7hl8n";
   };
 
   installPhase = "ensureDir \$out; make DESTDIR=\$out PREFIX=ôônstall"; 
 
-  buildInputs =(with args; []);
-
   meta = { 
       description = "DNS forwarder and DHCP server";
       homepage = http://www.thekelleys.org.uk/dnsmasq/doc.html;
diff --git a/pkgs/tools/networking/lsh/default.nix b/pkgs/tools/networking/lsh/default.nix
new file mode 100644
index 00000000000..087aeddf497
--- /dev/null
+++ b/pkgs/tools/networking/lsh/default.nix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl, gperf, guile, gmp, zlib, liboop, gnum4}:
+
+stdenv.mkDerivation {
+  name = "lsh-2.0.4";
+  src = fetchurl {
+    url = http://www.lysator.liu.se/~nisse/archive/lsh-2.0.4.tar.gz;
+    sha256 = "614b9d63e13ad3e162c82b6405d1f67713fc622a8bc11337e72949d613713091";
+  };
+
+  buildInputs = [gperf guile gmp zlib liboop gnum4];
+
+  meta = {
+    description = "GNU lsh, a GPL'd implementation of the SSH protocol.";
+    homepage = http://www.lysator.liu.se/~nisse/lsh/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/tools/networking/nc6/1.0.nix b/pkgs/tools/networking/nc6/1.0.nix
new file mode 100644
index 00000000000..1a28e3b0cad
--- /dev/null
+++ b/pkgs/tools/networking/nc6/1.0.nix
@@ -0,0 +1,25 @@
+args : with args; with builderDefs {src="";} null;
+let localDefs = builderDefs (rec {
+    src = /* put a fetchurl here */
+    fetchurl {
+      url = ftp://ftp.deepspace6.net/pub/ds6/sources/nc6/nc6-1.0.tar.bz2;
+      sha256 = "01l28zv1yal58ilfnz6albdzqqxzsx3a58vmc14r9gv0bahffdgb";
+    };
+
+    buildInputs = [];
+    configureFlags = [];
+    }) null; /* null is a terminator for sumArgs */
+in with localDefs;
+stdenv.mkDerivation rec {
+  name = "nc6-"+version;
+  builder = writeScript (name + "-builder")
+    (textClosure localDefs 
+     [doConfigure doMakeInstall doForceShare doPropagate]);
+  meta = {
+    description = "
+      nc6 - one more netcat, IPv6 support included.
+    ";
+    homepage = "http://www.deepspace6.net/projects/netcat6.html";
+  };
+}
+
diff --git a/pkgs/tools/networking/ntp/default.nix b/pkgs/tools/networking/ntp/default.nix
index 57d2ee8ab71..f96d14e83c0 100644
--- a/pkgs/tools/networking/ntp/default.nix
+++ b/pkgs/tools/networking/ntp/default.nix
@@ -3,14 +3,14 @@
 assert stdenv.isLinux -> libcap != null;
  
 stdenv.mkDerivation {
-  name = "ntp-4.2.4p3";
+  name = "ntp-4.2.4p4";
   src = fetchurl {
-    url = http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p3.tar.gz;
-    sha256 = "077y1hw6v0qnp3j3w3pcxgsc76waswqhwsbzfj3jqc79jfh65jv9";
+    url = http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p4.tar.gz;
+    sha256 = "0im89i51ap7aqlhxq5isz5xg4h8w8ahwdhir8la3c83h3p47fcmv";
   };
-  configureFlags = "
+  configureFlags = ''
     --without-crypto
     ${if stdenv.isLinux then "--enable-linuxcaps" else ""}
-  ";
+  '';
   buildInputs = if stdenv.isLinux then [libcap] else [];
 }
diff --git a/pkgs/tools/networking/p2p/bittorrent/builder.sh b/pkgs/tools/networking/p2p/bittorrent/builder.sh
index 633f53ebd43..8097995dfbd 100644
--- a/pkgs/tools/networking/p2p/bittorrent/builder.sh
+++ b/pkgs/tools/networking/p2p/bittorrent/builder.sh
@@ -1,5 +1,4 @@
 source $stdenv/setup
-source $makeWrapper
 
 # Workaround for:
 #  File "...-python-2.4.4/lib/python2.4/posixpath.py", line 62, in join
@@ -20,12 +19,9 @@ installPhase() {
 
     # Create wrappers that set the environment correctly.
     for i in $(cd $out/bin && ls); do
-        # Note: the GUI apps except to be in a directory called `bin',
-        # so don't move them. 
-        mv $out/bin/$i $out/bin/.orig-$i
-        makeWrapper $out/bin/.orig-$i $out/bin/$i \
+        wrapProgram $out/bin/$i \
             --set PYTHONPATH "$(toPythonPath $out):$PYTHONPATH"
     done
 }
 
-genericBuild
\ No newline at end of file
+genericBuild
diff --git a/pkgs/tools/networking/p2p/bittorrent/default.nix b/pkgs/tools/networking/p2p/bittorrent/default.nix
index 3894cbd36d4..cfddd48a342 100644
--- a/pkgs/tools/networking/p2p/bittorrent/default.nix
+++ b/pkgs/tools/networking/p2p/bittorrent/default.nix
@@ -6,18 +6,16 @@
 assert gui -> wxPython != null;
 
 stdenv.mkDerivation {
-  name = "bittorrent-5.0.7";
+  name = "bittorrent-5.2.0";
   builder = ./builder.sh;
   
   src = fetchurl {
-    url = http://download.bittorrent.com/dl/BitTorrent-5.0.7.tar.gz;
-    sha256 = "09m2qlhzbc6j1hf6fniri0hh6cy6ccgwi2sph65bpjrc417l94gj";
+    url = http://download.bittorrent.com/dl/BitTorrent-5.2.0.tar.gz;
+    sha256 = "0lg54x5y2k1cb7vpj7hanlnvzqa2k3v24qq0g6fsycjk4n8dky02";
   };
   
-  buildInputs = [python pycrypto twisted]
-    ++ (if gui then [wxPython] else []);
-
-  inherit makeWrapper;
+  buildInputs = [python pycrypto twisted makeWrapper]
+    ++ stdenv.lib.optional gui wxPython;
 
   meta = {
     description = "The original client for the BitTorrent peer-to-peer file sharing protocol";
diff --git a/pkgs/tools/networking/p2p/ktorrent/default.nix b/pkgs/tools/networking/p2p/ktorrent/default.nix
index a28189757b3..0c724f2ca5d 100644
--- a/pkgs/tools/networking/p2p/ktorrent/default.nix
+++ b/pkgs/tools/networking/p2p/ktorrent/default.nix
@@ -3,13 +3,21 @@
 }:
 
 stdenv.mkDerivation {
-  name = "ktorrent-2.2.1";
+  name = "ktorrent-2.2.5";
+  
   src = fetchurl {
-    url = http://ktorrent.pwsp.net/downloads/2.2.1/ktorrent-2.2.1.tar.gz;
-    sha256 = "1wv7y8p21fliys55hcbxgxndz6y7ilr3cqyz99y32sm0v6l7qpyd";
+    url = http://ktorrent.org/downloads/2.2.5/ktorrent-2.2.5.tar.bz2;
+    sha256 = "1rkblfpg4ysg4935i3l22ns553h37rn2flm4rgkqzdf67aq0akkx";
   };
+  
   buildInputs = [
     pkgconfig kdelibs kdelibs.qt xlibs.xlibs zlib libpng libjpeg perl gmp
   ];
+  
   configureFlags = "--without-arts";
+
+  meta = {
+    homepage = http://ktorrent.org/;
+    description = "A BitTorrent client for KDE";
+  };
 }
diff --git a/pkgs/tools/networking/smbfs-fuse/0.8.7.nix b/pkgs/tools/networking/smbfs-fuse/0.8.7.nix
new file mode 100644
index 00000000000..9762358b80e
--- /dev/null
+++ b/pkgs/tools/networking/smbfs-fuse/0.8.7.nix
@@ -0,0 +1,29 @@
+args : with args; with builderDefs {src="";} null;
+	let localDefs = builderDefs {
+		src = /* put a fetchurl here */
+		fetchurl {
+			url = http://www.ricardis.tudelft.nl/~vincent/fusesmb/download/fusesmb-0.8.7.tar.gz;
+			sha256 = "12gz2gn9iqjg27a233dn2wij7snm7q56h97k6gks0yijf6xcnpz1";
+		};
+
+		buildInputs = [samba fuse];
+		configureFlags = [];
+		postInstall = FullDepEntry 
+		(''
+		ensureDir $out/lib
+		ln -fs ${samba}/lib/libsmbclient.so $out/lib/libsmbclient.so.0
+		'')
+		[ "minInit" "defEnsureDir" "doMakeInstall"];
+	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
+stdenv.mkDerivation rec {
+	name = "smbfs-fuse-"+version;
+	builder = writeScript (name + "-builder")
+		(textClosure localDefs 
+			[doConfigure doMakeInstall postInstall doForceShare doPropagate]);
+	meta = {
+		description = "
+		Samba mounted via FUSE.
+";
+	};
+}
diff --git a/pkgs/tools/networking/socat/1.6.0.0.nix b/pkgs/tools/networking/socat/1.6.0.0.nix
new file mode 100644
index 00000000000..1e176f47720
--- /dev/null
+++ b/pkgs/tools/networking/socat/1.6.0.0.nix
@@ -0,0 +1,34 @@
+args : with args; with builderDefs {src="";} null;
+    let localDefs = builderDefs (rec {
+        src = /* put a fetchurl here */
+        fetchurl {
+            url = http://www.dest-unreach.org/socat/download/socat-1.6.0.0.tar.bz2;
+            sha256 = "1j01iazwfr63q71cfcfzrdz8digqlg3ldhlbb72yl5mn9awr0w0m";
+        };
+        patches = [
+          (fetchurl {
+              url = http://www.dest-unreach.org/socat/contrib/socat-servicenames.patch;
+              sha256 = "1r8zd6mk257n01i34i5syxl2k6fr35nlr7bqs9sfc79irjl62z66";
+          })
+          (fetchurl {
+              url = http://www.dest-unreach.org/socat/contrib/socat-maxfds.patch.gz;
+              sha256 = "0fsn0k0qsrdbjbhj09a6kxfsxb7yhxs4cad26znd9naginsj7pxa";
+          })
+        ];
+        buildInputs = [openssl];
+        configureFlags = [];
+    }) null; /* null is a terminator for sumArgs */
+    in with localDefs;
+stdenv.mkDerivation rec {
+    name = "socat-"+version;
+    builder = writeScript (name + "-builder")
+        (textClosure localDefs 
+            [doPatch doConfigure doMakeInstall doForceShare doPropagate]);
+    meta = {
+        description = "
+        Socat, one more analogue of netcat, but not mimicking it.
+	'netcat++' (extended design, new implementation)
+";
+        homepage = "http://www.dest-unreach.org/socat/";
+    };
+}
diff --git a/pkgs/tools/networking/socat/2.0.0-b1.nix b/pkgs/tools/networking/socat/2.0.0-b1.nix
new file mode 100644
index 00000000000..5fb3fee7879
--- /dev/null
+++ b/pkgs/tools/networking/socat/2.0.0-b1.nix
@@ -0,0 +1,25 @@
+args : with args; with builderDefs {src="";} null;
+    let localDefs = builderDefs (rec {
+        src = /* put a fetchurl here */
+        fetchurl {
+            url = http://www.dest-unreach.org/socat/download/socat-2.0.0-b1.tar.bz2;
+            sha256 = "0ybd5fw22icl10r33k987rskh9gvysm1jph90a1pfdjj57cy44fk";
+        };
+        
+        buildInputs = [openssl];
+        configureFlags = [];
+    }) null; /* null is a terminator for sumArgs */
+    in with localDefs;
+stdenv.mkDerivation rec {
+    name = "socat-"+version;
+    builder = writeScript (name + "-builder")
+        (textClosure localDefs 
+            [doPatch doConfigure doMakeInstall doForceShare doPropagate]);
+    meta = {
+        description = "
+        Socat, one more analogue of netcat, but not mimicking it.
+	'netcat++' (extended design, new implementation)
+";
+        homepage = "http://www.dest-unreach.org/socat/";
+    };
+}
diff --git a/pkgs/tools/networking/vpnc/builder.sh b/pkgs/tools/networking/vpnc/builder.sh
new file mode 100644
index 00000000000..ecfabe2eb5e
--- /dev/null
+++ b/pkgs/tools/networking/vpnc/builder.sh
@@ -0,0 +1,9 @@
+source "$stdenv/setup"
+
+tar zxvf "$src" &&
+cd vpnc-*.*
+
+cat config.c |								\
+sed "s|/etc/vpnc/vpnc-script|$out/etc/vpnc/vpnc-script|g" > ,,tmp &&	\
+mv ,,tmp config.c &&							\
+patchPhase && buildPhase && installPhase && fixupPhase && distPhase
diff --git a/pkgs/tools/networking/vpnc/default.nix b/pkgs/tools/networking/vpnc/default.nix
new file mode 100644
index 00000000000..c11a4721cb7
--- /dev/null
+++ b/pkgs/tools/networking/vpnc/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, libgcrypt, perl}:
+
+stdenv.mkDerivation {
+  name = "vpnc-0.5.1";
+  src = fetchurl {
+    url = http://www.unix-ag.uni-kl.de/~massar/vpnc/vpnc-0.5.1.tar.gz;
+    sha256 = "f63660bd020bbe6a39e8eb67ad60c54d719046c6198a6834371d098947f9a2ed";
+  };
+
+  patches = [ ./makefile.patch ];
+
+  buildInputs = [libgcrypt perl];
+  builder = ./builder.sh;
+
+  meta = {
+    description = "VPNC, a virtual private network (VPN) client for Cisco's VPN concentrators";
+    homepage = http://www.unix-ag.uni-kl.de/~massar/vpnc/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/tools/networking/vpnc/makefile.patch b/pkgs/tools/networking/vpnc/makefile.patch
new file mode 100644
index 00000000000..89a8cd6da95
--- /dev/null
+++ b/pkgs/tools/networking/vpnc/makefile.patch
@@ -0,0 +1,22 @@
+--- vpnc-0.5.1.orig/Makefile	2008-02-10 22:22:43.000000000 +0100
++++ vpnc-0.5.1/Makefile	2008-02-10 22:22:32.000000000 +0100
+@@ -20,8 +20,8 @@
+ # $Id: Makefile 236 2007-09-05 20:40:59Z Joerg Mayer $
+ 
+ DESTDIR=
+-PREFIX=/usr/local
+-ETCDIR=/etc/vpnc
++PREFIX=$(out)
++ETCDIR=$(out)/etc/vpnc
+ BINDIR=$(PREFIX)/bin
+ SBINDIR=$(PREFIX)/sbin
+ MANDIR=$(PREFIX)/share/man
+@@ -71,7 +71,7 @@
+ 	$(CC) -o $@ $^ $(LDFLAGS)
+ 
+ vpnc.8 : vpnc.8.template makeman.pl vpnc
+-	./makeman.pl
++	perl makeman.pl
+ 
+ cisco-decrypt : cisco-decrypt.o config.o supp.o sysdep.o vpnc-debug.o
+ 	$(CC) -o $@ $^ $(LDFLAGS)
diff --git a/pkgs/tools/networking/wget/default.nix b/pkgs/tools/networking/wget/1.10.2.nix
index 8817466432d..8817466432d 100644
--- a/pkgs/tools/networking/wget/default.nix
+++ b/pkgs/tools/networking/wget/1.10.2.nix
diff --git a/pkgs/tools/networking/wget/1.11.nix b/pkgs/tools/networking/wget/1.11.nix
new file mode 100644
index 00000000000..c7295f1df94
--- /dev/null
+++ b/pkgs/tools/networking/wget/1.11.nix
@@ -0,0 +1,16 @@
+args: with args;
+
+stdenv.mkDerivation rec {
+  name = "wget-" + version;
+  src = fetchurl {
+    url = "mirror://gnu/wget/${name}.tar.bz2";
+    sha256 = "0mhd3181zdp1fwirxw0km7502sfvjmm1ncska9w6s2drczf37aix";
+  };
+
+  buildInputs = [gettext];
+
+  meta = {
+    description = "A console downloading program. Has some features for mirroring sites.";
+    homepage = http://www.gnu.org/software/wget;
+  };
+}
diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix
index 51bcb9ef298..1a507f20a04 100644
--- a/pkgs/tools/package-management/nix/unstable.nix
+++ b/pkgs/tools/package-management/nix/unstable.nix
@@ -3,22 +3,23 @@
 , stateDir ? "/nix/var"
 }:
 
-let version = "0.12pre10069"; in
+let version = "0.12pre10505"; in
 
 stdenv.mkDerivation {
   name = "nix-${version}";
   
   src = fetchurl {
     url = "http://nix.cs.uu.nl/dist/nix/nix-${version}/nix-${version}.tar.bz2";
-    md5 = "bf05ebe9463f0453beae2c43f05ac13d";
+    md5 = "44dd2927ce97f12b3f110a7ad991828e";
   };
 
   buildInputs = [perl curl openssl];
 
-  configureFlags = "
+  configureFlags = ''
     --with-store-dir=${storeDir} --localstatedir=${stateDir}
     --with-aterm=${aterm} --with-bdb=${db4} --with-bzip2=${bzip2}
-    --disable-init-state";
+    --disable-init-state
+  '';
 
   meta = {
     description = "The Nix Deployment System";
diff --git a/pkgs/tools/package-management/snix/default.nix b/pkgs/tools/package-management/snix/default.nix
new file mode 100644
index 00000000000..caf852de4e2
--- /dev/null
+++ b/pkgs/tools/package-management/snix/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, fetchurl, aterm, db4, perl, curl, bzip2, openssl ? null
+
+, ext3cowtools, e3cfsprogs, rsync
+#, libtool, docbook5, docbook5-xsl, flex, bison
+
+, ext3cow_kernel
+
+, storeDir ? "/nix/store"
+, stateDir ? "/nix/var"
+, nixStoreStateDir ? "/nix/state"
+}:
+
+stdenv.mkDerivation {
+  name = "snix-0.12rev9419";
+  
+  src = fetchurl {
+    url = http://www.denbreejen.net/public/nix/snix-0.12rev9419.tar.gz;
+    sha256 = "fe7c06a8c41f6c9c94898a5fd690ed76da397012ea4c624adac9029b23c88a1c";
+  };
+  
+  buildInputs = [perl curl openssl rsync];
+
+  configureFlags = "
+    --with-store-dir=${storeDir} --localstatedir=${stateDir}
+    --with-aterm=${aterm} --with-bdb=${db4} --with-bzip2=${bzip2}
+    --disable-init-state
+    --with-store-state-dir=${nixStoreStateDir}
+    --with-ext3cow-header=${ext3cow_kernel}/lib/modules/2.*/build/include/linux/ext3cow_fs.h
+    --with-rsync=${rsync}/bin/rsync";
+
+  meta = {
+    description = "The SNix Deployment System (Nix extended to handle state)";
+    homepage = http://nix.cs.uu.nl/;
+    license = "LGPL";
+  };
+}
diff --git a/pkgs/tools/security/gnupg2/default.nix b/pkgs/tools/security/gnupg2/default.nix
new file mode 100644
index 00000000000..f6e22bec51d
--- /dev/null
+++ b/pkgs/tools/security/gnupg2/default.nix
@@ -0,0 +1,16 @@
+args: with args;
+stdenv.mkDerivation {
+  name = "gnupg-2.0.8";
+  src = fetchurl {
+    url = ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/gnupg-2.0.8.tar.bz2;
+    sha256 = "04v9s92xph1hrhac49yyrgzdwjqshs2zawvjbi3jc2klwjpi1wqn";
+  };
+  buildInputs = [ readline openldap bzip2 zlib libgpgerror pth libgcrypt
+    libassuan libksba libusb curl ];
+
+  meta = {
+    description = "A free implementation of the OpenPGP standard for encrypting
+	and signing data, v2";
+    homepage = http://www.gnupg.org/;
+  };
+}
diff --git a/pkgs/tools/system/cron/default.nix b/pkgs/tools/system/cron/default.nix
index 066f594ea84..4d7dcb93db2 100644
--- a/pkgs/tools/system/cron/default.nix
+++ b/pkgs/tools/system/cron/default.nix
@@ -10,7 +10,7 @@ stdenv.mkDerivation {
   unpackCmd = "(mkdir cron && cd cron && sh $src)";
 
   preBuild = "
-    substituteInPlace Makefile --replace '-o root' '' --replace 111 755
+    substituteInPlace Makefile --replace ' -o root' ' ' --replace 111 755
     makeFlags=\"DESTROOT=$out\"
   ";
 
diff --git a/pkgs/tools/system/gdmap/0.7.5.nix b/pkgs/tools/system/gdmap/0.7.5.nix
index 354ebb966a1..062f63566a6 100644
--- a/pkgs/tools/system/gdmap/0.7.5.nix
+++ b/pkgs/tools/system/gdmap/0.7.5.nix
@@ -1,5 +1,5 @@
 args : with args;
-	with builderDefs {
+	let localDefs = builderDefs {
 		src = /* put a fetchurl here */
 		fetchurl {
 			url = http://dfn.dl.sourceforge.net/sourceforge/gdmap/gdmap-0.7.5.tar.gz;
@@ -9,10 +9,11 @@ args : with args;
 		buildInputs = [gtk pkgconfig libxml2 intltool];
 		configureFlags = [];
 	} null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "gdmap"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [doConfigure doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	Recursive rectangle map of disk usage.	
diff --git a/pkgs/tools/system/pciutils/default.nix b/pkgs/tools/system/pciutils/default.nix
index 84bd24195ce..5dd67574777 100644
--- a/pkgs/tools/system/pciutils/default.nix
+++ b/pkgs/tools/system/pciutils/default.nix
@@ -1,16 +1,16 @@
 {stdenv, fetchurl, zlib}:
 
 stdenv.mkDerivation {
-  name = "pciutils-2.2.5";
+  name = "pciutils-2.2.8";
   builder = ./builder.sh;
   src = fetchurl {
-    url = mirror://kernel/software/utils/pciutils/pciutils-2.2.5.tar.bz2;
-    sha256 = "1zlamdax1i8cf3kvzg7dh7nshvvzlhvkwlxdmym0hbnmbf0p100p";
+    url = mirror://kernel/software/utils/pciutils/pciutils-2.2.8.tar.bz2;
+    sha256 = "0hgri2ancnjl56ld2flb9w606dyvr5gly8gsz3bzl71r8s464qsq";
   };
   buildInputs = [zlib];
 
   pciids = fetchurl {
-    url = http://nix.cs.uu.nl/dist/tarballs/pci.ids.20070226.bz2;
-    sha256 = "1wrpq4dxm03v5jvvdlvwl8nrkj3hspgifkw5czmd647lzikp13qc";
+    url = http://nix.cs.uu.nl/dist/tarballs/pci.ids.20080118.bz2;
+    sha256 = "0dl6psdac62llbklxn4dvkzbw1j1sdadw9i4l36vpd6mvqa7lz0a";
   };
 }
diff --git a/pkgs/tools/system/which/default.nix b/pkgs/tools/system/which/default.nix
index 482d495ba83..b6c35c4fbf1 100644
--- a/pkgs/tools/system/which/default.nix
+++ b/pkgs/tools/system/which/default.nix
@@ -1,9 +1,11 @@
-{stdenv, fetchurl}: stdenv.mkDerivation {
-  name = "which-2.17";
+{stdenv, fetchurl, readline}: stdenv.mkDerivation {
+  name = "which-2.19";
   src = fetchurl {
-    url = http://ftp.gnu.org/gnu/which/which-2.17.tar.gz;
-    sha256 = "1nnnbn83da8481blmcyv96gm15ccsilr93fmgmwdlzj8a72fjvqp";
+    url = mirror://gnu/which/which-2.19.tar.gz;
+    sha256 = "0lnd8mfpc0r1r2ch54vl3vc6r0fnzfl33sqdda2aq62iyrsbhybx";
   };
+
+  buildInputs = [readline];
 }
 
 
diff --git a/pkgs/tools/text/diffutils/default.nix b/pkgs/tools/text/diffutils/default.nix
index 3c0d5479ec5..44b7715607c 100644
--- a/pkgs/tools/text/diffutils/default.nix
+++ b/pkgs/tools/text/diffutils/default.nix
@@ -2,10 +2,17 @@
 
 stdenv.mkDerivation {
   name = "diffutils-2.8.1";
+  
   src = fetchurl {
     url = mirror://gnu/diffutils/diffutils-2.8.1.tar.gz;
     md5 = "71f9c5ae19b60608f6c7f162da86a428";
   };
+  
   /* If no explicit coreutils is given, use the one from stdenv. */
   buildInputs = [coreutils];
+
+  meta = {
+    homepage = http://www.gnu.org/software/diffutils/diffutils.html;
+    description = "Commands for showing the differences between files (diff, cmp, etc.)";
+  };
 }
diff --git a/pkgs/tools/text/gawk/default.nix b/pkgs/tools/text/gawk/default.nix
index b50b3aa9bd0..10dd08214af 100644
--- a/pkgs/tools/text/gawk/default.nix
+++ b/pkgs/tools/text/gawk/default.nix
@@ -2,8 +2,14 @@
 
 stdenv.mkDerivation {
   name = "gawk-3.1.6";
+  
   src = fetchurl {
     url = mirror://gnu/gawk/gawk-3.1.6.tar.bz2;
     sha256 = "0v6ba4hxfiiy3bny5japd3zmzxlh8vdkmswk96yngd6i1dddsgsi";
   };
+
+  meta = {
+    homepage = http://www.gnu.org/software/gawk/;
+    description = "GNU implementation of the AWK programming language";
+  };
 }
diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix
index 6979e4a1b01..9b36dad6cfe 100644
--- a/pkgs/tools/text/gnugrep/default.nix
+++ b/pkgs/tools/text/gnugrep/default.nix
@@ -2,9 +2,16 @@
 
 stdenv.mkDerivation {
   name = "gnugrep-2.5.3";
+  
   src = fetchurl {
     url = http://nix.cs.uu.nl/dist/tarballs/grep-2.5.3-with-info.tar.bz2;
     sha256 = "0rg9dipksqzbg8v1xalib1n3xkkycc5r1l2gb9cxy1cz3cjip5l8";
   };
+  
   buildInputs = [pcre];
+
+  meta = {
+    homepage = http://www.gnu.org/software/grep/;
+    description = "GNU implementation of the Unix grep command";
+  };
 }
diff --git a/pkgs/tools/text/gnused/default.nix b/pkgs/tools/text/gnused/default.nix
index c70cf022570..2425147688b 100644
--- a/pkgs/tools/text/gnused/default.nix
+++ b/pkgs/tools/text/gnused/default.nix
@@ -2,10 +2,17 @@
 
 stdenv.mkDerivation {
   name = "gnused-4.1.5";
+  
   src = fetchurl {
     url = mirror://gnu/sed/sed-4.1.5.tar.gz;
     md5 = "7a1cbbbb3341287308e140bd4834c3ba";
   };
+  
   # !!! hack: this should go away in gnused > 4.1.5
   patches = [./gettext-fix.patch];
+
+  meta = {
+    homepage = http://www.gnu.org/software/grep/;
+    description = "GNU implementation of the Unix sed command";
+  };
 }
diff --git a/pkgs/tools/text/replace/default.nix b/pkgs/tools/text/replace/default.nix
index 3135204ef03..ca96309e40e 100644
--- a/pkgs/tools/text/replace/default.nix
+++ b/pkgs/tools/text/replace/default.nix
@@ -1,4 +1,5 @@
 {stdenv, fetchurl}:
+
 stdenv.mkDerivation {
   name = "replace-2.24";
 
@@ -7,14 +8,12 @@ stdenv.mkDerivation {
     sha256 = "1c2nkxx83vmlh1v3ib6r2xqh121gdb1rharwsimcb2h0xwc558dm";
   };
 
-  buildInputs = [];
-  makeFlags = " TREE=\$(out) ";
+  makeFlags = "TREE=\$(out)";
 
   postInstall = "mv \$out/bin/replace \$out/bin/replace-literal";
 
   meta = {
-    description = "
-	Replace verbatim strings. Sed is not fit to do it. Replace is.
-";
+    homepage = http://replace.richardlloyd.org.uk/;
+    description = "A tool to replace verbatim strings";
   };
 }
diff --git a/pkgs/tools/typesetting/lhs2tex/default.nix b/pkgs/tools/typesetting/lhs2tex/default.nix
index fc0ce40f8e5..f071f67fe97 100644
--- a/pkgs/tools/typesetting/lhs2tex/default.nix
+++ b/pkgs/tools/typesetting/lhs2tex/default.nix
@@ -3,12 +3,12 @@
 assert tetex == polytable.tetex;
 
 stdenv.mkDerivation {
-  name = "lhs2tex-1.12";
+  name = "lhs2tex-1.13pre3";
   builder = ./builder.sh;
   
   src = fetchurl {
-    url = http://www.informatik.uni-bonn.de/~loeh/lhs2tex/lhs2tex-1.12.tar.bz2;
-    md5 = "1bc982e96f19201aaf1c39c1d4b5e358";
+    url = "http://www.cs.uu.nl/~andres/lhs2tex/lhs2tex-1.13pre3.tar.bz2";
+    sha256 = "8ddc9bd150c20c33518d747fee95577ec8f587146532cda12b8034adc847826c";
   };
 
   buildInputs = [tetex ghc];
diff --git a/pkgs/tools/typesetting/lout/builder.sh b/pkgs/tools/typesetting/lout/builder.sh
new file mode 100755
index 00000000000..28788fc5227
--- /dev/null
+++ b/pkgs/tools/typesetting/lout/builder.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Prepare a makefile specifying the appropriate output directories.
+#
+# Written by Ludovic Courtès <ludo@gnu.org>.
+
+source "$stdenv/setup" || exit 1
+
+nixMakefile="nix-makefile"
+
+# Build and install documentation, PS and PDF.
+installDoc ()
+{
+  echo "building and installing documentation..."
+  for doc in design expert slides user
+  do
+    echo "building \`$doc' document..."
+    if [ ! -f "doc/$doc/outfile.ps" ]
+    then
+      ( PATH="$PWD:$PATH" ;				\
+        cd "doc/$doc" && lout -r4 -o outfile.ps all )	\
+      || return 1
+    fi
+    cp "doc/$doc/outfile.ps" "$out/doc/lout/$doc.ps" &&		\
+    ps2pdf "doc/$doc/outfile.ps" "$out/doc/lout/$doc.pdf"
+  done
+
+  return 0
+}
+
+unpackPhase &&									\
+cd lout-*.* &&									\
+cat makefile |									\
+  sed -e "s|^PREFIX[[:blank:]]*=.*\$|PREFIX = $out|g ;				\
+          s|^LOUTLIBDIR[[:blank:]]*=.*$|LOUTLIBDIR = \$(PREFIX)/lib/lout|g ;	\
+	  s|^LOUTDOCDIR[[:blank:]]*=.*$|LOUTDOCDIR = \$(PREFIX)/doc/lout|g ;	\
+	  s|^MANDIR[[:blank:]]*=.*$|MANDIR = \$(PREFIX)/man|g"			\
+  > "$nixMakefile" &&								\
+mkdir -p "$out/bin" && mkdir -p "$out/lib"					\
+mkdir -p "$out/man" && mkdir -p "$out/doc/lout" &&				\
+make -f "$nixMakefile" install installman &&					\
+installDoc
diff --git a/pkgs/tools/typesetting/lout/default.nix b/pkgs/tools/typesetting/lout/default.nix
new file mode 100644
index 00000000000..e36cc9ad303
--- /dev/null
+++ b/pkgs/tools/typesetting/lout/default.nix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, ghostscript}:
+
+stdenv.mkDerivation {
+  name = "lout-3.36";
+  src = fetchurl {
+    url = ftp://ftp.cs.usyd.edu.au/jeff/lout/lout-3.36.tar.gz;
+    sha256 = "b689cbe12074be8817c90070b162593fc9cc51f2f8868701833ff599b24fd4ad";
+  };
+
+  buildInputs = [ ghostscript ];
+  builder = ./builder.sh;
+
+  meta = {
+    description = ''Lout is a document layout system, similar in functionality
+    		    to TeX/LaTeX, but based on a purely functional programming
+		    language.  It can produce PostScript output.'';
+    homepage = http://www.cs.usyd.edu.au/~jeff/;
+    license = "GPL";
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 4e8de1db2fa..5a207434202 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -119,16 +119,49 @@ rec {
   # inside the set for derivations.
   recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;};
 
-  useFromStdenv = hasIt: it: alternative: if hasIt then it else alternative;
-
-  lib = library;
-
-  library = import ../lib;
-  lib_unstable = import ../lib/default-unstable.nix;
+  useFromStdenv = it : alternative : if (builtins.hasAttr it stdenv) then
+    (builtins.getAttr it stdenv) else alternative;
+
+  lib = import ../lib;
+
+  annotatedDerivations = (import ../lib/annotatedDerivations.nix) { inherit lib; };
+
+  # optional srcDir
+  annotatedWithSourceAndTagInfo = x : (x ? sourceWithTags);
+
+  # example arguments see annotatedGhcCabalDerivation
+  # tag command must create file named $TAG_FILE
+  sourceWithTagsDerivation = args: with args; 
+    let createTagFiles = (lib.maybeAttr "createTagFiles" [] args ); in
+  stdenv.mkDerivation {
+    phases = "unpackPhase buildPhase";
+    inherit (args) src name;
+    srcDir = (lib.maybeAttr "srcDir" "." args);
+    # using separate tag directory so that you don't have to glob that much files when starting your editor
+    # is this a good choice?
+    buildPhase = "
+      SRC_DEST=\$out/src/\$name
+      t=\$out/tags/\$name
+      ensureDir \$SRC_DEST \$t
+      cp -r \$srcDir \$SRC_DEST"
+      + lib.defineShList "sh_list_names" (lib.catAttrs "name" createTagFiles)
+      + lib.defineShList "sh_list_cmds" (lib.catAttrs "tagCmd" createTagFiles)
+      + "cd \$SRC_DEST
+      for a in `seq 0 \${#sh_list}`; do
+          TAG_FILE=\"\$SRC_DEST/\"\${sh_list_names[\$a]}
+          cmd=\"\${sh_list_cmds[\$a]}\"
+          echo running tag cmd \"\$cmd\" in `pwd`
+          eval \"\$cmd\";
+          ln -s \$TAG_FILE \"\$t/\"\${sh_list_names[\$a]}
+       done
+    ";
+  };
+  # example usage
+  testSourceWithTags = sourceWithTagsDerivation (ghc68_extra_libs ghcsAndLibs.ghc68).mtl.sourceWithTags;
 
   # Return an attribute from the Nixpkgs configuration file, or
   # a default value if the attribute doesn't exist.
-  getConfig = attrPath: default: library.getAttr attrPath default config;
+  getConfig = attrPath: default: lib.getAttr attrPath default config;
 
   # Return user-choosen version of given package. If you define package as
   #
@@ -149,9 +182,8 @@ rec {
 
   # The same, another syntax.
   # Warning: syntax for configuration.nix changed too
-  useVersion = name: f: f
-  {
-	  version = getConfig [ "environment" "versions" name ];
+  useVersion = name: f: f {
+    version = getConfig [ "environment" "versions" name ];
   };
 
   # The contents of the configuration file found at $NIXPKGS_CONFIG or
@@ -199,7 +231,7 @@ rec {
     args: with args.lib; with args;
     if ( builtins.isAttrs extraAttrs ) then builtins.throw "the argument extraAttrs needs to be a function beeing passed co, but attribute set passed "
     else
-    let co = lib_unstable.chooseOptionsByFlags { inherit args flagConfig optionals defaults collectExtraPhaseActions; }; in
+    let co = lib.chooseOptionsByFlags { inherit args flagConfig optionals defaults collectExtraPhaseActions; }; in
       args.stdenv.mkDerivation ( 
       {
         inherit (co) configureFlags buildInputs /*flags*/;
@@ -212,11 +244,11 @@ rec {
 			(import ../build-support/checker) 
 			opts config); in
 			(if (result=="") then x else
-			abort result)
+			abort ("Unknown option specified: " + result))
 		else x);
 
 	builderDefs = lib.sumArgs (import ./builder-defs.nix) {
-		inherit stringsWithDeps lib stdenv writeScript;
+		inherit stringsWithDeps lib stdenv writeScript fetchurl;
 	};
 
 	stringsWithDeps = import ../lib/strings-with-deps.nix {
@@ -226,7 +258,15 @@ rec {
   # Call a specific version of a Nix expression, that is,
   # `selectVersion ./foo {version = "0.1.2"; args...}' evaluates to
   # `import ./foo/0.1.2.nix args'.
-  selectVersion = dir: args: import (dir + "/${args.version}.nix") args;
+  selectVersion = dir: defVersion: args:
+    let
+      pVersion =
+        if (args ? version && args.version != "") then
+          args.version
+        else
+          getConfig [ (baseNameOf (toString dir)) "version" ] defVersion;
+    in
+      import (dir + "/${pVersion}.nix") (args // { version = pVersion; });
         
         
   ### STANDARD ENVIRONMENT
@@ -248,6 +288,7 @@ rec {
         }
       else defaultStdenv;
 
+
   ### BUILD SUPPORT
 
 
@@ -275,12 +316,17 @@ rec {
 
   # Allow the stdenv to determine fetchurl, to cater for strange
   # requirements.
-  fetchurl = useFromStdenv (stdenv ? fetchurl) stdenv.fetchurl
+  fetchurl = useFromStdenv "fetchurl"
     (import ../build-support/fetchurl {
       inherit stdenv curl;
     });
 
-  makeWrapper = ../build-support/make-wrapper/make-wrapper.sh;
+  makeSetupHook = script: runCommand "hook" {} ''
+    ensureDir $out/nix-support
+    cp ${script} $out/nix-support/setup-hook
+  '';
+
+  makeWrapper = makeSetupHook ../build-support/make-wrapper/make-wrapper.sh;
 
   # Run the shell command `buildCommand' to produce a store object
   # named `name'.  The attributes in `env' are added to the
@@ -297,9 +343,7 @@ rec {
   writeScript = name: text: runCommand name {inherit text;} "echo -n \"$text\" > $out; chmod +x $out";
  
   writeScriptBin = name: text: runCommand name {inherit text;} "mkdir -p \$out/bin; echo -n \"\$text\" > \$out/bin/\$name ; chmod +x \$out/bin/\$name";
-
-  stdenvNewSetupScript = stdenv;
-
+ 
   substituteAll = import ../build-support/substitute/substitute-all.nix {
     inherit stdenv;
   };
@@ -307,6 +351,7 @@ rec {
   nukeReferences = import ../build-support/nuke-references/default.nix {
     inherit stdenv;
   };
+  
 
   ### TOOLS
 
@@ -319,6 +364,12 @@ rec {
     inherit fetchurl stdenv zlib wxGTK;
   };
 
+  avahi = selectVersion ../development/libraries/avahi "0.6.22" {
+    inherit stdenv fetchurl pkgconfig libdaemon dbus perl perlXMLParser qt4
+      python expat;
+    inherit (gtkLibs) glib gtk;
+  };
+
   axel = import ../tools/networking/axel {
     inherit fetchurl stdenv;
   };
@@ -349,7 +400,7 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  bzip2 = useFromStdenv (stdenv ? bzip2) stdenv.bzip2
+  bzip2 = useFromStdenv "bzip2"
     (import ../tools/compression/bzip2 {
       inherit fetchurl stdenv;
     });
@@ -366,7 +417,7 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  coreutils = useFromStdenv (stdenv ? coreutils) stdenv.coreutils
+  coreutils = useFromStdenv "coreutils"
     ((if stdenv ? isDietLibC
       then import ../tools/misc/coreutils-5
       else import ../tools/misc/coreutils)
@@ -398,11 +449,19 @@ rec {
     inherit fetchurl stdenv groff nettools coreutils iputils gnused bash;
   };
 
-  diffutils = useFromStdenv (stdenv ? diffutils) stdenv.diffutils
+  diffutils = useFromStdenv "diffutils"
     (import ../tools/text/diffutils {
       inherit fetchurl stdenv coreutils;
     });
 
+  dosfstoolsFun = lib.sumArgs (selectVersion ../tools/misc/dosfstools)
+  {
+    inherit builderDefs;
+    version = "2.11deb";
+  };
+
+  dosfstools = dosfstoolsFun null;
+
   ed = import ../tools/text/ed {
     inherit fetchurl stdenv;
   };
@@ -429,7 +488,7 @@ rec {
     qt = qt3;
   };
 
-  findutils = useFromStdenv (stdenv ? findutils) stdenv.findutils
+  findutils = useFromStdenv "findutils"
     (if system == "i686-darwin" then findutils4227 else
       import ../tools/misc/findutils {
         inherit fetchurl stdenv coreutils;
@@ -444,25 +503,27 @@ rec {
     inherit stdenv findutils;
   }));
 
+  finger_bsd = import ../tools/networking/bsd-finger {
+	  inherit fetchurl stdenv;
+  };
+
   fontforge = import ../tools/misc/fontforge {
     inherit fetchurl stdenv gettext freetype zlib
       libungif libpng libjpeg libtiff libxml2;
   };
 
-  gawk = useFromStdenv (stdenv ? gawk) stdenv.gawk
+  gawk = useFromStdenv "gawk"
     (import ../tools/text/gawk {
       inherit fetchurl stdenv;
     });
 
-  gdmapFun = lib.sumArgs (selectVersion ../tools/system/gdmap) {
+  gdmapFun = lib.sumArgs (selectVersion ../tools/system/gdmap "0.7.5") {
     inherit stdenv fetchurl builderDefs pkgconfig libxml2
       intltool;
     inherit (gtkLibs) gtk;
   };
 
-  gdmap = gdmapFun {
-  	version = "0.7.5";
-  } null;
+  gdmap = gdmapFun null;
 
   getopt = import ../tools/misc/getopt {
     inherit fetchurl stdenv;
@@ -473,12 +534,12 @@ rec {
     inherit (xlibs) libXext;
   };
 
-  gnugrep = useFromStdenv (stdenv ? gnugrep) stdenv.gnugrep
+  gnugrep = useFromStdenv "gnugrep"
     (import ../tools/text/gnugrep {
       inherit fetchurl stdenv pcre;
     });
 
-  gnupatch = useFromStdenv (stdenv ? patch) stdenv.patch (import ../tools/text/gnupatch {
+  gnupatch = useFromStdenv "patch" (import ../tools/text/gnupatch {
     inherit fetchurl stdenv;
   });
 
@@ -487,6 +548,11 @@ rec {
     ideaSupport = true; # enable for IDEA crypto support
   };
 
+  gnupg2 = import ../tools/security/gnupg2 {
+	  inherit fetchurl stdenv readline openldap bzip2 zlib libgpgerror pth
+	    libgcrypt libassuan libksba libusb curl;
+  };
+
   gnuplot = import ../tools/graphics/gnuplot {
     inherit fetchurl stdenv zlib gd texinfo;
   };
@@ -497,7 +563,7 @@ rec {
     x11Support = true;
   };
 
-  gnused = useFromStdenv (stdenv ? gnused) stdenv.gnused
+  gnused = useFromStdenv "gnused"
     (import ../tools/text/gnused {
       inherit fetchurl stdenv;
     });
@@ -506,7 +572,7 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  gnutar = useFromStdenv (stdenv ? gnutar) stdenv.gnutar
+  gnutar = useFromStdenv "gnutar"
     (import ../tools/archivers/gnutar {
       inherit fetchurl stdenv;
     });
@@ -537,7 +603,7 @@ rec {
     inherit (gtkLibs) glib gtk;
   };
 
-  gzip = useFromStdenv (stdenv ? gzip) stdenv.gzip
+  gzip = useFromStdenv "gzip"
     (import ../tools/compression/gzip {
       inherit fetchurl stdenv;
     });
@@ -550,17 +616,13 @@ rec {
     inherit fetchurl stdenv ocaml;
   };
 
-  /*hyppocampusFun = lib.sumArgs ( selectVersion ../tools/misc/hyppocampus ) {
+  /*hyppocampusFun = lib.sumArgs ( selectVersion ../tools/misc/hyppocampus "0.3rc1") {
     inherit builderDefs stdenv fetchurl libdbi libdbiDrivers fuse
       pkgconfig perl gettext dbus dbus_glib pcre libscd;
     inherit (gtkLibs) glib;
     bison = bison23;
     flex = flex2533;
-  };
-
-  hyppocampus = hyppocampusFun {
-    version = "0.3rc1";
-  } null;*/
+  };*/
 
   jdiskreport = import ../tools/misc/jdiskreport {
     inherit fetchurl stdenv unzip jdk;
@@ -595,7 +657,23 @@ rec {
     inherit fetchurl stdenv ghc tetex polytable;
   };
 
+  lout = import ../tools/typesetting/lout {
+    inherit fetchurl stdenv ghostscript;
+  };
+
+  lzma = import ../tools/compression/lzma {
+    inherit fetchurl stdenv;
+  };
+
+  lsh = import ../tools/networking/lsh {
+    inherit stdenv fetchurl gperf guile gmp zlib liboop gnum4;
+  };
+
   man = import ../tools/misc/man {
+     inherit fetchurl stdenv groff less;
+  };
+
+  man_db = import ../tools/misc/man-db {
      inherit fetchurl stdenv db4 groff;
   };
 
@@ -603,6 +681,12 @@ rec {
      inherit fetchurl stdenv;
   };
 
+  mc = import ../tools/misc/mc {
+     inherit fetchurl stdenv pkgconfig ncurses shebangfix perl zip;
+     inherit (gtkLibs) glib;
+     inherit (xlibs) libX11;
+  };
+
   mjpegtools = import ../tools/video/mjpegtools {
     inherit fetchurl stdenv libjpeg;
     inherit (xlibs) libX11;
@@ -612,6 +696,16 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  mssys = import ../tools/misc/mssys {
+    inherit fetchurl stdenv gettext;
+  };
+
+  nc6Fun = lib.sumArgs (selectVersion ../tools/networking/nc6 "1.0") {
+    inherit builderDefs;
+  };
+
+  nc6 = nc6Fun null;
+
   ncat = import ../tools/networking/ncat {
     inherit fetchurl stdenv openssl;
   };
@@ -685,15 +779,13 @@ rec {
     zlibSupport = !stdenv ? isDietLibC;
   };
 
-  relfsFun = lib.sumArgs (selectVersion ../tools/misc/relfs) {
+  relfsFun = lib.sumArgs (selectVersion ../tools/misc/relfs "cvs.2007.12.01") {
     inherit fetchcvs stdenv ocaml postgresql fuse pcre
       builderDefs e2fsprogs pkgconfig;
     inherit (gnome) gnomevfs GConf;
   };
 
-  relfs = relfsFun {
-    version = "cvs.2007.12.01";
-  } null;
+  relfs = relfsFun null;
 
   replace = import ../tools/text/replace {
     inherit fetchurl stdenv;
@@ -706,6 +798,12 @@ rec {
   };
   */
 
+  rlwrapFun = lib.sumArgs (selectVersion ../tools/misc/rlwrap "0.28") {
+    inherit builderDefs readline;
+  };
+
+  rlwrap = rlwrapFun null;
+
   rpm = import ../tools/package-management/rpm {
     inherit fetchurl stdenv cpio zlib bzip2 file sqlite beecrypt neon elfutils;
   };
@@ -718,14 +816,30 @@ rec {
     inherit fetchurl stdenv ncurses;
   };
 
+  sharutils = selectVersion ../tools/archivers/sharutils "4.6.3" {
+    inherit fetchurl stdenv;
+  };
+
   shebangfix = import ../tools/misc/shebangfix {
-    inherit perl stdenv;
+    inherit stdenv perl;
   };
 
   smartmontools = import ../tools/system/smartmontools {
     inherit fetchurl stdenv;
   };
 
+  smbfsFuseFun = lib.sumArgs (selectVersion ../tools/networking/smbfs-fuse "0.8.7") {
+    inherit builderDefs samba fuse;
+  };
+
+  smbfsFuse = smbfsFuseFun null;
+
+  socatFun = lib.sumArgs (selectVersion ../tools/networking/socat "1.6.0.0") {
+    inherit builderDefs openssl;
+  };
+
+  socat = socatFun null;
+
   sudo = import ../tools/security/sudo {
     inherit fetchurl stdenv coreutils pam;
   };
@@ -758,6 +872,10 @@ rec {
     inherit fetchurl stdenv ncurses;
   };
 
+  vpnc = import ../tools/networking/vpnc {
+    inherit fetchurl stdenv libgcrypt perl;
+  };
+
   testdisk = import ../tools/misc/testdisk {
     inherit fetchurl stdenv ncurses libjpeg e2fsprogs zlib openssl;
   };
@@ -796,17 +914,19 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  wget = import ../tools/networking/wget {
+  wgetFun = lib.sumArgs (selectVersion ../tools/networking/wget "1.11") {
     inherit fetchurl stdenv gettext;
   };
 
+  wget = wgetFun null;
+
   which = import ../tools/system/which {
-    inherit fetchurl stdenv;
+    inherit fetchurl stdenv readline;
   };
 
   wv = import ../tools/misc/wv {
     inherit fetchurl stdenv libpng zlib imagemagick
-	pkgconfig libgsf libxml2 bzip2;
+      pkgconfig libgsf libxml2 bzip2;
     inherit (gtkLibs) glib;
   };
 
@@ -858,14 +978,14 @@ rec {
   ### SHELLS
 
 
-  bash = lowPrio (useFromStdenv (stdenv ? bash) stdenv.bash
+  bash = lowPrio (useFromStdenv "bash"
     (import ../shells/bash {
       inherit fetchurl stdenv;
       bison = bison23;
     }));
 
   bashInteractive = appendToName "interactive" (import ../shells/bash {
-    inherit fetchurl ncurses stdenv;
+    inherit fetchurl stdenv ncurses;
     bison = bison23;
     interactive = true;
   });
@@ -874,10 +994,12 @@ rec {
     inherit fetchurl stdenv ncurses;
   };
 
-  zsh = import ../shells/zsh {
+  zshFun = lib.sumArgs (selectVersion ../shells/zsh "4.3.5") {
     inherit fetchurl stdenv ncurses coreutils;
   };
 
+  zsh = zshFun null;
+
 
   ### DEVELOPMENT / COMPILERS
 
@@ -898,6 +1020,11 @@ rec {
       inherit stdenv fetchurl jre;
     };
 
+  bigloo = import ../development/compilers/bigloo {
+    inherit fetchurl mkDerivationByConfiguration lib;
+    stdenv = overrideGCC stdenv gcc34;
+  };
+
   dylan = import ../development/compilers/gwydion-dylan {
     inherit fetchurl stdenv perl boehmgc yacc flex readline;
     dylan =
@@ -976,7 +1103,7 @@ rec {
     profiledCompiler = false;
   });
 
-  gcc42 = useFromStdenv (stdenv ? gcc) stdenv.gcc (wrapGCC (import ../development/compilers/gcc-4.2 {
+  gcc42 = useFromStdenv "gcc" (wrapGCC (import ../development/compilers/gcc-4.2 {
     inherit fetchurl stdenv noSysDirs;
     profiledCompiler = true;
   }));
@@ -986,8 +1113,11 @@ rec {
     profiledCompiler = true;
   });
 
-  # This new ghc stuff is under heavy development and might change ! 
+  # This new ghc stuff is under heavy development and will change ! 
+  # =========  =======================================================
 
+  # usage: see ghcPkgUtil.sh
+  # depreceated -> use functions defined in builderDefs
   ghcPkgUtil = runCommand "ghcPkgUtil-internal" 
      { ghcPkgUtil = ../development/libraries/haskell/generic/ghcPkgUtil.sh; }
      "mkdir -p $out/nix-support; cp $ghcPkgUtil \$out/nix-support/setup-hook;";
@@ -995,36 +1125,236 @@ rec {
   ghcsAndLibs = 
     assert builtins ? listToAttrs;
     recurseIntoAttrs (import ../development/compilers/ghcs {
-      inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline stdenv;
-      inherit ghcPkgUtil;
-      lib = lib_unstable;
+      inherit ghcboot fetchurl stdenv recurseIntoAttrs perl gnum4 gmp readline lib;
+      inherit ghcPkgUtil annotatedDerivations hasktags ctags;
     });
 
   # creates ghc-X-wl wich adds the passed libraries to the env var GHC_PACKAGE_PATH
   createGhcWrapper = { ghcPackagedLibs ? false, ghc, libraries, name, suffix ? "ghc_wrapper_${ghc.name}" } :
         import ../development/compilers/ghc/createGhcWrapper {
-    inherit ghcPackagedLibs ghc name suffix libraries ghcPkgUtil stdenv;
+    inherit stdenv ghcPackagedLibs ghc name suffix libraries ghcPkgUtil
+      annotatedDerivations lib sourceWithTagsDerivation annotatedWithSourceAndTagInfo;
+    installSourceAndTags = true;
   };
 
+
+  # args must contain src name buildInputs
+  # classic expression style.. seems to work fine
+  # used now
+  #
+  # args must contain: src name buildInputs propagatedBuildInputs
+  # classic expression style.. seems to work fine
+  # used now
+  # goSrc contains source directory (containing the .cabal file)
+  ghcCabalDerivation = args : null_ : with lib; with args;
+    stdenv.mkDerivation ({
+      goSrcDir = "cd ${srcDir}";
+      inherit name src propagatedBuildInputs;
+      phases = "unpackPhase patchPhase buildPhase";
+      buildInputs = (if (args ? buildInputs) then args.buildInputs else [])
+                    ++ [ ghcPkgUtil ];
+      # TODO remove echo line
+      buildPhase ="
+          createEmptyPackageDatabaseAndSetupHook
+          export GHC_PACKAGE_PATH
+
+          \$goSrcDir
+          ghc --make Setup.*hs -o setup
+          CABAL_SETUP=./setup
+
+          nix_ghc_pkg_tool join local-pkg-db
+
+          \$CABAL_SETUP configure --package-db=local-pkg-db
+          \$CABAL_SETUP build
+          \$CABAL_SETUP copy --destdir=\$out
+          \$CABAL_SETUP register --gen-script
+          sed -e \"s=/usr/local/lib=\$out/usr/local/lib=g\" \\
+              -e \"s#bin/ghc-pkg --package-conf.*#bin/ghc-pkg --package-conf=\$PACKAGE_DB register -#\" \\
+              -i register.sh
+          ./register.sh
+          rm \${PACKAGE_DB}.old
+
+         ensureDir \"\$out/nix-support\"
+
+         echo \"\$propagatedBuildInputs\" > \"\$out/nix-support/propagated-build-inputs\"
+      ";
+  } // (subsetmap id args [ "patchPhase" ])); 
+
+  # creates annotated derivation (comments see above
+  annotatedGhcCabalDerivation = args : null_ : with lib; with args;
+  rec {
+    inherit name;
+
+    #aDeps = concatLists ( catAttrs ( subsetmap id args [ "buildInputs" "propagatedBuildInputs" ] ) );
+    aDeps = []; #TODO 
+
+    aDeriv = ghcCabalDerivation (args // (annotatedDerivations.delAnnotationsFromInputs args) ) null;
+
+   # annotation data
+
+    sourceWithTags = {
+     inherit src srcDir;
+     name = name + "-src-with-tags";
+     createTagFiles = [
+           { name = "${name}_haskell_tags";
+             # tagCmd = "${toString ghcsAndLibs.ghc68.ghc}/bin/hasktags --ctags `find . -type f -name \"*.*hs\"`; sort tags > \$TAG_FILE"; }
+             tagCmd = "${toString hasktags}/bin/hasktags-modified --ctags `find . -type f -name \"*.*hs\"`; sort tags > \$TAG_FILE"; }
+      ];
+    };
+  };
+
+  # this will change in the future 
+  # TODO enhance speed ! ?
+  ghc68_extra_libs = ghc: rec {
+      #   name (using lowercase letters everywhere because using installing packages having different capitalization is discouraged) - this way there is not that much to remember?
+
+      cabal_darcs_name = "cabal-darcs";
+
+      # introducing p here to speed things up.
+      # It merges derivations (defined below) and additional inputs. I hope that using as few nix functions as possible results in greates speed?
+      # unfortunately with x; won't work because it forces nix to evaluate all attributes of x which would lead to infinite recursion
+      pkgs = let x = ghc.core_libs // derivations; in {
+          # ghc extra packages 
+          mtl     = { name="mtl-1.1.0.0";     srcDir="libraries/mtl";    p_deps=[ x.base ]; src = ghc.extra_src; };
+          parsec  = { name="parsec-2.1.0.0";  srcDir="libraries/parsec"; p_deps=[ x.base ];       src = ghc.extra_src; };
+          network = { name="network-2.1.0.0"; srcDir="libraries/network"; p_deps=[ x.base x.parsec x.haskell98 ];       src = ghc.extra_src; };
+          regex_base = { name="regex-base-0.72.0.1"; srcDir="libraries/regex-base"; p_deps=[ x.base x.array x.bytestring x.haskell98 ]; src = ghc.extra_src; };
+          regex_posix = { name="regex-posix-0.72.0.2"; srcDir="libraries/regex-posix"; p_deps=[ x.regex_base x.haskell98 ]; src = ghc.extra_src; };
+          regex_compat = { name="regex-compat-0.71.0.1"; srcDir="libraries/regex-compat"; p_deps=[ x.base x.regex_posix x.regex_base x.haskell98 ]; src = ghc.extra_src; };
+          stm = { name="stm-2.1.1.0"; srcDir="libraries/stm"; p_deps=[ x.base x.array ]; src = ghc.extra_src; };
+          hunit = { name="HUnit-1.2.0.0"; srcDir="libraries/HUnit"; p_deps=[ x.base ]; src = ghc.extra_src; };
+          quickcheck = { name="QuickCheck-1.1.0.0"; srcDir="libraries/QuickCheck"; p_deps=[x.base x.random]; src = ghc.extra_src; };
+
+
+          # other pacakges  (hackage etc)
+          binary = rec { name = "binary-0.4.1"; p_deps = [ x.base x.bytestring x.containers x.array ];
+                           src = fetchurl { url = "http://hackage.haskell.org/packages/archive/binary/0.4.1/binary-0.4.1.tar.gz";
+                                        sha256 = "0jg5i1k5fz0xp1piaaf5bzhagqvfl3i73hlpdmgs4gc40r1q4x5v"; };
+                 };
+          # 1.13 is stable. There are more recent non stable versions
+          haxml = rec { name = "HaXml-1.13.3"; p_deps = [ x.base x.rts x.directory x.process x.pretty x.containers x.filepath x.haskell98 ];
+                       src = fetchurl { url = "http://www.haskell.org/HaXml/${name}.tar.gz";
+                                        sha256 = "08d9wy0rg9m66dd10x0zvkl74l25vxdakz7xp3j88s2gd31jp1v0"; };
+                 };
+          xhtml = rec { name = "xhtml-3000.0.2.2"; p_deps = [ x.base ];
+                       src = fetchurl { url = "http://hackage.haskell.org/packages/archive/xhtml/3000.0.2.2/xhtml-3000.0.2.2.tar.gz";
+                                        sha256 = "112mbq26ksh7r22y09h0xvm347kba3p4ns12vj5498fqqj333878"; };
+                 };
+          html = rec { name = "html-1.0.1.1"; p_deps = [ x.base ];
+                       src = fetchurl { url = "http://hackage.haskell.org/packages/archive/html/1.0.1.1/html-1.0.1.1.tar.gz";
+                                        sha256 = "10fayfm18p83zlkr9ikxlqgnzxg1ckdqaqvz6wp1xj95fy3p6yl1"; };
+                 };
+          crypto = rec { name = "crypto-4.1.0"; p_deps = [ x.base x.array x.pretty x.quickcheck x.random x.hunit ];
+                       src = fetchurl { url = "http://hackage.haskell.org/packages/archive/Crypto/4.1.0/Crypto-4.1.0.tar.gz";
+                                        sha256 = "13rbpbn6p1da6qa9m6f7dmkzdkmpnx6jiyyndzaz99nzqlrwi109"; };
+                 };
+          hslogger = rec { name = "hslogger-1.0.4"; p_deps = [ x.containers x.directory x.mtl x.network x.process];
+                       src = fetchurl { url = "http://hackage.haskell.org/packages/archive/hslogger/1.0.4/hslogger-1.0.4.tar.gz";
+                                        sha256 = "0kmz8xs1q41rg2xwk22fadyhxdg5mizhw0r4d74y43akkjwj96ar"; };
+                 };
+          parsep = { name = "parsep-0.1"; p_deps = [ x.base x.mtl x.bytestring ];
+                         src = fetchurl { url = "http://twan.home.fmf.nl/parsep/parsep-0.1.tar.gz";
+                                        sha256 = "1y5pbs5mzaa21127cixsamahlbvmqzyhzpwh6x0nznsgmg2dpc9q"; };
+                         patchPhase = "pwd; sed -i 's/fps/bytestring/' *.cabal";
+                 };
+
+        # HAPPS - Libraries
+          http_darcs = { name="http-darcs"; p_deps = [x.network x.parsec];
+                   src = fetchdarcs { url = "http://darcs.haskell.org/http/"; md5 = "4475f858cf94f4551b77963d08d7257c"; };
+                 };
+          syb_with_class_darcs = { name="syb-with-class-darcs"; p_deps = [x.template_haskell x.bytestring ];
+                   src = fetchdarcs { url = "http://happs.org/HAppS/syb-with-class"; md5 = "b42336907f7bfef8bea73bc36282d6ac"; };
+                 };
+
+        happs_data_darcs = { name="HAppS-Data-darcs"; p_deps=[ x.base x.mtl x.template_haskell x.syb_with_class_darcs x.haxml x.happs_util_darcs x.regex_compat x.bytestring x.pretty ];
+                    src = fetchdarcs { url = "http://happs.org/repos/HAppS-Data"; md5 = "10c505dd687e9dc999cb187090af9ba7"; };
+                    };
+        happs_util_darcs = { name="HAppS-Util-darcs"; p_deps=[ x.base x.mtl x.hslogger x.template_haskell x.array x.bytestring x.old_time x.process x.directory ];
+                    src = fetchdarcs { url = "http://happs.org/repos/HAppS-Util"; md5 = "693cb79017e522031c307ee5e59fc250"; };
+                    };
+        happs_state_darcs = { name="HAppS-State-darcs"; p_deps=[ x.base x.haxml
+                      x.mtl x.network x.stm x.template_haskell x.hslogger
+                        x.happs_util_darcs x.happs_data_darcs x.bytestring x.containers
+                        x.random x.old_time x.old_locale x.unix x.directory x.binary ];
+                      src = fetchdarcs { url = "http://happs.org/repos/HAppS-State"; 
+                                         md5 = "956e5c293b60f4a98148fedc5fa38acc"; 
+                                       };
+                    };
+        happs_plugins_darcs = { name="HAppS-plugins-darcs"; p_deps=[ x.base x.mtl x.hslogger x.happs_util_darcs x.happs_data_darcs x.happs_state_darcs ];
+                    src = fetchdarcs { url = "http://happs.org/repos/HAppS-Util"; md5 = "693cb79017e522031c307ee5e59fc250"; };
+                    };
+        # there is no .cabal yet 
+        #happs_smtp_darcs = { name="HAppS-smtp-darcs"; p_deps=[];
+                    #src = fetchdarcs { url = "http://happs.org/repos/HAppS-smtp"; md5 = "5316917e271ea1ed8ad261080bcb47db"; };
+                    #};
+
+        happs_ixset_darcs = { name="HAppS-IxSet-darcs"; p_deps=[ x.base x.mtl
+                          x.hslogger x.happs_util_darcs x.happs_state_darcs x.happs_data_darcs
+                          x.template_haskell x.syb_with_class_darcs x.containers ];
+                    src = fetchdarcs { url = "http://happs.org/repos/HAppS-IxSet"; 
+                                       #md5 = "fa6b24517f09aa16e972f087430967fd"; 
+                                       #tag = "0.9.2";
+                                        # no tag
+                                       md5 = "fa6b24517f09aa16e972f087430967fd"; 
+                                     };
+                    };
+        happs_server_darcs = { name="HAppS-Server-darcs"; p_deps=[x.haxml x.parsec x.mtl
+                x.network x.regex_compat x.hslogger x.happs_data_darcs
+                  x.happs_util_darcs x.happs_state_darcs x.happs_ixset_darcs x.http_darcs
+                  x.template_haskell x.xhtml x.html x.bytestring x.random
+                  x.containers x.old_time x.old_locale x.directory x.unix];
+                    src = fetchdarcs { url = "http://happs.org/repos/HAppS-HTTP"; md5 = "e1bb17eb30a39d30b8c34dffbf80edc2"; };
+                    };
+        # we need recent version of cabal (because only this supports --pkg-config propably) Thu Feb  7 14:54:07 CET 2008
+        # is be added to buildInputs automatically
+        cabal_darcs = { name=cabal_darcs_name; p_deps = with ghc.core_libs; [base rts directory process pretty containers filepath];
+                  src = fetchdarcs { url = "http://darcs.haskell.org/cabal"; md5 = "8b0bc3c7f2676ce642f98b1568794cd6"; };
+                };
+      };
+      toDerivation = attrs : with attrs;
+      # result is { mtl = <deriv>;
+        annotatedGhcCabalDerivation ({
+            inherit name src;
+            propagatedBuildInputs = p_deps ++ (lib.optional (attrs.name != cabal_darcs_name) derivations.cabal_darcs );
+            srcDir = if attrs ? srcDir then attrs.srcDir else ".";
+            patches = if attrs ? patches then attrs.patches else [];
+            # add cabal, take deps either from this list or from ghc.core_libs 
+        }//( lib.subsetmap lib.id attrs [ "patchPhase" ] )) null;
+      derivations = with lib; builtins.listToAttrs (lib.concatLists ( lib.mapRecordFlatten 
+                ( n : attrs : let d = (toDerivation attrs); in [ (nv n d) (nv attrs.name d) ] ) pkgs ) );
+    }.derivations;
+
+
   # the wrappers basically does one thing: It defines GHC_PACKAGE_PATH before calling ghc{i,-pkg}
   # So you can have different wrappers with different library combinations
-  # So installing ghc libraries isn't done by nix-env -i package but by adding the lib to the libraries list below
+  # So installing ghc libraries isn't done by nix-env -i package but by adding
+  # the lib to the libraries list below
+  # Doesn't create that much useless symlinks (you seldomly want to read the
+  # .hi and .o files, right?
   ghcLibraryWrapper68 = 
     let ghc = ghcsAndLibs.ghc68.ghc; in
     createGhcWrapper rec {
       ghcPackagedLibs = true;
-      name = "ghc68_wrapper";
-      suffix = "68wrapper";
-      libraries = map ( a : __getAttr a ghcsAndLibs.ghc68.core_libs ) 
-        [ "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "array-0.1" "containers-0.1" 
-          "hpc-0.5" "bytestring-0.9" "pretty-1.0" "packedstring-0.1" "template-haskell-0.1" 
-          "unix-2.0" "process-1.0" "readline-1.0" "Cabal-1.2.0" "random-1.0" "haskell98-1.0" "ghc-6.8.0.20071004"
-          "array-0.1" "bytestring-0.9" "containers-0.1" "directory-1.0" "filepath-1.0"
-          "ghc-6.8.0.20071004" "haskell98-1.0" "hpc-0.5" "old-locale-1.0" "old-time-1.0" 
-          "packedstring-0.1" "pretty-1.0" "process-1.0" "random-1.0"
-          "readline-1.0" "rts-1.0" "template-haskell-0.1" "unix-2.0"
-        ];
-        # (flatten ghcsAndLibs.ghc68.core_libs);
+      name = "ghc${ghc.version}_wrapper";
+      suffix = "${ghc.version}wrapper";
+      libraries = # map ( a : __getAttr a (ghc68_extra_libs ghcsAndLibs.ghc68 ) ) [ "mtl" ];
+        # core_libs  distributed with this ghc version
+        #(lib.flattenAttrs ghcsAndLibs.ghc68.core_libs)
+          map ( a : __getAttr a ghcsAndLibs.ghc68.core_libs ) [ 
+            "cabal" "array" "base" "bytestring" "containers" "containers" "directory"
+            "filepath" "ghc-${ghc.version}" "haskell98" "hpc" "old_locale" "old_time"
+            "old_time" "packedstring" "pretty" "process" "random" "readline" "rts"
+            "template_haskell" "unix" "template_haskell" ]
+        # some extra libs
+
+           ++  (lib.flattenAttrs (ghc68_extra_libs ghcsAndLibs.ghc68) );
+        # or specify the ones you want to install using this list (possible values see attributes in ghc68_extra_libs
+           #++ map ( a : __getAttr a (ghc68_extra_libs ghcsAndLibs.ghc68 ) )
+           #[ "mtl" "parsec" "cabal_darcs" "haxml" "network" "regex_base"
+           #"regex_compat" "regex_posix" "stm" "hunit" "quickcheck" "crypto"
+           #"hslogger" "http_darcs" "syb_with_class_darcs"
+           #];
+        # some additional libs
       inherit ghc;
   };
 
@@ -1033,7 +1363,7 @@ rec {
   #  m4 = gnum4;
   #};
 
-  ghc = ghc661;
+  ghc = ghc68;
 
   ghc68 = import ../development/compilers/ghc-6.8 {
     inherit fetchurl stdenv readline perl gmp ncurses;
@@ -1071,9 +1401,24 @@ rec {
       libraries = [];
     };
   */
+  
+  gwt = import ../development/compilers/gwt {
+    inherit stdenv fetchurl;
+    inherit (gtkLibs) glib gtk pango atk;
+    inherit (xlibs) libX11 libXt;
+    libstdcpp5 = gcc33.gcc;
+  };
 
   helium = import ../development/compilers/helium {
-    inherit fetchurl stdenv ghc;
+    inherit fetchurl stdenv;
+    ghc = ghc661;
+  };
+
+  javafront = import ../development/compilers/java-front {
+    inherit stdenv fetchurl pkgconfig;
+    sdf = sdf24;
+    aterm = aterm25;
+    strategoxt = strategoxt017;
   };
 
   #TODO add packages http://cvs.haskell.org/Hugs/downloads/2006-09/packages/ and test
@@ -1088,6 +1433,12 @@ rec {
       inherit fetchurl stdenv;
     };
 
+  jdk5 =
+    assert system == "i686-linux" || system == "x86_64-linux";
+    import ../development/compilers/jdk/default-5.nix {
+      inherit fetchurl stdenv unzip;
+    };
+  
   jdk       = jdkdistro true  false;
   jre       = jdkdistro false false;
 
@@ -1119,6 +1470,10 @@ rec {
     inherit stdenv perl;
   };
 
+  monotone = import ../applications/version-management/monotone {
+    inherit stdenv fetchurl boost zlib;
+  };
+
   nasm = import ../development/compilers/nasm {
     inherit fetchurl stdenv;
   };
@@ -1127,7 +1482,6 @@ rec {
 
   ocaml_alts = import ../development/compilers/ocaml {
     inherit fetchurl stdenv x11 ncurses;
-	stdenv34 = overrideGCC stdenv gcc34;
   };
 
 /*
@@ -1158,6 +1512,15 @@ rec {
     inherit fetchurl stdenv mk noweb groff;
   };
 
+  roadsend = import ../development/compilers/roadsend {
+    inherit fetchurl stdenv flex bison mkDerivationByConfiguration bigloo lib curl;
+    # optional features
+    # all features pcre, fcgi xml mysql, sqlite3, (not implemented: odbc gtk gtk2)
+    flags = ["pcre" "fcgi" "xml" "mysql"];
+    inherit mysql;
+    inherit libxml2;
+  };
+
   strategoLibraries = import ../development/compilers/strategoxt/libraries/stratego-libraries-0.17pre.nix {
     inherit stdenv fetchurl pkgconfig aterm;
   };
@@ -1167,6 +1530,13 @@ rec {
     stdenv = overrideInStdenv stdenv [gnumake380];
   };
 
+  strategoxt017 = import ../development/compilers/strategoxt/strategoxt-0.17.nix {
+    inherit fetchurl pkgconfig;
+    sdf = sdf24;
+    aterm = aterm25;
+    stdenv = overrideInStdenv stdenv [gnumake380];
+  };
+
   strategoxtUtils = import ../development/compilers/strategoxt/utils {
     inherit fetchurl pkgconfig stdenv aterm sdf strategoxt;
   };
@@ -1192,6 +1562,13 @@ rec {
     inherit fetchurl stdenv cabextract;
   };
 
+  webdsl = import ../development/compilers/webdsl {
+    inherit stdenv fetchurl pkgconfig javafront;
+    aterm = aterm25;
+    sdf = sdf24;
+    strategoxt = strategoxt017;
+  };
+
   win32hello = import ../development/compilers/visual-c++/test {
     inherit fetchurl stdenv visualcpp windowssdk;
   };
@@ -1216,8 +1593,12 @@ rec {
     inherit (xlibs) libX11 libXau libXt;
   };
 
+  erlang = selectVersion ../development/interpreters/erlang "R12B-1" {
+    inherit fetchurl stdenv perl gnum4 ncurses openssl;
+  };
+
   guile = import ../development/interpreters/guile {
-    inherit fetchurl stdenv ncurses readline libtool gmp;
+    inherit fetchurl stdenv ncurses readline libtool gmp gawk makeWrapper;
   };
 
   kaffe =  import ../development/interpreters/kaffe {
@@ -1250,11 +1631,14 @@ rec {
   # tell the apache module where to look for this file is using a compile time flag ;-(
   # perhaps this can be done setting php_value in apache don't have time to investigate any further ?
   # This expression is a quick hack now. But perhaps it helps you adding the configuration flags you need?
-  php = (import ../development/interpreters/php_configurable) {
-   inherit mkDerivationByConfiguration stdenv mysql;
-   lib = lib_unstable;
-   inherit fetchurl flex bison apacheHttpd; # gettext;
-   inherit libxml2;
+  php = php_unstable;
+
+  # compiling without xdebug is currenlty broken (should be easy to fix though 
+  php_unstable = (import ../development/interpreters/php_configurable) {
+   inherit stdenv mkDerivationByConfiguration autoconf automake lib;
+   # optional features
+   inherit fetchurl flex bison apacheHttpd mysql libxml2; # gettext;
+   inherit zlib;
    flags = [ "xdebug" "mysql" "mysqli" "pdo_mysql" "libxml2" "apxs2" ];
   };
 
@@ -1264,20 +1648,18 @@ rec {
     inherit fetchurl stdenv zlib bzip2;
   };
 
-  pyrexFun = lib.sumArgs (selectVersion ../development/interpreters/pyrex) {
+  pyrexFun = lib.sumArgs (selectVersion ../development/interpreters/pyrex "0.9.6") {
     inherit fetchurl stdenv stringsWithDeps lib builderDefs;
 	python = builtins.getAttr "2.5" python_alts;
   };
 
-  pyrex = pyrexFun {version = "0.9.6";} null;
+  pyrex = pyrexFun null;
 
-  QiFun = lib.sumArgs (selectVersion ../development/compilers/qi) {
+  QiFun = lib.sumArgs (selectVersion ../development/compilers/qi "9.1") {
     inherit clisp stdenv fetchurl builderDefs unzip;
   };
 
-  Qi = QiFun {
-    version = getConfig ["Qi" "version"] "9.1";
-  } null;
+  Qi = QiFun null;
 
   realPerl = import ../development/interpreters/perl {
     inherit fetchurl stdenv;
@@ -1329,6 +1711,10 @@ rec {
     inherit fetchurl stdenv unzip;
   };
 
+  guileLib = import ../development/guile-modules/guile-lib {
+    inherit fetchurl stdenv guile;
+  };
+
   windowssdk = import ../development/misc/windows-sdk {
     inherit fetchurl stdenv cabextract;
   };
@@ -1337,6 +1723,10 @@ rec {
   ### DEVELOPMENT / TOOLS
 
 
+  alex = import ../development/tools/parsing/alex {
+    inherit cabal perl;
+  };
+
   antlr = import ../development/tools/parsing/antlr/antlr-2.7.6.nix {
     inherit fetchurl stdenv jre;
   };
@@ -1373,12 +1763,16 @@ rec {
     inherit fetchurl stdenv perl autoconf;
   };
 
+  automake110x = import ../development/tools/misc/automake/automake-1.10.x.nix {
+    inherit fetchurl stdenv perl autoconf;
+  };
+
   # commented out because it's using the new configuration style proposal which is unstable
   #avrdude = import ../development/tools/misc/avrdude {
   #  inherit lib fetchurl stdenv flex yacc;
   #};
 
-  binutils = useFromStdenv (stdenv ? binutils) stdenv.binutils
+  binutils = useFromStdenv "binutils"
     (import ../development/tools/misc/binutils {
       inherit fetchurl stdenv noSysDirs;
     });
@@ -1393,6 +1787,10 @@ rec {
     inherit fetchurl stdenv m4;
   };
 
+  ccache = import ../development/tools/misc/ccache {
+    inherit fetchurl stdenv;
+  };
+
   ctags = import ../development/tools/misc/ctags {
     inherit fetchurl stdenv;
   };
@@ -1402,13 +1800,11 @@ rec {
   };
 
   elfutilsFun = lib.sumArgs 
-    (selectVersion ../development/tools/misc/elfutils) {
+    (selectVersion ../development/tools/misc/elfutils "0.131") {
       inherit fetchurl stdenv;
   };
 
-  elfutils = elfutilsFun {
-    version = "0.131";
-  } null;
+  elfutils = elfutilsFun null;
 
   epm = import ../development/tools/misc/epm {
     inherit fetchurl stdenv rpm;
@@ -1416,6 +1812,10 @@ rec {
 
   flex = flex254a;
 
+  flex2534 = import ../development/tools/parsing/flex/flex-2.5.34.nix {
+    inherit fetchurl stdenv yacc m4;
+  };
+
   flex2533 = import ../development/tools/parsing/flex/flex-2.5.33.nix {
     inherit fetchurl stdenv yacc m4;
   };
@@ -1434,7 +1834,7 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  gnumake = useFromStdenv (stdenv ? gnumake) stdenv.gnumake
+  gnumake = useFromStdenv "gnumake"
     (import ../development/tools/build-managers/gnumake {
       inherit fetchurl stdenv;
     });
@@ -1447,8 +1847,25 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  happy = import ../development/tools/parsing/happy {
-    inherit fetchurl stdenv perl ghc;
+  haddock = import ../development/tools/documentation/haddock {
+    inherit cabal;
+  };
+
+  guileLint = import ../development/tools/guile/guile-lint {
+    inherit fetchurl stdenv guile;
+  };
+
+  # happy = import ../development/tools/parsing/happy {
+  #   inherit fetchurl stdenv perl ghc;
+  # };
+
+  happy = import ../development/tools/parsing/happy/happy-1.17.nix {
+    inherit cabal perl;
+  };
+
+  hasktags = import ../development/tools/misc/hasktags {
+    inherit fetchurl stdenv;
+    ghc = ghcsAndLibs.ghc68.ghc;
   };
 
   help2man = import ../development/tools/misc/help2man {
@@ -1459,13 +1876,11 @@ rec {
     inherit fetchurl stdenv perl perlXMLSimple;
   };
 
-  indentFun = lib.sumArgs (selectVersion ../development/tools/misc/indent) {
+  indentFun = lib.sumArgs (selectVersion ../development/tools/misc/indent "2.2.9") {
     inherit fetchurl stdenv builderDefs;
   };
 
-  indent = indentFun {
-    version = "2.2.9";
-  } null;
+  indent = indentFun null;
 
   jikespg = import ../development/tools/parsing/jikespg {
     inherit fetchurl stdenv;
@@ -1489,11 +1904,13 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  ltrace = import ../development/tools/misc/ltrace {
+  ltraceFun = lib.sumArgs (selectVersion ../development/tools/misc/ltrace "0.5-3deb") {
   	inherit fetchurl stdenv builderDefs stringsWithDeps lib;
 	elfutils = elfutilsFun {version = "0.127";} null;
   };
 
+  ltrace = ltraceFun null;
+
   mk = import ../development/tools/build-managers/mk {
     inherit fetchurl stdenv;
   };
@@ -1502,7 +1919,7 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  patchelf = useFromStdenv (stdenv ? patchelf) stdenv.patchelf
+  patchelf = useFromStdenv "patchelf"
     (import ../development/tools/misc/patchelf {
       inherit fetchurl stdenv;
     });
@@ -1511,7 +1928,7 @@ rec {
    * pkgconfig is optionally taken from the stdenv to allow bootstrapping
    * of glib and pkgconfig itself on MinGW.
    */
-  pkgconfig = useFromStdenv (stdenv ? pkgconfig) stdenv.pkgconfig
+  pkgconfig = useFromStdenv "pkgconfig"
     (import ../development/tools/misc/pkgconfig {
       inherit fetchurl stdenv;
     });
@@ -1532,6 +1949,14 @@ rec {
     stdenv = overrideInStdenv stdenv [gnumake380];
   };
 
+  sdf24 = import ../development/tools/parsing/sdf/sdf2-bundle-2.4.nix {
+    inherit fetchurl getopt pkgconfig;
+    aterm = aterm25;
+    # Note: sdf2-bundle currently requires GNU make 3.80; remove
+    # explicit dependency when this is fixed.
+    stdenv = overrideInStdenv stdenv [gnumake380];
+  };
+
   strace = import ../development/tools/misc/strace {
     inherit fetchurl stdenv;
   };
@@ -1559,9 +1984,7 @@ rec {
   };
 
   uuagc = import ../development/tools/haskell/uuagc {
-    inherit fetchurl stdenv;
-    ghc = ghc66;
-    uulib = uulib66;
+    inherit cabal uulib;
   };
 
   gdb = import ../development/tools/misc/gdb {
@@ -1633,6 +2056,10 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  aterm25 = import ../development/libraries/aterm/2.5.nix {
+    inherit fetchurl stdenv;
+  };
+
   attr = import ../development/libraries/attr {
     inherit stdenv fetchurl autoconf libtool gettext;
   };
@@ -1661,6 +2088,10 @@ rec {
     inherit fetchurl stdenv pkgconfig x11 fontconfig freetype zlib libpng;
   };
 
+  cairomm = import ../development/libraries/cairomm {
+    inherit fetchurl stdenv pkgconfig cairo x11 fontconfig freetype;
+  };
+
   chmlib = import ../development/libraries/chmlib {
     inherit fetchurl stdenv;
   };
@@ -1717,20 +2148,11 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  # I think, this is a bad practice to use getVersion for various build
-  # variants, but it's 5 o'clock now...
-  dbus = getVersion "dbus" dbus_alts;
-
-  dbus_alts = rec
-  {
-    noX11 = import ../development/libraries/dbus {
+  dbus = import ../development/libraries/dbus {
     inherit fetchurl stdenv pkgconfig expat;
-    };
-    withX11 = import ../development/libraries/dbus_x {
-	  inherit fetchurl stdenv pkgconfig expat;
 	  inherit (xlibs) libX11 libICE libSM;
-    };
-	default = noX11;
+    useX11 = getConfig [ "dbus" "tools" "useX11" ]
+      (getConfig [ "services" "xserver" "enable" ] false);
   };
 
   dbus_glib = import ../development/libraries/dbus-glib {
@@ -1746,7 +2168,7 @@ rec {
     inherit fetchurl stdenv perl;
   };
 
-  enchant = import ../development/libraries/enchant {
+  enchant = selectVersion ../development/libraries/enchant "1.3.0" {
 	  inherit fetchurl stdenv aspell pkgconfig;
 	  inherit (gnome) glib;
   };
@@ -1760,9 +2182,13 @@ rec {
   };
 
   facile = import ../development/libraries/facile {
-	  inherit fetchurl stdenv;
-      # Actually, we don't need this version but we need native-code compilation
-	  ocaml = builtins.getAttr "3.10.0" ocaml_alts;
+    inherit fetchurl stdenv;
+    # Actually, we don't need this version but we need native-code compilation
+    ocaml = builtins.getAttr "3.10.0" ocaml_alts;
+  };
+
+  fcgi = import ../development/libraries/fcgi {
+      inherit fetchurl stdenv;
   };
 
   ffmpeg = import ../development/libraries/ffmpeg {
@@ -1770,19 +2196,21 @@ rec {
   };
 
   ffmpeg_svn = import ../development/libraries/ffmpeg_svn_snapshot {
-    inherit fetchsvn stdenv;
+    inherit fetchurl stdenv;
   };
 
   fftw = import ../development/libraries/fftw {
     inherit fetchurl stdenv builderDefs stringsWithDeps;
   };
 
-
   fltk20 = (import ../development/libraries/fltk) {
-    inherit mkDerivationByConfiguration x11;
+    inherit mkDerivationByConfiguration x11 lib;
     inherit fetchurl stdenv mesa mesaHeaders libpng libjpeg zlib ;
     flags = [ "useNixLibs" "threads" "shared" "gl" ];
-    lib = lib_unstable;
+  };
+
+  cfitsio = import ../development/libraries/cfitsio {
+    inherit fetchurl stdenv;
   };
 
   fontconfig = import ../development/libraries/fontconfig {
@@ -1805,21 +2233,27 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  fam = gamin;
+
+  gamin = import ../development/libraries/gamin {
+	  inherit fetchurl stdenv python pkgconfig;
+	  inherit (gtkLibs) glib;
+  };
+
   geos = import ../development/libraries/geos {
-    lib = lib_unstable;
-    inherit fetchurl fetchsvn stdenv mkDerivationByConfiguration autoconf automake libtool swig which;
+    inherit fetchurl fetchsvn stdenv mkDerivationByConfiguration autoconf automake libtool swig which lib;
     use_svn = stdenv.system == "x86_64-linux";
     python = python;
     # optional features:  
     # python / ruby support
   };
 
-  gettext = getVersion "gettext" gettext_alts;
-
-  gettext_alts = import ../development/libraries/gettext {
+  gettextFun = lib.sumArgs (selectVersion ../development/libraries/gettext "0.16.x") {
     inherit fetchurl stdenv;
   };
 
+  gettext = gettextFun null;
+
   gd = import ../development/libraries/gd {
     inherit fetchurl stdenv zlib libpng freetype libjpeg fontconfig;
   };
@@ -1832,17 +2266,17 @@ rec {
     };
   };
 
-  glibc = useFromStdenv (stdenv ? glibc) stdenv.glibc
+  glew = import ../development/libraries/glew {
+    inherit fetchurl stdenv mesa x11 libtool;
+    inherit (xlibs) libXmu libXi;
+  };
+
+  glibc = useFromStdenv "glibc"
     (import ../development/libraries/glibc-2.7 {
       inherit fetchurl stdenv kernelHeaders;
       #installLocales = false;
     });
 
-  glibmm = import ../development/libraries/gtk-libs-2.6/glibmm {
-    inherit fetchurl stdenv pkgconfig libsigcxx;
-    inherit (gtkLibs26) glib;
-  };
-
   gmime = import ../development/libraries/gmime {
     inherit fetchurl stdenv pkgconfig zlib;
     inherit (gtkLibs) glib;
@@ -1867,7 +2301,8 @@ rec {
   };
 
   gpgme = import ../development/libraries/gpgme {
-    inherit fetchurl stdenv libgpgerror gnupg;
+    inherit fetchurl stdenv libgpgerror pkgconfig pth gnupg gnupg2;
+	inherit (gtkLibs) glib;
   };
 
   # gnu scientific library
@@ -1877,45 +2312,17 @@ rec {
 
   gtkLibs = recurseIntoAttrs gtkLibs210;
 
-  gtkLibs1x = import ../development/libraries/gtk-libs-1.x {
+  gtkLibs1x = import ../development/libraries/gtk-libs/1.x {
     inherit fetchurl stdenv x11 libtiff libjpeg libpng;
   };
 
-  gtkLibs210 = import ../development/libraries/gtk-libs-2.10 {
+  gtkLibs210 = import ../development/libraries/gtk-libs/2.10 {
     inherit fetchurl stdenv pkgconfig gettext perl x11
-            libtiff libjpeg libpng cairo;
+            libtiff libjpeg libpng cairo libsigcxx cairomm;
     inherit (xlibs) libXinerama libXrandr;
     xineramaSupport = true;
   };
 
-  gtkLibs22 = import ../development/libraries/gtk-libs-2.2 {
-    inherit fetchurl stdenv pkgconfig gettext perl x11
-            libtiff libjpeg libpng;
-  };
-
-  gtkLibs24 = import ../development/libraries/gtk-libs-2.4 {
-    inherit fetchurl stdenv pkgconfig gettext perl x11
-            libtiff libjpeg libpng;
-  };
-
-  gtkLibs26 = import ../development/libraries/gtk-libs-2.6 {
-    inherit fetchurl stdenv pkgconfig gettext perl x11
-            libtiff libjpeg libpng;
-  };
-
-  gtkLibs28 = import ../development/libraries/gtk-libs-2.8 {
-    inherit fetchurl stdenv pkgconfig gettext perl x11
-            libtiff libjpeg libpng cairo;
-    inherit (xlibs) libXinerama;
-    xineramaSupport = true;
-  };
-
-  gtkmm = import ../development/libraries/gtk-libs-2.6/gtkmm {
-    inherit fetchurl stdenv pkgconfig libsigcxx;
-    inherit (gtkLibs26) gtk atk;
-    inherit glibmm;
-  };
-
   gtkmozembedsharp = import ../development/libraries/gtkmozembed-sharp {
     inherit fetchurl stdenv mono pkgconfig monoDLLFixer;
     inherit (gnome) gtk;
@@ -1948,6 +2355,13 @@ rec {
     inherit aspell;
   };
 
+  # TODO : Add MIT Kerberos and let admin choose.
+  kerberos = heimdal;
+
+  heimdal = import ../development/libraries/kerberos/heimdal.nix {
+	  inherit fetchurl stdenv readline db4 openssl openldap cyrus_sasl;
+  };
+
   hsqldb = import ../development/libraries/java/hsqldb {
     inherit stdenv fetchurl unzip;
   };
@@ -1960,6 +2374,10 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  ilbc = import ../development/libraries/ilbc {
+    inherit stdenv msilbc;
+  };
+
   ilmbase = import ../development/libraries/ilmbase {
 	  inherit fetchurl stdenv;
   };
@@ -1973,12 +2391,25 @@ rec {
     inherit fetchurl stdenv x11 libjpeg libtiff libungif libpng bzip2;
   };
 
-  intltoolFun = lib.sumArgs (selectVersion ../development/tools/misc/intltool) {
+  indilib = import ../development/libraries/indilib {
+	  inherit fetchurl stdenv cfitsio libusb zlib;
+  };
+
+  iniparser = import ../development/libraries/iniparser {
+    inherit fetchurl stdenv;
+  };
+
+  intltoolFun = lib.sumArgs (selectVersion ../development/tools/misc/intltool "0.36.2") {
     inherit fetchurl stdenv lib builderDefs stringsWithDeps
       perl perlXMLParser;
   };
 
-  intltool = intltoolFun {version = "0.36.2";} null;
+  intltool = intltoolFun null;
+
+  jasper = import ../development/libraries/jasper {
+	  inherit fetchurl stdenv unzip libjpeg freeglut mesa;
+	  inherit (xlibs) xproto libX11 libICE libXmu libXi libXext libXt;
+  };
 
   lablgtk = import ../development/libraries/lablgtk {
     inherit fetchurl stdenv ocaml pkgconfig;
@@ -1994,6 +2425,22 @@ rec {
     inherit (xlibs) libXp libXau;
   };
 
+  libaal = import ../development/libraries/libaal {
+    inherit fetchurl stdenv;
+  };
+
+  libao = import ../development/libraries/libao {
+    inherit stdenv fetchurl pkgconfig;
+  };
+
+  libarchive = selectVersion ../development/libraries/libarchive "2.4.12" {
+    inherit fetchurl stdenv zlib bzip2 e2fsprogs sharutils;
+  };
+
+  libassuan = import ../development/libraries/libassuan {
+    inherit fetchurl stdenv pth;
+  };
+
   libavc1394 = import ../development/libraries/libavc1394 {
     inherit fetchurl stdenv pkgconfig libraw1394;
   };
@@ -2015,26 +2462,23 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  libdbiFun = lib.sumArgs (selectVersion ../development/libraries/libdbi) {
+  libdbiFun = lib.sumArgs (selectVersion ../development/libraries/libdbi "0.8.2") {
     inherit stdenv fetchurl builderDefs;
   };
 
-  libdbi = libdbiFun {
-    version = "0.8.2";
-  } null;
+  libdbi = libdbiFun null;
 
-  libdbiDriversFun = lib.sumArgs (selectVersion ../development/libraries/libdbi-drivers) {
+  libdbiDriversFun = lib.sumArgs (selectVersion ../development/libraries/libdbi-drivers "0.8.2-1") {
     inherit stdenv fetchurl builderDefs libdbi;
   };
 
   libdbiDrivers = libdbiDriversFun {
-    version = "0.8.2-1";
-    inherit sqlite mysql;
+    mysql = mysql5;
+    inherit sqlite;
   } null;
 
   libdv = import ../development/libraries/libdv {
-    lib = lib_unstable;
-    inherit fetchurl stdenv mkDerivationByConfiguration;
+    inherit fetchurl stdenv lib mkDerivationByConfiguration;
   };
 
   libdrm = import ../development/libraries/libdrm {
@@ -2061,14 +2505,12 @@ rec {
     inherit fetchurl stdenv gettext;
   };
 
-  libextractorFun = lib.sumArgs (selectVersion ../development/libraries/libextractor)
+  libextractorFun = lib.sumArgs (selectVersion ../development/libraries/libextractor "0.5.18")
   {
     inherit fetchurl stdenv builderDefs zlib;
   };
 
-  libextractor = libextractorFun {
-    version = "0.5.18";
-  } null;
+  libextractor = libextractorFun null;
 
   libgcrypt = import ../development/libraries/libgcrypt {
     inherit fetchurl stdenv libgpgerror;
@@ -2093,6 +2535,10 @@ rec {
     inherit (gnome) glib gnomevfs libbonobo;
   };
 
+  libid3tag = import ../development/libraries/libid3tag {
+    inherit fetchurl stdenv zlib;
+  };
+
   libidn = import ../development/libraries/libidn {
 	  inherit fetchurl stdenv;
   };
@@ -2101,6 +2547,10 @@ rec {
     inherit fetchurl stdenv pkgconfig libraw1394;
   };
 
+  libjingle = selectVersion ../development/libraries/libjingle "0.3.11" {
+    inherit fetchurl stdenv mediastreamer;
+  };
+
   libjpeg = import ../development/libraries/libjpeg {
     inherit fetchurl stdenv libtool;
   };
@@ -2110,6 +2560,10 @@ rec {
     static = true;
   }));
 
+  libksba = import ../development/libraries/libksba {
+	  inherit fetchurl stdenv libgpgerror;
+  };
+
   libmad = import ../development/libraries/libmad {
     inherit fetchurl stdenv;
   };
@@ -2122,10 +2576,18 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  libnova = import ../development/libraries/libnova {
+	  inherit fetchurl stdenv;
+  };
+
   libogg = import ../development/libraries/libogg {
     inherit fetchurl stdenv;
   };
 
+  liboop = import ../development/libraries/liboop {
+    inherit fetchurl stdenv;
+  };
+
   libotr = import ../development/libraries/libotr {
     inherit fetchurl stdenv libgcrypt;
   };
@@ -2138,19 +2600,17 @@ rec {
     inherit fetchurl stdenv zlib;
   };
 
-  /*libscdFun = lib.sumArgs (selectVersion ../development/libraries/libscd) {
+  /*libscdFun = lib.sumArgs (selectVersion ../development/libraries/libscd "0.4.2") {
     inherit stdenv fetchurl builderDefs libextractor perl pkgconfig;
   };
 
-  libscd = libscdFun {
-    version = "0.4.2";
-  } null;*/
+  libscd = libscdFun null;*/
 
   libsigcxx = import ../development/libraries/libsigcxx {
     inherit fetchurl stdenv pkgconfig;
   };
 
-  libsigsegv = import ../development/libraries/libsigsegv {
+  libsigsegv = selectVersion ../development/libraries/libsigsegv "2.5" {
     inherit fetchurl stdenv;
   };
 
@@ -2178,6 +2638,10 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  libunwind = import ../development/libraries/libunwind {
+    inherit fetchurl stdenv;
+  };
+
   libvorbis = import ../development/libraries/libvorbis {
     inherit fetchurl stdenv libogg;
   };
@@ -2197,6 +2661,12 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  libxklavier = selectVersion ../development/libraries/libxklavier "3.4" {
+    inherit fetchurl stdenv xkeyboard_config pkgconfig libxml2;
+    inherit (xorg) libX11 libICE libxkbfile;
+    inherit (gtkLibs) glib;
+  };
+
   libxml2 = import ../development/libraries/libxml2 {
     inherit fetchurl stdenv zlib python;
     pythonSupport = false;
@@ -2225,13 +2695,28 @@ rec {
   };
 
   log4cxx = import ../development/libraries/log4cxx {
-	  inherit fetchurl stdenv automake autoconf libtool cppunit libxml2;
+	  inherit fetchurl stdenv automake autoconf libtool cppunit libxml2 boost;
+  };
+
+  loudmouth = import ../development/libraries/loudmouth {
+	  inherit fetchurl stdenv libidn gnutls pkgconfig;
+	  inherit (gtkLibs) glib;
   };
 
   lzo = import ../development/libraries/lzo {
 	  inherit fetchurl stdenv;
   };
 
+#failed to build
+  mediastreamerFun = lib.sumArgs (selectVersion
+      ../development/libraries/mediastreamer "2.2.0-cvs20080207") {
+    inherit fetchurl stdenv automake libtool autoconf alsaLib pkgconfig speex
+      ortp;
+    ffmpeg = ffmpeg_svn;
+  };
+
+  mediastreamer = mediastreamerFun null;
+
   mesaSupported =
     system == "i686-linux" ||
     system == "x86_64-linux";
@@ -2249,14 +2734,20 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  msilbc = selectVersion ../development/libraries/msilbc "2.0.0" {
+    inherit fetchurl stdenv ilbc mediastreamer pkgconfig;
+  };
+
   mysqlConnectorODBC = import ../development/libraries/mysql-connector-odbc {
     inherit fetchurl stdenv mysql libtool zlib unixODBC;
   };
 
-  ncurses = import ../development/libraries/ncurses {
+  ncursesFun = lib.sumArgs (import ../development/libraries/ncurses) {
     inherit fetchurl stdenv;
     unicode = (system != "i686-cygwin");
   };
+  
+  ncurses = ncursesFun null;
 
   ncursesDiet = import ../development/libraries/ncurses-diet {
     inherit fetchurl;
@@ -2312,6 +2803,10 @@ rec {
     inherit fetchurl stdenv perl;
   };
 
+  ortp = selectVersion ../development/libraries/ortp "0.13.1" {
+    inherit fetchurl stdenv;
+  };
+
   pangoxsl = import ../development/libraries/pangoxsl {
     inherit fetchurl stdenv pkgconfig;
     inherit (gtkLibs) glib pango;
@@ -2320,6 +2815,7 @@ rec {
   pcre = import ../development/libraries/pcre {
     inherit fetchurl stdenv;
     unicodeSupport = getConfig ["pcre" "unicode"] false;
+    cplusplusSupport = !stdenv ? isDietLibC;
   };
 
   poppler = import ../development/libraries/poppler {
@@ -2340,18 +2836,22 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  pth = import ../development/libraries/pth {
+	  inherit fetchurl stdenv;
+  };
+
   qt3 = import ../development/libraries/qt-3 {
     inherit fetchurl stdenv x11 zlib libjpeg libpng which mysql mesa;
     inherit (xlibs) xextproto libXft libXrender libXrandr randrproto
       libXmu libXinerama xineramaproto libXcursor;
     openglSupport = mesaSupported;
-    mysqlSupport = false;
+    mysqlSupport = getConfig ["qt" "mysql"] false;
   };
 
   qt4 = getVersion "qt4" qt4_alts;
   qt4_alts = import ../development/libraries/qt-4 {
-	inherit fetchurl fetchsvn zlib libjpeg libpng which mysql mesa openssl cups dbus
-	  fontconfig freetype pkgconfig libtiff stdenv;
+    inherit fetchurl stdenv fetchsvn zlib libjpeg libpng which mysql mesa openssl cups dbus
+	  fontconfig freetype pkgconfig libtiff;
     inherit (xlibs) xextproto libXft libXrender libXrandr randrproto
 	  libXmu libXinerama xineramaproto libXcursor libICE libSM libX11 libXext
 	  inputproto fixesproto libXfixes;
@@ -2372,8 +2872,9 @@ rec {
 
 # Also known as librdf, includes raptor and rasqal
   redland = import ../development/libraries/redland {
-    inherit fetchurl stdenv openssl libxml2 pkgconfig perl;
-	bdb = db4;
+    inherit fetchurl stdenv openssl libxml2 pkgconfig perl postgresql sqlite
+      mysql libxslt curl pcre;
+    bdb = db4;
   };
 
   rte = import ../development/libraries/rte {
@@ -2396,6 +2897,10 @@ rec {
     inherit fetchurl stdenv SDL libogg libvorbis;
   };
 
+  SDL_net = import ../development/libraries/SDL_net {
+    inherit fetchurl stdenv SDL;
+  };
+
   SDL_ttf = import ../development/libraries/SDL_ttf {
     inherit fetchurl stdenv SDL freetype;
   };
@@ -2421,10 +2926,31 @@ rec {
     inherit fetchurl stdenv zlib;
   };
 
-  tk = import ../development/libraries/tk {
+  tapioca_qt = import ../development/libraries/tapioca-qt {
+    inherit fetchsvn stdenv cmake telepathy_qt;
+	qt = qt4;
+  };
+
+  telepathy_gabble = import ../development/libraries/telepathy-gabble {
+    inherit fetchurl stdenv pkgconfig libxslt telepathy_glib loudmouth;
+  };
+
+  telepathy_glib = import ../development/libraries/telepathy-glib {
+    inherit fetchurl stdenv dbus_glib pkgconfig libxslt python;
+	inherit (gtkLibs) glib;
+  };
+
+  telepathy_qt = import ../development/libraries/telepathy-qt {
+    inherit fetchsvn stdenv cmake;
+	qt = qt4;
+  };
+
+  tkFun = lib.sumArgs (selectVersion ../development/libraries/tk "8.4.16") {
     inherit fetchurl stdenv tcl x11;
   };
 
+  tk = tkFun null;
+
   unixODBC = import ../development/libraries/unixODBC {
     inherit fetchurl stdenv;
   };
@@ -2454,7 +2980,8 @@ rec {
   };
 
   xineLib = import ../development/libraries/xine-lib {
-    inherit fetchurl stdenv zlib x11 libdvdcss alsaLib pkgconfig;
+	inherit fetchurl stdenv zlib x11 libdvdcss alsaLib pkgconfig mesa aalib SDL
+	  libvorbis libtheora speex;
     inherit (xlibs) libXv libXinerama;
   };
 
@@ -2571,25 +3098,70 @@ rec {
 
   ### DEVELOPMENT / LIBRARIES / HASKELL
 
+  binary = import ../development/libraries/haskell/binary {
+    inherit cabal; 
+  };
+
+  # cabal is a utility function to build cabal-based
+  # Haskell packages
+  cabal68 = import ../development/libraries/haskell/cabal/cabal.nix {
+    inherit stdenv fetchurl;
+    ghc = ghc68;
+  };
+  cabal = cabal68;
+
+  Crypto = import ../development/libraries/haskell/Crypto {
+    inherit cabal;
+  };
+
   gtk2hs = import ../development/libraries/haskell/gtk2hs {
-    inherit pkgconfig stdenv fetchurl cairo;
+    inherit pkgconfig stdenv fetchurl cairo ghc;
     inherit (gnome) gtk glib GConf libglade libgtkhtml gtkhtml;
-    ghc = ghc661;
   };
 
-  uulib64 = import ../development/libraries/haskell/uulib { # !!! remove?
-    inherit stdenv fetchurl ghc;
+  HDBC = import ../development/libraries/haskell/HDBC/HDBC-1.1.4.nix {
+    inherit cabal;
+  };
+
+  HDBCPostgresql = import ../development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix {
+    inherit cabal HDBC postgresql;
+  };
+
+  HDBCSqlite = import ../development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix {
+    inherit cabal HDBC sqlite;
+  };
+
+  pcreLight = import ../development/libraries/haskell/pcre-light {
+    inherit cabal pcre;
   };
 
-  uulib66 = import ../development/libraries/haskell/uulib-ghc-6.6 { # !!! ugh
-    inherit stdenv fetchurl autoconf;
-    ghc = ghc66;
+  uulib = import ../development/libraries/haskell/uulib {
+    inherit cabal;
   };
 
   wxHaskell = import ../development/libraries/haskell/wxHaskell {
-    inherit stdenv fetchurl unzip ghc wxGTK;
+    inherit stdenv fetchurl unzip wxGTK;
+    ghc = ghc661;
+  };
+
+  # wxHaskell68 = lowPrio (appendToName "ghc68" (import ../development/libraries/haskell/wxHaskell {
+  #   inherit stdenv fetchurl unzip wxGTK;
+  #   ghc = ghc68;
+  # }));
+
+  X11 = import ../development/libraries/haskell/X11 {
+    inherit cabal;
+    inherit (xlibs) libX11 libXinerama libXext;
+    xineramaSupport = true;
+  };
+
+  vty = import ../development/libraries/haskell/vty {
+    inherit cabal;
   };
 
+  zlibHaskell = import ../development/libraries/haskell/zlib {
+    inherit cabal zlib;
+  };
 
   ### DEVELOPMENT / PERL MODULES
 
@@ -2614,6 +3186,14 @@ rec {
     inherit fetchurl perl;
   };
 
+  perlCryptPasswordMD5 = import ../development/perl-modules/generic perl {
+    name = "Crypt-PasswdMD5-1.3";
+    src = fetchurl {
+      url = http://search.cpan.org/CPAN/authors/id/L/LU/LUISMUNOZ/Crypt-PasswdMD5-1.3.tar.gz;
+      sha256 = "13j0v6ihgx80q8jhyas4k48b64gnzf202qajyn097vj8v48khk54";
+    };
+  };
+
   perlDateManip = import ../development/perl-modules/generic perl {
     name = "DateManip-5.42a";
     src = fetchurl {
@@ -2622,6 +3202,10 @@ rec {
     };
   };
 
+  perlDBFile = import ../development/perl-modules/DB_File {
+    inherit fetchurl perl db4;
+  };
+
   perlDigestSHA1 = import ../development/perl-modules/generic perl {
     name = "Digest-SHA1-2.11";
     src = fetchurl {
@@ -2716,6 +3300,14 @@ rec {
     };
   };
 
+  perlStringMkPasswd = import ../development/perl-modules/generic perl {
+    name = "String-MkPasswd-0.02";
+    src = fetchurl {
+      url = http://search.cpan.org/CPAN/authors/id/C/CG/CGRAU/String-MkPasswd-0.02.tar.gz;
+      sha256 = "0si4xfgf8c2pfag1cqbr9jbyvg3hak6wkmny56kn2qwa4ljp9bk6";
+    };
+  };
+
   perlTermReadKey = import ../development/perl-modules/generic perl {
     name = "TermReadKey-2.30";
     src = fetchurl {
@@ -2890,10 +3482,26 @@ rec {
     inherit fetchurl stdenv ;
   };
 
+  ejabberd = import ../servers/xmpp/ejabberd {
+    inherit fetchurl stdenv expat erlang zlib openssl;
+  };
+
+  fingerd_bsd = import ../servers/fingerd/bsd-fingerd {
+	  inherit fetchurl stdenv;
+  };
+
   ircdHybrid = import ../servers/irc/ircd-hybrid {
 		inherit fetchurl stdenv openssl zlib;
 	};
 
+  jboss = import ../servers/http/jboss {
+    inherit fetchurl stdenv jdk5 jdk;
+  };
+
+  jboss_mysql_jdbc = import ../servers/http/jboss/jdbc/mysql {
+    inherit stdenv jboss mysql_jdbc;
+  };
+
   jetty = import ../servers/http/jetty {
     inherit fetchurl stdenv unzip;
   };
@@ -2902,13 +3510,17 @@ rec {
     inherit fetchurl stdenv apacheHttpd python;
   };
 
-  mysql4 = import ../servers/sql/mysql {
+  tomcat_connectors = import ../servers/http/apache-modules/tomcat-connectors {
+    inherit fetchurl stdenv apacheHttpd jdk;
+  };
+
+  mysql = import ../servers/sql/mysql {
     inherit fetchurl stdenv ncurses zlib perl;
     ps = procps; /* !!! Linux only */
   };
 
-  mysql = import ../servers/sql/mysql5 {
-    inherit fetchurl stdenv ncurses zlib perl;
+  mysql5 = import ../servers/sql/mysql5 {
+    inherit fetchurl stdenv ncurses zlib perl openssl;
     ps = procps; /* !!! Linux only */
   };
 
@@ -2925,7 +3537,7 @@ rec {
     inherit fetchurl stdenv openssh;
   };
 
-  postgresql = import ../servers/sql/postgresql {
+  postgresql = selectVersion ../servers/sql/postgresql "8.3.0" {
     inherit fetchurl stdenv readline ncurses zlib;
   };
 
@@ -2934,27 +3546,34 @@ rec {
   };
 
   samba = import ../servers/samba {
-    inherit stdenv fetchurl readline openldap pam;
+    inherit stdenv fetchurl readline openldap pam kerberos popt iniparser
+	libunwind acl fam;
   };
 
   squid = import ../servers/squid {
-    inherit fetchurl stdenv mkDerivationByConfiguration perl;
-    lib = lib_unstable;
+    inherit fetchurl stdenv mkDerivationByConfiguration perl lib;
   };
 
   tomcat5 = import ../servers/http/tomcat {
     inherit fetchurl stdenv jdk;
   };
 
+  tomcat6 = import ../servers/http/tomcat/6.0.nix {
+    inherit fetchurl stdenv jdk;
+  };
+
+  axis2 = import ../servers/http/tomcat/axis2 {
+    inherit fetchurl stdenv jdk apacheAnt unzip;  
+  };
+
   vsftpd = import ../servers/ftp/vsftpd {
-    inherit fetchurl openssl ;
-    stdenv = overrideGCC stdenv gcc295 ;
+    inherit fetchurl openssl stdenv libcap pam;
   };
 
   xorg = recurseIntoAttrs (import ../servers/x11/xorg {
     inherit fetchurl stdenv pkgconfig freetype fontconfig
       libxslt expat libdrm libpng zlib perl mesa mesaHeaders
-      xkeyboard_config gettext;
+      xkeyboard_config dbus hal;
   });
 
 
@@ -2963,7 +3582,7 @@ rec {
   # this creates a patch which can be applied to the kernel to integrate this module..
   kernel_module_acerhk = import ../os-specific/linux/kernel/acerhk {
     inherit fetchurl stdenv gnupatch;
-    kernel = builtins.getAttr "2.6.21" kernel_alts;
+    kernel = kernel_2_6_21;
     debug = true;
   };
 
@@ -2981,16 +3600,17 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  atherosFun = lib.sumArgs (selectVersion ../os-specific/linux/atheros) {
+  atherosFun = lib.sumArgs (selectVersion ../os-specific/linux/atheros "r3122") {
     inherit fetchurl stdenv builderDefs;
   };
 
-  atherosVersion = "r3122";
+  atherosFunCurrent = kernel: atherosFun {
+    inherit kernel;
+  } null;
 
-  atherosFunCurrent = theKernel: (atherosFun {
-    version = atherosVersion;
-    kernel = theKernel;
-  } null);
+  aufs = import ../os-specific/linux/aufs {
+    inherit fetchurl stdenv kernel;
+  };
 
   bridge_utils = import ../os-specific/linux/bridge_utils {
     inherit fetchurl stdenv autoconf automake;
@@ -3013,13 +3633,11 @@ rec {
     static = true;
   }));
 
-  dmidecodeFun = lib.sumArgs (selectVersion ../os-specific/linux/dmidecode) {
+  dmidecodeFun = lib.sumArgs (selectVersion ../os-specific/linux/dmidecode "2.9") {
     inherit fetchurl stdenv builderDefs;
   };
 
-  dmidecode = dmidecodeFun {
-    version = "2.9";
-  } null;
+  dmidecode = dmidecodeFun null;
 
   dietlibc = import ../os-specific/linux/dietlibc {
     inherit fetchurl glibc;
@@ -3053,6 +3671,10 @@ rec {
     inherit fetchurl stdenv utillinux;
   };
 
+  fxload = import ../os-specific/linux/fxload {
+    inherit fetchurl stdenv;
+  };
+
   genext2fs = import ../os-specific/linux/genext2fs {
     inherit fetchurl stdenv;
   };
@@ -3069,7 +3691,7 @@ rec {
   };
  
   htop = import ../os-specific/linux/htop {
-	  inherit fetchurl stdenv ncurses;
+    inherit fetchurl stdenv ncurses;
   };
 
   hwdata = import ../os-specific/linux/hwdata {
@@ -3111,6 +3733,10 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  iwlwifi4965ucode = import ../os-specific/linux/firmware/iwlwifi-4965-ucode {
+    inherit fetchurl stdenv;
+  };
+
   kbd = import ../os-specific/linux/kbd {
     inherit fetchurl stdenv bison flex;
   };
@@ -3145,27 +3771,203 @@ rec {
     modules = [];
   };
 
-  systemKernel = kernel;
+  kernel = kernel_2_6_23;
+
+  systemKernel = (if (getConfig ["kernel" "version"] "2.6.21") == "2.6.22" then
+	kernel_2_6_22 else if (getConfig ["kernel" "version"] "2.6.21") == "2.6.23" then
+	kernel_2_6_23 else kernel);
 
-  kernel = getVersion "kernel" kernel_alts;
+  kernel_2_6_20 = import ../os-specific/linux/kernel/linux-2.6.20.nix {
+    inherit fetchurl stdenv perl mktemp module_init_tools;
+    kernelPatches = [
+      { name = "paravirt-nvidia";
+        patch = ../os-specific/linux/kernel/2.6.20-paravirt-nvidia.patch;
+      }
+      { name = "skas-2.6.20-v9-pre9";
+        patch = fetchurl {
+          url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2;
+          md5 = "02e619e5b3aaf0f9768f03ac42753e74";
+        };
+        extraConfig =
+          "CONFIG_PROC_MM=y\n" +
+          "# CONFIG_PROC_MM_DUMPABLE is not set\n";
+      }
+      { name = "fbsplash-0.9.2-r5-2.6.20-rc6";
+        patch = fetchurl {
+          url = http://dev.gentoo.org/~spock/projects/gensplash/archive/fbsplash-0.9.2-r5-2.6.20-rc6.patch;
+          sha256 = "11v4f85f4jnh9sbhqcyn47krb7l1czgzjw3w8wgbq14jm0sp9294";
+        };
+        extraConfig = "CONFIG_FB_SPLASH=y";
+      }
+    ];
+  };
+
+  kernel_2_6_21 = import ../os-specific/linux/kernel/linux-2.6.21.nix {
+    inherit fetchurl stdenv perl mktemp module_init_tools;
+    kernelPatches = [
+      { name = "ext3cow";
+        patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch;
+        extraConfig =  
+	"CONFIG_EXT3COW_FS=m\n" +
+	"CONFIG_EXT3COW_FS_XATTR=y\n" +
+	"CONFIG_EXT3COW_FS_POSIX_ACL=y\n" +
+	"CONFIG_EXT3COW_FS_SECURITY=y\n";
+      }
+      /* commented out because only acer users have need for it.. 
+         It takes quite a while to create the patch when unpacking the kernel sources only for that task
+      { name = "acerhk";
+        patch = kernel_module_acerhk + "/acerhk-patch.tar.bz2" ;
+        extraConfig =  
+	"CONFIG_ACERHK=m\n";
+      }
+      */
+      { name = "paravirt-nvidia";
+        patch = ../os-specific/linux/kernel/2.6.20-paravirt-nvidia.patch;
+      }
+      { name = "skas-2.6.20-v9-pre9";
+        patch = fetchurl {
+          url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2;
+          md5 = "02e619e5b3aaf0f9768f03ac42753e74";
+        };
+        extraConfig =
+          "CONFIG_PROC_MM=y\n" +
+          "# CONFIG_PROC_MM_DUMPABLE is not set\n";
+      }
+      { name = "fbsplash-0.9.2-r5-2.6.21";
+        patch = fetchurl {
+          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch;
+          sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8";
+        };
+        extraConfig = "CONFIG_FB_SPLASH=y";
+      }
+    ];
+  };
+
+  kernel_2_6_22 = import ../os-specific/linux/kernel/linux-2.6.22.nix {
+    inherit fetchurl stdenv perl mktemp module_init_tools;
+    kernelPatches = [
+      /*
+      { name = "ext3cow";
+        patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch;
+        extraConfig =
+        "CONFIG_EXT3COW_FS=m\n" +
+        "CONFIG_EXT3COW_FS_XATTR=y\n" +
+        "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" +
+        "CONFIG_EXT3COW_FS_SECURITY=y\n";
+      }
+      */
+      /*
+      { name = "skas-2.6.20-v9-pre9";
+        patch = fetchurl {
+          url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2;
+          md5 = "02e619e5b3aaf0f9768f03ac42753e74";
+        };
+        extraConfig =
+          "CONFIG_PROC_MM=y\n" +
+          "# CONFIG_PROC_MM_DUMPABLE is not set\n";
+      }
+      */
+      { name = "fbsplash-0.9.2-r5-2.6.21";
+        patch = fetchurl {
+          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch;
+          sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px";
+        };
+        extraConfig = "CONFIG_FB_SPLASH=y";
+      }
+    ];
+    extraConfig =
+      lib.optional (getConfig ["kernel" "no_hz"] false) "CONFIG_NO_HZ=y" ++
+      lib.optional (getConfig ["kernel" "timer_stats"] false) "CONFIG_TIMER_STATS=y" ++
+      lib.optional (getConfig ["kernel" "usb_suspend"] false) "CONFIG_USB_SUSPEND=y" ++
+      lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++
+      [(getConfig ["kernel" "addConfig"] "")];
+  };
+
+  kernel_2_6_21_ck = import ../os-specific/linux/kernel/linux-2.6.21_ck.nix {
+    inherit fetchurl stdenv perl mktemp module_init_tools;
+    kernelPatches = [
+      { name = "ext3cow";
+        patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch;
+        extraConfig =
+        "CONFIG_EXT3COW_FS=m\n" +
+        "CONFIG_EXT3COW_FS_XATTR=y\n" +
+        "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" +
+        "CONFIG_EXT3COW_FS_SECURITY=y\n";
+      }
+      { name = "Con Kolivas Patch";
+        patch = ../os-specific/linux/kernel/patch-2.6.21-ck1;
+      }
+      { name = "paravirt-nvidia";
+        patch = ../os-specific/linux/kernel/2.6.20-paravirt-nvidia.patch;
+      }
+      { name = "skas-2.6.20-v9-pre9";
+        patch = fetchurl {
+          url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2;
+          md5 = "02e619e5b3aaf0f9768f03ac42753e74";
+        };
+        extraConfig =
+          "CONFIG_PROC_MM=y\n" +
+          "# CONFIG_PROC_MM_DUMPABLE is not set\n";
+      }
+      { name = "fbsplash-0.9.2-r5-2.6.21";
+        patch = fetchurl {
+          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch;
+          sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8";
+        };
+        extraConfig = "CONFIG_FB_SPLASH=y";
+      }
+    ];
+  };
 
-  kernel_alts = import ../os-specific/linux/kernel {
+  kernel_2_6_23 = import ../os-specific/linux/kernel/linux-2.6.23.nix {
     inherit fetchurl stdenv perl mktemp module_init_tools;
-    extraPatches = getConfig ["kernel" "extraPatches"] [];
+    kernelPatches = [
+      /*
+      { # resume with resume=swap:/dev/xx
+        name = "tux on ice"; # (swsusp2)
+        patch = fetchurl {
+          url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc5-for-2.6.23.14.patch.bz2";
+          sha256 = "187190rxbn9x1c6bwv59mwy1zhff8nn5ad58cfiz23wa5wrk4mif";
+        };
+        extraConfig = "
+          CONFIG_SUSPEND2=y
+          CONFIG_SUSPEND2_FILE=y
+          CONFIG_SUSPEND2_SWAP=y
+          CONFIG_CRYPTO_LZF=y
+        ";
+      }
+      */
+      { name = "fbsplash-0.9.2-r5-2.6.21";
+        patch = fetchurl {
+          url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch;
+          sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px";
+        };
+        extraConfig = "CONFIG_FB_SPLASH=y";
+      }
+      /* !!! Not needed anymore for the NixOS LiveCD - we have AUFS. */
+      { name = "unionfs-2.2.2";
+        patch = fetchurl {
+          url = http://download.filesystems.org/unionfs/unionfs-2.x/unionfs-2.2.2_for_2.6.23.13.diff.gz;
+          sha256 = "104hahp6fjpxwprcl2njw5mimyh442ma3cp5r1ww0mzq3vwrcdyz";
+        };
+        extraConfig = ''
+          CONFIG_UNION_FS=m
+          CONFIG_UNION_FS_XATTR=y
+        '';
+      }
+    ];
     extraConfig =
       lib.optional (getConfig ["kernel" "timer_stats"] false) "CONFIG_TIMER_STATS=y" ++
       lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++
       [(getConfig ["kernel" "addConfig"] "")];
-	configFile = getConfig ["kernel" "configFile"] null;
   };
 
-  kqemuFun = lib.sumArgs (selectVersion ../os-specific/linux/kqemu) {
+  kqemuFun = lib.sumArgs (selectVersion ../os-specific/linux/kqemu "1.3.0pre11") {
     inherit fetchurl stdenv builderDefs;
   };
 
   # No finished expression is provided - pick your own kernel
   kqemuFunCurrent = theKernel:  (kqemuFun { 
-    version = "1.3.0pre11";
     kernel = theKernel;
   } null);
 
@@ -3177,6 +3979,7 @@ rec {
     inherit fetchurl stdenv;
   };
 
+ 
   libsexy = import ../development/libraries/libsexy {
     inherit stdenv fetchurl pkgconfig libxml2;
     inherit (gtkLibs) glib gtk pango;
@@ -3199,10 +4002,11 @@ rec {
   };
 
   klibc = import ../os-specific/linux/klibc {
-    inherit fetchurl stdenv perl bison mktemp kernel;
+    inherit fetchurl stdenv perl bison mktemp;
+	kernel = systemKernel;
   };
 
-  kvm = kvm49;
+  kvm = kvm57;
 
   kvm12 = import ../os-specific/linux/kvm/12.nix {
     inherit fetchurl zlib e2fsprogs SDL alsaLib;
@@ -3222,6 +4026,12 @@ rec {
     kernelHeaders = kernelHeaders_2_6_23;
   };
 
+  kvm57 = import ../os-specific/linux/kvm/57.nix {
+    inherit fetchurl zlib e2fsprogs SDL alsaLib;
+    stdenv = overrideGCC stdenv gcc34;
+    kernelHeaders = kernelHeaders_2_6_23;
+  };
+
   libcap = import ../os-specific/linux/libcap {
     inherit fetchurl stdenv;
   };
@@ -3346,18 +4156,20 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  reiser4progs = import ../os-specific/linux/reiser4progs {
+    inherit fetchurl stdenv libaal;
+  };
+
   radeontools = import ../os-specific/linux/radeontools {
     inherit pciutils;
     inherit fetchurl stdenv;
   };
 
-  sdparmFun = lib.sumArgs (selectVersion ../os-specific/linux/sdparm) {
+  sdparmFun = lib.sumArgs (selectVersion ../os-specific/linux/sdparm "1.02") {
     inherit fetchurl stdenv builderDefs;
   };
 
-  sdparm = sdparmFun {
-    version = "1.02";
-  } null;
+  sdparm = sdparmFun null;
  
   shadowutils = import ../os-specific/linux/shadow {
     inherit fetchurl stdenv;
@@ -3405,10 +4217,10 @@ rec {
     inherit fetchurl stdenv;
   };
 
-  uml = (import ../os-specific/linux/kernel {
+  uml = import ../os-specific/linux/kernel/linux-2.6.20.nix {
     inherit fetchurl stdenv perl mktemp module_init_tools;
     userModeLinux = true;
-  }).default;
+  };
 
   umlutilities = import ../os-specific/linux/uml-utilities {
     inherit fetchurl kernelHeaders stdenv;
@@ -3440,10 +4252,18 @@ rec {
     stdenv = makeStaticBinaries stdenv;
   }));
 
+  wesnoth = import ../games/wesnoth {
+    inherit fetchurl stdenv SDL SDL_image SDL_mixer SDL_net gettext zlib boost freetype;
+  };
+
   wirelesstools = import ../os-specific/linux/wireless-tools {
     inherit fetchurl stdenv;
   };
 
+  wis_go7007 = import ../os-specific/linux/wis-go7007 {
+    inherit fetchurl stdenv kernel ncurses fxload;
+  };
+
   wpa_supplicant = import ../os-specific/linux/wpa_supplicant {
     inherit fetchurl stdenv openssl;
   };
@@ -3452,6 +4272,9 @@ rec {
     inherit stdenv xlibs expat libdrm;
   };
 
+  zd1211fw = import ../os-specific/linux/firmware/zd1211 {
+    inherit stdenv fetchurl;
+  };
 
   ### DATA
 
@@ -3507,9 +4330,9 @@ rec {
      inherit fetchurl stdenv;
   };
 
-  shared_mime_info = import ../data/misc/shared-mime-info {
-	inherit fetchurl stdenv perl perlXMLParser pkgconfig gettext libxml2;
-	inherit (gtkLibs) glib;
+  shared_mime_info = selectVersion ../data/misc/shared-mime-info "0.23" {
+    inherit fetchurl stdenv perl perlXMLParser pkgconfig gettext libxml2;
+    inherit (gtkLibs) glib;
   };
 
   iana_etc = import ../data/misc/iana-etc {
@@ -3517,7 +4340,7 @@ rec {
   };
 
   poppler_data = import ../data/misc/poppler-data {
-	  inherit fetchurl stdenv;
+    inherit fetchurl stdenv;
   };
 
   ttf_bitstream_vera = import ../data/fonts/ttf-bitstream-vera {
@@ -3528,11 +4351,13 @@ rec {
     inherit fetchurl stdenv cabextract;
   };
 
-  xkeyboard_config = import ../data/misc/xkeyboard-config {
-    inherit fetchurl stdenv perl perlXMLParser;
+  xkeyboard_configFun = lib.sumArgs (selectVersion ../data/misc/xkeyboard-config "1.2") {
+    inherit fetchurl stdenv perl perlXMLParser gettext;
     inherit (xlibs) xkbcomp;
   };
 
+  xkeyboard_config = xkeyboard_configFun null;
+
 
   ### APPLICATIONS
 
@@ -3575,10 +4400,25 @@ rec {
     inherit builderDefs stringsWithDeps;
   };
 
+  aumix = import ../applications/audio/aumix {
+    inherit fetchurl stdenv ncurses pkgconfig gettext;
+    inherit (gtkLibs) gtk;
+    gtkGUI = false;
+  };
+
   batik = import ../applications/graphics/batik {
     inherit fetchurl stdenv unzip;
   };
 
+  bazaar = import ../applications/version-management/bazaar {
+    inherit fetchurl stdenv python makeWrapper;
+  };
+
+  bitlbee = import ../applications/networking/instant-messengers/bitlbee {
+    inherit fetchurl stdenv gnutls pkgconfig;
+    inherit (gtkLibs) glib;
+  };
+
   # commented out because it's using the new configuration style proposal which is unstable
   #biew = import ../applications/misc/biew {
   #  inherit lib stdenv fetchurl ncurses;
@@ -3590,11 +4430,11 @@ rec {
     inherit fetchurl stdenv;
     openal = openalSoft;
   };
+
   blender = import ../applications/misc/blender {
-    inherit cmake mesa gettext freetype SDL libtiff fetchurl glibc scons x11
-      libjpeg libpng zlib stdenv /* smpeg  sdl */;
+    inherit stdenv cmake mesa gettext freetype SDL libtiff fetchurl glibc scons x11 lib
+      libjpeg libpng zlib /* smpeg  sdl */;
     inherit (xlibs) inputproto libXi;
-    lib = lib_unstable;
     python = builtins.getAttr "2.5" python_alts;
     freealut = freealut_soft;
     openal = openalSoft;
@@ -3615,6 +4455,10 @@ rec {
     inherit fetchurl stdenv pkgconfig bmp;
   };
 
+  bvi = import ../applications/editors/bvi {
+    inherit fetchurl stdenv ncurses;
+  };
+
   cdparanoiaIII = import ../applications/audio/cdparanoia {
     inherit fetchurl stdenv;
   };
@@ -3652,7 +4496,7 @@ rec {
     version = "0.6.2";
   };
 
-  compizFun = lib.sumArgs (assert mesaSupported; selectVersion ../applications/window-managers/compiz) {
+  compizFun = lib.sumArgs (assert mesaSupported; selectVersion ../applications/window-managers/compiz "0.6.2") {
     inherit lib builderDefs stringsWithDeps;
     inherit fetchurl stdenv pkgconfig libpng mesa perl perlXMLParser libxslt;
     inherit (xorg) libXcomposite libXfixes libXdamage libXrandr
@@ -3670,7 +4514,6 @@ rec {
   };
 
   compiz = compizFun {
-    version = getConfig ["compiz" "version"] "0.6.2";
     extraConfigureFlags = getConfig ["compiz" "extraConfigureFlags"] [];
   } null;
 
@@ -3700,6 +4543,10 @@ rec {
     inherit (gtkLibs) gtk;
   };
 
+  bbdb = import ../applications/editors/emacs-modes/bbdb {
+    inherit fetchurl stdenv emacs texinfo ctags;
+  };
+
   cua = import ../applications/editors/emacs-modes/cua {
     inherit fetchurl stdenv;
   };
@@ -3709,7 +4556,7 @@ rec {
   };
 
   cvs2svn = import ../applications/version-management/cvs2svn {
-    inherit fetchurl stdenv python bsddb3 makeWrapper;
+    inherit fetchurl stdenv python makeWrapper;
   };
 
   d4x = import ../applications/misc/d4x {
@@ -3718,7 +4565,14 @@ rec {
   };
   
   darcs = import ../applications/version-management/darcs {
-    inherit fetchurl stdenv ghc zlib ncurses curl;
+    inherit fetchurl stdenv zlib ncurses curl;
+    ghc = ghc661;
+  };
+
+  # some speed bottle necks are resolved in this version I think .. perhaps you like to try it? 
+  darcs_2_pre = import ../applications/version-management/darcs_2_pre.nix {
+    inherit fetchurl stdenv zlib ncurses curl;
+    ghc = ghc661;
   };
 
   dia = import ../applications/graphics/dia {
@@ -3731,7 +4585,7 @@ rec {
   djvulibre = import ../applications/misc/djvulibre {
     inherit stdenv fetchurl libjpeg libtiff libungif zlib
 	ghostscript libpng x11 mesa;
-    qt = qt3;
+    qt = if (getConfig ["djvulibre" "qt3Frontend"] true) then qt3 else null;
     inherit (xlibs) libX11;
   };
 
@@ -3739,13 +4593,12 @@ rec {
     inherit fetchurl stdenv qt4 djvulibre;
   };
 
-  dvdplusrwtoolsFun = lib.sumArgs (selectVersion ../os-specific/linux/dvd+rw-tools) {
+  /* TODO: rename to be able to set version */
+  dvdplusrwtoolsFun = lib.sumArgs (selectVersion ../os-specific/linux/dvd+rw-tools "7.0") {
     inherit fetchurl stdenv builderDefs cdrkit m4;
   };
  
-  dvdplusrwtools = dvdplusrwtoolsFun {
-    version = "7.0";
-  } null;
+  dvdplusrwtools = dvdplusrwtoolsFun null;
 
   eclipse = plugins:
     import ../applications/editors/eclipse {
@@ -3797,13 +4650,13 @@ rec {
     openexr = openexr_1_6_1;
   };
 
-  fbpanelFun = lib.sumArgs (selectVersion ../applications/window-managers/fbpanel) {
+  fbpanelFun = lib.sumArgs (selectVersion ../applications/window-managers/fbpanel "4.12") {
     inherit fetchurl stdenv builderDefs pkgconfig libpng libjpeg libtiff librsvg;
     inherit (gtkLibs) gtk;
     inherit (xlibs) libX11 libXmu libXpm;
   };
 
-  fbpanel = fbpanelFun {version="4.12";} null;
+  fbpanel = fbpanelFun null;
 
   fetchmail = import ../applications/misc/fetchmail {
     inherit stdenv fetchurl;
@@ -3828,25 +4681,16 @@ rec {
 
   firefoxWrapper = wrapFirefox firefox "";
 
-  firefox3b1 = lowPrio (import ../applications/networking/browsers/firefox3b1 {
+  firefox3 = lowPrio (import ../applications/networking/browsers/firefox-3 {
     inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo
-    	python curl coreutils;
-    inherit (gtkLibs) gtk;
-    inherit (gnome) libIDL;
-    inherit (xlibs) libXi;
-    #enableOfficialBranding = true;
-  });
-
-  firefox3b2 = lowPrio (import ../applications/networking/browsers/firefox3b1/3b2.nix {
-    inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo
-    python curl coreutils dbus dbus_glib freetype fontconfig;
+      python curl coreutils dbus dbus_glib freetype fontconfig;
     inherit (gtkLibs) gtk pango;
     inherit (gnome) libIDL;
     inherit (xlibs) libXi libX11 libXrender libXft libXt;
     #enableOfficialBranding = true;
   });
 
-  firefox3b1Bin = lowPrio (import ../applications/networking/browsers/firefox3b1/binary.nix {
+  firefox3b1Bin = lowPrio (import ../applications/networking/browsers/firefox-3/binary.nix {
     inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo
     	python curl coreutils freetype fontconfig;
     inherit (gtkLibs) gtk atk pango glib;
@@ -3854,13 +4698,15 @@ rec {
     inherit (xlibs) libXi libX11 libXrender libXft libXt;
   });
 
-  firefox3b1Wrapper = lowPrio (wrapFirefox firefox3b1 "");
+  firefox3Wrapper = lowPrio (wrapFirefox firefox3 "");
   firefox3b1BinWrapper = lowPrio (wrapFirefox firefox3b1Bin "");
  
-  flac = import ../applications/audio/flac {
+  flacAlts = import ../applications/audio/flac {
     inherit fetchurl stdenv libogg;
   };
 
+  flac = getVersion "flac" flacAlts;
+
   flashplayer = flashplayer9;
 
   flashplayer7 = import ../applications/networking/browsers/mozilla-plugins/flashplayer-7 {
@@ -3914,7 +4760,13 @@ rec {
   };
 
   git = import ../applications/version-management/git {
-    inherit fetchurl stdenv curl openssl zlib expat perl;
+    inherit fetchurl stdenv curl openssl zlib expat perl gettext emacs;
+  };
+
+  gkrellm = import ../applications/misc/gkrellm {
+    inherit fetchurl stdenv gettext pkgconfig;
+    inherit (gtkLibs) glib gtk;
+    inherit (xlibs) libX11 libICE libSM;
   };
 
   gnash = assert mesaSupported; import ../applications/video/gnash {
@@ -3923,11 +4775,11 @@ rec {
     inherit (xlibs) libX11 libXext libXi libXmu;
   };
 
-  gocrFun = lib.sumArgs (selectVersion ../applications/graphics/gocr) {
+  gocrFun = lib.sumArgs (selectVersion ../applications/graphics/gocr "0.44") {
     inherit builderDefs fetchurl stdenv;
   };
 
-  gocr = gocrFun {version = "0.44";} null;
+  gocr = gocrFun null;
 
   gphoto2 = import ../applications/misc/gphoto2 {
     inherit fetchurl stdenv pkgconfig libgphoto2 libexif popt readline gettext;
@@ -3964,7 +4816,7 @@ rec {
     inherit (xlibs) libX11 libXft libXext libXinerama libXrandr;
   };
 
-  imagemagickFun = lib.sumArgs (import ../applications/graphics/ImageMagick) {
+  imagemagickFun = lib.sumArgs (selectVersion ../applications/graphics/ImageMagick "6.3.8-5" ) {
     inherit stdenv fetchurl libtool; 
   };
 
@@ -3982,9 +4834,9 @@ rec {
 
   inkscape = import ../applications/graphics/inkscape {
     inherit fetchurl stdenv perl perlXMLParser pkgconfig zlib
-      popt libxml2 libxslt libpng boehmgc fontconfig gtkmm
-      glibmm libsigcxx lcms boost gettext;
-    inherit (gtkLibs) gtk glib;
+      popt libxml2 libxslt libpng boehmgc fontconfig
+      libsigcxx lcms boost gettext cairomm;
+    inherit (gtkLibs) gtk glib glibmm gtkmm;
     inherit (xlibs) libXft;
   };
 
@@ -3999,7 +4851,7 @@ rec {
   };
 
   jedit = import ../applications/jedit {
-    inherit fetchurl ant stdenv;
+    inherit fetchurl stdenv ant;
   };
 
   joe = import ../applications/editors/joe {
@@ -4007,15 +4859,14 @@ rec {
   };
 
   kino = import ../applications/video/kino {
-    inherit fetchurl pkgconfig libxml2 perl perlXMLParser stdenv
+    inherit fetchurl stdenv pkgconfig libxml2 perl perlXMLParser 
       libdv libraw1394 libavc1394 libiec61883 x11 gettext cairo; /* libavformat */
     inherit libsamplerate ffmpeg;
     inherit (gnome) libglade gtk glib;
     inherit (xlibs) libXv libX11;
     inherit (gtkLibs) pango;
-
-  # #  optional
-  #  inherit ffmpeg2theora sox, vorbis-tools lame mjpegtools dvdauthor 'Q'dvdauthor growisofs mencoder;
+    # #  optional
+    #  inherit ffmpeg2theora sox, vorbis-tools lame mjpegtools dvdauthor 'Q'dvdauthor growisofs mencoder;
   };
 
   kuickshow = import ../applications/graphics/kuickshow {
@@ -4025,7 +4876,7 @@ rec {
   };
 
   lame = import ../applications/audio/lame {
-    inherit fetchurl stdenv ;
+    inherit fetchurl stdenv;
   };
 
   ladspaH = import ../applications/audio/ladspa-plugins/ladspah.nix {
@@ -4044,6 +4895,11 @@ rec {
     inherit fetchurl stdenv ncurses openssl;
   };
 
+  lyx = import ../applications/misc/lyx {
+   inherit fetchurl stdenv tetex python;
+   qt = qt4;
+  };
+
   maxima = import ../applications/misc/maxima {
     inherit fetchurl stdenv clisp;
   };
@@ -4072,6 +4928,10 @@ rec {
     inherit (xlibs) libXi;
   };
 
+  mpg321 = import ../applications/audio/mpg321 {
+    inherit stdenv fetchurl libao libmad libid3tag zlib;
+  };
+
   MPlayer = import ../applications/video/MPlayer {
     inherit fetchurl stdenv freetype x11 zlib libtheora libcaca freefont_ttf libdvdnav;
     inherit (xlibs) libX11 libXv libXinerama libXrandr;
@@ -4190,7 +5050,7 @@ rec {
     python = builtins.getAttr "2.5" python_alts;
   };
 
-  qemuFun = lib.sumArgs (selectVersion ../applications/virtualization/qemu ) {
+  qemuFun = lib.sumArgs (selectVersion ../applications/virtualization/qemu "0.9.0") {
     inherit fetchurl;
     stdenv = overrideGCC stdenv gcc34;
     builderDefs = builderDefs {
@@ -4199,18 +5059,14 @@ rec {
     inherit SDL zlib which;
   };
 
-  qemu = qemuFun {
-    version = "0.9.0";
-  } null;
+  qemu = qemuFun null;
 
   qemuImageFun = lib.sumArgs 
-    (selectVersion ../applications/virtualization/qemu/linux-img ) {
+    (selectVersion ../applications/virtualization/qemu/linux-img "0.2") {
     inherit builderDefs fetchurl stdenv;
   };
 
-  qemuImage = qemuImageFun {
-    version = "0.2";
-  } null;
+  qemuImage = qemuImageFun null;
 
   ratpoison = import ../applications/window-managers/ratpoison {
     inherit fetchurl stdenv fontconfig readline;
@@ -4222,6 +5078,11 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  rdesktop = import ../applications/networking/remote/rdesktop {
+    inherit fetchurl stdenv openssl;
+    inherit (xlibs) libX11;
+  };
+
   RealPlayer = import ../applications/video/RealPlayer {
     inherit fetchurl stdenv;
     inherit (gtkLibs) glib pango atk gtk;
@@ -4240,7 +5101,7 @@ rec {
 
   # = urxvt
   rxvt_unicode = import ../applications/misc/rxvt_unicode {
-    inherit lib fetchurl stdenv perl;
+    inherit lib fetchurl stdenv;
     inherit (xlibs) libXt libX11 libXft;
   };
 
@@ -4302,12 +5163,14 @@ rec {
   };
 
   subversion14 = import ../applications/version-management/subversion-1.4.x {
-    inherit fetchurl stdenv apr aprutil neon expat swig zlib;
-    bdbSupport = true;
-    httpServer = false;
+    inherit fetchurl stdenv apr aprutil neon expat swig zlib jdk;
+    bdbSupport = getConfig ["subversion" "bdbSupport"] true;
+    httpServer = getConfig ["subversion" "httpServer"] false;
+    sslSupport = getConfig ["subversion" "sslSupport"] true;
+	pythonBindings = getConfig ["subversion" "pythonBindings"] false;
     perlBindings = getConfig ["subversion" "perlBindings"] false;
-    sslSupport = true;
-    compressionSupport = true;
+	javahlBindings = getConfig ["subversion" "javahlBindings"] false;
+    compressionSupport = getConfig ["subversion" "compressionSupport"] true;
     httpd = apacheHttpd;
   };
 
@@ -4353,6 +5216,10 @@ rec {
     inherit fetchurl stdenv alsaLib;
   };
 
+  tla = import ../applications/version-management/arch {
+    inherit fetchurl stdenv diffutils gnutar gnupatch which;
+  };
+
   unison = import ../applications/networking/sync/unison {
     inherit fetchurl stdenv ocaml lablgtk makeWrapper;
     inherit (xorg) xset fontschumachermisc;
@@ -4386,11 +5253,10 @@ rec {
   };
 
   vim_configurable = import ../applications/editors/vim/configurable.nix {
-    inherit fetchurl stdenv ncurses pkgconfig mkDerivationByConfiguration;
+    inherit fetchurl stdenv ncurses pkgconfig mkDerivationByConfiguration lib;
     inherit (xlibs) libX11 libXext libSM libXpm
         libXt libXaw libXau libXmu;
     inherit (gtkLibs) glib gtk;
-    lib = lib_unstable;
     features = "huge"; # one of  tiny, small, normal, big or huge
     # optional features by passing
     # python 
@@ -4401,16 +5267,14 @@ rec {
     flags = [ "X11" ]; # only flag "X11" by now
   };
 
-  /*virtualboxFun = lib.sumArgs (selectVersion ../applications/virtualization/virtualbox) {
+  /*virtualboxFun = lib.sumArgs (selectVersion ../applications/virtualization/virtualbox "1.5.2") {
     inherit stdenv fetchurl builderDefs bridge_utils umlutilities kernelHeaders 
       wine jre libxslt SDL qt3 openssl zlib;
     inherit (xorg) libXcursor;
     inherit (gnome) libIDL;
   };
 
-  virtualbox = virtualboxFun {
-    version = "1.5.2";
-  } null;*/
+  virtualbox = virtualboxFun null;*/
 
   vlc = import ../applications/video/vlc {
     inherit fetchurl stdenv perl x11 wxGTK
@@ -4420,6 +5284,11 @@ rec {
     alsa = alsaLib;
   };
 
+  vorbisTools = import ../applications/audio/vorbis-tools {
+    inherit fetchurl stdenv libogg libvorbis libao pkgconfig curl glibc
+    	    speex flac;
+  };
+
   w3m = import ../applications/networking/browsers/w3m {
     inherit fetchurl stdenv ncurses openssl boehmgc gettext zlib;
     graphicsSupport = false;
@@ -4441,6 +5310,10 @@ rec {
     includeUnpack = getConfig ["stdenv" "includeUnpack"] false;
   };
 
+  wordnet = import ../applications/misc/wordnet {
+    inherit stdenv fetchurl tcl tk x11 makeWrapper;
+  };
+
   wrapFirefox = firefox: nameSuffix: import ../applications/networking/browsers/firefox-wrapper {
     inherit stdenv firefox nameSuffix;
     plugins = []
@@ -4448,7 +5321,7 @@ rec {
     # RealPlayer is disabled by default for legal reasons.
     ++ lib.optional (system != "i686-linux" && getConfig ["firefox" "enableRealPlayer"] false) RealPlayer
     ++ lib.optional (getConfig ["firefox" "enableMPlayer"] true) MPlayerPlugin
-    ++ lib.optional (supportsJDK && jrePlugin ? mozillaPlugin) jrePlugin;
+    ++ lib.optional (supportsJDK && getConfig ["firefox" "jre"] true && jrePlugin ? mozillaPlugin) jrePlugin;
   };
 
   xara = import ../applications/graphics/xara {
@@ -4478,7 +5351,8 @@ rec {
   };
 
   xineUI = import ../applications/video/xine-ui {
-    inherit fetchurl stdenv pkgconfig x11 xineLib libpng;
+	inherit fetchurl stdenv pkgconfig x11 xineLib libpng readline ncurses curl;
+	inherit (xorg) libXext libXv libXxf86vm libXtst inputproto;
   };
 
   xmms = import ../applications/audio/xmms {
@@ -4488,19 +5362,23 @@ rec {
     stdenv = overrideGCC stdenv gcc34; # due to problems with gcc 4.x
   };
 
+  xmonad = import ../applications/window-managers/xmonad {
+    inherit stdenv fetchurl ghc X11;
+    inherit (xlibs) xmessage;
+  };
+
   xpdf = import ../applications/misc/xpdf {
     inherit fetchurl stdenv x11 freetype t1lib;
     motif = lesstif;
     base14Fonts = "${ghostscript}/share/ghostscript/fonts";
   };
 
-  xscreensaverFun = lib.sumArgs (selectVersion ../applications/graphics/xscreensaver) {
+  xscreensaverFun = lib.sumArgs (selectVersion ../applications/graphics/xscreensaver "5.04") {
     inherit stdenv fetchurl builderDefs lib pkgconfig bc perl intltool;
     inherit (xlibs) libX11 libXmu;
   };
 
   xscreensaver = xscreensaverFun {
-    version = "5.04";
     flags = ["GL" "gdkpixbuf" "DPMS" "gui" "jpeg"];
     inherit mesa libxml2 libjpeg;
     inherit (gtkLibs) gtk;
@@ -4539,11 +5417,10 @@ rec {
   # doesn't compile yet - in case someone else want's to continue .. 
   /*
   qgis_svn = import ../applications/misc/qgis_svn {
-    lib = lib_unstable;
-    inherit mkDerivationByConfiguration fetchsvn flex
+    inherit mkDerivationByConfiguration fetchsvn stdenv flex lib
             ncurses fetchurl perl cmake gdal geos proj x11
-            gsl libpng zlib stdenv
-            sqlite glibc fontconfig freetype;
+            gsl libpng zlib
+            sqlite glibc fontconfig freetype / * use libc from stdenv ? - to lazy now - Marc * /;
     inherit (xlibs) libSM libXcursor libXinerama libXrandr libXrender;
     inherit (xorg) libICE;
     qt = qt4;
@@ -4569,7 +5446,7 @@ rec {
 
   ### GAMES
 
-  construoFun = lib.sumArgs (selectVersion ../games/construo) {
+  construoFun = lib.sumArgs (selectVersion ../games/construo "0.2.2") {
     inherit stdenv fetchurl builderDefs
       zlib;
     inherit (xlibs) libX11 xproto;
@@ -4577,7 +5454,6 @@ rec {
 
   construo = construoFun {
     inherit mesa freeglut;
-    version = "0.2.2";
   } null;
 
   exult = import ../games/exult {
@@ -4628,6 +5504,16 @@ rec {
     inherit fetchurl stdenv SDL zlib mpeg2dec;
   };
 
+  # You still can override by passing more arguments.
+  spaceOrbitFun = lib.sumArgs (selectVersion ../games/orbit "1.01") {
+    inherit fetchurl stdenv builderDefs 
+      mesa freeglut;
+    inherit (gnome) esound;
+    inherit (xlibs) libXt libX11 libXmu libXi libXext;
+  };
+
+  spaceOrbit = spaceOrbitFun null;
+
   /*tpm = import ../games/thePenguinMachine {
     inherit stdenv fetchurl pil pygame SDL; 
     python24 = python;
@@ -4656,7 +5542,7 @@ rec {
             perl perlXMLParser docbook_xml_dtd_42 docbook_xml_dtd_412
             gettext x11 libtiff libjpeg libpng gtkLibs xlibs bzip2
             libcm python dbus_glib ncurses which libxml2Python
-            iconnamingutils;
+            iconnamingutils openssl hal samba fam;
   });
 
   kdelibs = import ../desktops/kde/kdelibs {
@@ -4676,7 +5562,9 @@ rec {
       shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland
 	  xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline
 	  saneBackends chmlib python libzip gmp sqlite libidn runCommand lib
-	  openbabel ocaml facile stdenv poppler_data;
+	  openbabel ocaml facile stdenv jasper fam indilib libnova
+	  libarchive dbus;
+	#flac = builtins.getAttr "1.1.2" flacAlts;
 	cdparanoia = cdparanoiaIII;
     inherit (xlibs)
       inputproto kbproto scrnsaverproto xextproto xf86miscproto
@@ -4686,7 +5574,6 @@ rec {
       libxkbfile libXinerama;
     inherit (gtkLibs) glib;
     qt = qt4;
-	dbus = dbus_alts.withX11;
 	bison = bison23;
     openexr = openexr_1_6_1 ;
   });
@@ -4827,6 +5714,11 @@ rec {
     inherit fetchurl stdenv;
   };
 
+  pgadmin = import ../applications/misc/pgadmin {
+    inherit fetchurl stdenv postgresql libxml2 libxslt openssl;
+    wxGTK = wxGTK28;
+  };
+
   pgf = import ../misc/tex/pgf {
     inherit fetchurl stdenv;
   };
@@ -4844,6 +5736,10 @@ rec {
     inherit fetchurl stdenv x11 mesa;
   };
 
+  xlockmore = import ../misc/screensavers/xlockmore {
+    inherit fetchurl stdenv pam x11 freetype;
+  };
+
   saneBackends = import ../misc/sane-backends {
     inherit fetchurl stdenv libusb;
 	gt68xxFirmware = 
@@ -4857,6 +5753,16 @@ rec {
     inherit (xlibs) libX11;
   };
 
+  # State Nix
+  snix = import ../tools/package-management/snix {
+    inherit fetchurl stdenv perl curl bzip2 openssl;
+    aterm = aterm242fixes;
+    db4 = db45;
+
+    inherit ext3cowtools e3cfsprogs rsync;
+    ext3cow_kernel = kernel;
+  };
+
   synaptics = import ../misc/synaptics {
     inherit fetchurl stdenv pkgconfig;
     inherit (xlibs) libX11 libXi libXext pixman xf86inputevdev;
@@ -4867,6 +5773,13 @@ rec {
     inherit fetchurl stdenv flex bison zlib libpng ncurses ed;
   };
 
+  /*tetexX11 = import ../misc/tex/tetex {
+    inherit fetchurl stdenv flex bison zlib libpng ncurses ed;
+    inherit (xlibs) libX11 libXext libXmu libXaw libXt libXpm;
+    inherit freetype t1lib;
+    builderX11 = true;
+  };*/
+
   texFunctions = import ../misc/tex/nix {
     inherit stdenv perl tetex graphviz ghostscript;
   };
@@ -4896,7 +5809,7 @@ rec {
   wine = import ../misc/emulators/wine {
     inherit fetchurl stdenv flex bison mesa ncurses
       libpng libjpeg alsaLib lcms xlibs freetype
-      fontconfig fontforge;
+      fontconfig fontforge libxml2 libxslt openssl;
   };
 
   xsane = import ../misc/xsane {
diff --git a/pkgs/top-level/build-for-release.nix b/pkgs/top-level/build-for-release.nix
index 6b9d91981fd..bb892735edd 100644
--- a/pkgs/top-level/build-for-release.nix
+++ b/pkgs/top-level/build-for-release.nix
@@ -3,28 +3,306 @@ let {
   allPackages = import ./all-packages.nix;
 
   i686LinuxPkgs = {inherit (allPackages {system = "i686-linux";})
+    MPlayer
+    MPlayerPlugin
+    alsaUtils
+    apacheAnt
+    apacheHttpd
+    aspectj
+    aspell
+    aspellDicts
     aterm
+    autoconf
+    automake19x
+    bash
+    bashInteractive
+    batik
+    binutils
+    bison23
+    bittorrent
+    bmp
+    bmp_plugin_musepack
+    bmp_plugin_wma
+    bsdiff
+    bzip2
+    cabextract
+    cdrkit
+    chatzilla
+    cksfv
+    #compiz
+    coreutils
+    cpio
+    cron
+    cups
+    darcs
+    db4
+    dhcp
+    dietlibc
+    diffutils
+    docbook5
+    docbook5_xsl
+    docbook_xml_dtd_42
+    docbook_xml_dtd_43
+    docbook_xsl
+    e2fsprogs
+    ecj
+    eclipsesdk
+    emacs
+    emacsUnicode
+    enscript
+    exult
+    feh
+    file
+    findutils
+    firefoxWrapper
+    flex2533
+    gawk
+    gcc
+    gcc34
+    gcc42
+    gdb
+    ghc
+    ghc68
+    ghostscript
+    gimp
+    gnugrep
+    gnum4
+    gnumake
+    gnupatch
+    gnused
+    gnutar
+    gqview
+    graphviz
+    grub
+    gzip
+    hal
+    hello
+    iana_etc
+    iputils
+    irssi
+    iwlwifi
+    jakartaregexp
+    jdkPlugin
+    jetty
+    jikes
+    jing_tools
+    jrePlugin
+    jwhois
+    kbd
+    kcachegrind
+    kdebase
+    keen4
+    kernel
+    klibc
+    ktorrent
+    less
+    lhs2tex
+    libtool
+    libxml2
+    libxslt
+    lvm2
+    lynx
+    man
+    mdadm
+    mesa
+    mingetty
+    mk
+    mktemp
+    mod_python
+    module_init_tools
+    mono
+    mysql
+    #mythtv
+    nano
+    netcat
+    nix
     nixUnstable
+    nss_ldap
+    ntp    
+    nxml
+    openoffice
+    openssh
+    openssl
+    pam_console
+    pam_ldap
+    pam_login
+    pam_unix2
     pan
+    par2cmdline
+    pciutils
+    perl
+    php
+    pidgin
+    pkgconfig
+    postgresql
+    postgresql_jdbc
+    procps
+    pwdutils
+    python
+    qt3
+    quake3demo
+    readline
+    reiserfsprogs
+    rogue
+    rsync
+    ruby
+    screen
+    sdf
+    slim
+    spidermonkey
+    splashutils
+    ssmtp
+    strace
+    strategoxt
+    strategoxtUtils
+    su
     subversion
+    sudo
+    swig
+    sylpheed 
+    sysklogd
+    syslinux
+    sysvinit
+    sysvtools
+    tetex
+    texinfo
+    thunderbird
+    tightvnc
+    time
+    udev
+    uml
+    unzip
+    upstart
+    utillinux
+    valgrind
+    vim
+    vlc
+    w3m
+    wget
+    wine
+    wirelesstools
+    wxHaskell
+    x11_ssh_askpass
+    xchm
+    xfig
+    xineUI
+    xkeyboard_config
+    xmltv
+    xmms
+    xorg_sys_opengl
+    xsel
+    xterm
+    zdelta
+    zip
+    ;
+  inherit ((allPackages {system = "i686-linux";}).xorg)
+    fontbh100dpi
+    fontbhlucidatypewriter100dpi
+    fontbhttf
+    fontcursormisc
+    fontmiscmisc
+    iceauth
+    setxkbmap
+    xauth
+    xf86inputkeyboard
+    xf86inputmouse
+    xf86videoi810
+    xf86videovesa
+    xkbcomp
+    xorgserver
+    xrandr
+    xrdb
+    xset
+    ;
+  inherit ((allPackages {system = "i686-linux";}).gnome)
+    gconfeditor
+    gnomepanel
+    gnometerminal
+    gnomeutils
+    metacity
     ;
   };
 
   x86_64LinuxPkgs = {inherit (allPackages {system = "x86_64-linux";})
-    aterm
+    aterm242fixes
+    autoconf
+    automake19x
+    bash
+    binutils
+    bison23
     gcc
+    hello
+    iwlwifi
+    kernel
+    libtool
     nixUnstable
-    pan
     subversion
     ;    
   };
   
-  powerpcLinuxPkgs = {inherit (allPackages {system = "powerpc-linux";})
+  i686FreeBSDPkgs = {inherit (allPackages {system = "i686-freebsd";})
     aterm
+    autoconf
+    automake19x
+    docbook5
+    docbook_xml_dtd_42
+    docbook_xml_dtd_43
+    docbook_xsl
+    docbook5_xsl
+    libtool
+    libxml2
+    libxslt
+    nxml
+    realCurl
+    subversion
+    unzip
   ;};
-  
+
+  powerpcDarwinPkgs = {inherit (allPackages {system = "powerpc-darwin";})
+    apacheHttpd
+    aterm
+    autoconf
+    automake19x
+    bison23
+    docbook5
+    docbook_xml_dtd_42
+    docbook_xml_dtd_43
+    docbook_xsl
+    docbook5_xsl
+    libtool
+    libxml2
+    libxslt
+    nxml
+    #php
+    subversion
+    tetex
+    unzip
+  ;};
+
+  i686DarwinPkgs = {inherit (allPackages {system = "i686-darwin";})
+    aterm
+    autoconf
+    automake19x
+    libtool
+    libxml2
+    libxslt
+    subversion
+  ;};
+
+  cygwinPkgs = {inherit (allPackages {system = "i686-cygwin";})
+    aterm
+    gnum4
+    readline
+    ncurses
+  ;};
+
   body = [
     i686LinuxPkgs
     x86_64LinuxPkgs
+    powerpcLinuxPkgs
+    i686FreeBSDPkgs
+    powerpcDarwinPkgs
+    i686DarwinPkgs
+    cygwinPkgs
   ];
 }
diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix
index aa53c9ba157..6b53ba76fd4 100644
--- a/pkgs/top-level/builder-defs.nix
+++ b/pkgs/top-level/builder-defs.nix
@@ -40,7 +40,7 @@ args: with args; with stringsWithDeps; with lib;
 		{
 			addToSearchPathWithCustomDelimiter \"\${PATH_DELIMITER}\" \"\$@\"
 		}
-	") [defNest];
+	") ["defNest"];
 
 	defNest = noDepEntry ("
 		nestingLevel=0
@@ -95,7 +95,7 @@ args: with args; with stringsWithDeps; with lib;
 		prefix=${if args ? prefix then (toString args.prefix) else "\$out"}
 
 		"
-	else "")) [defNest defAddToSearchPath];
+	else "")) ["defNest" "defAddToSearchPath"];
 		
 	addInputs = FullDepEntry ("
 		# Recursively find all build inputs.
@@ -161,7 +161,7 @@ args: with args; with stringsWithDeps; with lib;
 		fi
 
 		PATH=\$_PATH\${_PATH:+:}\$PATH
-	") [minInit];
+	") ["minInit"];
 	
 	defEnsureDir = FullDepEntry ("
 		# Ensure that the given directories exists.
@@ -171,7 +171,7 @@ args: with args; with stringsWithDeps; with lib;
 			if ! test -x \"\$dir\"; then mkdir -p \"\$dir\"; fi
 		    done
 		}
-	") [minInit];
+	") ["minInit"];
 
 	toSrcDir = s : FullDepEntry ((if (archiveType s) == "tar" then "
 		tar xvf '${s}'
@@ -199,12 +199,13 @@ args: with args; with stringsWithDeps; with lib;
 		bzip2 -d <${s} > \$PWD/\$(basename ${s} .bz2)/\${NAME#*-}
 		cd \$(basename ${s} .bz2)
 	" else (abort "unknown archive type : ${s}"))+
+                # goSrcDir is typically something like "cd mysubdir" .. but can be anything else 
 		(if args ? goSrcDir then args.goSrcDir else "")
-	) [minInit];
+	) ["minInit"];
 
 	doConfigure = FullDepEntry ("
 		./configure --prefix=\"\$prefix\" ${toString configureFlags}
-	") [minInit addInputs doUnpack];
+	") ["minInit" "addInputs" "doUnpack"];
 
 	doAutotools = FullDepEntry ("
 		mkdir -p config
@@ -214,21 +215,21 @@ args: with args; with stringsWithDeps; with lib;
 		autoheader || true; 
 		automake --add-missing --copy
 		autoconf
-	")[minInit addInputs doUnpack];
+	")["minInit" "addInputs" "doUnpack"];
 
 	doMake = FullDepEntry ("	
 		make ${toString makeFlags}
-	") [minInit addInputs doUnpack];
+	") ["minInit" "addInputs" "doUnpack"];
 
 	doUnpack = toSrcDir (toString src);
 
 	installPythonPackage = FullDepEntry ("
 		python setup.py install --prefix=\"\$prefix\" 
-		") [minInit addInputs doUnpack];
+		") ["minInit" "addInputs" "doUnpack"];
 
 	doMakeInstall = FullDepEntry ("
 		make ${toString (getAttr ["makeFlags"] "" args)} "+
-			"${toString (getAttr ["installFlags"] "" args)} install") [doMake];
+			"${toString (getAttr ["installFlags"] "" args)} install") ["doMake"];
 
 	doForceShare = FullDepEntry (" 
 		ensureDir \"\$prefix/share\"
@@ -238,7 +239,7 @@ args: with args; with stringsWithDeps; with lib;
 				ln -sv share/\$d \"\$prefix\"
 			fi;
 		done;
-	") [minInit defEnsureDir];
+	") ["minInit" "defEnsureDir"];
 
 	doDump = n: noDepEntry "echo Dump number ${n}; set";
 
@@ -250,7 +251,7 @@ args: with args; with stringsWithDeps; with lib;
 
 	doPatch = FullDepEntry (concatStringsSep ";"
 		(map toPatchCommand patches)
-	) [minInit doUnpack];
+	) ["minInit" "doUnpack"];
 
 	envAdderInner = s: x: if x==null then s else y: 
 		a: envAdderInner (s+"echo export ${x}='\"'\"\$${x}:${y}\";'\"'\n") a;
@@ -268,12 +269,12 @@ args: with args; with stringsWithDeps; with lib;
 		(${envAdderList env}
 		echo '\"'\"${cmd}-orig\"'\"' '\"'\\\$@'\"' \n)  > \"${cmd}\"";
 
-	doWrap = cmd: FullDepEntry (wrapEnv cmd (getAttr ["wrappedEnv"] [] args)) [minInit];
+	doWrap = cmd: FullDepEntry (wrapEnv cmd (getAttr ["wrappedEnv"] [] args)) ["minInit"];
 
 	doPropagate = FullDepEntry ("
 		ensureDir \$out/nix-support
 		echo '${toString (getAttr ["propagatedBuildInputs"] [] args)}' >\$out/nix-support/propagated-build-inputs
-	") [minInit defEnsureDir];
+	") ["minInit" "defEnsureDir"];
 
 	/*debug = x:(__trace x x);
 	debugX = x:(__trace (__toXML x) x);*/
@@ -283,7 +284,7 @@ args: with args; with stringsWithDeps; with lib;
 	replaceScripts = l:(concatStringsSep "\n" (pairMap replaceInScript l));
 	doReplaceScripts = FullDepEntry (replaceScripts (getAttr ["shellReplacements"] [] args)) [minInit];
 	makeNest = x:(if x==defNest.text then x else "startNest\n" + x + "\nstopNest\n");
-	textClosure = textClosureMap makeNest;
+        textClosure = a : steps : textClosureMapOveridable makeNest a (["defNest"] ++ steps);
 
 	inherit noDepEntry FullDepEntry PackEntry;
 
@@ -317,4 +318,68 @@ args: with args; with stringsWithDeps; with lib;
 
 	surroundWithCommands = x : before : after : {deps=x.deps; text = before + "\n" +
 		x.text + "\n" + after ;};
+
+
+        # some haskell stuff  - untested!
+        # --------------------------------------------------------
+        # creates a setup hook
+        # adding the package database 
+        # nix-support/package.conf to GHC_PACKAGE_PATH
+        # if not already contained
+        # using nix-support because user does'nt want to have it in it's
+        # nix-profile I think?
+        defSetupHookRegisteringPackageDatabase = noDepEntry (
+          "\nsetupHookRegisteringPackageDatabase(){" +
+          "\n  ensureDir $out/nix-support;" +
+          "\n  if test -n \"$1\"; then" +
+          "\n    local pkgdb=$1" +
+          "\n  else" +
+          "\n    local pkgdb=$out/nix-support/package.conf" +
+          "\n  fi" +
+          "\n  cat >> $out/nix-support/setup-hook << EOF" +
+          "\n    " +
+          "\n    echo \$GHC_PACKAGE_PATH | grep -l $pkgdb &> /dev/null || \" "+
+          "\n      export GHC_PACKAGE_PATH=\$GHC_PACKAGE_PATH\${GHC_PACKAGE_PATH:+$PATH_DELIMITER}$pkgdb;" +
+          "\nEOF" +
+          "\n}");
+
+        # Either rungghc or compile setup.hs 
+        # / which one is better ? runghc had some trouble with ghc-6.6.1
+        defCabalSetupCmd = noDepEntry "
+          CABAL_SETUP=\"runghc setup.hs\"
+        ";
+        
+        # create an empty package database in which the new library can be registered. 
+        defCreateEmptyPackageDatabaseAndSetupHook = FullDepEntry "
+          createEmptyPackageDatabaseAndSetupHook(){
+            ensureDir $out/nix-support;
+            PACKAGE_DB=$out/nix-support/package.conf;
+            echo '[]' > \"$PACKAGE_DB\";
+            setupHookRegisteringPackageDatabase
+        }" ["defSetupHookRegisteringPackageDatabase" "defEnsureDir"];
+
+        # Cabal does only support --user ($HOME/.ghc/** ) and --global (/nix/store/*-ghc/lib/...) 
+        # But we need kind of --custom=my-package-db
+        # by accident cabal does support using multiple databases passed by GHC_PACKAGE_PATH
+        # 
+        # Options:
+        # 1) create a local package db containing all dependencies
+        # 2) create a single db file for each package merging them using GHC_PACKAGE_PATH=db1:db2 
+        # (no trailing : which would mean add global and user db)
+        # I prefer 2) (Marc Weber) so the most convinient way is
+        # using ./setup copy to install
+        # and   ./setup register --gen-script to install to our local database 
+        # after replacing /usr/lib etc with our pure $out path
+        cabalBuild = FullDepEntry 
+          " createEmptyPackageDatabaseAndSetupHook
+          ghc --make setup.hs -o setup
+          \$CABAL_SETUP configure
+          \$CABAL_SETUP build
+          \$CABAL_SETUP copy --dest-dir=\$out
+          \$CABAL_SETUP register --gen-script
+          sed -e 's=/usr/local/lib=\$out=g' \\
+              -i register.sh
+          GHC_PACKAGE_PATH=\$PACKAGE_DB ./register.sh
+        " ["defCreateEmptyPackageDatabaseAndSetupHook" "defCabalSetupCmd"];
+
 }) // args
diff --git a/pkgs/top-level/template-composing+config.nix b/pkgs/top-level/template-composing+config.nix
index df751f693f2..172cd9c4797 100644
--- a/pkgs/top-level/template-composing+config.nix
+++ b/pkgs/top-level/template-composing+config.nix
@@ -1,4 +1,4 @@
-args : with args; with builderDefs (args // {
+args : with args; let localDefs = builderDefs (args // rec {
 		src = /* put a fetchurl here */
 		(abort "Specify source");
 		useConfig = true;
@@ -10,10 +10,11 @@ args : with args; with builderDefs (args // {
 		configFlags = [
 		];
 	}) null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
 	name = "${(abort "Specify name")}"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [(abort "Check phases") doMakeInstall doForceShare doPropagate]);
+		(textClosure localDefs [(abort "Check phases") doMakeInstall doForceShare doPropagate]);
 	meta = {
 		description = "
 	${(abort "Specify description")}
diff --git a/pkgs/top-level/template-composing-builder.nix b/pkgs/top-level/template-composing-builder.nix
index 8117b156879..88bf2b63cfa 100644
--- a/pkgs/top-level/template-composing-builder.nix
+++ b/pkgs/top-level/template-composing-builder.nix
@@ -1,14 +1,16 @@
-args : with args;
-	with builderDefs {
+args : with args; with builderDefs {src="";} null;
+	let localDefs = builderDefs (rec {
 		src = /* put a fetchurl here */
 
 		buildInputs = [];
 		configureFlags = [];
-	} null; /* null is a terminator for sumArgs */
+	}) null; /* null is a terminator for sumArgs */
+	in with localDefs;
 stdenv.mkDerivation rec {
-	name = "${abort "Specify name"}";
+	name = "${abort "Specify name"}-"+version;
 	builder = writeScript (name + "-builder")
-		(textClosure [(abort "Specify phases - defined here or in builderDefs") doForceShare doPropagate]);
+		(textClosure localDefs 
+			[(abort "Specify phases - defined here or in builderDefs") doForceShare doPropagate]);
 	meta = {
 		description = "
 		${abort "Write a description"}
diff --git a/pkgs/top-level/template.nix b/pkgs/top-level/template.nix
deleted file mode 100644
index fabd6de584a..00000000000
--- a/pkgs/top-level/template.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-args:
-let 
-	defList = [
-(assert false) - correct it; List element is of form ["name" default]
-	];
-	#stdenv and fetchurl are added automatically
-	getVal = (args.lib.getValue args defList);
-	check = args.lib.checkFlag args;
-	reqsList = [
-(assert false) - correct it; List element is of form ["name" "requirement-name" ... ]
-		["true"]
-		["false"]
-	];
-	buildInputsNames = args.lib.filter (x: (null!=getVal x)) 
-		(args.lib.uniqList {inputList = 
-		(args.lib.concatLists (map 
-		(x:(if (x==[]) then [] else builtins.tail x)) 
-		reqsList));});
-	configFlags = [
-		"true" ""
-(assert false) - fill it; list consists of pairs "condition" "flags". "True" means always.
-	];
-	nameSuffixes = [
-(assert false) - fill it if needed, or blank it.
-	];
-in
-	assert args.lib.checkReqs args defList reqsList;
-with args; 
-args.stdenv.mkDerivation {
-  name = args.lib.condConcat "
-#Fill the name //
-" nameSuffixes check;
- 
-  src = args.
-#Put fetcher here 
- 
-  buildInputs = args.lib.filter (x: x!=null) (map getVal buildInputsNames);
-  configureFlags = args.lib.condConcat "" configFlags check;
-
-  meta = {
-    description = "
-#Fill description here
-";
-  };
-}