add helper for srcds with sourcemod

This commit is contained in:
Robin Appelman 2026-07-09 18:17:23 +02:00
commit b6860cbb15
6 changed files with 43 additions and 18 deletions

View file

@ -39,7 +39,7 @@
}; };
perSystem = pkgs: { perSystem = pkgs: {
sourcemods = pkgs.lib.mapAttrs (name: sdk: pkgs.sourcemod.override {sdks = {${name} = sdk;};}) pkgs.hl2sdk; sourcemods = pkgs.lib.mapAttrs (name: sdk: pkgs.sourcemod-builder {${name} = sdk;}) pkgs.hl2sdk;
metamods = pkgs.lib.mapAttrs (name: sdk: pkgs.metamod-source-builder {${name} = sdk;}) pkgs.hl2sdk; metamods = pkgs.lib.mapAttrs (name: sdk: pkgs.metamod-source-builder {${name} = sdk;}) pkgs.hl2sdk;
hl2sdk = pkgs.hl2sdk; hl2sdk = pkgs.hl2sdk;
steam-depots = pkgs.steam-depots; steam-depots = pkgs.steam-depots;
@ -58,8 +58,17 @@
] ]
// { // {
test = pkgs: test = pkgs:
pkgs.srcds-tf2.withConfig { (pkgs.srcds-tf2.withConfig
hostname = "Spire Server"; {
hostname = "Spire Server";
}).withSourcemod {};
testScript = pkgs:
pkgs.buildSourcePawnScript {
name = "test";
src = pkgs.fetchurl {
url = "https://codeberg.org/spire/nocheats/raw/commit/5e0e21c241fdf8907d83d9bcf3cce37711b83d14/plugin/nocheats.sp";
sha256 = "sha256-Z3RJhuc9c8YQTo9gnLTBrqL4JpADZgDttrJVyE/MWdM=";
};
}; };
}; };

View file

@ -4,8 +4,7 @@
nix-update-script, nix-update-script,
lib, lib,
}: let }: let
inherit (builtins) mapAttrs; inherit (lib) importJSON mapAttrs;
inherit (lib) optionals importJSON;
revisions = importJSON ./hl2sdks.json; revisions = importJSON ./hl2sdks.json;
fetchRev = { fetchRev = {
rev, rev,

View file

@ -6,7 +6,8 @@ final: prev: {
ambuild = final.python3Packages.callPackage ./ambuild.nix {}; ambuild = final.python3Packages.callPackage ./ambuild.nix {};
metamod-source = final.callPackage ./metamod-source.nix {} {}; metamod-source = final.callPackage ./metamod-source.nix {} {};
metamod-source-builder = final.callPackage ./metamod-source.nix {}; metamod-source-builder = final.callPackage ./metamod-source.nix {};
sourcemod = final.callPackage ./sourcemod.nix {}; sourcemod = final.callPackage ./sourcemod.nix {} {};
sourcemod-builder = final.callPackage ./sourcemod.nix {};
sourcepawn = final.callPackage ./sourcepawn.nix {}; sourcepawn = final.callPackage ./sourcepawn.nix {};
sourcemod-includes = final.callPackage ./includes/sourcemod-includes.nix {}; sourcemod-includes = final.callPackage ./includes/sourcemod-includes.nix {};
buildSourcePawnScript = final.callPackage ./build-sourcepawn-script.nix {}; buildSourcePawnScript = final.callPackage ./build-sourcepawn-script.nix {};

View file

@ -8,8 +8,7 @@
writeShellScriptBin, writeShellScriptBin,
zlib, zlib,
writeScript, writeScript,
sdks ? {}, }: sdks: let
}: let
inherit (builtins) concatStringsSep attrNames attrValues; inherit (builtins) concatStringsSep attrNames attrValues;
inherit (lib) optionals; inherit (lib) optionals;
combinedSdks = symlinkJoin { combinedSdks = symlinkJoin {

View file

@ -11,8 +11,13 @@
steamworks-sdk-redist, steamworks-sdk-redist,
system, system,
callPackage, callPackage,
srcds-tf2,
depots, depots,
sourcemod-builder,
metamod-source-builder,
gamedir,
hl2sdk,
sdk,
writeTextDir,
}: let }: let
inherit (lib) importJSON map toString elem last replaceStrings naturalSort filter any; inherit (lib) importJSON map toString elem last replaceStrings naturalSort filter any;
depotInputs = importJSON ./depots.json; depotInputs = importJSON ./depots.json;
@ -76,28 +81,36 @@
}; };
in in
final; final;
makeWithSourcemod = base: config: let makeWithSourcemod = base: {}: let
configFile = callPackage ./cfg.nix { sdks = {
name = "server.cfg"; ${sdk} = hl2sdk.${sdk};
cfg = config;
}; };
metaModSdk = metamod-source-builder sdks;
sourceModSdk = sourcemod-builder sdks;
final = symlinkJoin { final = symlinkJoin {
name = "srcds-tf2-src"; name = "srcds-tf2-src";
paths = [base configFile]; paths = [base metaModSdk sourceModSdk];
passthru = makeWiths final; passthru = makeWiths final;
postBuild = ''
mv $out/share/cfg/* $out/tf/cfg/
mv $out/share/addons $out/tf/addons
rm -r $out/include $out/share
'';
}; };
in in
final; final;
makeWiths = base: { makeWiths = base: {
withConfig = makeWithConfig base; withConfig = makeWithConfig base;
withSourcemod = makeWithSourcemod base;
}; };
mainProgram = mainProgram =
if system == "x86_64-linux" if system == "x86_64-linux"
then "srcds_run_64" then "srcds_run_64"
else "srcds_run"; else "srcds_run";
in
stdenvNoCC.mkDerivation (finalAttrs: { final = stdenvNoCC.mkDerivation (finalAttrs: {
pname = "srcds-tf2"; pname = "srcds-tf2";
version = timeToVersion time; version = timeToVersion time;
inherit src; inherit src;
@ -129,7 +142,7 @@ in
runHook postInstall runHook postInstall
''; '';
passthru = makeWiths srcds-tf2; passthru = makeWiths final;
meta = with lib; { meta = with lib; {
inherit mainProgram; inherit mainProgram;
@ -142,4 +155,6 @@ in
license = licenses.unfree; license = licenses.unfree;
platforms = ["x86_64-linux" "i686-linux"]; platforms = ["x86_64-linux" "i686-linux"];
}; };
}) });
in
final

View file

@ -13,6 +13,8 @@ in {
depot_id = 232250; depot_id = 232250;
} }
]; ];
gamedir = "tf";
sdk = "tf2";
}; };
steam-depots = listToAttrs (map (depot: { steam-depots = listToAttrs (map (depot: {
name = "steam-depot-${toString depot.app_id}-${toString depot.depot_id}"; name = "steam-depot-${toString depot.app_id}-${toString depot.depot_id}";