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
This commit is contained in:
parent
c955a570a2
commit
cb72dd1ba8
90
pkgs/games/dwarf-fortress/default.nix
Normal file
90
pkgs/games/dwarf-fortress/default.nix
Normal file
|
@ -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];
|
||||
};
|
||||
}
|
40
pkgs/games/dwarf-fortress/df_permission
Normal file
40
pkgs/games/dwarf-fortress/df_permission
Normal file
|
@ -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 <tarn.adams@gmail.com>
|
||||
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, <roconnor@theorem.ca> 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
|
||||
> <http://nixos.org/>
|
||||
>
|
||||
> 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 <http://r6.ca/>
|
||||
> ``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.''
|
||||
>
|
|
@ -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 { };
|
||||
|
|
Loading…
Reference in a new issue