push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
{
lib,
stdenv,
fetchzip,
requireFile,
}:
let
version = "1.32c";
in
stdenv.mkDerivation (finalAttrs: {
pname = "quake3arenadata";
inherit version;
src = requireFile rec {
name = "pak0.pk3";
hash = "sha256-fOizkQYgzVCgnk8RAPQm6MYYD2iJXVifgOa9la9UvK4=";
message = ''
Quake 3 Arena requires the original ${name} file, from any legal source of the game.
This could be an old CD-ROM you have lying around or you can try to buy the game.
To my knowledge the Steam Quake-Collection-Package, is about the last legal way to get it.
Please note, there are plenty of versions of this file online like:
- https://github.com/nrempel/q3-server/raw/master/baseq3/pak0.pk3
- https://archive.org/details/quake-3-arena
However, none of these have the blessing of ID-Software and thus do not qualify.
Once you download a version or checked your old CD-ROM, locate the ${name} file
inside the baseq3 folder and then run the following command on it:
nix-prefetch-url file:///path/to/baseq3/${name}
'';
};
buildCommand = ''
mkdir -p $out/baseq3
echo 'wwwwwwwwwwwwwwww' > $out/baseq3/q3key
ln -s $src $out/baseq3/pak0.pk3
'';
preferLocalBuild = true;
meta = {
description = "Quake 3 Arena content";
longDescription = ''
Quake III Arena and it's demo don't offer current wide screen resolutions in the menu.
To switch to such a resolution, you will have to enter something like this in the quake console (invoke with ~ by default)
r_mode -1; r_customwidth 2560; r_customheight 1440; r_fullscreen 1; vid_restart
Or call the quake commandline with these parameters
$ quake3 +set r_mode -1 +set r_customwidth 2560 +set r_customheight 1440 +set r_fullscreen 1
'';
homepage = "https://www.idsoftware.com/";
license = lib.licenses.unfreeRedistributable;
platforms = lib.platforms.all;
maintainers = [ ];
};
})

View File

@@ -0,0 +1,46 @@
{
lib,
stdenv,
fetchurl,
}:
let
version = "1.11-6";
in
stdenv.mkDerivation {
pname = "quake3-demodata";
inherit version;
src = fetchurl {
url = "https://ftp.gwdg.de/pub/misc/ftp.idsoftware.com/idstuff/quake3/linux/linuxq3ademo-${version}.x86.gz.sh";
sha256 = "1v54a1hx1bczk9hgn9qhx8vixsy7xn7wj2pylhfjsybfkgvf7pk4";
};
buildCommand = ''
tail -n +165 $src | tar xfz -
mkdir -p $out/baseq3
cp demoq3/*.pk3 $out/baseq3
'';
preferLocalBuild = true;
meta = with lib; {
description = "Demo of Quake 3 Arena, a classic first-person shooter";
longDescription = ''
Quake III Arena and it's demo don't offer current wide screen resolutions in the menu.
To switch to such a resolution, you will have to enter something like this in the quake console (invoke with ~ by default)
r_mode -1; r_customwidth 2560; r_customheight 1440; r_fullscreen 1; vid_restart
Or call the quake commandline with these parameters
$ quake3 +set r_mode -1 +set r_customwidth 2560 +set r_customheight 1440 +set r_fullscreen 1
'';
homepage = "https://www.idsoftware.com/";
license = licenses.unfreeRedistributable;
platforms = platforms.all;
maintainers = [ ];
};
}

View File

@@ -0,0 +1,74 @@
{
stdenv,
lib,
fetchzip,
fetchurl,
fetchFromGitHub,
libarchive,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "quake3hires";
version = "unstable-2020-01-20"; # Unknown version, used the date of web.archive.org capture.
nativeBuildInputs = [
libarchive
];
src = fetchzip {
url = "https://web.archive.org/web/20200120024216/http://ioquake3.org/files/xcsv_hires.zip";
sha256 = "09vhrray8mh1ic2qgcwv0zlmsnz789y32dkkvrz1vdki4yqkf717";
stripRoot = false;
};
# https://www.moddb.com/mods/high-quality-quake
# TODO check if that file needs renaming to something that starts with z_* so it actually overrides anything in pak0.pk3
extra-pack-resolution = fetchurl {
url = "https://web.archive.org/web/20250310093216/https://fmt3.dl.dbolical.com/dl/2018/11/06/q3a-hqq-v37.zip?st=0XzNnNvOYWrJAi_6AB3mKw==&e=1741602736";
hash = "sha256-0nAXkrf4ahlct75TgO18PjuT9IkH8fpDhtTflJfPpPM=";
};
# https://www.moddb.com/mods/cz45modbundle/addons/cz45-q3a-weapon-model-remake-v10
# https://www.moddb.com/downloads/mirror/255463/130/9de70b5dc7ebb1baa44acf91458b04f9/
# this is only part of the mod, only the weapons skins
# url = "https://github.com/diegoulloao/ioquake3-mac-install/raw/master/extras/hd-weapons.pk3";
hd-weapons = fetchurl {
name = "czq3hdweaprem_v10.zip";
url = "https://web.archive.org/web/20250310101737/https://fmt1.dl.dbolical.com/dl/2023/08/13/czq3hdweaprem_v10.zip?st=XBoRCpVmvTYtc60xxi36VQ==&e=1741605457";
hash = "sha256-pL7MsEFsKJV+a+z45Ns16SPdQB3i2D6T3x7tBqWtm1s=";
};
# According to the @diegoulloao (see https://github.com/diegoulloao/ioquake3-mac-install/issues/23#issuecomment-2817031996)
# quake3-live-sounds.pk3 is likely a custom repack from https://www.moddb.com/addons/quake-live-announcers-pack
# zpack-weapons.pk3 is an amalgamation of multiple mods, where he can't recall which ones he used exactly.
# It still makes him the authorative source for these file.
ioquake3_mac = fetchFromGitHub {
owner = "diegoulloao";
repo = "ioquake3-mac-install";
rev = "3a767ff0131742ec517fd5f13ddca16dee91927d";
hash = "sha256-uY3pybCnQ7lZatP3s9AiT779/4xj8N3R4qx8V6991aM=";
};
buildCommand = ''
mkdir -p $out/baseq3
install -Dm444 $src/xcsv_bq3hi-res.pk3 $out/baseq3/xcsv_bq3hi-res.pk3
install -Dm444 ${finalAttrs.extra-pack-resolution} $out/baseq3/pak9hqq37test20181106.pk3
bsdunzip ${finalAttrs.hd-weapons}
install -Dm444 zzczhdwr1.pk3 $out/baseq3/zzczhdwr1.pk3
# https://github.com/diegoulloao/ioquake3-mac-install takes only the first file, following his lead for now
# install -Dm444 zzczhdwr2.pk3 $out/baseq3/zzczhdwr2.pk3
# install -Dm444 zzczhdwr3.pk3 $out/baseq3/zzczhdwr3.pk3
install -Dm444 ${finalAttrs.ioquake3_mac}/extras/quake3-live-sounds.pk3 $out/baseq3/quake3-live-sounds.pk3
install -Dm444 ${finalAttrs.ioquake3_mac}/extras/zpack-weapons.pk3 $out/baseq3/zpack-weapons.pk3
'';
preferLocalBuild = true;
meta = with lib; {
description = "Quake 3 high-resolution textures";
license = licenses.cc0;
platforms = platforms.all;
maintainers = with maintainers; [ rvolosatovs ];
};
})

View File

@@ -0,0 +1,34 @@
{
lib,
stdenv,
fetchurl,
}:
let
version = "1.32b-3";
in
stdenv.mkDerivation {
pname = "quake3-pointrelease";
inherit version;
src = fetchurl {
url = "https://ftp.gwdg.de/pub/misc/ftp.idsoftware.com/idstuff/quake3/linux/linuxq3apoint-${version}.x86.run";
sha256 = "11piyksfqyxwl9mpgbc71w9sacsh4d3cdsgia0cy0dbbap2k4qf3";
};
buildCommand = ''
sh $src --tar xf
mkdir -p $out/baseq3
cp baseq3/*.pk3 $out/baseq3
'';
preferLocalBuild = true;
meta = with lib; {
description = "Quake 3 Arena point release";
license = licenses.unfreeRedistributable;
platforms = platforms.all;
maintainers = [ ];
};
}

View File

@@ -0,0 +1,46 @@
callPackage: rec {
# main entry point to create a runnable quake3
quake3wrapper = callPackage ./wrapper { };
# data files
quake3arenadata = callPackage ./content/arena.nix { };
quake3demodata = callPackage ./content/demo.nix { };
quake3pointrelease = callPackage ./content/pointrelease.nix { };
quake3hires = callPackage ./content/hires.nix { };
# runnable quakes with different configurations / mods
quake3arena = quake3wrapper {
pname = "quake3";
paks = [
quake3arenadata
quake3pointrelease
];
};
quake3arena-hires = quake3wrapper {
pname = "quake3";
paks = [
quake3arenadata
quake3pointrelease
quake3hires
];
};
quake3demo = quake3wrapper {
pname = "quake3-demo";
paks = [
quake3demodata
quake3pointrelease
];
};
quake3demo-hires = quake3wrapper {
pname = "quake3-demo";
paks = [
quake3demodata
quake3pointrelease
quake3hires
];
};
}

View File

@@ -0,0 +1,77 @@
{
stdenv,
buildEnv,
lib,
libGL,
ioquake3,
makeWrapper,
}:
{
paks,
pname ? (lib.head paks).pname,
version ? (lib.head paks).version,
description ? "",
}:
let
libPath = lib.makeLibraryPath [
libGL
stdenv.cc.cc
];
env = buildEnv {
name = "quake3-env";
paths = [ ioquake3 ] ++ paks;
};
in
stdenv.mkDerivation {
pname = "${pname}-${ioquake3.name}";
inherit version;
nativeBuildInputs = [ makeWrapper ];
buildCommand =
let
setBasepath = "+set fs_basepath ${env}";
in
lib.optionalString stdenv.hostPlatform.isLinux ''
mkdir -p $out/bin
# We add Mesa to the end of $LD_LIBRARY_PATH to provide fallback
# software rendering. GCC is needed so that libgcc_s.so can be found
# when Mesa is used.
makeWrapper ${env}/bin/ioquake3 $out/bin/${pname} \
--suffix-each LD_LIBRARY_PATH ':' "${libPath}" \
--add-flags "${setBasepath} +set r_allowSoftwareGL 1"
makeWrapper ${env}/bin/ioq3ded $out/bin/${pname}-server \
--add-flags "${setBasepath}"
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p $out/Applications $out/bin
makeWrapper ${env}/bin/ioquake3 $out/bin/${pname} \
--add-flags "${setBasepath}"
makeWrapper ${env}/bin/ioq3ded $out/bin/${pname}-server \
--add-flags "${setBasepath}"
cp -RL ${env}/Applications/ioquake3.app/ $out/Applications/${pname}.app
chmod -R +w $out/Applications/
wrapProgram $out/Applications/${pname}.app/Contents/MacOS/ioquake3 \
--add-flags "${setBasepath}"
wrapProgram $out/Applications/${pname}.app/Contents/MacOS/ioq3ded \
--add-flags "${setBasepath}"
'';
meta = {
mainProgram = "${pname}";
inherit ((lib.head paks).meta)
description
longDescription
homepage
license
;
inherit (ioquake3.meta) platforms;
};
}