dwarf-fortress: refactor
This commit is contained in:
parent
4e75706a46
commit
cd3ed54f6e
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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" "$@"
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue