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]; + }; +} diff --git a/pkgs/games/dwarf-fortress/df_permission b/pkgs/games/dwarf-fortress/df_permission new file mode 100644 index 00000000000..b0121bb3fa3 --- /dev/null +++ b/pkgs/games/dwarf-fortress/df_permission @@ -0,0 +1,40 @@ +From tarn.adams@gmail.com Sat Oct 30 00:56:16 2010 +Date: Fri, 29 Oct 2010 16:56:15 -0800 +From: Tarn Adams +To: roconnor@theorem.ca +Subject: Re: Dwarf Fortress Redistribution for NixOS + +Sure, that redistribution is fine. I think I've handled the movie +issue for next time now. Thanks for the heads up on that. + +Tarn + +On Fri, Oct 29, 2010 at 6:56 AM, wrote: +> I'd like to distribute a *slightly* modified version of Dwarf Fortress which +> is needed to run it under the NixOS distribution of Linux (see +> +> +> Modification: The interpreter location /lib/ld-linux.so.2 in +> lib/Dwarf_Fortress is replaced with the location of ld-linux.so.2 under the +> NixOS distribution (which is currently +> /nix/store/l8x3fdy1r6zf441vnqa87lzsvxrjbdz9-glibc-2.11.1/lib/ld-linux.so.2 +> but might change at a later date to something similar). +> +> I don't need you to recompile Dwarf Fortress.  I can patch the binary itself +> using patchelf.  I just would like your permission to redistrubute this +> modified binary. +> +> Thanks, I'm looking forward to trying out your game and letting other Nix +> users try it out too. +> +> P.S. the inital_movies are open in read/write mode instead of read-only mode +> which causes some issues under NixOS because the inital_movies are stored +> read-only.  I have a workaround, but you may want to consider opening these +> files in read-only mode. +> +> -- +> Russell O'Connor                                       +> ``All talk about `theft,''' the general counsel of the American Graphophone +> Company wrote, ``is the merest claptrap, for there exists no property in +> ideas musical, literary or artistic, except as defined by statute.'' +> diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b31635a02dd..9bfda0d26e0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6518,6 +6518,10 @@ let crack_attack = callPackage ../games/crack-attack { }; + dwarf_fortress = callPackage ../games/dwarf-fortress { + gnomegtk = gnome.gtk; + }; + eduke32 = callPackage ../games/eduke32 { }; egoboo = callPackage ../games/egoboo { };