134 lines
2.7 KiB
Nix
134 lines
2.7 KiB
Nix
{ buildPythonApplication
|
|
, fetchFromGitHub
|
|
, writeShellScript
|
|
, lib
|
|
, python
|
|
|
|
, bsdiff4
|
|
, certifi
|
|
, colorama
|
|
, cymem
|
|
, cython
|
|
, jellyfish
|
|
, jinja2
|
|
, kivy
|
|
, platformdirs
|
|
, pyyaml
|
|
, schema
|
|
, websockets
|
|
|
|
, enabledWorlds ? [ "generic" "factorio" ]
|
|
|
|
# factorio
|
|
, factorio-rcon-py
|
|
|
|
, withWebHostLib ? true
|
|
, flask
|
|
, pony
|
|
, waitress
|
|
, flask-caching
|
|
, flask-compress
|
|
, flask-limiter
|
|
, bokeh
|
|
, markupsafe
|
|
}:
|
|
|
|
let
|
|
worldEnabled = worldName: lib.any (x: x == worldName) enabledWorlds;
|
|
in
|
|
buildPythonApplication rec {
|
|
pname = "archipelago";
|
|
version = "0.4.3";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "ArchipelagoMW";
|
|
repo = "Archipelago";
|
|
rev = version;
|
|
sha256 = "sha256:05ryqvvyafdgabamn60qbksazv1j9as0hkd3rczyciji3hafx9i5";
|
|
};
|
|
|
|
propagatedBuildInputs = [
|
|
bsdiff4
|
|
certifi
|
|
colorama
|
|
cymem
|
|
cython
|
|
jellyfish
|
|
jinja2
|
|
kivy
|
|
platformdirs
|
|
pyyaml
|
|
schema
|
|
websockets
|
|
] ++ (lib.optionals (worldEnabled "factorio") [
|
|
factorio-rcon-py
|
|
]) ++ (lib.optionals withWebHostLib [
|
|
flask
|
|
pony
|
|
waitress
|
|
flask-caching
|
|
flask-compress
|
|
flask-limiter
|
|
bokeh
|
|
markupsafe
|
|
]);
|
|
|
|
format = "other";
|
|
postPatch = ''
|
|
# Disable ModuleUpdate; we're effectively frozen.
|
|
sed -i 's,^update_ran = .*,update_ran = True,' ModuleUpdate.py
|
|
'';
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
install -d worlds_disabled
|
|
for f in worlds/*; do
|
|
test -d $f || continue
|
|
worldName="$(basename $f)"
|
|
[[ " ''${enabledWorlds[@]} " =~ " ''${worldName} " ]] && continue
|
|
echo "Disabling $worldName - not explicitly enabled" >&2
|
|
mv worlds/$worldName worlds_disabled/$worldName
|
|
done
|
|
|
|
runHook postBuild
|
|
'';
|
|
inherit enabledWorlds;
|
|
__structuredAttrs = true;
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
export INSTALLDIR=$out/${python.sitePackages}/archipelago
|
|
install -d $INSTALLDIR
|
|
cp -R ./ -t $INSTALLDIR
|
|
|
|
mkdir $out/bin
|
|
|
|
makeEntrypoint() {
|
|
local name="$1"
|
|
local module="$2"
|
|
|
|
cat <<EOF >$out/bin/$1
|
|
#!/bin/sh
|
|
export PYTHONPATH=$PYTHONPATH:$out/${python.sitePackages}:$INSTALLDIR
|
|
exec ${python}/bin/python -m "$2" "\$@"
|
|
EOF
|
|
chmod +x $out/bin/$1
|
|
}
|
|
|
|
${lib.optionalString (worldEnabled "factorio") "makeEntrypoint archipelago-factorio archipelago.FactorioClient"}
|
|
makeEntrypoint archipelago-generate archipelago.Generate
|
|
makeEntrypoint archipelago-multiserver archipelago.MultiServer
|
|
makeEntrypoint archipelago-webhost archipelago.WebHost
|
|
makeEntrypoint archipelago-launcher archipelago.Launcher
|
|
|
|
install -d $INSTALLDIR/Players
|
|
install -d $INSTALLDIR/data/sprites
|
|
echo '{}' > $INSTALLDIR/manifest.json
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
passthru = {
|
|
inherit factorio-rcon-py;
|
|
};
|
|
}
|