summary refs log tree commit diff
path: root/pkgs/games/dwarf-fortress/default.nix
diff options
context:
space:
mode:
authorRussell O'Connor <roconnor@theorem.ca>2010-10-30 06:00:44 +0000
committerRussell O'Connor <roconnor@theorem.ca>2010-10-30 06:00:44 +0000
commitcb72dd1ba8b87edc69b7397901b049598cc56336 (patch)
tree0944cb2d1019262dfe35241aa83928c18a91bfb8 /pkgs/games/dwarf-fortress/default.nix
parentc955a570a296a42dbdd6a5e4a0822150d081d8eb (diff)
downloadnixpkgs-cb72dd1ba8b87edc69b7397901b049598cc56336.tar
nixpkgs-cb72dd1ba8b87edc69b7397901b049598cc56336.tar.gz
nixpkgs-cb72dd1ba8b87edc69b7397901b049598cc56336.tar.bz2
nixpkgs-cb72dd1ba8b87edc69b7397901b049598cc56336.tar.lz
nixpkgs-cb72dd1ba8b87edc69b7397901b049598cc56336.tar.xz
nixpkgs-cb72dd1ba8b87edc69b7397901b049598cc56336.tar.zst
nixpkgs-cb72dd1ba8b87edc69b7397901b049598cc56336.zip
Dwarf Fortress
The wrapper script works by creating an image of the distribution in the users home directory
(defaulting to $HOME/.config/df_linux).  This is done because the program expects to write
state into it's own distribution.

Better ideas are welcome!

What further is needed is to allow users to configure the init.  One way is to use nix-config
to apply patches to the init.txt file, though this would break sharing of the package between
different users.


svn path=/nixpkgs/trunk/; revision=24538
Diffstat (limited to 'pkgs/games/dwarf-fortress/default.nix')
-rw-r--r--pkgs/games/dwarf-fortress/default.nix90
1 files changed, 90 insertions, 0 deletions
diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix
new file mode 100644
index 00000000000..12e5110f6e5
--- /dev/null
+++ b/pkgs/games/dwarf-fortress/default.nix
@@ -0,0 +1,90 @@
+{stdenv, fetchurl, SDL, SDL_image, SDL_ttf, gnomegtk, glib, mesa, openal, glibc, libsndfile}:
+
+assert stdenv.system == "i686-linux";
+
+stdenv.mkDerivation rec {
+  name = "dwarf-fortress-0.31.16";
+
+  src = fetchurl {
+    url = "http://www.bay12games.com/dwarves/df_31_16_linux.tar.bz2";
+    sha256 = "04pyxyigrrclbpxdx3wryisgy5xraz0s7rsxr2kp4i136479f2r4";
+  };
+
+  phases = "unpackPhase patchPhase installPhase";
+
+  /* :TODO: Game options should be configurable by patching the default configuration files */
+
+  permission = ./df_permission;
+
+  installPhase = ''
+    set -x
+    ensureDir $out/bin
+    ensureDir $out/share/df_linux
+    cp -r * $out/share/df_linux
+    cp $permission $out/share/df_linux/nix_permission
+ 
+    patchelf --set-interpreter ${glibc}/lib/ld-linux.so.2 $out/share/df_linux/libs/Dwarf_Fortress
+    ln -s ${libsndfile}/lib/libsndfile.so $out/share/df_linux/libs/
+          
+    cat > $out/bin/dwarf-fortress << EOF
+    #!${stdenv.shell}
+    export DF_DIR="\$HOME/.config/df_linux"
+    if [ -n "\$XDG_DATA_HOME" ]
+     then export DF_DIR="\$XDG_DATA_HOME/df_linux"
+    fi
+
+    # Recreate a directory sturctor reflecting the original distribution in the user directory
+
+    # Now link in the static data
+    mkdir -p \$DF_DIR
+    ln -sf $out/share/df_linux/libs \$DF_DIR/
+    ln -sf $out/share/df_linux/raw \$DF_DIR/
+    ln -sf $out/share/df_linux/df \$DF_DIR/
+
+    # Delete old data directory
+    rm -rf \$DF_DIR/data
+    
+    # Link in the data directory
+    mkdir \$DF_DIR/data
+    for i in $out/share/df_linux/data/*
+    do
+     ln -s \$i \$DF_DIR/data/
+    done
+
+    # index as of 0.31.16 opened in read/write mode 
+    # this is a hack to work around this
+    rm \$DF_DIR/data/index
+    cp $out/share/df_linux/data/index \$DF_DIR/data/index
+    chmod u+w \$DF_DIR/data/index
+
+    # initial_movies files are as of 0.31.16 opened in read/write mode instead of read-only mode
+    # this is a hack to work around this
+    rm \$DF_DIR/data/initial_movies
+    cp -rf $out/share/df_linux/data/initial_movies \$DF_DIR/data/
+    chmod -R u+w \$DF_DIR/data/initial_movies
+
+    # announcement files are as of 0.31.16 opened in read/write mode instead of read-only mode
+    # this is a hack to work around this
+    rm \$DF_DIR/data/announcement
+    cp -rf $out/share/df_linux/data/announcement \$DF_DIR/data/
+    chmod -R u+w \$DF_DIR/data/announcement
+
+    # link in persistant data
+    mkdir -p \$DF_DIR/save
+    ln -s \$DF_DIR/save \$DF_DIR/data/
+
+    # now run Dwarf Fortress! 
+    export LD_LIBRARY_PATH=\$DF_DIR/df_linux/libs/:${SDL}/lib:${SDL_image}/lib/:${SDL_ttf}/lib/:${gnomegtk}/lib/:${glib}/lib/:${mesa}/lib/:${openal}/lib/
+    \$DF_DIR/df "\$@"
+    EOF
+
+    chmod +x $out/bin/dwarf-fortress
+  '';
+
+  meta = {
+      description = "control a dwarven outpost or an adventurer in a randomly generated, persistent world";
+      homepage = http://www.bay12games.com/dwarves;
+      license = "unfree-redistributable";
+      maintainers = [stdenv.lib.maintainers.roconnor];
+  };
+}