summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2003-11-14 09:59:13 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2003-11-14 09:59:13 +0000
commit48c3faca5194fab0d6f19ad33a9756763dddefdd (patch)
tree24e08e006efef44f671d275a5c896e22d83abb28 /pkgs
parent6b2bb2247432e5749710576a167a1632c2ec0a61 (diff)
downloadnixpkgs-48c3faca5194fab0d6f19ad33a9756763dddefdd.tar
nixpkgs-48c3faca5194fab0d6f19ad33a9756763dddefdd.tar.gz
nixpkgs-48c3faca5194fab0d6f19ad33a9756763dddefdd.tar.bz2
nixpkgs-48c3faca5194fab0d6f19ad33a9756763dddefdd.tar.lz
nixpkgs-48c3faca5194fab0d6f19ad33a9756763dddefdd.tar.xz
nixpkgs-48c3faca5194fab0d6f19ad33a9756763dddefdd.tar.zst
nixpkgs-48c3faca5194fab0d6f19ad33a9756763dddefdd.zip
* Renamed pkgs-ng to pkgs.
svn path=/nixpkgs/trunk/; revision=502
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/README97
-rwxr-xr-xpkgs/applications/graphics/gqview/builder.sh10
-rw-r--r--pkgs/applications/graphics/gqview/default.fix22
-rwxr-xr-xpkgs/applications/networking/browsers/firebird/builder.sh30
-rw-r--r--pkgs/applications/networking/browsers/firebird/default.fix25
-rwxr-xr-xpkgs/applications/networking/mailreaders/sylpheed/builder.sh20
-rw-r--r--pkgs/applications/networking/mailreaders/sylpheed/default.fix27
-rwxr-xr-xpkgs/applications/networking/newsreaders/pan/builder.sh10
-rw-r--r--pkgs/applications/networking/newsreaders/pan/default.fix29
-rwxr-xr-xpkgs/applications/version-management/subversion/builder.sh35
-rw-r--r--pkgs/applications/version-management/subversion/default.fix36
-rwxr-xr-xpkgs/applications/video/MPlayer/builder.sh19
-rw-r--r--pkgs/applications/video/MPlayer/default.fix31
-rwxr-xr-xpkgs/applications/video/MPlayer/win32codecs/builder.sh9
-rw-r--r--pkgs/applications/video/MPlayer/win32codecs/default.fix10
-rwxr-xr-xpkgs/applications/video/mplayerplug-in/builder.sh11
-rw-r--r--pkgs/applications/video/mplayerplug-in/default.fix17
-rwxr-xr-xpkgs/build-support/fetchurl/builder.sh21
-rw-r--r--pkgs/build-support/fetchurl/default.fix9
-rwxr-xr-xpkgs/development/compilers/gcc/builder.sh56
-rw-r--r--pkgs/development/compilers/gcc/default.fix12
-rwxr-xr-xpkgs/development/interpreters/perl/builder.sh26
-rw-r--r--pkgs/development/interpreters/perl/default.fix10
-rwxr-xr-xpkgs/development/libraries/aterm/builder.sh10
-rw-r--r--pkgs/development/libraries/aterm/default.fix10
-rwxr-xr-xpkgs/development/libraries/db4/builder.sh10
-rw-r--r--pkgs/development/libraries/db4/default.fix10
-rwxr-xr-xpkgs/development/libraries/expat/builder.sh10
-rw-r--r--pkgs/development/libraries/expat/default.fix10
-rwxr-xr-xpkgs/development/libraries/fontconfig/builder.sh18
-rw-r--r--pkgs/development/libraries/fontconfig/default.fix21
-rwxr-xr-xpkgs/development/libraries/freetype/builder.sh10
-rw-r--r--pkgs/development/libraries/freetype/default.fix10
-rwxr-xr-xpkgs/development/libraries/gettext/builder.sh9
-rw-r--r--pkgs/development/libraries/gettext/default.fix10
-rwxr-xr-xpkgs/development/libraries/glibc/builder.sh26
-rw-r--r--pkgs/development/libraries/glibc/default.fix21
-rw-r--r--pkgs/development/libraries/glibc/glibc-2.3.2-sscanf-1.patch68
-rwxr-xr-xpkgs/development/libraries/gnet/builder.sh10
-rw-r--r--pkgs/development/libraries/gnet/default.fix16
-rwxr-xr-xpkgs/development/libraries/gtk+-1/gdk-pixbuf/builder.sh10
-rw-r--r--pkgs/development/libraries/gtk+-1/gdk-pixbuf/default.fix21
-rwxr-xr-xpkgs/development/libraries/gtk+-1/glib/builder.sh9
-rw-r--r--pkgs/development/libraries/gtk+-1/glib/default.fix10
-rwxr-xr-xpkgs/development/libraries/gtk+-1/gtk+/builder.sh12
-rw-r--r--pkgs/development/libraries/gtk+-1/gtk+/default.fix19
-rwxr-xr-xpkgs/development/libraries/gtk+/atk/builder.sh10
-rw-r--r--pkgs/development/libraries/gtk+/atk/default.fix17
-rwxr-xr-xpkgs/development/libraries/gtk+/glib/builder.sh10
-rw-r--r--pkgs/development/libraries/gtk+/glib/default.fix17
-rwxr-xr-xpkgs/development/libraries/gtk+/gtk+/builder.sh12
-rw-r--r--pkgs/development/libraries/gtk+/gtk+/default.fix30
-rwxr-xr-xpkgs/development/libraries/gtk+/pango/builder.sh12
-rw-r--r--pkgs/development/libraries/gtk+/pango/default.fix20
-rwxr-xr-xpkgs/development/libraries/libIDL/builder.sh11
-rw-r--r--pkgs/development/libraries/libIDL/default.fix18
-rwxr-xr-xpkgs/development/libraries/libjpeg/builder.sh15
-rw-r--r--pkgs/development/libraries/libjpeg/default.fix10
-rwxr-xr-xpkgs/development/libraries/libpng/builder.sh16
-rw-r--r--pkgs/development/libraries/libpng/default.fix15
-rwxr-xr-xpkgs/development/libraries/libtiff/builder.sh16
-rw-r--r--pkgs/development/libraries/libtiff/default.fix16
-rwxr-xr-xpkgs/development/libraries/libxml2/builder.sh11
-rw-r--r--pkgs/development/libraries/libxml2/default.fix15
-rwxr-xr-xpkgs/development/libraries/openssl/builder.sh16
-rw-r--r--pkgs/development/libraries/openssl/default.fix11
-rwxr-xr-xpkgs/development/libraries/pcre/builder.sh9
-rw-r--r--pkgs/development/libraries/pcre/default.fix10
-rwxr-xr-xpkgs/development/libraries/xft/builder.sh12
-rw-r--r--pkgs/development/libraries/xft/default.fix18
-rwxr-xr-xpkgs/development/libraries/zlib/builder.sh10
-rw-r--r--pkgs/development/libraries/zlib/default.fix10
-rwxr-xr-xpkgs/development/tools/build-managers/gnumake/builder.sh9
-rw-r--r--pkgs/development/tools/build-managers/gnumake/default.fix10
-rwxr-xr-xpkgs/development/tools/misc/binutils/builder.sh17
-rw-r--r--pkgs/development/tools/misc/binutils/default.fix11
-rwxr-xr-xpkgs/development/tools/misc/gnum4/builder.sh9
-rw-r--r--pkgs/development/tools/misc/gnum4/default.fix11
-rwxr-xr-xpkgs/development/tools/misc/pkgconfig/builder.sh10
-rw-r--r--pkgs/development/tools/misc/pkgconfig/default.fix10
-rwxr-xr-xpkgs/development/tools/parsing/bison/builder.sh10
-rw-r--r--pkgs/development/tools/parsing/bison/default.fix13
-rwxr-xr-xpkgs/development/tools/parsing/flex/builder.sh10
-rw-r--r--pkgs/development/tools/parsing/flex/default.fix13
-rwxr-xr-xpkgs/os-specific/linux/alsa/library/builder.sh9
-rw-r--r--pkgs/os-specific/linux/alsa/library/default.fix10
-rwxr-xr-xpkgs/os-specific/linux/kernel-headers/builder.sh12
-rw-r--r--pkgs/os-specific/linux/kernel-headers/default.fix11
-rwxr-xr-xpkgs/servers/http/apache-httpd/builder.sh23
-rw-r--r--pkgs/servers/http/apache-httpd/default.fix19
-rwxr-xr-xpkgs/servers/x11/xfree86/builder.sh15
-rw-r--r--pkgs/servers/x11/xfree86/default.fix34
-rw-r--r--pkgs/servers/x11/xfree86/host.def30
-rwxr-xr-xpkgs/shells/bash/builder.sh10
-rw-r--r--pkgs/shells/bash/default.fix10
-rwxr-xr-xpkgs/stdenv/generic/builder.sh41
-rw-r--r--pkgs/stdenv/generic/default.fix23
-rw-r--r--pkgs/stdenv/generic/gcc-wrapper.sh42
-rw-r--r--pkgs/stdenv/generic/ld-wrapper.sh17
-rw-r--r--pkgs/stdenv/generic/setup.sh67
-rw-r--r--pkgs/stdenv/native/default.fix13
-rw-r--r--pkgs/stdenv/native/posthook.sh0
-rw-r--r--pkgs/stdenv/native/prehook.sh5
-rw-r--r--pkgs/stdenv/nix-linux/boot.fix13
-rw-r--r--pkgs/stdenv/nix-linux/default.fix13
-rw-r--r--pkgs/stdenv/nix-linux/posthook.sh0
-rw-r--r--pkgs/stdenv/nix-linux/prehook-boot.sh12
-rw-r--r--pkgs/stdenv/nix-linux/prehook.sh12
-rw-r--r--pkgs/stdenv/nix/default.fix13
-rw-r--r--pkgs/stdenv/nix/path.fix16
-rw-r--r--pkgs/stdenv/nix/posthook.sh0
-rw-r--r--pkgs/stdenv/nix/prehook.sh7
-rw-r--r--pkgs/system/all-packages-generic.fix401
-rw-r--r--pkgs/system/all-packages.fix50
-rw-r--r--pkgs/system/i686-suse-linux.fix1
-rwxr-xr-xpkgs/system/populate-linkdirs.pl65
-rw-r--r--pkgs/system/user-environment.fix30
-rwxr-xr-xpkgs/tools/archivers/gnutar/builder.sh9
-rw-r--r--pkgs/tools/archivers/gnutar/default.fix10
-rwxr-xr-xpkgs/tools/archivers/zip/builder.sh8
-rw-r--r--pkgs/tools/archivers/zip/default.fix10
-rwxr-xr-xpkgs/tools/compression/bzip2/builder.sh8
-rw-r--r--pkgs/tools/compression/bzip2/default.fix10
-rwxr-xr-xpkgs/tools/compression/gzip/builder.sh9
-rw-r--r--pkgs/tools/compression/gzip/default.fix10
-rwxr-xr-xpkgs/tools/misc/coreutils/builder.sh9
-rw-r--r--pkgs/tools/misc/coreutils/default.fix10
-rwxr-xr-xpkgs/tools/misc/findutils/builder.sh9
-rw-r--r--pkgs/tools/misc/findutils/default.fix10
-rwxr-xr-xpkgs/tools/networking/wget/builder.sh9
-rw-r--r--pkgs/tools/networking/wget/default.fix10
-rwxr-xr-xpkgs/tools/text/diffutils/builder.sh9
-rw-r--r--pkgs/tools/text/diffutils/default.fix10
-rwxr-xr-xpkgs/tools/text/ed/builder.sh9
-rw-r--r--pkgs/tools/text/ed/default.fix10
-rwxr-xr-xpkgs/tools/text/gawk/builder.sh9
-rw-r--r--pkgs/tools/text/gawk/default.fix10
-rwxr-xr-xpkgs/tools/text/gnugrep/builder.sh10
-rw-r--r--pkgs/tools/text/gnugrep/default.fix11
-rwxr-xr-xpkgs/tools/text/gnused/builder.sh9
-rw-r--r--pkgs/tools/text/gnused/default.fix10
141 files changed, 2684 insertions, 0 deletions
diff --git a/pkgs/README b/pkgs/README
new file mode 100644
index 00000000000..b315e1bfb7e
--- /dev/null
+++ b/pkgs/README
@@ -0,0 +1,97 @@
+* Classification scheme for packages
+
+- many packages fall under several categories; what matters is the
+  *primary* purpose of a package.  For example, the libxml2 package
+  builds both a library and some tools; but it's a library foremost,
+  so it goes under ./development/libraries. 
+
+- when in doubt, refactor.
+
+IF it's used to support SOFTWARE DEVELOPMENT:
+
+  IF it's a LIBRARY used by other packages:
+    IF it's directly related to GTK:
+      ./development/libraries/gtk+
+    ELSE
+      ./development/libraries
+      (e.g., libxml2)
+  ELSE IF it's a COMPILER:
+    ./development/compilers
+    (e.g., gcc)
+  ELSE IF it's an INTERPRETER:
+    ./development/interpreters
+  ELSE IF it's a development TOOL (or set of):
+    IF it's a PARSER GENERATOR (incl. lexers):
+      ./development/tools/parsing
+      (e.g., bison, flex)
+    ELSE IF it's a BUILD MANAGER:
+      ./development/tools/build-managers
+      (e.g., gnumake
+    ELSE
+      ./development/tools/misc
+      (e.g., binutils)
+  ELSE
+    ./development/misc
+
+ELSE IF it's a TOOL (or set of):
+  # a tool is a relatively *small* program, esp. one intented to be
+  # used non-interactively
+
+  IF it's for NETWORKING:
+    ./tools/networking
+    (e.g., wget)
+  ELSE IF it's for TEXT PROCESSING:
+    ./tools/text
+    (e.g., diffutils)
+  ELSE IF it's a SYSTEM utility, i.e., something related or essential
+    to the operation of a system:
+    ./tools/system
+    (e.g., init)
+  ELSE IF it's an ARCHIVER (which may include a compression function):
+    ./tools/archivers
+    (e.g., zip, tar)
+  ELSE IF it's a COMPRESSION program:
+    ./tools/compression
+    (e.g., gzip, bzip2)
+  ELSE
+    ./tools/misc
+
+ELSE IF it's a SHELL:
+
+  ./shells
+
+ELSE IF it's a SERVER:
+
+  IF it's a HTTP server:
+    ./servers/http
+    (e.g., apache)
+  IF it's a X11 server:
+    ./servers/x11
+    (e.g., xfree86)
+  ELSE
+    ./servers/misc
+
+ELSE IF it's a DESKTOP ENVIRONMENT (incl. WINDOW MANAGERS):
+
+  ./desktops
+  (e.g., kde, gnome, fvwm)
+
+ELSE IF it's an APPLICATION:
+  # a (typically large) program with a distinct user interface,
+  # primarily used interactively
+
+  IF it's a VERSION MANAGEMENT system:
+    ./applications/version-management
+  ELSE IF it's for VIDEO playback/etc:
+    ./applications/video
+  ELSE IF it's for GRAPHICS viewing/editing/etc:
+    ./applications/graphics
+  ELSE IF it's for NETWORKING:
+    IF it's a MAILREADER:
+      ./applications/networking/mailreaders
+    IF it's a NEWSREADER:
+      ./applications/networking/newsreaders
+    ELSE
+      ./applications/networking/misc
+  ELSE
+    ./applications/misc
diff --git a/pkgs/applications/graphics/gqview/builder.sh b/pkgs/applications/graphics/gqview/builder.sh
new file mode 100755
index 00000000000..be377db2278
--- /dev/null
+++ b/pkgs/applications/graphics/gqview/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $gtk $libpng"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd gqview-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/applications/graphics/gqview/default.fix b/pkgs/applications/graphics/gqview/default.fix
new file mode 100644
index 00000000000..e9edb7f0bd0
--- /dev/null
+++ b/pkgs/applications/graphics/gqview/default.fix
@@ -0,0 +1,22 @@
+{stdenv, fetchurl, pkgconfig, gtk, libpng}:
+
+assert !isNull pkgconfig && !isNull gtk && !isNull png;
+# Note that we cannot just copy gtk's png attribute, since gtk might
+# not be linked against png.
+assert libpng == gtk.libpng;
+
+derivation {
+  name = "gqview-1.3.5";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://heanet.dl.sourceforge.net/sourceforge/gqview/gqview-1.3.5.tar.gz;
+    md5 = "c44687bdd636ea6e5133fb936abf880a";
+  };
+
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  gtk = gtk;
+  libpng = libpng;
+}
diff --git a/pkgs/applications/networking/browsers/firebird/builder.sh b/pkgs/applications/networking/browsers/firebird/builder.sh
new file mode 100755
index 00000000000..36225b5760d
--- /dev/null
+++ b/pkgs/applications/networking/browsers/firebird/builder.sh
@@ -0,0 +1,30 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $gtk $perl $zip $libIDL"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd mozilla || exit 1
+
+cat > .mozconfig <<EOF
+export MOZ_PHOENIX=1
+mk_add_options MOZ_PHOENIX=1
+ac_add_options --enable-crypto
+ac_add_options --disable-tests
+ac_add_options --disable-debug
+ac_add_options --disable-mailnews
+ac_add_options --disable-composer
+ac_add_options --enable-optimize=-O2
+ac_add_options --disable-ldap
+ac_add_options --disable-mailnews
+ac_add_options --enable-extensions=default,-inspector,-irc,-venkman,-content-packs,-help
+ac_add_options --enable-xft
+ac_add_options --enable-swg
+ac_add_options --enable-strip
+ac_add_options --enable-default-toolkit=gtk2
+EOF
+echo "ac_add_options --prefix=$out" >> .mozconfig
+
+./configure || exit 1
+make -f client.mk build || exit 1
+make install || exit 1
diff --git a/pkgs/applications/networking/browsers/firebird/default.fix b/pkgs/applications/networking/browsers/firebird/default.fix
new file mode 100644
index 00000000000..b17b4a0e473
--- /dev/null
+++ b/pkgs/applications/networking/browsers/firebird/default.fix
@@ -0,0 +1,25 @@
+{ stdenv, fetchurl, pkgconfig, gtk, perl, zip, libIDL
+}:
+
+assert !isNull pkgconfig && !isNull gtk && !isNull perl
+  && !isNull zip && !isNull libIDL;
+
+assert libIDL.glib == gtk.glib;
+
+derivation {
+  name = "MozillaFirebird-0.7";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.mozilla.org/pub/mozilla.org/firebird/releases/0.7/MozillaFirebird-source-0.7.tar.gz;
+    md5 = "35112566a3dca5bdf363972056afc462";
+  };
+
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  gtk = gtk;
+  perl = perl;
+  zip = zip;
+  libIDL = libIDL;
+}
diff --git a/pkgs/applications/networking/mailreaders/sylpheed/builder.sh b/pkgs/applications/networking/mailreaders/sylpheed/builder.sh
new file mode 100755
index 00000000000..db66df470aa
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/sylpheed/builder.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+buildinputs="$gtk $gdkpixbuf $openssl"
+. $stdenv/setup || exit 1
+
+if test $sslSupport; then
+    extraflags="--enable-ssl $extraflags"
+fi
+
+if test $imageSupport; then
+    extraflags="--enable-gdk-pixbuf $extraflags"
+else
+    extraflags="--disable-gdk-pixbuf --disable-imlibtest $extraflags"
+fi    
+
+tar xvfj $src || exit 1
+cd sylpheed-* || exit 1
+./configure --prefix=$out $extraflags || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/applications/networking/mailreaders/sylpheed/default.fix b/pkgs/applications/networking/mailreaders/sylpheed/default.fix
new file mode 100644
index 00000000000..c6e8cc066f8
--- /dev/null
+++ b/pkgs/applications/networking/mailreaders/sylpheed/default.fix
@@ -0,0 +1,27 @@
+{ sslSupport ? true
+, imageSupport ? true
+, stdenv, fetchurl, gtk, openssl ? null, gdkpixbuf ? null
+}:
+
+assert !isNull gtk;
+assert sslSupport -> !isNull openssl;
+assert imageSupport -> !isNull gdkpixbuf;
+
+derivation {
+  name = "sylpheed-0.9.7";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://sylpheed.good-day.net/sylpheed/sylpheed-0.9.7.tar.bz2;
+    md5 = "399deb5abd52396d26d6475689a5ec3f";
+  };
+
+  sslSupport = sslSupport;
+  imageSupport = imageSupport;
+
+  stdenv = stdenv;
+  gtk = gtk;
+  openssl = if sslSupport then openssl else null;
+  gdkpixbuf = if imageSupport then gdkpixbuf else null;
+}
diff --git a/pkgs/applications/networking/newsreaders/pan/builder.sh b/pkgs/applications/networking/newsreaders/pan/builder.sh
new file mode 100755
index 00000000000..b2f160e155d
--- /dev/null
+++ b/pkgs/applications/networking/newsreaders/pan/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $gtk $gtkspell $gnet $libxml2 $perl"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd pan-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/applications/networking/newsreaders/pan/default.fix b/pkgs/applications/networking/newsreaders/pan/default.fix
new file mode 100644
index 00000000000..26b7e6af2b5
--- /dev/null
+++ b/pkgs/applications/networking/newsreaders/pan/default.fix
@@ -0,0 +1,29 @@
+{ spellChecking ? true
+, stdenv, fetchurl, pkgconfig, gtk, gtkspell ? null, gnet, libxml2, perl
+}:
+
+assert !isNull pkgconfig && !isNull gtk && !isNull gnet
+  && !isNull libxml2 && !isNull perl;
+assert spellChecking -> !isNull gtkspell && gtk == gtkspell.gtk;
+assert gtk.glib == gnet.glib;
+
+derivation {
+  name = "pan-0.14.2";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://pan.rebelbase.com/download/releases/0.14.2/SOURCE/pan-0.14.2.tar.bz2;
+    md5 = "ed3188e7059bb6d6c209ee5d46ac1852";
+  };
+
+  spellChecking = spellChecking;
+
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  gtk = gtk;
+  gtkspell = if spellChecking then gtkspell else null;
+  gnet = gnet;
+  libxml2 = libxml2;
+  perl = perl;
+}
diff --git a/pkgs/applications/version-management/subversion/builder.sh b/pkgs/applications/version-management/subversion/builder.sh
new file mode 100755
index 00000000000..72848c79532
--- /dev/null
+++ b/pkgs/applications/version-management/subversion/builder.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+
+buildinputs="$openssl $db4 $httpd $swig $expat"
+. $stdenv/setup || exit 1
+
+if test $localServer; then
+    extraflags="--with-berkeley-db=$db4 $extraflags"
+fi
+
+if test $sslSupport; then
+    extraflags="--with-ssl --with-libs=$openssl $extraflags"
+fi
+
+if test $httpServer; then
+    extraflags="--with-apxs=$httpd/bin/apxs --with-apr=$httpd --with-apr-util=$httpd $extraflags"
+    extramakeflags="APACHE_LIBEXECDIR=$out/modules $extramakeflags"
+fi
+
+if test $swigBindings; then
+    extraflags="--with-swig=$swig $extraflags"
+fi
+
+echo "extra flags: $extraflags"
+
+tar xvfz $src || exit 1
+cd subversion-* || exit 1
+./configure --prefix=$out $extraflags \
+ --without-gdbm --disable-static || exit 1
+make $extramakeflags || exit 1
+make install $extramakeflags || exit 1
+
+if test $swigBindings; then
+    make swig-py || exit 1
+    make install-swig-py || exit 1
+fi
diff --git a/pkgs/applications/version-management/subversion/default.fix b/pkgs/applications/version-management/subversion/default.fix
new file mode 100644
index 00000000000..76a46511b27
--- /dev/null
+++ b/pkgs/applications/version-management/subversion/default.fix
@@ -0,0 +1,36 @@
+{ localServer ? false
+, httpServer ? false
+, sslSupport ? false
+, swigBindings ? false
+, stdenv, fetchurl
+, openssl ? null, httpd ? null, db4 ? null, expat, swig ? null
+}:
+
+assert !isNull expat;
+assert localServer -> !isNull db4;
+assert httpServer -> !isNull httpd && httpd.expat == expat;
+assert sslSupport -> !isNull openssl && (httpServer -> httpd.openssl == openssl);
+assert swigBindings -> !isNull swig;
+
+derivation {
+  name = "subversion-0.32.1";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://svn.collab.net/tarballs/subversion-0.32.1.tar.gz;
+    md5 = "b06717a8ef50db4b5c4d380af00bd901";
+  };
+
+  localServer = localServer;
+  httpServer = httpServer;
+  sslSupport = sslSupport;
+  swigBindings = swigBindings;
+
+  stdenv = stdenv;
+  openssl = if sslSupport then openssl else null;
+  httpd = if httpServer then httpd else null;
+  expat = expat;
+  db4 = if localServer then db4 else null;
+  swig = if swigBindings then swig else null;
+}
diff --git a/pkgs/applications/video/MPlayer/builder.sh b/pkgs/applications/video/MPlayer/builder.sh
new file mode 100755
index 00000000000..aa018e73c2f
--- /dev/null
+++ b/pkgs/applications/video/MPlayer/builder.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+buildinputs="$freetype $x11 $alsa"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+tar xvfj $fonts || exit 1
+cd MPlayer-* || exit 1
+./configure --prefix=$out --with-win32libdir=$win32codecs \
+ --with-x11incdir=$x11/include --with-x11libdir=$x11/lib \
+ --with-reallibdir=$win32codecs \
+ --disable-sdl --disable-esd --disable-xanim --disable-cdparanoia --disable-directfb \
+ --disable-lirc --disable-svga --disable-libdv \
+ --disable-vorbis --disable-png --disable-jpeg --disable-gif \
+ --enable-runtime-cpudetection \
+ || exit 1
+make || exit 1
+make install || exit 1
+cp -p ../font-arial-iso-8859-1/font-arial-18-iso-8859-1/* $out/share/mplayer/font || exit 1
diff --git a/pkgs/applications/video/MPlayer/default.fix b/pkgs/applications/video/MPlayer/default.fix
new file mode 100644
index 00000000000..065676bc2ad
--- /dev/null
+++ b/pkgs/applications/video/MPlayer/default.fix
@@ -0,0 +1,31 @@
+{ alsaSupport ? false
+, stdenv, fetchurl, x11, freetype, alsa ? null}:
+
+assert !isNull x11 && !isNull freetype;
+assert alsaSupport -> !isNull alsa;
+
+derivation {
+  name = "MPlayer-1.0pre2";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www2.mplayerhq.hu/MPlayer/releases/MPlayer-1.0pre2.tar.bz2;
+    md5 = "a60c179468f85e83e3f9e1922e81ad64";
+  };
+  fonts = fetchurl {
+    url = http://www2.mplayerhq.hu/MPlayer/releases/fonts/font-arial-iso-8859-1.tar.bz2;
+    md5 = "1ecd31d17b51f16332b1fcc7da36b312";
+  };
+
+  alsaSupport = alsaSupport;
+
+  stdenv = stdenv;
+  x11 = x11;
+  freetype = freetype;
+  alsa = if alsaSupport then alsa else null;
+  win32codecs = (import ./win32codecs) {
+    stdenv = stdenv;
+    fetchurl = fetchurl;
+  };
+}
diff --git a/pkgs/applications/video/MPlayer/win32codecs/builder.sh b/pkgs/applications/video/MPlayer/win32codecs/builder.sh
new file mode 100755
index 00000000000..9b76079acab
--- /dev/null
+++ b/pkgs/applications/video/MPlayer/win32codecs/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+mkdir $out || exit 1
+cd $out || exit 1
+tar xvfj $src || exit 1
+mv extralite/* . || exit 1
+rmdir extralite || exit 1
diff --git a/pkgs/applications/video/MPlayer/win32codecs/default.fix b/pkgs/applications/video/MPlayer/win32codecs/default.fix
new file mode 100644
index 00000000000..699875ae159
--- /dev/null
+++ b/pkgs/applications/video/MPlayer/win32codecs/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "win32codecs-1";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www2.mplayerhq.hu/MPlayer/releases/codecs/extralite.tar.bz2;
+    md5 = "4748ecae87f71e8bda9cb2e2a9bd30b4";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/applications/video/mplayerplug-in/builder.sh b/pkgs/applications/video/mplayerplug-in/builder.sh
new file mode 100755
index 00000000000..300a445ea0a
--- /dev/null
+++ b/pkgs/applications/video/mplayerplug-in/builder.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+buildinputs="$x11"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd mplayer* || exit 1
+./configure || exit 1
+make || exit 1
+mkdir -p $out/lib/mozilla/plugins || exit 1
+cp mplayerplug-in.so $out/lib/mozilla/plugins || exit 1
diff --git a/pkgs/applications/video/mplayerplug-in/default.fix b/pkgs/applications/video/mplayerplug-in/default.fix
new file mode 100644
index 00000000000..c06fc31fee4
--- /dev/null
+++ b/pkgs/applications/video/mplayerplug-in/default.fix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl, x11}:
+
+assert !isNull x11;
+
+derivation {
+  name = "mplayerplug-in-1.0pre2";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://heanet.dl.sourceforge.net/sourceforge/mplayerplug-in/mplayerplug-in-1.0pre2.tar.gz;
+    md5 = "1a6eb243989c143984bb1aac63b5282e";
+  };
+
+  stdenv = stdenv;
+  x11 = x11;
+}
diff --git a/pkgs/build-support/fetchurl/builder.sh b/pkgs/build-support/fetchurl/builder.sh
new file mode 100755
index 00000000000..4560017220f
--- /dev/null
+++ b/pkgs/build-support/fetchurl/builder.sh
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+. $stdenv/setup
+
+echo "downloading $url into $out..."
+
+#prefetch=@prefix@/store/nix-prefetch-url-$md5
+prefetch=/nix/store/nix-prefetch-url-$md5
+if test -f "$prefetch"; then
+    echo "using prefetched $prefetch";
+    mv $prefetch $out || exit 1
+else
+    wget --passive-ftp "$url" -O "$out" || exit 1
+fi
+
+#actual=$(@bindir@/nix-hash --flat $out)
+actual=$(/nix/bin/nix-hash --flat $out)
+if test "$actual" != "$md5"; then
+    echo "hash is $actual, expected $md5"
+    exit 1
+fi
diff --git a/pkgs/build-support/fetchurl/default.fix b/pkgs/build-support/fetchurl/default.fix
new file mode 100644
index 00000000000..fe2c79bbcdd
--- /dev/null
+++ b/pkgs/build-support/fetchurl/default.fix
@@ -0,0 +1,9 @@
+{stdenv}: {url, md5}: derivation {
+  name = baseNameOf (toString url);
+  system = stdenv.system;
+  builder = ./builder.sh;
+  stdenv = stdenv;
+  url = url;
+  md5 = md5;
+  id = md5;
+}
diff --git a/pkgs/development/compilers/gcc/builder.sh b/pkgs/development/compilers/gcc/builder.sh
new file mode 100755
index 00000000000..15746b26439
--- /dev/null
+++ b/pkgs/development/compilers/gcc/builder.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+buildinputs="$binutils"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+
+if test "$noSysDirs" == "1"; then
+    # Disable the standard include directories.
+    cd gcc-* || exit 1
+    cat >> ./gcc/cppdefault.h <<EOF
+#undef LOCAL_INCLUDE_DIR
+#undef SYSTEM_INCLUDE_DIR
+#undef STANDARD_INCLUDE_DIR
+EOF
+    cd .. || exit 1
+fi
+
+# Configure.
+mkdir build || exit 1
+cd build || exit 1
+../gcc-*/configure --prefix=$out --enable-languages=c,c++ || exit 1
+
+if test "$noSysDirs" == "1"; then
+    # Patch some of the makefiles to force linking against our own glibc.
+    extraflags="-Wl,-s $NIX_CFLAGS_COMPILE $NIX_CFLAGS_LINK"
+    for i in $NIX_LDFLAGS; do
+        extraflags="$extraflags -Wl,$i"
+    done
+
+    mf=Makefile
+    sed \
+        -e "s^FLAGS_FOR_TARGET =\(.*\)^FLAGS_FOR_TARGET = \1 $extraflags^" \
+        < $mf > $mf.tmp || exit 1
+    mv $mf.tmp $mf
+
+    mf=gcc/Makefile
+    sed \
+        -e "s^X_CFLAGS =\(.*\)^X_CFLAGS = \1 $extraflags^" \
+        < $mf > $mf.tmp || exit 1
+    mv $mf.tmp $mf
+
+    # Patch gcc/Makefile to prevent fixinc.sh from "fixing" system header files
+    # from /usr/include.
+    mf=gcc/Makefile
+    sed \
+        -e "s^NATIVE_SYSTEM_HEADER_DIR =\(.*\)^NATIVE_SYSTEM_HEADER_DIR = /fixinc-disabled^" \
+        < $mf > $mf.tmp || exit 1
+    mv $mf.tmp $mf
+fi
+
+# Build and install.
+make bootstrap || exit 1
+make install || exit 1
+
+find $out -name "*.a" -exec strip -S {} \; || exit 1
diff --git a/pkgs/development/compilers/gcc/default.fix b/pkgs/development/compilers/gcc/default.fix
new file mode 100644
index 00000000000..0effb18de1a
--- /dev/null
+++ b/pkgs/development/compilers/gcc/default.fix
@@ -0,0 +1,12 @@
+{stdenv, fetchurl, binutils}: derivation {
+  name = "gcc-3.3.2";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/gcc/gcc-3.3.2/gcc-3.3.2.tar.bz2;
+    md5 = "65999f654102f5438ac8562d13a6eced";
+  };
+  stdenv = stdenv;
+  binutils = binutils;
+  noSysDirs = stdenv.noSysDirs;
+}
diff --git a/pkgs/development/interpreters/perl/builder.sh b/pkgs/development/interpreters/perl/builder.sh
new file mode 100755
index 00000000000..7a925e6dbfd
--- /dev/null
+++ b/pkgs/development/interpreters/perl/builder.sh
@@ -0,0 +1,26 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd perl-* || exit 1
+
+# Perl's Configure messes with PATH.  We can't have that, so we patch it.
+# Yeah, this is an ugly hack.
+cat Configure | \
+ grep -v '^paths=' | \
+ grep -v '^locincpth=' | \
+ grep -v '^xlibpth=' | \
+ grep -v '^glibpth=' | \
+ grep -v '^loclibpth=' | \
+ grep -v '^locincpth=' | \
+ cat > Configure.tmp || exit 1
+mv Configure.tmp Configure || exit 1
+chmod +x Configure || exit 1
+
+./Configure -de -Dcc=gcc -Dprefix=$out -Uinstallusrbinperl \
+ -Dlocincpth="$NIX_LIBC_INCLUDES" \
+ -Dloclibpth="$NIX_LIBC_LIBS" \
+ || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/interpreters/perl/default.fix b/pkgs/development/interpreters/perl/default.fix
new file mode 100644
index 00000000000..8d9fa7f610d
--- /dev/null
+++ b/pkgs/development/interpreters/perl/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "perl-5.8.0";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+      url = ftp://ftp.cs.uu.nl/mirror/CPAN/src/5.0/perl-5.8.1.tar.gz;
+      md5 = "87cf132f1fbf23e780f0b218046438a6";
+    };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/aterm/builder.sh b/pkgs/development/libraries/aterm/builder.sh
new file mode 100755
index 00000000000..5915dc0f87d
--- /dev/null
+++ b/pkgs/development/libraries/aterm/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd aterm-* || exit 1
+./configure --prefix=$out --with-gcc || exit 1
+make || exit 1
+make install || exit 1
+strip -S $out/lib/*.a || exit 1
diff --git a/pkgs/development/libraries/aterm/default.fix b/pkgs/development/libraries/aterm/default.fix
new file mode 100644
index 00000000000..56b4c265ec0
--- /dev/null
+++ b/pkgs/development/libraries/aterm/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "aterm-2.0";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.cwi.nl/projects/MetaEnv/aterm/aterm-2.0.tar.gz;
+    md5 = "853474e4bcf4a85f7d38a0676b36bded";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/db4/builder.sh b/pkgs/development/libraries/db4/builder.sh
new file mode 100755
index 00000000000..f32e4ec50dd
--- /dev/null
+++ b/pkgs/development/libraries/db4/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd db-*/build_unix || exit 1
+../dist/configure --prefix=$out --enable-cxx --enable-compat185 || exit 1
+make || exit 1
+make install || exit 1
+rm -rf $out/doc || exit 1
diff --git a/pkgs/development/libraries/db4/default.fix b/pkgs/development/libraries/db4/default.fix
new file mode 100644
index 00000000000..06974133ce9
--- /dev/null
+++ b/pkgs/development/libraries/db4/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "db4-4.0.14";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.sleepycat.com/update/snapshot/db-4.0.14.tar.gz;
+    md5 = "12262c64fcd64b772e7cffad8e4d0ebc";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/expat/builder.sh b/pkgs/development/libraries/expat/builder.sh
new file mode 100755
index 00000000000..c5ca8edfb92
--- /dev/null
+++ b/pkgs/development/libraries/expat/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd expat-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
+strip -S $out/lib/*.a || exit 1
diff --git a/pkgs/development/libraries/expat/default.fix b/pkgs/development/libraries/expat/default.fix
new file mode 100644
index 00000000000..77b025b739f
--- /dev/null
+++ b/pkgs/development/libraries/expat/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "expat-1.95.7";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://heanet.dl.sourceforge.net/sourceforge/expat/expat-1.95.7.tar.gz;
+    md5 = "2ff59c2a5cbdd21a285c5f343e214fa9";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/fontconfig/builder.sh b/pkgs/development/libraries/fontconfig/builder.sh
new file mode 100755
index 00000000000..3b705bd9eca
--- /dev/null
+++ b/pkgs/development/libraries/fontconfig/builder.sh
@@ -0,0 +1,18 @@
+#! /bin/sh
+
+buildinputs="$freetype $expat $x11 $ed"
+. $stdenv/setup || exit 1
+
+# Fontconfig generates a bad `fonts.conf' file is the timezone is not known
+# (because it calls `date').
+export TZ=UTC
+
+tar xvfz $src || exit 1
+cd fontconfig-* || exit 1
+./configure --prefix=$out --with-confdir=$out/etc/fonts \
+ --x-includes=$x11/include --x-libraries=$x11/lib \
+ --with-expat-includes=$expat/include --with-expat-lib=$expat/lib || exit 1
+make || exit 1
+make install || exit 1
+
+echo "$freetype" > $out/propagated-build-inputs || exit 1
diff --git a/pkgs/development/libraries/fontconfig/default.fix b/pkgs/development/libraries/fontconfig/default.fix
new file mode 100644
index 00000000000..15944697423
--- /dev/null
+++ b/pkgs/development/libraries/fontconfig/default.fix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, x11, freetype, expat, ed}:
+
+assert !isNull x11 && x11.buildClientLibs;
+assert !isNull freetype;
+assert !isNull expat;
+assert !isNull ed;
+
+derivation {
+  name = "fontconfig-2.2.90";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://pdx.freedesktop.org/software/fontconfig/releases/fontconfig-2.2.90.tar.gz;
+    md5 = "5cb87476743be1bbf1674ed72a76ae6a";
+  };
+  stdenv = stdenv;
+  x11 = x11;
+  freetype = freetype;
+  expat = expat;
+  ed = ed;
+}
diff --git a/pkgs/development/libraries/freetype/builder.sh b/pkgs/development/libraries/freetype/builder.sh
new file mode 100755
index 00000000000..81bd27e4882
--- /dev/null
+++ b/pkgs/development/libraries/freetype/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd freetype-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
+strip -S $out/lib/*.a || exit 1
diff --git a/pkgs/development/libraries/freetype/default.fix b/pkgs/development/libraries/freetype/default.fix
new file mode 100644
index 00000000000..4284979844d
--- /dev/null
+++ b/pkgs/development/libraries/freetype/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "freetype-2.1.5";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://heanet.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.5.tar.bz2;
+    md5 = "54537b518b84d04190a1eccd393a29df";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/gettext/builder.sh b/pkgs/development/libraries/gettext/builder.sh
new file mode 100755
index 00000000000..57f18bb3da1
--- /dev/null
+++ b/pkgs/development/libraries/gettext/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd gettext-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/gettext/default.fix b/pkgs/development/libraries/gettext/default.fix
new file mode 100644
index 00000000000..d20c6f4763e
--- /dev/null
+++ b/pkgs/development/libraries/gettext/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "gettext-0.12.1";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/gettext/gettext-0.12.1.tar.gz;
+    md5 = "5d4bddd300072315e668247e5b7d5bdb";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/glibc/builder.sh b/pkgs/development/libraries/glibc/builder.sh
new file mode 100755
index 00000000000..7503e73a171
--- /dev/null
+++ b/pkgs/development/libraries/glibc/builder.sh
@@ -0,0 +1,26 @@
+#! /bin/sh
+
+# glibc cannot have itself in its rpath.
+export NIX_NO_SELF_RPATH=1
+. $stdenv/setup || exit 1
+
+tar xvfj $glibcSrc || exit 1
+(cd glibc-* && tar xvfj $linuxthreadsSrc) || exit 1
+
+(cd glibc-* && patch -p1 < $vaargsPatch) || exit 1
+
+mkdir build || exit 1
+cd build || exit 1
+LDFLAGS=-Wl,-S ../glibc-*/configure --prefix=$out --enable-add-ons --disable-profile || exit 1
+
+make || exit 1
+make install || exit 1
+make localedata/install-locales || exit 1
+strip -S $out/lib/*.a $out/lib/*.so $out/lib/gconv/*.so
+strip -s $out/bin/* $out/sbin/* $out/libexec/*
+
+ln -sf /etc/ld.so.cache $out/etc/ld.so.cache || exit 1
+
+(cd $out/include && ln -s $kernelHeaders/include/* .) || exit 1
+
+exit 0
diff --git a/pkgs/development/libraries/glibc/default.fix b/pkgs/development/libraries/glibc/default.fix
new file mode 100644
index 00000000000..bf001b85b2a
--- /dev/null
+++ b/pkgs/development/libraries/glibc/default.fix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, kernelHeaders}: derivation {
+  name = "glibc-2.3.2";
+  system = stdenv.system;
+  builder = ./builder.sh;
+
+  glibcSrc = fetchurl {
+    url = ftp://ftp.nl.net/pub/gnu/glibc/glibc-2.3.2.tar.bz2;
+    md5 = "ede969aad568f48083e413384f20753c";
+  };
+  linuxthreadsSrc = fetchurl {
+    url = ftp://ftp.nl.net/pub/gnu/glibc/glibc-linuxthreads-2.3.2.tar.bz2;
+    md5 = "894b8969cfbdf787c73e139782167607";
+  };
+
+  # This is a patch to make glibc compile under GCC 3.3.  Presumably
+  # later releases of glibc won't need this.
+  vaargsPatch = ./glibc-2.3.2-sscanf-1.patch;
+
+  stdenv = stdenv;
+  kernelHeaders = kernelHeaders;
+}
diff --git a/pkgs/development/libraries/glibc/glibc-2.3.2-sscanf-1.patch b/pkgs/development/libraries/glibc/glibc-2.3.2-sscanf-1.patch
new file mode 100644
index 00000000000..78940884cbe
--- /dev/null
+++ b/pkgs/development/libraries/glibc/glibc-2.3.2-sscanf-1.patch
@@ -0,0 +1,68 @@
+Submitted By: David Shust (www.shustring.com)
+Date: 2003-08-15
+Initial Package Version: 2.3.2
+Origin: glibc CVS changes performed by Roland McGrath
+Description: patches stdio-common/sscanf.c, libio/{swprintf.c, swscanf.c}
+
+diff -Naur glibc-2.3.2/libio/swprintf.c glibc-2.3.2-new/libio/swprintf.c
+--- glibc-2.3.2/libio/swprintf.c	2001-07-07 19:21:03.000000000 +0000
++++ glibc-2.3.2-new/libio/swprintf.c	2003-08-15 19:36:42.000000000 +0000
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1991,1995,1997,1998,1999,2000 Free Software Foundation, Inc.
++/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003
++	Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -22,10 +23,7 @@
+ /* Write formatted output into S, according to the format string FORMAT.  */
+ /* VARARGS3 */
+ int
+-swprintf (s, n, format)
+-     wchar_t *s;
+-     size_t n;
+-     const wchar_t *format;
++swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
+ {
+   va_list arg;
+   int done;
+diff -Naur glibc-2.3.2/libio/swscanf.c glibc-2.3.2-new/libio/swscanf.c
+--- glibc-2.3.2/libio/swscanf.c	2001-07-07 19:21:03.000000000 +0000
++++ glibc-2.3.2-new/libio/swscanf.c	2003-08-15 19:36:42.000000000 +0000
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991, 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
++/* Copyright (C) 1991,1995,1996,1998,1999,2003 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -22,9 +22,7 @@
+ /* Read formatted input from S, according to the format string FORMAT.  */
+ /* VARARGS2 */
+ int
+-swscanf (s, format)
+-     const wchar_t *s;
+-     const wchar_t *format;
++swscanf (const wchar_t *s, const wchar_t *format, ...)
+ {
+   va_list arg;
+   int done;
+diff -Naur glibc-2.3.2/stdio-common/sscanf.c glibc-2.3.2-new/stdio-common/sscanf.c
+--- glibc-2.3.2/stdio-common/sscanf.c	2002-08-10 18:09:08.000000000 +0000
++++ glibc-2.3.2-new/stdio-common/sscanf.c	2003-08-15 19:36:24.000000000 +0000
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991,95,96,98,2002 Free Software Foundation, Inc.
++/* Copyright (C) 1991,1995,1996,1998,2002,2003 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -27,9 +27,7 @@
+ /* Read formatted input from S, according to the format string FORMAT.  */
+ /* VARARGS2 */
+ int
+-sscanf (s, format)
+-     const char *s;
+-     const char *format;
++sscanf (const char *s, const char *format, ...)
+ {
+   va_list arg;
+   int done;
diff --git a/pkgs/development/libraries/gnet/builder.sh b/pkgs/development/libraries/gnet/builder.sh
new file mode 100755
index 00000000000..220307fd8b9
--- /dev/null
+++ b/pkgs/development/libraries/gnet/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $glib"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd gnet-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/gnet/default.fix b/pkgs/development/libraries/gnet/default.fix
new file mode 100644
index 00000000000..0475dfa06ab
--- /dev/null
+++ b/pkgs/development/libraries/gnet/default.fix
@@ -0,0 +1,16 @@
+{stdenv, fetchurl, pkgconfig, glib}:
+
+assert !isNull pkgconfig && !isNull glib;
+
+derivation {
+  name = "gnet-2.0.4";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.gnetlibrary.org/src/gnet-2.0.4.tar.gz;
+    md5 = "b43e728391143214e2cfd0b835b6fd2a";
+  };
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  glib = glib;
+}
diff --git a/pkgs/development/libraries/gtk+-1/gdk-pixbuf/builder.sh b/pkgs/development/libraries/gtk+-1/gdk-pixbuf/builder.sh
new file mode 100755
index 00000000000..c3dc0238305
--- /dev/null
+++ b/pkgs/development/libraries/gtk+-1/gdk-pixbuf/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$gtk $libtiff $libjpeg $libpng"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd gdk-pixbuf-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/gtk+-1/gdk-pixbuf/default.fix b/pkgs/development/libraries/gtk+-1/gdk-pixbuf/default.fix
new file mode 100644
index 00000000000..8fe9f5e0e14
--- /dev/null
+++ b/pkgs/development/libraries/gtk+-1/gdk-pixbuf/default.fix
@@ -0,0 +1,21 @@
+{stdenv, fetchurl, gtk, libtiff, libjpeg, libpng}:
+
+assert !isNull gtk && !isNull libtiff
+  && !isNull libjpeg && !isNull libpng;
+
+derivation {
+  name = "gdk-pixbuf-0.22.0";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/0.22/gdk-pixbuf-0.22.0.tar.bz2;
+    md5 = "05fcb68ceaa338614ab650c775efc2f2";
+  };
+
+  stdenv = stdenv;
+  gtk = gtk;
+  libtiff = libtiff;
+  libjpeg = libjpeg;
+  libpng = libpng;
+}
diff --git a/pkgs/development/libraries/gtk+-1/glib/builder.sh b/pkgs/development/libraries/gtk+-1/glib/builder.sh
new file mode 100755
index 00000000000..e6f721de3f4
--- /dev/null
+++ b/pkgs/development/libraries/gtk+-1/glib/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd glib-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/gtk+-1/glib/default.fix b/pkgs/development/libraries/gtk+-1/glib/default.fix
new file mode 100644
index 00000000000..7ae9be406b3
--- /dev/null
+++ b/pkgs/development/libraries/gtk+-1/glib/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "glib-1.2.10";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gtk.org/pub/gtk/v1.2/glib-1.2.10.tar.gz;
+    md5 = "6fe30dad87c77b91b632def29dd69ef9";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/gtk+-1/gtk+/builder.sh b/pkgs/development/libraries/gtk+-1/gtk+/builder.sh
new file mode 100755
index 00000000000..0487465727a
--- /dev/null
+++ b/pkgs/development/libraries/gtk+-1/gtk+/builder.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+buildinputs="$x11 $glib"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd gtk+-* || exit 1
+./configure --prefix=$out --x-includes=$x11/include --x-libraries=$x11/lib || exit 1
+make || exit 1
+make install || exit 1
+
+echo "$x11 $glib" > $out/propagated-build-inputs || exit 1
diff --git a/pkgs/development/libraries/gtk+-1/gtk+/default.fix b/pkgs/development/libraries/gtk+-1/gtk+/default.fix
new file mode 100644
index 00000000000..856b2ffcad0
--- /dev/null
+++ b/pkgs/development/libraries/gtk+-1/gtk+/default.fix
@@ -0,0 +1,19 @@
+{stdenv, fetchurl, x11, glib}:
+
+assert !isNull x11 && !isNull glib;
+assert x11.buildClientLibs;
+
+derivation {
+  name = "gtk+-1.2.10";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gtk.org/pub/gtk/v1.2/gtk+-1.2.10.tar.gz;
+    md5 = "4d5cb2fc7fb7830e4af9747a36bfce20";
+  };
+
+  stdenv = stdenv;
+  x11 = x11;
+  glib = glib;
+}
diff --git a/pkgs/development/libraries/gtk+/atk/builder.sh b/pkgs/development/libraries/gtk+/atk/builder.sh
new file mode 100755
index 00000000000..212b5dbe287
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/atk/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $perl $glib"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd atk-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/gtk+/atk/default.fix b/pkgs/development/libraries/gtk+/atk/default.fix
new file mode 100644
index 00000000000..8db047f9c49
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/atk/default.fix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl, pkgconfig, glib, perl}:
+
+assert !isNull pkgconfig && !isNull glib && !isNull perl;
+
+derivation {
+  name = "atk-1.2.4";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gtk.org/pub/gtk/v2.2/atk-1.2.4.tar.bz2;
+    md5 = "2d6d50df31abe0e8892b5d3e7676a02d";
+  };
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  glib = glib;
+  perl = perl;
+}
diff --git a/pkgs/development/libraries/gtk+/glib/builder.sh b/pkgs/development/libraries/gtk+/glib/builder.sh
new file mode 100755
index 00000000000..8f4c0b097b2
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/glib/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $gettext $perl"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd glib-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/gtk+/glib/default.fix b/pkgs/development/libraries/gtk+/glib/default.fix
new file mode 100644
index 00000000000..227aa80f17d
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/glib/default.fix
@@ -0,0 +1,17 @@
+{stdenv, fetchurl, pkgconfig, gettext, perl}:
+
+assert !isNull pkgconfig && !isNull gettext && !isNull perl;
+
+derivation {
+  name = "glib-2.2.3";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gtk.org/pub/gtk/v2.2/glib-2.2.3.tar.bz2;
+    md5 = "aa214a10d873b68ddd67cd9de2ccae55";
+  };
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  gettext = gettext;
+  perl = perl;
+}
diff --git a/pkgs/development/libraries/gtk+/gtk+/builder.sh b/pkgs/development/libraries/gtk+/gtk+/builder.sh
new file mode 100755
index 00000000000..e8835feb3a7
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/gtk+/builder.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $x11 $glib $atk $pango $perl $libtiff $libjpeg $libpng"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd gtk+-* || exit 1
+./configure --prefix=$out --x-includes=$x11/include --x-libraries=$x11/lib || exit 1
+make || exit 1
+make install || exit 1
+
+echo "$x11 $glib $atk $pango" > $out/propagated-build-inputs || exit 1
diff --git a/pkgs/development/libraries/gtk+/gtk+/default.fix b/pkgs/development/libraries/gtk+/gtk+/default.fix
new file mode 100644
index 00000000000..f0fe5979d0b
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/gtk+/default.fix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, x11, glib, atk
+, pango, perl, libtiff, libjpeg, libpng}:
+
+assert !isNull pkgconfig && !isNull x11 && !isNull glib && !isNull atk
+  && !isNull pango && !isNull perl && !isNull perl && !isNull libtiff
+  && !isNull libjpeg && !isNull libpng;
+assert x11.buildClientLibs;
+assert glib == atk.glib;
+assert glib == pango.glib;
+assert x11 == pango.x11;
+
+derivation {
+  name = "gtk+-2.2.4";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gtk.org/pub/gtk/v2.2/gtk+-2.2.4.tar.bz2;
+    md5 = "605332199533e73bc6eec481fb4f1671";
+  };
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  x11 = x11;
+  glib = glib;
+  atk = atk;
+  pango = pango;
+  perl = perl;
+  libtiff = libtiff;
+  libjpeg = libjpeg;
+  libpng = libpng;
+}
diff --git a/pkgs/development/libraries/gtk+/pango/builder.sh b/pkgs/development/libraries/gtk+/pango/builder.sh
new file mode 100755
index 00000000000..daa6001cc17
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/pango/builder.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $x11 $glib $xft"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd pango-* || exit 1
+./configure --prefix=$out --x-includes=$x11/include --x-libraries=$x11/lib || exit 1
+make || exit 1
+make install || exit 1
+
+echo "$xft" > $out/propagated-build-inputs || exit 1
diff --git a/pkgs/development/libraries/gtk+/pango/default.fix b/pkgs/development/libraries/gtk+/pango/default.fix
new file mode 100644
index 00000000000..d598d97f9c3
--- /dev/null
+++ b/pkgs/development/libraries/gtk+/pango/default.fix
@@ -0,0 +1,20 @@
+{stdenv, fetchurl, pkgconfig, x11, glib, xft}:
+
+assert !isNull pkgconfig && !isNull x11 && !isNull glib && !isNull xft;
+assert x11.buildClientLibs;
+assert xft.x11 == x11;
+
+derivation {
+  name = "pango-1.2.5";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gtk.org/pub/gtk/v2.2/pango-1.2.5.tar.bz2;
+    md5 = "df00fe3e71cd297010f24f439b6c8ee6";
+  };
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  x11 = x11;
+  glib = glib;
+  xft = xft;
+}
diff --git a/pkgs/development/libraries/libIDL/builder.sh b/pkgs/development/libraries/libIDL/builder.sh
new file mode 100755
index 00000000000..113dfef5a64
--- /dev/null
+++ b/pkgs/development/libraries/libIDL/builder.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $glib $lex $yacc"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd libIDL-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
+strip -S $out/lib/*.a || exit 1
diff --git a/pkgs/development/libraries/libIDL/default.fix b/pkgs/development/libraries/libIDL/default.fix
new file mode 100644
index 00000000000..79ef17dd6b8
--- /dev/null
+++ b/pkgs/development/libraries/libIDL/default.fix
@@ -0,0 +1,18 @@
+{stdenv, fetchurl, pkgconfig, glib, lex, yacc}:
+
+assert !isNull pkgconfig && !isNull gtk && !isNull lex && !isNull yacc;
+
+derivation {
+  name = "libIDL-0.8.2";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.2.tar.bz2;
+    md5 = "a75d2dbf3a3c66b567047c94245f8b82";
+  };
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  glib = glib;
+  lex = lex;
+  yacc = yacc;
+}
diff --git a/pkgs/development/libraries/libjpeg/builder.sh b/pkgs/development/libraries/libjpeg/builder.sh
new file mode 100755
index 00000000000..9a27a8545c4
--- /dev/null
+++ b/pkgs/development/libraries/libjpeg/builder.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd jpeg-* || exit 1
+./configure --prefix=$out --enable-shared || exit 1
+make || exit 1
+mkdir $out || exit 1
+mkdir $out/bin || exit 1
+mkdir $out/lib || exit 1
+mkdir $out/include || exit 1
+mkdir $out/man || exit 1
+mkdir $out/man/man1 || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/libjpeg/default.fix b/pkgs/development/libraries/libjpeg/default.fix
new file mode 100644
index 00000000000..80946833f72
--- /dev/null
+++ b/pkgs/development/libraries/libjpeg/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "libjpeg-6b";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.ijg.org/files/jpegsrc.v6b.tar.gz;
+    md5 = "dbd5f3b47ed13132f04c685d608a7547";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/libpng/builder.sh b/pkgs/development/libraries/libpng/builder.sh
new file mode 100755
index 00000000000..d601bfa5fbf
--- /dev/null
+++ b/pkgs/development/libraries/libpng/builder.sh
@@ -0,0 +1,16 @@
+#! /bin/sh
+
+buildinputs="$zlib"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd libpng-* || exit 1
+make -f scripts/makefile.linux || exit 1
+mkdir $out || exit 1
+mkdir $out/bin || exit 1
+mkdir $out/lib || exit 1
+mkdir $out/include || exit 1
+make -f scripts/makefile.linux install prefix=$out || exit 1
+strip -S $out/lib/*.a || exit 1
+
+echo "$zlib" > $out/propagated-build-inputs || exit 1
diff --git a/pkgs/development/libraries/libpng/default.fix b/pkgs/development/libraries/libpng/default.fix
new file mode 100644
index 00000000000..47322de7d17
--- /dev/null
+++ b/pkgs/development/libraries/libpng/default.fix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl, zlib}:
+
+assert !isNull zlib;
+
+derivation {
+  name = "libpng-1.2.5";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://heanet.dl.sourceforge.net/sourceforge/png-mng/libpng-1.2.5.tar.bz2;
+    md5 = "3fc28af730f12ace49b14568de4ad934";
+  };
+  stdenv = stdenv;
+  zlib = zlib;
+}
diff --git a/pkgs/development/libraries/libtiff/builder.sh b/pkgs/development/libraries/libtiff/builder.sh
new file mode 100755
index 00000000000..c237077c8b4
--- /dev/null
+++ b/pkgs/development/libraries/libtiff/builder.sh
@@ -0,0 +1,16 @@
+#! /bin/sh
+
+buildinputs="$zlib $libjpeg"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd tiff-* || exit 1
+./configure --prefix=$out --with-DIR_MAN=$out/man \
+ --with-ZIP --with-JPEG \
+ --with-DIRS_LIBINC="$zlib/include $libjpeg/include" || exit 1
+make || exit 1
+mkdir $out || exit 1
+make install || exit 1
+strip -S $out/lib/*.a || exit 1
+
+echo "$zlib $libjpeg" > $out/propagated-build-inputs || exit 1
diff --git a/pkgs/development/libraries/libtiff/default.fix b/pkgs/development/libraries/libtiff/default.fix
new file mode 100644
index 00000000000..7a14a63ce33
--- /dev/null
+++ b/pkgs/development/libraries/libtiff/default.fix
@@ -0,0 +1,16 @@
+{stdenv, fetchurl, zlib, libjpeg}:
+
+assert !isNull zlib && !isNull libjpeg;
+
+derivation {
+  name = "libtiff-3.5.7";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.remotesensing.org/pub/libtiff/tiff-v3.5.7.tar.gz;
+    md5 = "82243b5ae9b7c9e492aeebc501680990";
+  };
+  stdenv = stdenv;
+  zlib = zlib;
+  libjpeg = libjpeg;
+}
diff --git a/pkgs/development/libraries/libxml2/builder.sh b/pkgs/development/libraries/libxml2/builder.sh
new file mode 100755
index 00000000000..1b4e58174c8
--- /dev/null
+++ b/pkgs/development/libraries/libxml2/builder.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+buildinputs="$zlib"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd libxml2-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
+strip -S $out/lib/*.a || exit 1
diff --git a/pkgs/development/libraries/libxml2/default.fix b/pkgs/development/libraries/libxml2/default.fix
new file mode 100644
index 00000000000..3e2fb8b13e5
--- /dev/null
+++ b/pkgs/development/libraries/libxml2/default.fix
@@ -0,0 +1,15 @@
+{stdenv, fetchurl, zlib}:
+
+assert !isNull zlib;
+
+derivation {
+  name = "libxml2-2.6.2";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://rpmfind.net/pub/libxml/libxml2-2.6.2.tar.gz;
+    md5 = "56e7f74d3d44cc16790ad08624faef64";
+  };
+  stdenv = stdenv;
+  zlib = zlib;
+}
diff --git a/pkgs/development/libraries/openssl/builder.sh b/pkgs/development/libraries/openssl/builder.sh
new file mode 100755
index 00000000000..c1493365ae6
--- /dev/null
+++ b/pkgs/development/libraries/openssl/builder.sh
@@ -0,0 +1,16 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+export PATH=$perl/bin:$PATH
+
+tar xvfz $src || exit 1
+cd openssl-* || exit 1
+./config --prefix=$out shared || exit 1
+make || exit 1
+mkdir $out || exit 1
+make install || exit 1
+
+# Bug fix: openssl does a `chmod 644' on the pkgconfig directory.
+chmod 755 $out/lib/pkgconfig || exit 1
+
+echo $envpkgs > $out/envpkgs || exit 1
diff --git a/pkgs/development/libraries/openssl/default.fix b/pkgs/development/libraries/openssl/default.fix
new file mode 100644
index 00000000000..38bf22cb0bf
--- /dev/null
+++ b/pkgs/development/libraries/openssl/default.fix
@@ -0,0 +1,11 @@
+{stdenv, fetchurl, perl}: derivation {
+  name = "openssl-0.9.7c";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+      url = http://www.openssl.org/source/openssl-0.9.7c.tar.gz;
+      md5 = "c54fb36218adaaaba01ef733cd88c8ec";
+    };
+  stdenv = stdenv;
+  perl = perl;
+}
diff --git a/pkgs/development/libraries/pcre/builder.sh b/pkgs/development/libraries/pcre/builder.sh
new file mode 100755
index 00000000000..dea883667fc
--- /dev/null
+++ b/pkgs/development/libraries/pcre/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd pcre-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/pcre/default.fix b/pkgs/development/libraries/pcre/default.fix
new file mode 100644
index 00000000000..9e18d88fccf
--- /dev/null
+++ b/pkgs/development/libraries/pcre/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "pcre-4.3";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-4.3.tar.bz2;
+    md5 = "7bc7d5b590a41e6f9ede30f272002a02";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/libraries/xft/builder.sh b/pkgs/development/libraries/xft/builder.sh
new file mode 100755
index 00000000000..f4432e079bf
--- /dev/null
+++ b/pkgs/development/libraries/xft/builder.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+buildinputs="$pkgconfig $fontconfig $x11"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd xft-* || exit 1
+./configure --prefix=$out --x-includes=$x11/include --x-libraries=$x11/lib || exit 1
+make || exit 1
+make install || exit 1
+
+echo "$fontconfig" > $out/propagated-build-inputs || exit 1
diff --git a/pkgs/development/libraries/xft/default.fix b/pkgs/development/libraries/xft/default.fix
new file mode 100644
index 00000000000..0764a1dd80a
--- /dev/null
+++ b/pkgs/development/libraries/xft/default.fix
@@ -0,0 +1,18 @@
+{stdenv, fetchurl, pkgconfig, x11, fontconfig}:
+
+assert !isNull pkgconfig && !isNull x11 && !isNull fontconfig;
+assert fontconfig.x11 == x11;
+
+derivation {
+  name = "xft-2.1.2";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://pdx.freedesktop.org/software/fontconfig/releases/xft-2.1.2.tar.gz;
+    md5 = "defb7e801d4938b8b15a426ae57e2f3f";
+  };
+  stdenv = stdenv;
+  pkgconfig = pkgconfig;
+  x11 = x11;
+  fontconfig = fontconfig;
+}
diff --git a/pkgs/development/libraries/zlib/builder.sh b/pkgs/development/libraries/zlib/builder.sh
new file mode 100755
index 00000000000..4ca1a830544
--- /dev/null
+++ b/pkgs/development/libraries/zlib/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd zlib-* || exit 1
+./configure --prefix=$out --shared || exit 1
+make || exit 1
+mkdir $out || exit 1
+make install || exit 1
diff --git a/pkgs/development/libraries/zlib/default.fix b/pkgs/development/libraries/zlib/default.fix
new file mode 100644
index 00000000000..7dfe3e6a9ab
--- /dev/null
+++ b/pkgs/development/libraries/zlib/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "zlib-1.1.4";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.gzip.org/zlib/zlib-1.1.4.tar.gz;
+    md5 = "abc405d0bdd3ee22782d7aa20e440f08";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/tools/build-managers/gnumake/builder.sh b/pkgs/development/tools/build-managers/gnumake/builder.sh
new file mode 100755
index 00000000000..362de7cd9a8
--- /dev/null
+++ b/pkgs/development/tools/build-managers/gnumake/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd make-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/tools/build-managers/gnumake/default.fix b/pkgs/development/tools/build-managers/gnumake/default.fix
new file mode 100644
index 00000000000..6ca56d57ba6
--- /dev/null
+++ b/pkgs/development/tools/build-managers/gnumake/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "gnumake-3.80";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/make/make-3.80.tar.bz2;
+    md5 = "0bbd1df101bc0294d440471e50feca71";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/tools/misc/binutils/builder.sh b/pkgs/development/tools/misc/binutils/builder.sh
new file mode 100755
index 00000000000..7782ea08988
--- /dev/null
+++ b/pkgs/development/tools/misc/binutils/builder.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd binutils-* || exit 1
+
+# Clear the default library search path.
+if test "$noSysDirs" == "1"; then
+    echo 'NATIVE_LIB_DIRS=' >> ld/configure.tgt || exit 1
+fi
+
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
+
+strip -S $out/lib/*.a || exit 1
diff --git a/pkgs/development/tools/misc/binutils/default.fix b/pkgs/development/tools/misc/binutils/default.fix
new file mode 100644
index 00000000000..07d6b416a54
--- /dev/null
+++ b/pkgs/development/tools/misc/binutils/default.fix
@@ -0,0 +1,11 @@
+{stdenv, fetchurl}: derivation {
+  name = "binutils-2.14";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/binutils/binutils-2.14.tar.bz2;
+    md5 = "2da8def15d28af3ec6af0982709ae90a";
+  };
+  stdenv = stdenv;
+  noSysDirs = stdenv.noSysDirs;
+}
diff --git a/pkgs/development/tools/misc/gnum4/builder.sh b/pkgs/development/tools/misc/gnum4/builder.sh
new file mode 100755
index 00000000000..03f201582bb
--- /dev/null
+++ b/pkgs/development/tools/misc/gnum4/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd m4-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/tools/misc/gnum4/default.fix b/pkgs/development/tools/misc/gnum4/default.fix
new file mode 100644
index 00000000000..25d095d387a
--- /dev/null
+++ b/pkgs/development/tools/misc/gnum4/default.fix
@@ -0,0 +1,11 @@
+{stdenv, fetchurl}:
+derivation {
+  name = "gnum4-1.4";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/m4/m4-1.4.tar.gz;
+    md5 = "9eb2dd07740b2d2f3c7adb3e8d299bda";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/tools/misc/pkgconfig/builder.sh b/pkgs/development/tools/misc/pkgconfig/builder.sh
new file mode 100755
index 00000000000..5ec940cb03a
--- /dev/null
+++ b/pkgs/development/tools/misc/pkgconfig/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd pkgconfig-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+mkdir $out || exit 1
+make install || exit 1
diff --git a/pkgs/development/tools/misc/pkgconfig/default.fix b/pkgs/development/tools/misc/pkgconfig/default.fix
new file mode 100644
index 00000000000..9194b041843
--- /dev/null
+++ b/pkgs/development/tools/misc/pkgconfig/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "pkgconfig-0.15.0";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.freedesktop.org/software/pkgconfig/releases/pkgconfig-0.15.0.tar.gz;
+    md5 = "a7e4f60a6657dbc434334deb594cc242";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/development/tools/parsing/bison/builder.sh b/pkgs/development/tools/parsing/bison/builder.sh
new file mode 100755
index 00000000000..c112a067c7b
--- /dev/null
+++ b/pkgs/development/tools/parsing/bison/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$m4"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd bison-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/tools/parsing/bison/default.fix b/pkgs/development/tools/parsing/bison/default.fix
new file mode 100644
index 00000000000..fc8941b76f3
--- /dev/null
+++ b/pkgs/development/tools/parsing/bison/default.fix
@@ -0,0 +1,13 @@
+{stdenv, fetchurl, m4}:
+assert !isNull m4;
+derivation {
+  name = "bison-1.875";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/bison/bison-1.875.tar.bz2;
+    md5 = "b7f8027b249ebd4dd0cc948943a71af0";
+  };
+  stdenv = stdenv;
+  m4 = m4;
+}
diff --git a/pkgs/development/tools/parsing/flex/builder.sh b/pkgs/development/tools/parsing/flex/builder.sh
new file mode 100755
index 00000000000..4c097580550
--- /dev/null
+++ b/pkgs/development/tools/parsing/flex/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+export buildinputs="$yacc"
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd flex-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/development/tools/parsing/flex/default.fix b/pkgs/development/tools/parsing/flex/default.fix
new file mode 100644
index 00000000000..605c29db2d2
--- /dev/null
+++ b/pkgs/development/tools/parsing/flex/default.fix
@@ -0,0 +1,13 @@
+{stdenv, fetchurl, yacc}:
+assert !isNull yacc;
+derivation {
+  name = "flex-2.5.4a";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/flex/flex-2.5.4a.tar.gz;
+    md5 = "bd8753d0b22e1f4ec87a553a73021adf";
+  };
+  stdenv = stdenv;
+  yacc = yacc;
+}
diff --git a/pkgs/os-specific/linux/alsa/library/builder.sh b/pkgs/os-specific/linux/alsa/library/builder.sh
new file mode 100755
index 00000000000..4cb8210f186
--- /dev/null
+++ b/pkgs/os-specific/linux/alsa/library/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd alsa-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/os-specific/linux/alsa/library/default.fix b/pkgs/os-specific/linux/alsa/library/default.fix
new file mode 100644
index 00000000000..f13ca6ec54e
--- /dev/null
+++ b/pkgs/os-specific/linux/alsa/library/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "alsa-lib-0.9.8";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.alsa-project.org/pub/lib/alsa-lib-0.9.8.tar.bz2;
+    md5 = "c9f163fb0623de1b92bf287712641f6e";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/os-specific/linux/kernel-headers/builder.sh b/pkgs/os-specific/linux/kernel-headers/builder.sh
new file mode 100755
index 00000000000..3afc94f0246
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel-headers/builder.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd linux-* || exit 1
+make include/linux/version.h || exit 1
+mkdir $out || exit 1
+mkdir $out/include || exit 1
+cp -prvd include/linux include/asm-i386 $out/include || exit 1
+cd $out/include || exit 1
+ln -s asm-i386 asm || exit 1
diff --git a/pkgs/os-specific/linux/kernel-headers/default.fix b/pkgs/os-specific/linux/kernel-headers/default.fix
new file mode 100644
index 00000000000..cc626a25b26
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel-headers/default.fix
@@ -0,0 +1,11 @@
+{stdenv, fetchurl}: derivation {
+  # !!! check that this is a i386
+  name = "linux-headers-2.4.22-i386";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nl.kernel.org/pub/linux/kernel/v2.4/linux-2.4.22.tar.bz2;
+    md5 = "75dc85149b06ac9432106b8941eb9f7b";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/servers/http/apache-httpd/builder.sh b/pkgs/servers/http/apache-httpd/builder.sh
new file mode 100755
index 00000000000..559c75d0124
--- /dev/null
+++ b/pkgs/servers/http/apache-httpd/builder.sh
@@ -0,0 +1,23 @@
+#! /bin/sh
+
+buildinputs="$openssl $db4 $expat $perl"
+. $stdenv/setup || exit 1
+
+if test $db4Support; then
+    extraflags="--with-berkeley-db=$db4 $extraflags"
+fi
+
+if test $sslSupport; then
+    extraflags="--enable-ssl --with-ssl=$openssl $extraflags"
+fi
+
+tar xvfz $src || exit 1
+cd httpd-* || exit 1
+./configure --prefix=$out \
+ --with-expat=$expat --enable-mods-shared=all --without-gdbm \
+ --enable-threads --with-devrandom=/dev/urandom \
+ $extraflags || exit 1
+make || exit 1
+make install || exit 1
+strip -S $out/lib/*.a || exit 1
+rm -rf $out/manual || exit 1
diff --git a/pkgs/servers/http/apache-httpd/default.fix b/pkgs/servers/http/apache-httpd/default.fix
new file mode 100644
index 00000000000..b0e9dd2e9c0
--- /dev/null
+++ b/pkgs/servers/http/apache-httpd/default.fix
@@ -0,0 +1,19 @@
+{ stdenv, fetchurl, openssl, db4, expat, perl
+, sslSupport, db4Support
+}:
+derivation {
+  name = "apache-httpd-2.0.48";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.cs.uu.nl/mirror/apache.org/dist/httpd/httpd-2.0.48.tar.gz;
+    md5 = "466c63bb71b710d20a5c353df8c1a19c";
+  };
+
+  stdenv = stdenv;
+  perl = perl;
+  openssl = if sslSupport then openssl else "";
+  db4 = if db4Support then db4 else "";
+  expat = expat;
+}
diff --git a/pkgs/servers/x11/xfree86/builder.sh b/pkgs/servers/x11/xfree86/builder.sh
new file mode 100755
index 00000000000..4717f42e0f6
--- /dev/null
+++ b/pkgs/servers/x11/xfree86/builder.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+export buildinputs="$bison $flex"
+. $stdenv/setup || exit 1
+
+tar xvfz $src1 || exit 1
+tar xvfz $src2 || exit 1
+tar xvfz $src3 || exit 1
+cd xc || exit 1
+sed "s^@OUT@^$out^" < $hostdef > config/cf/host.def
+make World || exit 1
+make install || exit 1
+
+# !!! Hack to get fontconfig to work.
+ln -s /usr/X11R6/lib/X11/fonts $out/lib/X11/fonts
diff --git a/pkgs/servers/x11/xfree86/default.fix b/pkgs/servers/x11/xfree86/default.fix
new file mode 100644
index 00000000000..17971c2081f
--- /dev/null
+++ b/pkgs/servers/x11/xfree86/default.fix
@@ -0,0 +1,34 @@
+{ buildServer ? true
+, buildClientLibs ? true
+, stdenv, fetchurl, bison, flex}:
+
+assert !buildServer; # we don't support this currently
+assert buildClientLibs; # we don't support *not* doing this currently
+assert !isNull bison && !isNull flex;
+
+derivation {
+  name = "xfree86-4.3";
+  system = stdenv.system;
+
+  builder = ./builder.sh;
+  hostdef = ./host.def;
+  src1 = fetchurl {
+    url = ftp://gnu.kookel.org/pub/XFree86/4.3.0/source/X430src-1.tgz;
+    md5 = "4f241a4f867363f40efa2b00dca292af";
+  };
+  src2 = fetchurl {
+    url = ftp://gnu.kookel.org/pub/XFree86/4.3.0/source/X430src-2.tgz;
+    md5 = "844c2ee908d21dbf8911fd13115bf8b4";
+  };
+  src3 = fetchurl {
+    url = ftp://gnu.kookel.org/pub/XFree86/4.3.0/source/X430src-3.tgz;
+    md5 = "b82a0443e1b7bf860e4343e6b6766cb6";
+  };
+
+  buildServer = buildServer;
+  buildClientLibs = buildClientLibs;
+
+  stdenv = stdenv;
+  bison = bison;
+  flex = flex;
+}
diff --git a/pkgs/servers/x11/xfree86/host.def b/pkgs/servers/x11/xfree86/host.def
new file mode 100644
index 00000000000..0085f9dab25
--- /dev/null
+++ b/pkgs/servers/x11/xfree86/host.def
@@ -0,0 +1,30 @@
+#define BuildServer		NO
+#define BuildFontServer         NO
+#define BuildSpeedo             NO
+#define BuildType1              NO
+#define BuildCID                NO
+#define BuildFreeType           NO
+#define BuildXTrueType          NO
+#define BuildFonts              NO
+#define BuildXftLibrary		NO
+#define BuildXft1Library	NO
+#define BuildClients		NO
+#define BuildDocs		NO
+#define BuildLibraries		YES
+#define BuildGLXLibrary		NO
+#define BuildOSMesaLib		NO
+#define BuildOSMesaLib		NO
+#define BuildXvMCExt		NO
+#define BuildXvMCLibrary	NO
+
+#define XF86Server              NO
+#define XnestServer             NO
+#define XVirtualFramebufferServer	NO
+#define XprtServer		NO
+#define XF86CardDrivers
+#define XInputDrivers
+
+#define ProjectRoot @OUT@
+#define NothingOutsideProjectRoot YES
+#define EtcX11Directory ProjectRoot/etc
+#define UseSeparateConfDir	NO
diff --git a/pkgs/shells/bash/builder.sh b/pkgs/shells/bash/builder.sh
new file mode 100755
index 00000000000..7b0d093c576
--- /dev/null
+++ b/pkgs/shells/bash/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd bash-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
+(cd $out/bin; ln -s bash sh) || exit 1
diff --git a/pkgs/shells/bash/default.fix b/pkgs/shells/bash/default.fix
new file mode 100644
index 00000000000..92199565904
--- /dev/null
+++ b/pkgs/shells/bash/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "bash-2.05b";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/bash/bash-2.05b.tar.gz;
+    md5 = "5238251b4926d778dfe162f6ce729733";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/stdenv/generic/builder.sh b/pkgs/stdenv/generic/builder.sh
new file mode 100755
index 00000000000..ad788118492
--- /dev/null
+++ b/pkgs/stdenv/generic/builder.sh
@@ -0,0 +1,41 @@
+#! /bin/sh
+
+# Set up the initial path.
+for i in $initialPath; do
+    PATH=$PATH:$i/bin
+done
+
+# Make output directories.
+mkdir $out || exit 1
+mkdir $out/bin || exit 1
+
+# Create the setup script.
+sed \
+ -e "s^@OUT@^$out^g" \
+ -e "s^@PREHOOK@^$prehook^g" \
+ -e "s^@POSTHOOK@^$posthook^g" \
+ -e "s^@INITIALPATH@^$initialPath^g" \
+ -e "s^@PARAM1@^$param1^g" \
+ -e "s^@PARAM2@^$param2^g" \
+ -e "s^@PARAM3@^$param3^g" \
+ -e "s^@PARAM4@^$param4^g" \
+ -e "s^@PARAM5@^$param5^g" \
+ < $setup > $out/setup || exit 1
+
+# Create the gcc wrapper.
+sed \
+ -e 's^@GCC\@^$NIX_CC^g' \
+ < $gccwrapper > $out/bin/gcc || exit 1
+chmod +x $out/bin/gcc || exit 1
+ln -s gcc $out/bin/cc || exit 1
+
+# Create the g++ wrapper.
+sed \
+ -e 's^@GCC\@^$NIX_CXX^g' \
+ < $gccwrapper > $out/bin/g++ || exit 1
+chmod +x $out/bin/g++ || exit 1
+ln -s g++ $out/bin/c++ || exit 1
+
+# Create the ld wrapper.
+cp $ldwrapper $out/bin/ld || exit 1
+chmod +x $out/bin/ld || exit 1
diff --git a/pkgs/stdenv/generic/default.fix b/pkgs/stdenv/generic/default.fix
new file mode 100644
index 00000000000..6778b4d131c
--- /dev/null
+++ b/pkgs/stdenv/generic/default.fix
@@ -0,0 +1,23 @@
+{system, name, noSysDirs, prehook, posthook, initialPath, 
+  param1, param2, param3, param4, param5}:
+derivation {
+  name = name;
+  system = system;
+  builder = ./builder.sh;
+  noSysDirs = noSysDirs;
+
+  setup = ./setup.sh;
+  gccwrapper = ./gcc-wrapper.sh;
+  ldwrapper = ./ld-wrapper.sh;
+
+  prehook = prehook;
+  posthook = posthook;
+
+  initialPath = initialPath;
+  # TODO: make this more elegant.
+  param1 = param1;
+  param2 = param2;
+  param3 = param3;
+  param4 = param4;
+  param5 = param5;
+}
diff --git a/pkgs/stdenv/generic/gcc-wrapper.sh b/pkgs/stdenv/generic/gcc-wrapper.sh
new file mode 100644
index 00000000000..f68612d2c1e
--- /dev/null
+++ b/pkgs/stdenv/generic/gcc-wrapper.sh
@@ -0,0 +1,42 @@
+#! /bin/sh
+
+IFS=
+
+justcompile=0
+for i in $@; do
+    if test "$i" == "-c"; then
+        justcompile=1
+    elif test "$i" == "-S"; then
+        justcompile=1
+    elif test "$i" == "-E"; then
+        justcompile=1
+    elif test "$i" == "-E"; then
+        justcompile=1
+    elif test "$i" == "-M"; then
+        justcompile=1
+    elif test "$i" == "-MM"; then
+        justcompile=1
+    fi
+done
+
+IFS=" "
+extra=($NIX_CFLAGS_COMPILE)
+if test "$justcompile" != "1"; then
+    extra=(${extra[@]} $NIX_CFLAGS_LINK)
+    for i in $NIX_LDFLAGS; do
+        extra=(${extra[@]} "-Wl,$i")
+    done
+    if test "$NIX_STRIP_DEBUG" == "1"; then
+        extra=(${extra[@]} -g0 -Wl,-s)
+    fi
+fi
+
+if test "$NIX_DEBUG" == "1"; then
+  echo "extra flags to @GCC@:" >&2
+  for i in ${extra[@]}; do
+      echo "  $i" >&2
+  done
+fi
+
+IFS=
+exec @GCC@ $@ ${extra[@]}
diff --git a/pkgs/stdenv/generic/ld-wrapper.sh b/pkgs/stdenv/generic/ld-wrapper.sh
new file mode 100644
index 00000000000..e6a2fe74c5e
--- /dev/null
+++ b/pkgs/stdenv/generic/ld-wrapper.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+
+IFS=" "
+extra=($NIX_CFLAGS_LINK $NIX_LDFLAGS)
+if test "$NIX_STRIP_DEBUG" == "1"; then
+    extra=(${extra[@]} -s)
+fi
+
+if test "$NIX_DEBUG" == "1"; then
+  echo "extra flags to @LD@:" >&2
+  for i in ${extra[@]}; do
+      echo "  $i" >&2
+  done
+fi
+
+IFS=
+exec $NIX_LD $@ ${extra[@]}
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh
new file mode 100644
index 00000000000..25b84bb5edc
--- /dev/null
+++ b/pkgs/stdenv/generic/setup.sh
@@ -0,0 +1,67 @@
+# Set up the initial path.
+for i in @INITIALPATH@; do
+    PATH=$PATH:$i/bin
+done
+echo $PATH
+
+# Execute the pre-hook.
+param1=@PARAM1@
+param2=@PARAM2@
+param3=@PARAM3@
+param4=@PARAM4@
+param5=@PARAM5@
+. @PREHOOK@
+
+# Add the directory containing the GCC wrappers to the PATH.
+export PATH=@OUT@/bin:$PATH
+
+# Recursively add all buildinputs to the relevant environment variables.
+addtoenv()
+{
+    pkgs="$buildinputs $1"
+
+    if test -d $1/bin; then
+        export PATH=$1/bin:$PATH
+    fi
+
+    if test -d $1/lib; then
+        export NIX_CFLAGS_LINK="-L$1/lib $NIX_CFLAGS_LINK"
+        export NIX_LDFLAGS="-rpath $1/lib $NIX_LDFLAGS"
+    fi
+
+    if test -d $1/lib/pkgconfig; then
+        export PKG_CONFIG_PATH=$1/lib/pkgconfig:$PKG_CONFIG_PATH
+    fi
+
+    if test -d $1/include; then
+        export NIX_CFLAGS_COMPILE="-I$1/include $NIX_CFLAGS_COMPILE"
+    fi
+
+    if test -f $1/propagated-build-inputs; then
+        for i in $(cat $1/propagated-build-inputs); do
+            addtoenv $i
+        done
+    fi
+}
+
+oldbuildinputs=$buildinputs
+buildinputs=
+
+for i in $oldbuildinputs; do
+    addtoenv $i
+done
+
+# Add the output as an rpath.
+if test "$NIX_NO_SELF_RPATH" != "1"; then
+    export NIX_LDFLAGS="-rpath $out/lib $NIX_LDFLAGS"
+fi
+
+# Strip debug information by default.
+export NIX_STRIP_DEBUG=1
+
+# Execute the post-hook.
+. @POSTHOOK@
+
+if test "$NIX_DEBUG" == "1"; then
+    echo "Setup: PATH=$PATH"
+fi
diff --git a/pkgs/stdenv/native/default.fix b/pkgs/stdenv/native/default.fix
new file mode 100644
index 00000000000..2859cc18d0e
--- /dev/null
+++ b/pkgs/stdenv/native/default.fix
@@ -0,0 +1,13 @@
+{system}: (import ../generic) {
+  name = "stdenv-native";
+  system = system;
+  prehook = ./prehook.sh;
+  posthook = ./posthook.sh;
+  initialPath = "/usr/local /usr /";
+  param1 = "";
+  param2 = "";
+  param3 = "";
+  param4 = "";
+  param5 = "";
+  noSysDirs = false;
+}
diff --git a/pkgs/stdenv/native/posthook.sh b/pkgs/stdenv/native/posthook.sh
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/pkgs/stdenv/native/posthook.sh
diff --git a/pkgs/stdenv/native/prehook.sh b/pkgs/stdenv/native/prehook.sh
new file mode 100644
index 00000000000..72e9c174870
--- /dev/null
+++ b/pkgs/stdenv/native/prehook.sh
@@ -0,0 +1,5 @@
+export SHELL=/bin/sh
+
+export NIX_CC=/usr/bin/gcc
+export NIX_CXX=/usr/bin/g++
+export NIX_LD=/usr/bin/ld
diff --git a/pkgs/stdenv/nix-linux/boot.fix b/pkgs/stdenv/nix-linux/boot.fix
new file mode 100644
index 00000000000..c42b3f33302
--- /dev/null
+++ b/pkgs/stdenv/nix-linux/boot.fix
@@ -0,0 +1,13 @@
+{system, glibc}: (import ../generic) {
+  name = "stdenv-linux-boot";
+  system = system;
+  prehook = ./prehook-boot.sh;
+  posthook = ./posthook.sh;
+  initialPath = "/usr/local /usr /";
+  param1 = "";
+  param2 = "";
+  param3 = "";
+  param4 = glibc;
+  param5 = "";
+  noSysDirs = true;
+}
diff --git a/pkgs/stdenv/nix-linux/default.fix b/pkgs/stdenv/nix-linux/default.fix
new file mode 100644
index 00000000000..305a9081869
--- /dev/null
+++ b/pkgs/stdenv/nix-linux/default.fix
@@ -0,0 +1,13 @@
+{bootStdenv, pkgs, glibc}: (import ../generic) {
+  name = "stdenv-nix-linux";
+  system = bootStdenv.system;
+  prehook = ./prehook.sh;
+  posthook = ./posthook.sh;
+  initialPath = (import ../nix/path.fix) {pkgs = pkgs};
+  param1 = pkgs.bash;
+  param2 = pkgs.gcc;
+  param3 = pkgs.binutils;
+  param4 = glibc;
+  param5 = "";
+  noSysDirs = true;
+}
diff --git a/pkgs/stdenv/nix-linux/posthook.sh b/pkgs/stdenv/nix-linux/posthook.sh
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/pkgs/stdenv/nix-linux/posthook.sh
diff --git a/pkgs/stdenv/nix-linux/prehook-boot.sh b/pkgs/stdenv/nix-linux/prehook-boot.sh
new file mode 100644
index 00000000000..780c5aa5653
--- /dev/null
+++ b/pkgs/stdenv/nix-linux/prehook-boot.sh
@@ -0,0 +1,12 @@
+export SHELL=/bin/sh
+
+export NIX_CC=/usr/bin/gcc
+export NIX_CXX=/usr/bin/g++
+export NIX_LD=/usr/bin/ld
+
+export NIX_CFLAGS_COMPILE="-isystem $param4/include $NIX_CFLAGS_COMPILE"
+export NIX_CFLAGS_LINK="-L$param4/lib $NIX_CFLAGS_LINK"
+export NIX_LDFLAGS="-dynamic-linker $param4/lib/ld-linux.so.2 -rpath $param4/lib $NIX_LDFLAGS"
+
+export NIX_LIBC_INCLUDES="$param4/include"
+export NIX_LIBC_LIBS="$param4/lib"
diff --git a/pkgs/stdenv/nix-linux/prehook.sh b/pkgs/stdenv/nix-linux/prehook.sh
new file mode 100644
index 00000000000..cc38a9c174d
--- /dev/null
+++ b/pkgs/stdenv/nix-linux/prehook.sh
@@ -0,0 +1,12 @@
+export SHELL=$param1
+
+export NIX_CC=$param2/bin/gcc
+export NIX_CXX=$param2/bin/g++
+export NIX_LD=$param3/bin/ld
+
+export NIX_CFLAGS_COMPILE="-isystem $param4/include $NIX_CFLAGS_COMPILE"
+export NIX_CFLAGS_LINK="-L$param4/lib -L$param2/lib $NIX_CFLAGS_LINK"
+export NIX_LDFLAGS="-dynamic-linker $param4/lib/ld-linux.so.2 -rpath $param4/lib -rpath $param2/lib $NIX_LDFLAGS"
+
+export NIX_LIBC_INCLUDES="$param4/include"
+export NIX_LIBC_LIBS="$param4/lib"
diff --git a/pkgs/stdenv/nix/default.fix b/pkgs/stdenv/nix/default.fix
new file mode 100644
index 00000000000..e7f343d375f
--- /dev/null
+++ b/pkgs/stdenv/nix/default.fix
@@ -0,0 +1,13 @@
+{bootStdenv, pkgs}: (import ../generic) {
+  name = "stdenv-nix";
+  system = bootStdenv.system;
+  prehook = ./prehook.sh;
+  posthook = ./posthook.sh;
+  initialPath = (import ./path.fix) {pkgs = pkgs};
+  param1 = pkgs.bash;
+  param2 = pkgs.gcc;
+  param3 = pkgs.binutils;
+  param4 = "";
+  param5 = "";
+  noSysDirs = false;
+}
diff --git a/pkgs/stdenv/nix/path.fix b/pkgs/stdenv/nix/path.fix
new file mode 100644
index 00000000000..b3348cb0f35
--- /dev/null
+++ b/pkgs/stdenv/nix/path.fix
@@ -0,0 +1,16 @@
+{pkgs}: [
+  pkgs.coreutils
+  pkgs.findutils
+  pkgs.diffutils
+  pkgs.gnused
+  pkgs.gnugrep
+  pkgs.gawk
+  pkgs.gnutar
+  pkgs.gzip
+  pkgs.bzip2
+  pkgs.wget
+  pkgs.binutils
+  pkgs.gnumake
+  pkgs.gcc
+  pkgs.bash
+]
diff --git a/pkgs/stdenv/nix/posthook.sh b/pkgs/stdenv/nix/posthook.sh
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/pkgs/stdenv/nix/posthook.sh
diff --git a/pkgs/stdenv/nix/prehook.sh b/pkgs/stdenv/nix/prehook.sh
new file mode 100644
index 00000000000..e6052113f16
--- /dev/null
+++ b/pkgs/stdenv/nix/prehook.sh
@@ -0,0 +1,7 @@
+export SHELL=$param1
+
+echo "SHELL = $SHELL"
+
+export NIX_CC=$param2/bin/gcc
+export NIX_CXX=$param2/bin/g++
+export NIX_LD=$param3/bin/ld
diff --git a/pkgs/system/all-packages-generic.fix b/pkgs/system/all-packages-generic.fix
new file mode 100644
index 00000000000..d469af8c678
--- /dev/null
+++ b/pkgs/system/all-packages-generic.fix
@@ -0,0 +1,401 @@
+# This file evaluates to a function that, when supplied with a system
+# identifier and a standard build environment, returns the set of all
+# packages provided by the Nix Package Collection.
+
+{system, stdenv}: rec {
+
+  ### BUILD SUPPORT
+
+  fetchurl = (import ../build-support/fetchurl) {
+    stdenv = stdenv;
+  };
+
+
+  ### TOOLS
+
+  coreutils = (import ../tools/misc/coreutils) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  findutils = (import ../tools/misc/findutils) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  diffutils = (import ../tools/text/diffutils) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  gnused = (import ../tools/text/gnused) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  gnugrep = (import ../tools/text/gnugrep) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pcre = pcre;
+  };
+
+  gawk = (import ../tools/text/gawk) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  ed = (import ../tools/text/ed) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  gnutar = (import ../tools/archivers/gnutar) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  zip = (import ../tools/archivers/zip) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  gzip = (import ../tools/compression/gzip) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  bzip2 = (import ../tools/compression/bzip2) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  wget = (import ../tools/networking/wget) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+
+  ### SHELLS
+
+  bash = (import ../shells/bash) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+
+  ### DEVELOPMENT
+
+  binutils = (import ../development/tools/misc/binutils) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  gnum4 = (import ../development/tools/misc/gnum4) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  pkgconfig = (import ../development/tools/misc/pkgconfig) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  gnumake = (import ../development/tools/build-managers/gnumake) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  bison = (import ../development/tools/parsing/bison) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    m4 = gnum4;
+  };
+
+  flex = (import ../development/tools/parsing/flex) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    yacc = bison;
+  };
+
+  gcc = (import ../development/compilers/gcc) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    binutils = binutils;
+  };
+
+  perl = (import ../development/interpreters/perl) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  pcre = (import ../development/libraries/pcre) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  glibc = (import ../development/libraries/glibc) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    kernelHeaders = kernelHeaders;
+  };
+
+  aterm = (import ../development/libraries/aterm) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  expat = (import ../development/libraries/expat) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  libxml2 = (import ../development/libraries/libxml2) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    zlib = zlib;
+  };
+
+  gettext = (import ../development/libraries/gettext) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  db4 = (import ../development/libraries/db4) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  openssl = (import ../development/libraries/openssl) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    perl = perl;
+  };
+
+  freetype = (import ../development/libraries/freetype) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  fontconfig = (import ../development/libraries/fontconfig) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    x11 = xfree86;
+    freetype = freetype;
+    expat = expat;
+    ed = ed;
+  };
+
+  xft = (import ../development/libraries/xft) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    x11 = xfree86;
+    fontconfig = fontconfig;
+  };
+
+  zlib = (import ../development/libraries/zlib) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  libjpeg = (import ../development/libraries/libjpeg) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  libtiff = (import ../development/libraries/libtiff) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    zlib = zlib;
+    libjpeg = libjpeg;
+  };
+
+  libpng = (import ../development/libraries/libpng) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    zlib = zlib;
+  };
+
+  glib = (import ../development/libraries/gtk+/glib) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    gettext = gettext; 
+    perl = perl;
+  };
+
+  atk = (import ../development/libraries/gtk+/atk) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    glib = glib; 
+    perl = perl;
+  };
+
+  pango = (import ../development/libraries/gtk+/pango) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    x11 = xfree86;
+    glib = glib;
+    xft = xft;
+  };
+
+  gtk = (import ../development/libraries/gtk+/gtk+) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    x11 = xfree86;
+    glib = glib;
+    atk = atk;
+    pango = pango;
+    perl = perl;
+    libtiff = libtiff;
+    libjpeg = libjpeg;
+    libpng = libpng;
+  };
+
+  glib1 = (import ../development/libraries/gtk+-1/glib) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  gtk1 = (import ../development/libraries/gtk+-1/gtk+) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    x11 = xfree86;
+    glib = glib1;
+  };
+
+  gdkpixbuf = (import ../development/libraries/gtk+-1/gdk-pixbuf) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    gtk = gtk1;
+    libtiff = libtiff;
+    libjpeg = libjpeg;
+    libpng = libpng;
+  };
+
+  gnet = (import ../development/libraries/gnet) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    glib = glib;
+  };
+
+  libIDL = (import ../development/libraries/libIDL) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    glib = glib;
+    lex = flex;
+    yacc = bison;
+  };
+
+
+  ### SERVERS
+
+  apacheHttpd = (import ../servers/http/apache-httpd) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    sslSupport = true;
+    db4Support = true;
+    perl = perl;
+    openssl = openssl;
+    db4 = db4;
+    expat = expat;
+  };
+
+  xfree86 = (import ../servers/x11/xfree86) {
+    buildServer = false;
+    buildClientLibs = true;
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    flex = flex;
+    bison = bison;
+  };
+
+
+  ### OS-SPECIFIC
+
+  kernelHeaders = (import ../os-specific/linux/kernel-headers) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+  alsaLib = (import ../os-specific/linux/alsa/library) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+  };
+
+
+  ### APPLICATIONS
+
+  subversion = (import ../applications/version-management/subversion) {
+    localServer = true;
+    httpServer = false;
+    sslSupport = true;
+    swigBindings = false;
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    openssl = openssl;
+    httpd = apacheHttpd;
+    db4 = db4;
+    expat = expat;
+  };
+
+  pan = (import ../applications/networking/newsreaders/pan) {
+    spellChecking = false;
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    gtk = gtk;
+    gnet = gnet;
+    libxml2 = libxml2;
+    perl = perl;
+  };
+
+  sylpheed = (import ../applications/networking/mailreaders/sylpheed) {
+    sslSupport = true;
+    imageSupport = true;
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    gtk = gtk1;
+    openssl = openssl;
+    gdkpixbuf = gdkpixbuf;
+  };
+
+  firebird = (import ../applications/networking/browsers/firebird) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    gtk = gtk;
+    perl = perl;
+    zip = zip;
+    libIDL = libIDL;
+  };
+
+  MPlayer = (import ../applications/video/MPlayer) {
+    alsaSupport = true;
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    x11 = xfree86;
+    freetype = freetype;
+    alsa = alsaLib;
+  };
+
+  MPlayerPlugin = (import ../applications/video/mplayerplug-in) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    x11 = xfree86;
+  };
+
+  gqview = (import ../applications/graphics/gqview) {
+    fetchurl = fetchurl;
+    stdenv = stdenv;
+    pkgconfig = pkgconfig;
+    gtk = gtk;
+    libpng = libpng;
+  };
+
+}
diff --git a/pkgs/system/all-packages.fix b/pkgs/system/all-packages.fix
new file mode 100644
index 00000000000..d0228c3da1e
--- /dev/null
+++ b/pkgs/system/all-packages.fix
@@ -0,0 +1,50 @@
+# This file evaluates to a function that, when supplied with a system
+# identifier, returns the set of all packages provided by the Nix
+# Package Collection.  It does this by supplying
+# `all-packages-generic.fix' with a standard build environment.
+#
+# On Linux systems, the standard build environment consists of
+# Nix-built instances glibc and the `standard' Unix tools, i.e., the
+# Posix utilities, the GNU C compiler, and so on.  On other systems,
+# we use the native C library.
+
+{system}: let {
+  allPackages = import ./all-packages-generic.fix;
+
+  # The native (i.e., impure) build environment.  This one uses the
+  # tools installed on the system outside of the Nix environment,
+  # i.e., the stuff in /bin, /usr/bin, etc.  This environment should
+  # be used with care, since many Nix packages will not build properly
+  # with it (e.g., because they require GNU Make).
+  stdenvNative = (import ../stdenv/native) {system = system};
+  stdenvNativePkgs = allPackages {system = system; stdenv = stdenvNative};
+
+  # The Nix build environment.
+  stdenvNix = (import ../stdenv/nix) {
+    bootStdenv = stdenvNative;
+    pkgs = stdenvNativePkgs;
+  };
+  stdenvNixPkgs = allPackages {system = system; stdenv = stdenvNix};
+
+  # The Linux build environment consists of the Nix build environment
+  # built against the GNU C Library.
+  stdenvLinuxGlibc = stdenvNativePkgs.glibc;
+  stdenvLinuxBoot = (import ../stdenv/nix-linux/boot.fix) {
+    system = system;
+    glibc = stdenvLinuxGlibc;
+  };
+  stdenvLinuxBootPkgs = allPackages {system = system; stdenv = stdenvLinuxBoot};
+
+  stdenvLinux = (import ../stdenv/nix-linux) {
+    bootStdenv = stdenvLinuxBoot;
+    pkgs = stdenvLinuxBootPkgs;
+    glibc = stdenvLinuxGlibc;
+  };
+  stdenvLinuxPkgs = allPackages {system = system; stdenv = stdenvLinux};
+
+  # Select the right instantiation.
+  body =
+    if system == "i686-suse-linux"
+    then stdenvLinuxPkgs
+    else stdenvNixPkgs;
+}
diff --git a/pkgs/system/i686-suse-linux.fix b/pkgs/system/i686-suse-linux.fix
new file mode 100644
index 00000000000..bb512827799
--- /dev/null
+++ b/pkgs/system/i686-suse-linux.fix
@@ -0,0 +1 @@
+(import ./user-environment.fix) {system = "i686-suse-linux"}
diff --git a/pkgs/system/populate-linkdirs.pl b/pkgs/system/populate-linkdirs.pl
new file mode 100755
index 00000000000..a0585a7d97c
--- /dev/null
+++ b/pkgs/system/populate-linkdirs.pl
@@ -0,0 +1,65 @@
+#! /usr/bin/perl -w
+
+use strict;
+use Cwd;
+
+my $selfdir = $ENV{"out"};
+mkdir "$selfdir", 0755 || die "error creating $selfdir";
+
+# For each activated package, create symlinks.
+
+sub createLinks {
+    my $srcdir = shift;
+    my $dstdir = shift;
+
+    my @srcfiles = glob("$srcdir/*");
+
+    foreach my $srcfile (@srcfiles) {
+        my $basename = $srcfile;
+        $basename =~ s/^.*\///g; # strip directory
+        my $dstfile = "$dstdir/$basename";
+	if ($srcfile =~ /\/envpkgs$/) {
+	} elsif (-d $srcfile) {
+            # !!! hack for resolving name clashes
+            if (!-e $dstfile) {
+                mkdir $dstfile, 0755 || 
+                    die "error creating directory $dstfile";
+            }
+            -d $dstfile or die "$dstfile is not a directory";
+            createLinks($srcfile, $dstfile);
+        } elsif (-l $dstfile) {
+            my $target = readlink($dstfile);
+            die "collission between $srcfile and $target";
+        } else {
+#            print "linking $dstfile to $srcfile\n";
+            symlink($srcfile, $dstfile) ||
+                die "error creating link $dstfile";
+        }
+    }
+}
+
+my %done;
+
+sub addPkg {
+    my $pkgdir = shift;
+
+    return if (defined $done{$pkgdir});
+    $done{$pkgdir} = 1;
+
+    print "merging $pkgdir\n";
+
+    createLinks("$pkgdir", "$selfdir");
+
+#    if (-f "$pkgdir/envpkgs") {
+#	my $envpkgs = `cat $pkgdir/envpkgs`;
+#	chomp $envpkgs;
+#	my @envpkgs = split / +/, $envpkgs;
+#	foreach my $envpkg (@envpkgs) {
+#	    addPkg($envpkg);
+#	}
+#    }
+}
+
+foreach my $pkgdir (split ' ', $ENV{"dirs"}) {
+    addPkg($pkgdir);
+}
diff --git a/pkgs/system/user-environment.fix b/pkgs/system/user-environment.fix
new file mode 100644
index 00000000000..98268c4d76d
--- /dev/null
+++ b/pkgs/system/user-environment.fix
@@ -0,0 +1,30 @@
+# Given a system identifier, this function returns a derivation of a
+# user environment, i.e., a set of symbolic links to `activated'
+# packages.  The resulting package is typically passed to the
+# `nix-switch' command in order to actually activate it.
+
+{system}: let {
+  # All activated packages.
+  pkgs = (import ./all-packages.fix) {system = system};
+
+  # The packages selection for inclusion in the user environment.
+  # This list should be generated automatically by a package
+  # management user interface.
+  selectedPkgs = [
+    pkgs.subversion
+    pkgs.pan
+    pkgs.sylpheed
+    pkgs.firebird
+    pkgs.MPlayer
+    pkgs.MPlayerPlugin
+    pkgs.gqview
+  ];
+
+  # Create a user environment.
+  body = derivation { 
+    name = "user-environment";
+    system = system;
+    builder = ./populate-linkdirs.pl;
+    dirs = selectedPkgs;
+  };
+}
diff --git a/pkgs/tools/archivers/gnutar/builder.sh b/pkgs/tools/archivers/gnutar/builder.sh
new file mode 100755
index 00000000000..f79d158b86a
--- /dev/null
+++ b/pkgs/tools/archivers/gnutar/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd tar-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/archivers/gnutar/default.fix b/pkgs/tools/archivers/gnutar/default.fix
new file mode 100644
index 00000000000..b7c18e872ad
--- /dev/null
+++ b/pkgs/tools/archivers/gnutar/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "gnutar-1.13.25";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://alpha.gnu.org/gnu/tar/tar-1.13.25.tar.gz;
+    md5 = "6ef8c906e81eee441f8335652670ac4a";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/archivers/zip/builder.sh b/pkgs/tools/archivers/zip/builder.sh
new file mode 100755
index 00000000000..b68fdfe32b8
--- /dev/null
+++ b/pkgs/tools/archivers/zip/builder.sh
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd zip-* || exit 1
+make -f unix/Makefile generic || exit 1
+make -f unix/Makefile prefix=$out install || exit 1
diff --git a/pkgs/tools/archivers/zip/default.fix b/pkgs/tools/archivers/zip/default.fix
new file mode 100644
index 00000000000..7b4ea02fb40
--- /dev/null
+++ b/pkgs/tools/archivers/zip/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "zip-2.3";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.info-zip.org/pub/infozip/src/zip23.tar.gz;
+    md5 = "5206a99541f3b0ab90f1baa167392c4f";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/compression/bzip2/builder.sh b/pkgs/tools/compression/bzip2/builder.sh
new file mode 100755
index 00000000000..2fa113aa17a
--- /dev/null
+++ b/pkgs/tools/compression/bzip2/builder.sh
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd bzip2-* || exit 1
+make || exit 1
+make install PREFIX=$out || exit 1
diff --git a/pkgs/tools/compression/bzip2/default.fix b/pkgs/tools/compression/bzip2/default.fix
new file mode 100644
index 00000000000..1684edd1659
--- /dev/null
+++ b/pkgs/tools/compression/bzip2/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "bzip2-1.0.2";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://sources.redhat.com/pub/bzip2/v102/bzip2-1.0.2.tar.gz;
+    md5 = "ee76864958d568677f03db8afad92beb";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/compression/gzip/builder.sh b/pkgs/tools/compression/gzip/builder.sh
new file mode 100755
index 00000000000..0254e252958
--- /dev/null
+++ b/pkgs/tools/compression/gzip/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd gzip-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/compression/gzip/default.fix b/pkgs/tools/compression/gzip/default.fix
new file mode 100644
index 00000000000..a5902361fe7
--- /dev/null
+++ b/pkgs/tools/compression/gzip/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "gzip-1.3.3";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = http://www.gzip.org/gzip-1.3.3.tar.gz;
+    md5 = "52eaf713673507d21f7abefee98ba662";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/misc/coreutils/builder.sh b/pkgs/tools/misc/coreutils/builder.sh
new file mode 100755
index 00000000000..75308639108
--- /dev/null
+++ b/pkgs/tools/misc/coreutils/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd coreutils-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/misc/coreutils/default.fix b/pkgs/tools/misc/coreutils/default.fix
new file mode 100644
index 00000000000..d5a4b729556
--- /dev/null
+++ b/pkgs/tools/misc/coreutils/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "coreutils-5.0";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/coreutils/coreutils-5.0.tar.bz2;
+    md5 = "94e5558ee2a65723d4840bfde2d323f0";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/misc/findutils/builder.sh b/pkgs/tools/misc/findutils/builder.sh
new file mode 100755
index 00000000000..f61ec740c1b
--- /dev/null
+++ b/pkgs/tools/misc/findutils/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd findutils-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/misc/findutils/default.fix b/pkgs/tools/misc/findutils/default.fix
new file mode 100644
index 00000000000..957aef5e0e4
--- /dev/null
+++ b/pkgs/tools/misc/findutils/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "findutils-4.1.20";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://alpha.gnu.org/pub/gnu/findutils/findutils-4.1.20.tar.gz;
+    md5 = "e90ce7222daadeb8616b8db461e17cbc";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/networking/wget/builder.sh b/pkgs/tools/networking/wget/builder.sh
new file mode 100755
index 00000000000..9523d7e9ca8
--- /dev/null
+++ b/pkgs/tools/networking/wget/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd wget-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/networking/wget/default.fix b/pkgs/tools/networking/wget/default.fix
new file mode 100644
index 00000000000..d0b7d01c1de
--- /dev/null
+++ b/pkgs/tools/networking/wget/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "wget-1.9";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/wget/wget-1.9.tar.gz;
+    md5 = "18ac093db70801b210152dd69b4ef08a";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/text/diffutils/builder.sh b/pkgs/tools/text/diffutils/builder.sh
new file mode 100755
index 00000000000..408b75eb803
--- /dev/null
+++ b/pkgs/tools/text/diffutils/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd diffutils-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/text/diffutils/default.fix b/pkgs/tools/text/diffutils/default.fix
new file mode 100644
index 00000000000..bbf1990f713
--- /dev/null
+++ b/pkgs/tools/text/diffutils/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "diffutils-2.8.1";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/diffutils/diffutils-2.8.1.tar.gz;
+    md5 = "71f9c5ae19b60608f6c7f162da86a428";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/text/ed/builder.sh b/pkgs/tools/text/ed/builder.sh
new file mode 100755
index 00000000000..ba63de01c95
--- /dev/null
+++ b/pkgs/tools/text/ed/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd ed-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/text/ed/default.fix b/pkgs/tools/text/ed/default.fix
new file mode 100644
index 00000000000..1f79383e058
--- /dev/null
+++ b/pkgs/tools/text/ed/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "ed-0.2";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.gnu.org/pub/gnu/ed/ed-0.2.tar.gz;
+    md5 = "ddd57463774cae9b50e70cd51221281b";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/text/gawk/builder.sh b/pkgs/tools/text/gawk/builder.sh
new file mode 100755
index 00000000000..f1a951f1fd5
--- /dev/null
+++ b/pkgs/tools/text/gawk/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd gawk-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/text/gawk/default.fix b/pkgs/tools/text/gawk/default.fix
new file mode 100644
index 00000000000..85de9289dd0
--- /dev/null
+++ b/pkgs/tools/text/gawk/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "gawk-3.1.3";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/gawk/gawk-3.1.3.tar.bz2;
+    md5 = "a116eec17e7ba085febb74c7758823bd";
+  };
+  stdenv = stdenv;
+}
diff --git a/pkgs/tools/text/gnugrep/builder.sh b/pkgs/tools/text/gnugrep/builder.sh
new file mode 100755
index 00000000000..3453b5b0cb8
--- /dev/null
+++ b/pkgs/tools/text/gnugrep/builder.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+buildinputs="$pcre"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+cd grep-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/text/gnugrep/default.fix b/pkgs/tools/text/gnugrep/default.fix
new file mode 100644
index 00000000000..b526c81fa77
--- /dev/null
+++ b/pkgs/tools/text/gnugrep/default.fix
@@ -0,0 +1,11 @@
+{stdenv, fetchurl, pcre}: derivation {
+  name = "gnugrep-2.5.1";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/grep/grep-2.5.1.tar.bz2;
+    md5 = "ddd99e2d5d4f4611357e31e97f080cf2";
+  };
+  stdenv = stdenv;
+  pcre = pcre;
+}
diff --git a/pkgs/tools/text/gnused/builder.sh b/pkgs/tools/text/gnused/builder.sh
new file mode 100755
index 00000000000..12663532792
--- /dev/null
+++ b/pkgs/tools/text/gnused/builder.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+. $stdenv/setup || exit 1
+
+tar xvfz $src || exit 1
+cd sed-* || exit 1
+./configure --prefix=$out || exit 1
+make || exit 1
+make install || exit 1
diff --git a/pkgs/tools/text/gnused/default.fix b/pkgs/tools/text/gnused/default.fix
new file mode 100644
index 00000000000..a92b3996515
--- /dev/null
+++ b/pkgs/tools/text/gnused/default.fix
@@ -0,0 +1,10 @@
+{stdenv, fetchurl}: derivation {
+  name = "gnused-4.0.7";
+  system = stdenv.system;
+  builder = ./builder.sh;
+  src = fetchurl {
+    url = ftp://ftp.nluug.nl/pub/gnu/sed/sed-4.0.7.tar.gz;
+    md5 = "005738e7f97bd77d95b6907156c8202a";
+  };
+  stdenv = stdenv;
+}