dwarf-fortress: refactor

This commit is contained in:
Artturin 2021-06-29 05:42:37 +03:00 committed by Jonathan Ringer
parent 4e75706a46
commit cd3ed54f6e
13 changed files with 254 additions and 153 deletions

View file

@ -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: # To whomever it may concern:
# #
@ -35,7 +35,7 @@
with lib; with lib;
let let
callPackage = pkgs.newScope self; callPackage = newScope self;
# The latest Dwarf Fortress version. Maintainers: when a new version comes # The latest Dwarf Fortress version. Maintainers: when a new version comes
# out, ensure that (unfuck|dfhack|twbt) are all up to date before changing # 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. # Converts a version to a package name.
versionToName = version: "dwarf-fortress_${lib.replaceStrings ["."] ["_"] version}"; versionToName = version: "dwarf-fortress_${lib.replaceStrings ["."] ["_"] version}";
dwarf-therapist-original = pkgs.qt5.callPackage ./dwarf-therapist { dwarf-therapist-original = libsForQt5.callPackage ./dwarf-therapist {
texlive = pkgs.texlive.combine { texlive = texlive.combine {
inherit (pkgs.texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem; inherit (texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem;
}; };
}; };
# A map of names to each Dwarf Fortress package we know about. # A map of names to each Dwarf Fortress package we know about.
df-games = lib.listToAttrs (map (dfVersion: { df-games = lib.listToAttrs (map
name = versionToName dfVersion; (dfVersion: {
value = name = versionToName dfVersion;
let value =
# I can't believe this syntax works. Spikes of Nix code indeed... let
dwarf-fortress = callPackage ./game.nix { # I can't believe this syntax works. Spikes of Nix code indeed...
inherit dfVersion; dwarf-fortress = callPackage ./game.nix {
inherit dwarf-fortress-unfuck; 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. (lib.attrNames self.df-hashes));
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));
self = rec { self = rec {
df-hashes = builtins.fromJSON (builtins.readFile ./game.json); df-hashes = builtins.fromJSON (builtins.readFile ./game.json);
@ -107,7 +110,7 @@ let
soundSense = callPackage ./soundsense.nix { }; soundSense = callPackage ./soundsense.nix { };
legends-browser = callPackage ./legends-browser { 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 { themes = recurseIntoAttrs (callPackage ./themes {
@ -119,4 +122,5 @@ let
cla-theme = themes.cla; cla-theme = themes.cla;
}; };
in self // df-games in
self // df-games

View file

@ -1,7 +1,20 @@
{ stdenv, buildEnv, lib, fetchFromGitHub, cmake, writeScriptBin { stdenv
, perl, XMLLibXML, XMLLibXSLT, zlib, ruby , buildEnv
, enableStoneSense ? false, allegro5, libGLU, libGL , lib
, enableTWBT ? true, twbt , fetchFromGitHub
, cmake
, writeScriptBin
, perl
, XMLLibXML
, XMLLibXSLT
, zlib
, ruby
, enableStoneSense ? false
, allegro5
, libGLU
, libGL
, enableTWBT ? true
, twbt
, SDL , SDL
, dfVersion , dfVersion
}: }:
@ -60,9 +73,10 @@ let
}; };
}; };
release = if hasAttr dfVersion dfhack-releases release =
then getAttr dfVersion dfhack-releases if hasAttr dfVersion dfhack-releases
else throw "[DFHack] Unsupported Dwarf Fortress version: ${dfVersion}"; then getAttr dfVersion dfhack-releases
else throw "[DFHack] Unsupported Dwarf Fortress version: ${dfVersion}";
version = release.dfHackRelease; version = release.dfHackRelease;
@ -125,7 +139,7 @@ let
nativeBuildInputs = [ cmake perl XMLLibXML XMLLibXSLT fakegit ]; nativeBuildInputs = [ cmake perl XMLLibXML XMLLibXSLT fakegit ];
# We don't use system libraries because dfhack needs old C++ ABI. # We don't use system libraries because dfhack needs old C++ ABI.
buildInputs = [ zlib SDL ] buildInputs = [ zlib SDL ]
++ lib.optionals enableStoneSense [ allegro5 libGLU libGL ]; ++ lib.optionals enableStoneSense [ allegro5 libGLU libGL ];
preConfigure = '' preConfigure = ''
# Trick build system into believing we have .git # Trick build system into believing we have .git
@ -138,7 +152,7 @@ let
''; '';
cmakeFlags = [ "-DDFHACK_BUILD_ARCH=${arch}" "-DDOWNLOAD_RUBY=OFF" ] 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 # dfhack expects an unversioned libruby.so to be present in the hack
# subdirectory for ruby plugins to function. # subdirectory for ruby plugins to function.

View file

@ -1,5 +1,12 @@
{ lib, stdenv, fetchFromGitHub, qtbase { lib
, qtdeclarative, cmake, texlive, ninja }: , stdenv
, fetchFromGitHub
, qtbase
, qtdeclarative
, cmake
, texlive
, ninja
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "dwarf-therapist"; pname = "dwarf-therapist";
@ -15,10 +22,11 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ texlive cmake ninja ]; nativeBuildInputs = [ texlive cmake ninja ];
buildInputs = [ qtbase qtdeclarative ]; buildInputs = [ qtbase qtdeclarative ];
installPhase = if stdenv.isDarwin then '' installPhase =
mkdir -p $out/Applications if stdenv.isDarwin then ''
cp -r DwarfTherapist.app $out/Applications mkdir -p $out/Applications
'' else null; cp -r DwarfTherapist.app $out/Applications
'' else null;
dontWrapQtApps = true; dontWrapQtApps = true;

View file

@ -5,22 +5,21 @@
install_dir="@install@" install_dir="@install@"
therapist_dir="@therapist@" therapist_dir="@therapist@"
cat <<EOF >&2 @cat@ <<EOF >&2
Using $DT_DIR as Dwarf Therapist overlay directory. Using $DT_DIR as Dwarf Therapist overlay directory.
EOF EOF
update_path() { update_path() {
local path="$1" 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 if [ ! -e "$DT_DIR/$path" ] || [ -L "$DT_DIR/$path" ]; then
rm -f "$DT_DIR/$path" @rm@ -f "$DT_DIR/$path"
ln -s "$install_dir/share/dwarftherapist/$path" "$DT_DIR/$path" @ln@ -s "$install_dir/share/dwarftherapist/$path" "$DT_DIR/$path"
fi fi
} }
cd "$install_dir/share/dwarftherapist" cd "$install_dir/share/dwarftherapist"
update_path memory_layouts update_path memory_layouts
QT_QPA_PLATFORM_PLUGIN_PATH="@qt_plugin_path@" \ exec "$therapist_dir/bin/dwarftherapist" "$@"
exec "$therapist_dir/bin/dwarftherapist" "$@"

View file

@ -1,8 +1,9 @@
{ pkgs, stdenv, dwarf-therapist, dwarf-fortress, makeWrapper }: { stdenv, dwarf-therapist, dwarf-fortress, substituteAll, coreutils, wrapQtAppsHook }:
let let
platformSlug = if stdenv.targetPlatform.is32bit then platformSlug =
"linux32" else "linux64"; if stdenv.targetPlatform.is32bit then
"linux32" else "linux64";
inifile = "linux/v0.${dwarf-fortress.baseVersion}.${dwarf-fortress.patchVersion}_${platformSlug}.ini"; inifile = "linux/v0.${dwarf-fortress.baseVersion}.${dwarf-fortress.patchVersion}_${platformSlug}.ini";
in in
@ -10,24 +11,32 @@ in
stdenv.mkDerivation { stdenv.mkDerivation {
name = "dwarf-therapist-${dwarf-therapist.version}"; 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 ]; paths = [ dwarf-therapist ];
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ wrapQtAppsHook ];
passthru = { inherit dwarf-fortress dwarf-therapist; }; passthru = { inherit dwarf-fortress dwarf-therapist; };
buildCommand = '' buildCommand = ''
mkdir -p $out/bin mkdir -p $out/bin
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 install -Dm755 $wrapper $out/bin/dwarftherapist
ln -s $out/bin/dwarftherapist $out/bin/DwarfTherapist
substituteInPlace $out/bin/dwarftherapist \
--subst-var-by install $out
wrapQtApp $out/bin/dwarftherapist
# Fix up memory layouts # Fix up memory layouts
rm -rf $out/share/dwarftherapist/memory_layouts/linux rm -rf $out/share/dwarftherapist/memory_layouts/linux

View file

@ -1,10 +1,16 @@
{ stdenv, lib, fetchurl { stdenv
, SDL, dwarf-fortress-unfuck , lib
, fetchurl
, SDL
, dwarf-fortress-unfuck
# Our own "unfuck" libs for macOS # Our own "unfuck" libs for macOS
, ncurses, fmodex, gcc , ncurses
, fmodex
, gcc
, dfVersion, df-hashes , dfVersion
, df-hashes
}: }:
with lib; with lib;
@ -30,15 +36,18 @@ let
baseVersion = elemAt dfVersionTriple 1; baseVersion = elemAt dfVersionTriple 1;
patchVersion = elemAt dfVersionTriple 2; patchVersion = elemAt dfVersionTriple 2;
game = if hasAttr dfVersion df-hashes game =
then getAttr dfVersion df-hashes if hasAttr dfVersion df-hashes
else throw "Unknown Dwarf Fortress version: ${dfVersion}"; then getAttr dfVersion df-hashes
dfPlatform = if hasAttr stdenv.hostPlatform.system platforms else throw "Unknown Dwarf Fortress version: ${dfVersion}";
then getAttr stdenv.hostPlatform.system platforms dfPlatform =
else throw "Unsupported system: ${stdenv.hostPlatform.system}"; if hasAttr stdenv.hostPlatform.system platforms
sha256 = if hasAttr dfPlatform game then getAttr stdenv.hostPlatform.system platforms
then getAttr dfPlatform game else throw "Unsupported system: ${stdenv.hostPlatform.system}";
else throw "Unsupported dfPlatform: ${dfPlatform}"; sha256 =
if hasAttr dfPlatform game
then getAttr dfPlatform game
else throw "Unsupported dfPlatform: ${dfPlatform}";
in in

View file

@ -1,5 +1,10 @@
{ stdenvNoCC, lib, buildEnv { stdenvNoCC
, df-games, themes, latestVersion, versionToName , lib
, buildEnv
, df-games
, themes
, latestVersion
, versionToName
, dfVersion ? latestVersion , dfVersion ? latestVersion
# This package should, at any given time, provide an opinionated "optimal" # 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 # DF experience. It's the equivalent of the Lazy Newbie Pack, that is, and
@ -9,9 +14,10 @@
, enableSoundSense ? true , enableSoundSense ? true
, enableStoneSense ? true , enableStoneSense ? true
, enableDwarfTherapist ? true , enableDwarfTherapist ? true
, enableLegendsBrowser ? true, legends-browser , enableLegendsBrowser ? true
, legends-browser
, theme ? themes.phoebus , theme ? themes.phoebus
# General config options: # General config options:
, enableIntro ? true , enableIntro ? true
, enableTruetype ? true , enableTruetype ? true
, enableFPS ? false , enableFPS ? false
@ -23,9 +29,10 @@ with lib;
let let
dfGame = versionToName dfVersion; dfGame = versionToName dfVersion;
dwarf-fortress = if hasAttr dfGame df-games dwarf-fortress =
then getAttr dfGame df-games if hasAttr dfGame df-games
else throw "Unknown Dwarf Fortress version: ${dfVersion}"; then getAttr dfGame df-games
else throw "Unknown Dwarf Fortress version: ${dfVersion}";
dwarf-therapist = dwarf-fortress.dwarf-therapist; dwarf-therapist = dwarf-fortress.dwarf-therapist;
in in
buildEnv { buildEnv {
@ -33,10 +40,11 @@ buildEnv {
paths = [ paths = [
(dwarf-fortress.override { (dwarf-fortress.override {
inherit enableDFHack enableTWBT enableSoundSense enableStoneSense theme inherit enableDFHack enableTWBT enableSoundSense enableStoneSense theme
enableIntro enableTruetype enableFPS enableTextMode enableSound; enableIntro enableTruetype enableFPS enableTextMode enableSound;
})] })
++ lib.optional enableDwarfTherapist dwarf-therapist ]
++ lib.optional enableLegendsBrowser legends-browser; ++ lib.optional enableDwarfTherapist dwarf-therapist
++ lib.optional enableLegendsBrowser legends-browser;
meta = with lib; { meta = with lib; {
description = "An opinionated wrapper for Dwarf Fortress"; description = "An opinionated wrapper for Dwarf Fortress";

View file

@ -1,4 +1,6 @@
{ stdenv, fetchzip, dos2unix { stdenv
, fetchzip
, dos2unix
, soundPack ? stdenv.mkDerivation { , soundPack ? stdenv.mkDerivation {
name = "soundsense-soundpack"; name = "soundsense-soundpack";
src = fetchzip { src = fetchzip {
@ -8,7 +10,8 @@
installPhase = '' installPhase = ''
cp -r . $out cp -r . $out
''; '';
}}: }
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "2016-1_196"; version = "2016-1_196";

View file

@ -1,19 +1,21 @@
{lib, fetchFromGitHub, ...}: { lib, fetchFromGitHub, ... }:
with builtins; with builtins;
listToAttrs (map (v: { listToAttrs (map
inherit (v) name; (v: {
value = fetchFromGitHub { inherit (v) name;
name = "${v.name}-${v.version}"; value = fetchFromGitHub {
owner = "DFgraphics"; name = "${v.name}-${v.version}";
repo = v.name; owner = "DFgraphics";
rev = v.version; repo = v.name;
sha256 = v.sha256; rev = v.version;
meta = with lib; { sha256 = v.sha256;
platforms = platforms.all; meta = with lib; {
maintainers = [ maintainers.matthewbauer maintainers.shazow ]; platforms = platforms.all;
license = licenses.free; maintainers = [ maintainers.matthewbauer maintainers.shazow ];
license = licenses.free;
};
}; };
}; })
}) (fromJSON (readFile ./themes.json))) (fromJSON (readFile ./themes.json)))

View file

@ -1,4 +1,7 @@
{ stdenvNoCC, lib, fetchurl, unzip { stdenvNoCC
, lib
, fetchurl
, unzip
, dfVersion , dfVersion
}: }:
@ -49,9 +52,10 @@ let
}; };
}; };
release = if hasAttr dfVersion twbt-releases release =
then getAttr dfVersion twbt-releases if hasAttr dfVersion twbt-releases
else throw "[TWBT] Unsupported Dwarf Fortress version: ${dfVersion}"; then getAttr dfVersion twbt-releases
else throw "[TWBT] Unsupported Dwarf Fortress version: ${dfVersion}";
in in
stdenvNoCC.mkDerivation rec { stdenvNoCC.mkDerivation rec {

View file

@ -1,7 +1,21 @@
{ stdenv, lib, fetchFromGitHub, cmake { stdenv
, libGL, libSM, SDL, SDL_image, SDL_ttf, glew, openalSoft , lib
, ncurses, glib, gtk2, libsndfile, zlib , fetchFromGitHub
, dfVersion, pkg-config , cmake
, libGL
, libSM
, SDL
, SDL_image
, SDL_ttf
, glew
, openalSoft
, ncurses
, glib
, gtk2
, libsndfile
, zlib
, dfVersion
, pkg-config
}: }:
with lib; with lib;
@ -46,9 +60,10 @@ let
}; };
}; };
release = if hasAttr dfVersion unfuck-releases release =
then getAttr dfVersion unfuck-releases if hasAttr dfVersion unfuck-releases
else throw "[unfuck] Unknown Dwarf Fortress version: ${dfVersion}"; then getAttr dfVersion unfuck-releases
else throw "[unfuck] Unknown Dwarf Fortress version: ${dfVersion}";
in in
stdenv.mkDerivation { stdenv.mkDerivation {
@ -68,8 +83,17 @@ stdenv.mkDerivation {
nativeBuildInputs = [ cmake pkg-config ]; nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ buildInputs = [
libSM SDL SDL_image SDL_ttf glew openalSoft libSM
ncurses gtk2 libsndfile zlib libGL SDL
SDL_image
SDL_ttf
glew
openalSoft
ncurses
gtk2
libsndfile
zlib
libGL
]; ];
# Don't strip unused symbols; dfhack hooks into some of them. # Don't strip unused symbols; dfhack hooks into some of them.

View file

@ -1,13 +1,22 @@
{ stdenv, lib, buildEnv, substituteAll, runCommand { stdenv
, lib
, buildEnv
, substituteAll
, runCommand
, coreutils
, dwarf-fortress , dwarf-fortress
, dwarf-therapist , dwarf-therapist
, enableDFHack ? false, dfhack , enableDFHack ? false
, enableSoundSense ? false, soundSense, jdk , dfhack
, enableSoundSense ? false
, soundSense
, jdk
, enableStoneSense ? false , enableStoneSense ? false
, enableTWBT ? false, twbt , enableTWBT ? false
, themes ? {} , twbt
, themes ? { }
, theme ? null , theme ? null
# General config options: # General config options:
, enableIntro ? true , enableIntro ? true
, enableTruetype ? true , enableTruetype ? true
, enableFPS ? false , enableFPS ? false
@ -31,11 +40,11 @@ let
# These are in inverse order for first packages to override the next ones. # These are in inverse order for first packages to override the next ones.
themePkg = lib.optional (theme != null) ptheme; themePkg = lib.optional (theme != null) ptheme;
pkgs = lib.optional enableDFHack dfhack_ pkgs = lib.optional enableDFHack dfhack_
++ lib.optional enableSoundSense soundSense ++ lib.optional enableSoundSense soundSense
++ lib.optional enableTWBT twbt.art ++ lib.optional enableTWBT twbt.art
++ [ dwarf-fortress ]; ++ [ dwarf-fortress ];
fixup = lib.singleton (runCommand "fixup" {} ('' fixup = lib.singleton (runCommand "fixup" { } (''
mkdir -p $out/data/init mkdir -p $out/data/init
'' + (if (theme != null) then '' '' + (if (theme != null) then ''
cp ${lib.head themePkg}/data/init/init.txt $out/data/init/init.txt cp ${lib.head themePkg}/data/init/init.txt $out/data/init/init.txt
@ -61,7 +70,7 @@ let
substituteInPlace $out/data/init/init.txt \ substituteInPlace $out/data/init/init.txt \
--replace '[PRINT_MODE:2D]' '[PRINT_MODE:TWBT]' --replace '[PRINT_MODE:2D]' '[PRINT_MODE:TWBT]'
'' + '' +
lib.optionalString enableTextMode '' lib.optionalString enableTextMode ''
substituteInPlace $out/data/init/init.txt \ substituteInPlace $out/data/init/init.txt \
--replace '[PRINT_MODE:2D]' '[PRINT_MODE:TEXT]' --replace '[PRINT_MODE:2D]' '[PRINT_MODE:TEXT]'
'' + '' '' + ''
@ -89,8 +98,15 @@ stdenv.mkDerivation {
name = "dwarf-fortress-init"; name = "dwarf-fortress-init";
src = ./dwarf-fortress-init.in; src = ./dwarf-fortress-init.in;
inherit env; inherit env;
exe = if stdenv.isLinux then "libs/Dwarf_Fortress" exe =
else "dwarfort.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; runDF = ./dwarf-fortress.in;

View file

@ -1,3 +1,4 @@
#!@stdenv_shell@ -e
shopt -s extglob shopt -s extglob
[ -z "$DF_DIR" ] && export DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux" [ -z "$DF_DIR" ] && export DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux"
@ -7,25 +8,25 @@ exe="$env_dir/@exe@"
update_path() { update_path() {
local path="$1" 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 user has replaced these data directories, let them stay.
if [ ! -e "$DF_DIR/$path" ] || [ -L "$DF_DIR/$path" ]; then if [ ! -e "$DF_DIR/$path" ] || [ -L "$DF_DIR/$path" ]; then
rm -f "$DF_DIR/$path" @rm@ -f "$DF_DIR/$path"
ln -s "$env_dir/$path" "$DF_DIR/$path" @ln@ -s "$env_dir/$path" "$DF_DIR/$path"
fi fi
} }
forcecopy_path() { forcecopy_path() {
local path="$1" local path="$1"
mkdir -p "$DF_DIR/$(dirname "$path")" @mkdir@ -p "$DF_DIR/$(dirname "$path")"
rm -rf "$DF_DIR/$path" @rm@ -rf "$DF_DIR/$path"
cp -rL --no-preserve=all "$env_dir/$path" "$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. 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! 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. We try to detect changes based on data directories being symbolic links -- keep this in mind.