summary refs log tree commit diff
path: root/pkgs/games/dwarf-fortress
diff options
context:
space:
mode:
authorArtturin <Artturin@artturin.com>2021-06-29 05:42:37 +0300
committerJonathan Ringer <jonringer@users.noreply.github.com>2021-06-30 00:10:57 -0700
commitcd3ed54f6ea1c13d45c6772b4752ae6d2ff35997 (patch)
tree45682c2ed94ab6955665bcceefd27c66065c0681 /pkgs/games/dwarf-fortress
parent4e75706a468a795c2bc67102211b43d41a449df7 (diff)
downloadnixpkgs-cd3ed54f6ea1c13d45c6772b4752ae6d2ff35997.tar
nixpkgs-cd3ed54f6ea1c13d45c6772b4752ae6d2ff35997.tar.gz
nixpkgs-cd3ed54f6ea1c13d45c6772b4752ae6d2ff35997.tar.bz2
nixpkgs-cd3ed54f6ea1c13d45c6772b4752ae6d2ff35997.tar.lz
nixpkgs-cd3ed54f6ea1c13d45c6772b4752ae6d2ff35997.tar.xz
nixpkgs-cd3ed54f6ea1c13d45c6772b4752ae6d2ff35997.tar.zst
nixpkgs-cd3ed54f6ea1c13d45c6772b4752ae6d2ff35997.zip
dwarf-fortress: refactor
Diffstat (limited to 'pkgs/games/dwarf-fortress')
-rw-r--r--pkgs/games/dwarf-fortress/default.nix92
-rw-r--r--pkgs/games/dwarf-fortress/dfhack/default.nix32
-rw-r--r--pkgs/games/dwarf-fortress/dwarf-therapist/default.nix20
-rw-r--r--pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in11
-rw-r--r--pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix31
-rw-r--r--pkgs/games/dwarf-fortress/game.nix41
-rw-r--r--pkgs/games/dwarf-fortress/lazy-pack.nix30
-rw-r--r--pkgs/games/dwarf-fortress/soundsense.nix7
-rw-r--r--pkgs/games/dwarf-fortress/themes/default.nix32
-rw-r--r--pkgs/games/dwarf-fortress/twbt/default.nix12
-rw-r--r--pkgs/games/dwarf-fortress/unfuck.nix42
-rw-r--r--pkgs/games/dwarf-fortress/wrapper/default.nix42
-rw-r--r--pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in17
13 files changed, 255 insertions, 154 deletions
diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix
index 2a4df9bf7cf..3e96351acbb 100644
--- a/pkgs/games/dwarf-fortress/default.nix
+++ b/pkgs/games/dwarf-fortress/default.nix
@@ -1,4 +1,4 @@
-{ pkgs, stdenv, stdenvNoCC, gccStdenv, lib, recurseIntoAttrs }:
+{ stdenv, stdenvNoCC, gccStdenv, lib, recurseIntoAttrs, libsForQt5, newScope, texlive, perlPackages, jdk8, jre8 }:
 
 # To whomever it may concern:
 #
@@ -35,7 +35,7 @@
 with lib;
 
 let
-  callPackage = pkgs.newScope self;
+  callPackage = newScope self;
 
   # The latest Dwarf Fortress version. Maintainers: when a new version comes
   # out, ensure that (unfuck|dfhack|twbt) are all up to date before changing
@@ -45,51 +45,54 @@ let
   # Converts a version to a package name.
   versionToName = version: "dwarf-fortress_${lib.replaceStrings ["."] ["_"] version}";
 
-  dwarf-therapist-original = pkgs.qt5.callPackage ./dwarf-therapist {
-    texlive = pkgs.texlive.combine {
-      inherit (pkgs.texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem;
+  dwarf-therapist-original = libsForQt5.callPackage ./dwarf-therapist {
+    texlive = texlive.combine {
+      inherit (texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem;
     };
   };
 
   # A map of names to each Dwarf Fortress package we know about.
-  df-games = lib.listToAttrs (map (dfVersion: {
-    name = versionToName dfVersion;
-    value =
-      let
-        # I can't believe this syntax works. Spikes of Nix code indeed...
-        dwarf-fortress = callPackage ./game.nix {
-          inherit dfVersion;
-          inherit dwarf-fortress-unfuck;
+  df-games = lib.listToAttrs (map
+    (dfVersion: {
+      name = versionToName dfVersion;
+      value =
+        let
+          # I can't believe this syntax works. Spikes of Nix code indeed...
+          dwarf-fortress = callPackage ./game.nix {
+            inherit dfVersion;
+            inherit dwarf-fortress-unfuck;
+          };
+
+          # unfuck is linux-only right now, we will only use it there.
+          dwarf-fortress-unfuck =
+            if stdenv.isLinux then callPackage ./unfuck.nix { inherit dfVersion; }
+            else null;
+
+          twbt = callPackage ./twbt { inherit dfVersion; };
+
+          dfhack = callPackage ./dfhack {
+            inherit (perlPackages) XMLLibXML XMLLibXSLT;
+            inherit dfVersion twbt;
+            stdenv = gccStdenv;
+          };
+
+          dwarf-therapist = libsForQt5.callPackage ./dwarf-therapist/wrapper.nix {
+            inherit dwarf-fortress;
+            dwarf-therapist = dwarf-therapist-original;
+          };
+        in
+        callPackage ./wrapper {
+          inherit (self) themes;
+
+          dwarf-fortress = dwarf-fortress;
+          twbt = twbt;
+          dfhack = dfhack;
+          dwarf-therapist = dwarf-therapist;
+
+          jdk = jdk8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
         };
-
-        # unfuck is linux-only right now, we will only use it there.
-        dwarf-fortress-unfuck = if stdenv.isLinux then callPackage ./unfuck.nix { inherit dfVersion; }
-                                else null;
-
-        twbt = callPackage ./twbt { inherit dfVersion; };
-
-        dfhack = callPackage ./dfhack {
-          inherit (pkgs.perlPackages) XMLLibXML XMLLibXSLT;
-          inherit dfVersion twbt;
-          stdenv = gccStdenv;
-        };
-
-        dwarf-therapist = callPackage ./dwarf-therapist/wrapper.nix {
-          inherit dwarf-fortress;
-          dwarf-therapist = dwarf-therapist-original;
-        };
-      in
-      callPackage ./wrapper {
-        inherit (self) themes;
-
-        dwarf-fortress = dwarf-fortress;
-        twbt = twbt;
-        dfhack = dfhack;
-        dwarf-therapist = dwarf-therapist;
-
-        jdk = pkgs.jdk8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
-      };
-  }) (lib.attrNames self.df-hashes));
+    })
+    (lib.attrNames self.df-hashes));
 
   self = rec {
     df-hashes = builtins.fromJSON (builtins.readFile ./game.json);
@@ -107,7 +110,7 @@ let
     soundSense = callPackage ./soundsense.nix { };
 
     legends-browser = callPackage ./legends-browser {
-      jre = pkgs.jre8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
+      jre = jre8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
     };
 
     themes = recurseIntoAttrs (callPackage ./themes {
@@ -119,4 +122,5 @@ let
     cla-theme = themes.cla;
   };
 
-in self // df-games
+in
+self // df-games
diff --git a/pkgs/games/dwarf-fortress/dfhack/default.nix b/pkgs/games/dwarf-fortress/dfhack/default.nix
index 2e27d9493bd..4bfb69355a7 100644
--- a/pkgs/games/dwarf-fortress/dfhack/default.nix
+++ b/pkgs/games/dwarf-fortress/dfhack/default.nix
@@ -1,7 +1,20 @@
-{ stdenv, buildEnv, lib, fetchFromGitHub, cmake, writeScriptBin
-, perl, XMLLibXML, XMLLibXSLT, zlib, ruby
-, enableStoneSense ? false,  allegro5, libGLU, libGL
-, enableTWBT ? true, twbt
+{ stdenv
+, buildEnv
+, lib
+, fetchFromGitHub
+, cmake
+, writeScriptBin
+, perl
+, XMLLibXML
+, XMLLibXSLT
+, zlib
+, ruby
+, enableStoneSense ? false
+, allegro5
+, libGLU
+, libGL
+, enableTWBT ? true
+, twbt
 , SDL
 , dfVersion
 }:
@@ -60,9 +73,10 @@ let
     };
   };
 
-  release = if hasAttr dfVersion dfhack-releases
-            then getAttr dfVersion dfhack-releases
-            else throw "[DFHack] Unsupported Dwarf Fortress version: ${dfVersion}";
+  release =
+    if hasAttr dfVersion dfhack-releases
+    then getAttr dfVersion dfhack-releases
+    else throw "[DFHack] Unsupported Dwarf Fortress version: ${dfVersion}";
 
   version = release.dfHackRelease;
 
@@ -125,7 +139,7 @@ let
     nativeBuildInputs = [ cmake perl XMLLibXML XMLLibXSLT fakegit ];
     # We don't use system libraries because dfhack needs old C++ ABI.
     buildInputs = [ zlib SDL ]
-               ++ lib.optionals enableStoneSense [ allegro5 libGLU libGL ];
+      ++ lib.optionals enableStoneSense [ allegro5 libGLU libGL ];
 
     preConfigure = ''
       # Trick build system into believing we have .git
@@ -138,7 +152,7 @@ let
     '';
 
     cmakeFlags = [ "-DDFHACK_BUILD_ARCH=${arch}" "-DDOWNLOAD_RUBY=OFF" ]
-              ++ lib.optionals enableStoneSense [ "-DBUILD_STONESENSE=ON" "-DSTONESENSE_INTERNAL_SO=OFF" ];
+      ++ lib.optionals enableStoneSense [ "-DBUILD_STONESENSE=ON" "-DSTONESENSE_INTERNAL_SO=OFF" ];
 
     # dfhack expects an unversioned libruby.so to be present in the hack
     # subdirectory for ruby plugins to function.
diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
index 243db1e1c39..ec765e71158 100644
--- a/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
+++ b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
@@ -1,5 +1,12 @@
-{ lib, stdenv, fetchFromGitHub, qtbase
-, qtdeclarative, cmake, texlive, ninja }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qtdeclarative
+, cmake
+, texlive
+, ninja
+}:
 
 stdenv.mkDerivation rec {
   pname = "dwarf-therapist";
@@ -15,10 +22,11 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ texlive cmake ninja ];
   buildInputs = [ qtbase qtdeclarative ];
 
-  installPhase = if stdenv.isDarwin then ''
-    mkdir -p $out/Applications
-    cp -r DwarfTherapist.app $out/Applications
-  '' else null;
+  installPhase =
+    if stdenv.isDarwin then ''
+      mkdir -p $out/Applications
+      cp -r DwarfTherapist.app $out/Applications
+    '' else null;
 
   dontWrapQtApps = true;
 
diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in b/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in
index 77936c430e2..5ae0a35b5e2 100644
--- a/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in
+++ b/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in
@@ -5,22 +5,21 @@
 install_dir="@install@"
 therapist_dir="@therapist@"
 
-cat <<EOF >&2
+@cat@ <<EOF >&2
 Using $DT_DIR as Dwarf Therapist overlay directory.
 EOF
 
 update_path() {
   local path="$1"
 
-  mkdir -p "$DT_DIR/$(dirname "$path")"
+  @mkdir@ -p "$DT_DIR/$(@dirname@ "$path")"
   if [ ! -e "$DT_DIR/$path" ] || [ -L "$DT_DIR/$path" ]; then
-    rm -f "$DT_DIR/$path"
-    ln -s "$install_dir/share/dwarftherapist/$path" "$DT_DIR/$path"
+    @rm@ -f "$DT_DIR/$path"
+    @ln@ -s "$install_dir/share/dwarftherapist/$path" "$DT_DIR/$path"
   fi
 }
 
 cd "$install_dir/share/dwarftherapist"
 update_path memory_layouts
 
-QT_QPA_PLATFORM_PLUGIN_PATH="@qt_plugin_path@" \
-  exec "$therapist_dir/bin/dwarftherapist" "$@"
+exec "$therapist_dir/bin/dwarftherapist" "$@"
diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
index 7db79012ec6..93f51df1819 100644
--- a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
+++ b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
@@ -1,8 +1,9 @@
-{ pkgs, stdenv, dwarf-therapist, dwarf-fortress, makeWrapper }:
+{ stdenv, dwarf-therapist, dwarf-fortress, substituteAll, coreutils, wrapQtAppsHook }:
 
 let
-  platformSlug = if stdenv.targetPlatform.is32bit then
-    "linux32" else "linux64";
+  platformSlug =
+    if stdenv.targetPlatform.is32bit then
+      "linux32" else "linux64";
   inifile = "linux/v0.${dwarf-fortress.baseVersion}.${dwarf-fortress.patchVersion}_${platformSlug}.ini";
 
 in
@@ -10,24 +11,32 @@ in
 stdenv.mkDerivation {
   name = "dwarf-therapist-${dwarf-therapist.version}";
 
-  wrapper = ./dwarf-therapist.in;
+  wrapper = substituteAll {
+    src = ./dwarf-therapist.in;
+    stdenv_shell = "${stdenv.shell}";
+    rm = "${coreutils}/bin/rm";
+    ln = "${coreutils}/bin/ln";
+    cat = "${coreutils}/bin/cat";
+    mkdir = "${coreutils}/bin/mkdir";
+    dirname = "${coreutils}/bin/dirname";
+    therapist = "${dwarf-therapist}";
+  };
 
   paths = [ dwarf-therapist ];
 
-  nativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ wrapQtAppsHook ];
 
   passthru = { inherit dwarf-fortress dwarf-therapist; };
 
   buildCommand = ''
     mkdir -p $out/bin
+
+    install -Dm755 $wrapper $out/bin/dwarftherapist
     ln -s $out/bin/dwarftherapist $out/bin/DwarfTherapist
-    substitute $wrapper $out/bin/dwarftherapist \
-      --subst-var-by stdenv_shell ${stdenv.shell} \
-      --subst-var-by install $out \
-      --subst-var-by therapist ${dwarf-therapist} \
-      --subst-var-by qt_plugin_path "${pkgs.qt5.qtbase}/lib/qt-${pkgs.qt5.qtbase.qtCompatVersion}/plugins/platforms"
 
-    chmod 755 $out/bin/dwarftherapist
+    substituteInPlace $out/bin/dwarftherapist \
+      --subst-var-by install $out
+    wrapQtApp $out/bin/dwarftherapist
 
     # Fix up memory layouts
     rm -rf $out/share/dwarftherapist/memory_layouts/linux
diff --git a/pkgs/games/dwarf-fortress/game.nix b/pkgs/games/dwarf-fortress/game.nix
index 9200d01aa98..d73b111919e 100644
--- a/pkgs/games/dwarf-fortress/game.nix
+++ b/pkgs/games/dwarf-fortress/game.nix
@@ -1,10 +1,16 @@
-{ stdenv, lib, fetchurl
-, SDL, dwarf-fortress-unfuck
-
-# Our own "unfuck" libs for macOS
-, ncurses, fmodex, gcc
-
-, dfVersion, df-hashes
+{ stdenv
+, lib
+, fetchurl
+, SDL
+, dwarf-fortress-unfuck
+
+  # Our own "unfuck" libs for macOS
+, ncurses
+, fmodex
+, gcc
+
+, dfVersion
+, df-hashes
 }:
 
 with lib;
@@ -30,15 +36,18 @@ let
   baseVersion = elemAt dfVersionTriple 1;
   patchVersion = elemAt dfVersionTriple 2;
 
-  game = if hasAttr dfVersion df-hashes
-         then getAttr dfVersion df-hashes
-         else throw "Unknown Dwarf Fortress version: ${dfVersion}";
-  dfPlatform = if hasAttr stdenv.hostPlatform.system platforms
-               then getAttr stdenv.hostPlatform.system platforms
-               else throw "Unsupported system: ${stdenv.hostPlatform.system}";
-  sha256 = if hasAttr dfPlatform game
-           then getAttr dfPlatform game
-           else throw "Unsupported dfPlatform: ${dfPlatform}";
+  game =
+    if hasAttr dfVersion df-hashes
+    then getAttr dfVersion df-hashes
+    else throw "Unknown Dwarf Fortress version: ${dfVersion}";
+  dfPlatform =
+    if hasAttr stdenv.hostPlatform.system platforms
+    then getAttr stdenv.hostPlatform.system platforms
+    else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+  sha256 =
+    if hasAttr dfPlatform game
+    then getAttr dfPlatform game
+    else throw "Unsupported dfPlatform: ${dfPlatform}";
 
 in
 
diff --git a/pkgs/games/dwarf-fortress/lazy-pack.nix b/pkgs/games/dwarf-fortress/lazy-pack.nix
index 41620dd66f1..b34dbd3c74b 100644
--- a/pkgs/games/dwarf-fortress/lazy-pack.nix
+++ b/pkgs/games/dwarf-fortress/lazy-pack.nix
@@ -1,5 +1,10 @@
-{ stdenvNoCC, lib, buildEnv
-, df-games, themes, latestVersion, versionToName
+{ stdenvNoCC
+, lib
+, buildEnv
+, df-games
+, themes
+, latestVersion
+, versionToName
 , dfVersion ? latestVersion
   # This package should, at any given time, provide an opinionated "optimal"
   # DF experience. It's the equivalent of the Lazy Newbie Pack, that is, and
@@ -9,9 +14,10 @@
 , enableSoundSense ? true
 , enableStoneSense ? true
 , enableDwarfTherapist ? true
-, enableLegendsBrowser ? true, legends-browser
+, enableLegendsBrowser ? true
+, legends-browser
 , theme ? themes.phoebus
-# General config options:
+  # General config options:
 , enableIntro ? true
 , enableTruetype ? true
 , enableFPS ? false
@@ -23,9 +29,10 @@ with lib;
 
 let
   dfGame = versionToName dfVersion;
-  dwarf-fortress = if hasAttr dfGame df-games
-                   then getAttr dfGame df-games
-                   else throw "Unknown Dwarf Fortress version: ${dfVersion}";
+  dwarf-fortress =
+    if hasAttr dfGame df-games
+    then getAttr dfGame df-games
+    else throw "Unknown Dwarf Fortress version: ${dfVersion}";
   dwarf-therapist = dwarf-fortress.dwarf-therapist;
 in
 buildEnv {
@@ -33,10 +40,11 @@ buildEnv {
   paths = [
     (dwarf-fortress.override {
       inherit enableDFHack enableTWBT enableSoundSense enableStoneSense theme
-              enableIntro enableTruetype enableFPS enableTextMode enableSound;
-    })]
-    ++ lib.optional enableDwarfTherapist dwarf-therapist
-    ++ lib.optional enableLegendsBrowser legends-browser;
+        enableIntro enableTruetype enableFPS enableTextMode enableSound;
+    })
+  ]
+  ++ lib.optional enableDwarfTherapist dwarf-therapist
+  ++ lib.optional enableLegendsBrowser legends-browser;
 
   meta = with lib; {
     description = "An opinionated wrapper for Dwarf Fortress";
diff --git a/pkgs/games/dwarf-fortress/soundsense.nix b/pkgs/games/dwarf-fortress/soundsense.nix
index a59c8730690..5202c13b5b8 100644
--- a/pkgs/games/dwarf-fortress/soundsense.nix
+++ b/pkgs/games/dwarf-fortress/soundsense.nix
@@ -1,4 +1,6 @@
-{ stdenv, fetchzip, dos2unix
+{ stdenv
+, fetchzip
+, dos2unix
 , soundPack ? stdenv.mkDerivation {
     name = "soundsense-soundpack";
     src = fetchzip {
@@ -8,7 +10,8 @@
     installPhase = ''
       cp -r . $out
     '';
-}}:
+  }
+}:
 
 stdenv.mkDerivation rec {
   version = "2016-1_196";
diff --git a/pkgs/games/dwarf-fortress/themes/default.nix b/pkgs/games/dwarf-fortress/themes/default.nix
index 6241df7590d..c6987a1d16b 100644
--- a/pkgs/games/dwarf-fortress/themes/default.nix
+++ b/pkgs/games/dwarf-fortress/themes/default.nix
@@ -1,19 +1,21 @@
-{lib, fetchFromGitHub, ...}:
+{ lib, fetchFromGitHub, ... }:
 
 with builtins;
 
-listToAttrs (map (v: {
-  inherit (v) name;
-  value = fetchFromGitHub {
-    name = "${v.name}-${v.version}";
-    owner = "DFgraphics";
-    repo = v.name;
-    rev = v.version;
-    sha256 = v.sha256;
-    meta = with lib; {
-      platforms = platforms.all;
-      maintainers = [ maintainers.matthewbauer maintainers.shazow ];
-      license = licenses.free;
+listToAttrs (map
+  (v: {
+    inherit (v) name;
+    value = fetchFromGitHub {
+      name = "${v.name}-${v.version}";
+      owner = "DFgraphics";
+      repo = v.name;
+      rev = v.version;
+      sha256 = v.sha256;
+      meta = with lib; {
+        platforms = platforms.all;
+        maintainers = [ maintainers.matthewbauer maintainers.shazow ];
+        license = licenses.free;
+      };
     };
-  };
-}) (fromJSON (readFile ./themes.json)))
+  })
+  (fromJSON (readFile ./themes.json)))
diff --git a/pkgs/games/dwarf-fortress/twbt/default.nix b/pkgs/games/dwarf-fortress/twbt/default.nix
index bee2c28e530..e6c82e32f0d 100644
--- a/pkgs/games/dwarf-fortress/twbt/default.nix
+++ b/pkgs/games/dwarf-fortress/twbt/default.nix
@@ -1,4 +1,7 @@
-{ stdenvNoCC, lib, fetchurl, unzip
+{ stdenvNoCC
+, lib
+, fetchurl
+, unzip
 , dfVersion
 }:
 
@@ -49,9 +52,10 @@ let
     };
   };
 
-  release = if hasAttr dfVersion twbt-releases
-            then getAttr dfVersion twbt-releases
-            else throw "[TWBT] Unsupported Dwarf Fortress version: ${dfVersion}";
+  release =
+    if hasAttr dfVersion twbt-releases
+    then getAttr dfVersion twbt-releases
+    else throw "[TWBT] Unsupported Dwarf Fortress version: ${dfVersion}";
 in
 
 stdenvNoCC.mkDerivation rec {
diff --git a/pkgs/games/dwarf-fortress/unfuck.nix b/pkgs/games/dwarf-fortress/unfuck.nix
index 0fb08aa7e87..7e96b284044 100644
--- a/pkgs/games/dwarf-fortress/unfuck.nix
+++ b/pkgs/games/dwarf-fortress/unfuck.nix
@@ -1,7 +1,21 @@
-{ stdenv, lib, fetchFromGitHub, cmake
-, libGL, libSM, SDL, SDL_image, SDL_ttf, glew, openalSoft
-, ncurses, glib, gtk2, libsndfile, zlib
-, dfVersion, pkg-config
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, libGL
+, libSM
+, SDL
+, SDL_image
+, SDL_ttf
+, glew
+, openalSoft
+, ncurses
+, glib
+, gtk2
+, libsndfile
+, zlib
+, dfVersion
+, pkg-config
 }:
 
 with lib;
@@ -46,9 +60,10 @@ let
     };
   };
 
-  release = if hasAttr dfVersion unfuck-releases
-            then getAttr dfVersion unfuck-releases
-            else throw "[unfuck] Unknown Dwarf Fortress version: ${dfVersion}";
+  release =
+    if hasAttr dfVersion unfuck-releases
+    then getAttr dfVersion unfuck-releases
+    else throw "[unfuck] Unknown Dwarf Fortress version: ${dfVersion}";
 in
 
 stdenv.mkDerivation {
@@ -68,8 +83,17 @@ stdenv.mkDerivation {
 
   nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [
-    libSM SDL SDL_image SDL_ttf glew openalSoft
-    ncurses gtk2 libsndfile zlib libGL
+    libSM
+    SDL
+    SDL_image
+    SDL_ttf
+    glew
+    openalSoft
+    ncurses
+    gtk2
+    libsndfile
+    zlib
+    libGL
   ];
 
   # Don't strip unused symbols; dfhack hooks into some of them.
diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix
index 73288ab659f..ce989b98ffb 100644
--- a/pkgs/games/dwarf-fortress/wrapper/default.nix
+++ b/pkgs/games/dwarf-fortress/wrapper/default.nix
@@ -1,13 +1,22 @@
-{ stdenv, lib, buildEnv, substituteAll, runCommand
+{ stdenv
+, lib
+, buildEnv
+, substituteAll
+, runCommand
+, coreutils
 , dwarf-fortress
 , dwarf-therapist
-, enableDFHack ? false, dfhack
-, enableSoundSense ? false, soundSense, jdk
+, enableDFHack ? false
+, dfhack
+, enableSoundSense ? false
+, soundSense
+, jdk
 , enableStoneSense ? false
-, enableTWBT ? false, twbt
-, themes ? {}
+, enableTWBT ? false
+, twbt
+, themes ? { }
 , theme ? null
-# General config options:
+  # General config options:
 , enableIntro ? true
 , enableTruetype ? true
 , enableFPS ? false
@@ -31,11 +40,11 @@ let
   # These are in inverse order for first packages to override the next ones.
   themePkg = lib.optional (theme != null) ptheme;
   pkgs = lib.optional enableDFHack dfhack_
-         ++ lib.optional enableSoundSense soundSense
-         ++ lib.optional enableTWBT twbt.art
-         ++ [ dwarf-fortress ];
+    ++ lib.optional enableSoundSense soundSense
+    ++ lib.optional enableTWBT twbt.art
+    ++ [ dwarf-fortress ];
 
-  fixup = lib.singleton (runCommand "fixup" {} (''
+  fixup = lib.singleton (runCommand "fixup" { } (''
     mkdir -p $out/data/init
   '' + (if (theme != null) then ''
     cp ${lib.head themePkg}/data/init/init.txt $out/data/init/init.txt
@@ -61,7 +70,7 @@ let
     substituteInPlace $out/data/init/init.txt \
       --replace '[PRINT_MODE:2D]' '[PRINT_MODE:TWBT]'
   '' +
- lib.optionalString enableTextMode ''
+  lib.optionalString enableTextMode ''
     substituteInPlace $out/data/init/init.txt \
       --replace '[PRINT_MODE:2D]' '[PRINT_MODE:TEXT]'
   '' + ''
@@ -89,8 +98,15 @@ stdenv.mkDerivation {
     name = "dwarf-fortress-init";
     src = ./dwarf-fortress-init.in;
     inherit env;
-    exe = if stdenv.isLinux then "libs/Dwarf_Fortress"
-                            else "dwarfort.exe";
+    exe =
+      if stdenv.isLinux then "libs/Dwarf_Fortress"
+      else "dwarfort.exe";
+    stdenv_shell = "${stdenv.shell}";
+    cp = "${coreutils}/bin/cp";
+    rm = "${coreutils}/bin/rm";
+    ln = "${coreutils}/bin/ln";
+    cat = "${coreutils}/bin/cat";
+    mkdir = "${coreutils}/bin/mkdir";
   };
 
   runDF = ./dwarf-fortress.in;
diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in
index b041067d89e..27639e57f21 100644
--- a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in
+++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in
@@ -1,3 +1,4 @@
+#!@stdenv_shell@ -e
 shopt -s extglob
 
 [ -z "$DF_DIR" ] && export DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux"
@@ -7,25 +8,25 @@ exe="$env_dir/@exe@"
 update_path() {
   local path="$1"
 
-  mkdir -p "$DF_DIR/$(dirname "$path")"
+  @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 "$env_dir/$path" "$DF_DIR/$path"
+    @rm@ -f "$DF_DIR/$path"
+    @ln@ -s "$env_dir/$path" "$DF_DIR/$path"
   fi
 }
 
 forcecopy_path() {
   local path="$1"
 
-  mkdir -p "$DF_DIR/$(dirname "$path")"
-  rm -rf "$DF_DIR/$path"
-  cp -rL --no-preserve=all "$env_dir/$path" "$DF_DIR/$path"
+  @mkdir@ -p "$DF_DIR/$(dirname "$path")"
+  @rm@ -rf "$DF_DIR/$path"
+  @cp@ -rL --no-preserve=all "$env_dir/$path" "$DF_DIR/$path"
 }
 
-mkdir -p "$DF_DIR"
+@mkdir@ -p "$DF_DIR"
 
-cat <<EOF >&2
+@cat@ <<EOF >&2
 Using $DF_DIR as Dwarf Fortress overlay directory.
 If you do any changes in it, don't forget to clean it when updating the game version!
 We try to detect changes based on data directories being symbolic links -- keep this in mind.