diff options
author | Nikolay Amiantov <ab@fmap.me> | 2016-01-20 00:44:33 +0300 |
---|---|---|
committer | Nikolay Amiantov <ab@fmap.me> | 2016-01-26 03:06:07 +0300 |
commit | d3b642ce9ad056b60d8cfa576dd3fa800ec57ba4 (patch) | |
tree | 9149b17b22e896a5d966d9fab00d48ea74deb108 /pkgs/games/dwarf-fortress | |
parent | 7fe01a7279a8a9630ac42b2c7c9dd291c4a7a9a9 (diff) |
dwarf-fortress-wrapper: add themes support
Theme can be specified either as a derivation or as a string, in which case it will be taken by name from a pre-defined set of themes available in nixpkgs.
Diffstat (limited to 'pkgs/games/dwarf-fortress')
-rw-r--r-- | pkgs/games/dwarf-fortress/default.nix | 8 | ||||
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/default.nix | 61 | ||||
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/dfhack.in | 14 | ||||
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in | 20 | ||||
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in | 2 |
5 files changed, 61 insertions, 44 deletions
diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix index 317b532ecbe60..d91c110c34c0b 100644 --- a/pkgs/games/dwarf-fortress/default.nix +++ b/pkgs/games/dwarf-fortress/default.nix @@ -4,7 +4,7 @@ let callPackage = pkgs.newScope self; callPackage_i686 = pkgsi686Linux.newScope self; - self = { + self = rec { dwarf-fortress-original = callPackage_i686 ./game.nix { }; dfhack = callPackage_i686 ./dfhack { @@ -13,7 +13,11 @@ let dwarf-fortress-unfuck = callPackage_i686 ./unfuck.nix { }; - dwarf-fortress = callPackage ./wrapper { }; + dwarf-fortress = callPackage ./wrapper { + themes = { + "phoebus" = phoebus-theme; + }; + }; dwarf-therapist-original = callPackage ./dwarf-therapist { texlive = pkgs.texlive.combine { diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix index 516cf347066b2..95ff0821d7089 100644 --- a/pkgs/games/dwarf-fortress/wrapper/default.nix +++ b/pkgs/games/dwarf-fortress/wrapper/default.nix @@ -1,21 +1,54 @@ -{ stdenv, lib, dwarf-fortress-original, substituteAll +{ stdenv, lib, buildEnv, dwarf-fortress-original, substituteAll , enableDFHack ? false, dfhack +, themes ? {} +, theme ? null }: -assert enableDFHack -> (dfhack.dfVersion == dwarf-fortress-original.dfVersion); +let + ptheme = + if builtins.isString theme + then builtins.getAttr theme themes + else theme; + + # These are in inverse order for first packages to override the next ones. + pkgs = lib.optional (theme != null) ptheme + ++ lib.optional enableDFHack dfhack + ++ [ dwarf-fortress-original ]; + + env = buildEnv { + name = "dwarf-fortress-env-${dwarf-fortress-original.dfVersion}"; + paths = pkgs; + ignoreCollisions = true; + postBuild = lib.optionalString enableDFHack '' + # #4621 + if [ -L "$out/hack" ]; then + rm $out/hack + mkdir $out/hack + for i in ${dfhack}/hack/*; do + ln -s $i $out/hack + done + fi + rm $out/hack/symbols.xml + substitute ${dfhack}/hack/symbols.xml $out/hack/symbols.xml \ + --replace $(cat ${dwarf-fortress-original}/full-hash-orig.md5) \ + $(cat ${dwarf-fortress-original}/full-hash-patched.md5) + ''; + }; +in + +assert lib.all (x: x.dfVersion == dwarf-fortress-original.dfVersion) pkgs; stdenv.mkDerivation rec { name = "dwarf-fortress-${dwarf-fortress-original.dfVersion}"; - runDF = ./dwarf-fortress.in; - runDFHack = ./dfhack.in; dfInit = substituteAll { name = "dwarf-fortress-init"; src = ./dwarf-fortress-init.in; - dwarfFortress = dwarf-fortress-original; + inherit env; }; - inherit dfhack; - df = dwarf-fortress-original; + + runDF = ./dwarf-fortress.in; + runDFHack = ./dfhack.in; buildCommand = '' mkdir -p $out/bin @@ -25,23 +58,11 @@ stdenv.mkDerivation rec { --subst-var dfInit chmod 755 $out/bin/dwarf-fortress '' + lib.optionalString enableDFHack '' - mkdir -p $out/hack - substitute $dfhack/hack/symbols.xml $out/hack/symbols.xml \ - --replace $(cat $df/full-hash-orig.md5) $(cat $df/full-hash-patched.md5) - substitute $runDFHack $out/bin/dfhack \ --subst-var-by stdenv_shell ${stdenv.shell} \ - --subst-var dfInit \ - --subst-var dfhack \ - --subst-var-by dfhackWrapper $out + --subst-var dfInit chmod 755 $out/bin/dfhack ''; preferLocalBuild = true; - - meta = { - description = "A single-player fantasy game with a randomly generated adventure world"; - homepage = http://www.bay12games.com/dwarves; - maintainers = with lib.maintainers; [ a1russell robbinch roconnor the-kenny ]; - }; } diff --git a/pkgs/games/dwarf-fortress/wrapper/dfhack.in b/pkgs/games/dwarf-fortress/wrapper/dfhack.in index af2afa57e9df3..d53769ca4b61e 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dfhack.in +++ b/pkgs/games/dwarf-fortress/wrapper/dfhack.in @@ -1,17 +1,11 @@ #!@stdenv_shell@ -e -hack_dir="@dfhack@" -hack_wrap_dir="@dfhackWrapper@" - source @dfInit@ -cd "$hack_dir" -for i in dfhack.init-example dfhack-config/default hack/!(symbols.xml|*.so|dfhack-run|binpatch); do - update_path "$hack_dir" "$i" +for i in dfhack.init-example dfhack-config/default hack/*; do + update_path "$i" done -update_path "$hack_wrap_dir" "hack/symbols.xml" - cd "$DF_DIR" -LD_LIBRARY_PATH="$hack_dir/hack/libs:$hack_dir/hack:$LD_LIBRARY_PATH" \ - LD_PRELOAD=$hack_dir/hack/libdfhack.so exec $game_dir/libs/Dwarf_Fortress "$@" +LD_LIBRARY_PATH="$env_dir/hack/libs:$env_dir/hack:$LD_LIBRARY_PATH" \ + LD_PRELOAD=$env_dir/hack/libdfhack.so exec $env_dir/libs/Dwarf_Fortress "$@" diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in index ac59934f767d1..1fd6178895db2 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in @@ -1,27 +1,25 @@ shopt -s extglob [ -z "$DF_DIR" ] && DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux" -game_dir="@dwarfFortress@" +env_dir="@env@" update_path() { - local pkg_dir="$1" - local path="$2" + local path="$1" mkdir -p "$DF_DIR/$(dirname "$path")" # If user has replaced these data directories, let them stay. if [ ! -e "$DF_DIR/$path" ] || [ -L "$DF_DIR/$path" ]; then rm -f "$DF_DIR/$path" - ln -s "$pkg_dir/$path" "$DF_DIR/$path" + ln -s "$env_dir/$path" "$DF_DIR/$path" fi } forcecopy_path() { - local pkg_dir="$1" - local path="$2" + local path="$1" mkdir -p "$DF_DIR/$(dirname "$path")" rm -rf "$DF_DIR/$path" - cp -rL --no-preserve=all "$pkg_dir/$path" "$DF_DIR/$path" + cp -rL --no-preserve=all "$env_dir/$path" "$DF_DIR/$path" } mkdir -p "$DF_DIR" @@ -33,11 +31,11 @@ We try to detect changes based on data directories being symbolic links -- keep EOF -cd "$game_dir" +cd "$env_dir" for i in data/init/* data/!(init|index|announcement) raw; do - update_path "$game_dir" "$i" + update_path "$i" done -forcecopy_path "$game_dir" data/index +forcecopy_path data/index # For some reason, it's needed to be writable... -forcecopy_path "$game_dir" data/announcement +forcecopy_path data/announcement diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in index 28f89e8117e87..f405f1b0e393f 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in @@ -3,4 +3,4 @@ source @dfInit@ cd "$DF_DIR" -exec $game_dir/libs/Dwarf_Fortress "$@" +exec "$env_dir/libs/Dwarf_Fortress" "$@" |