84 lines
2.3 KiB
Nix
84 lines
2.3 KiB
Nix
{
|
|
lib,
|
|
callPackage,
|
|
writeShellApplication,
|
|
}:
|
|
let
|
|
assets = callPackage ./assets.nix { };
|
|
quakec = callPackage ./quakec.nix { };
|
|
fteqw = callPackage ./fteqw.nix { };
|
|
|
|
# We use the youngest version of all of the dependencies as the version number.
|
|
# This is similar to what upstream uses, except ours is a bit more accurate
|
|
# since we don't rely on a CI to run at an arbitrary time.
|
|
dateString =
|
|
lib.pipe
|
|
[
|
|
assets
|
|
fteqw
|
|
quakec
|
|
]
|
|
[
|
|
# Find the youngest (most recently updated) version
|
|
(lib.foldl' (acc: p: if lib.versionOlder acc p.version then p.version else acc) "")
|
|
(lib.splitString "-")
|
|
(lib.sublist 2 6) # drop the first two segments (0 and unstable) and only keep the date
|
|
lib.concatStrings
|
|
];
|
|
|
|
version = "2.0.0-indev+${dateString}";
|
|
in
|
|
writeShellApplication {
|
|
name = "nzportable";
|
|
|
|
text = ''
|
|
runDir=''${XDG_DATA_HOME:-$HOME/.local/share}/nzportable
|
|
data=${assets.pc}
|
|
|
|
relinkGameFiles() {
|
|
mkdir -p "$runDir"/nzp
|
|
|
|
# Remove existing links
|
|
find "$runDir" -type l -exec rm {} +
|
|
|
|
# Link game files
|
|
ln -s $data/default.fmf "$runDir"
|
|
ln -st "$runDir"/nzp $data/nzp/* ${quakec.fte}/*
|
|
|
|
# Write current version
|
|
echo "${version}" > "$runDir"/nzp/version.txt
|
|
}
|
|
|
|
if [[ ! -d $runDir ]]; then
|
|
echo "Game directory $runDir not found. Assuming first launch"
|
|
echo "Linking game files"
|
|
relinkGameFiles
|
|
else
|
|
currentVersion=$(<"$runDir"/nzp/version.txt)
|
|
if [[ "${version}" != "$currentVersion" ]]; then
|
|
echo "Version mismatch! (saved version $currentVersion != current version ${version})"
|
|
echo "Relinking game files"
|
|
relinkGameFiles
|
|
fi
|
|
fi
|
|
|
|
exec ${lib.getExe fteqw} -basedir "$runDir" "$@"
|
|
'';
|
|
|
|
derivationArgs = {
|
|
inherit version;
|
|
passthru = {
|
|
updateScript = callPackage ./update.nix { };
|
|
inherit assets quakec fteqw;
|
|
};
|
|
};
|
|
|
|
meta = {
|
|
inherit (fteqw.meta) platforms;
|
|
description = "Call of Duty: Zombies demake, powered by various Quake sourceports (PC version)";
|
|
homepage = "https://docs.nzp.gay";
|
|
license = lib.licenses.gpl2Plus;
|
|
maintainers = with lib.maintainers; [ pluiedev ];
|
|
mainProgram = "nzportable";
|
|
};
|
|
}
|