diff --git a/flake.nix b/flake.nix index e07e0b2..a4ebf66 100644 --- a/flake.nix +++ b/flake.nix @@ -72,6 +72,7 @@ "sourcemod-plugin-banned" "sourcemod-plugin-who" "sourcemod-plugin-webrcon" + "sourcemod-plugin-afk" ] // { test = pkgs: diff --git a/nix/sourcemod/plugins/afk.nix b/nix/sourcemod/plugins/afk.nix new file mode 100644 index 0000000..8a2bd91 --- /dev/null +++ b/nix/sourcemod/plugins/afk.nix @@ -0,0 +1,5 @@ +{mkF2Plugin}: +mkF2Plugin (finalAttrs: { + pname = "sourcemod-plugin-afk"; + name = "afk"; +}) diff --git a/nix/sourcemod/plugins/builder/f2-plugin.nix b/nix/sourcemod/plugins/builder/f2-plugin.nix new file mode 100644 index 0000000..da07415 --- /dev/null +++ b/nix/sourcemod/plugins/builder/f2-plugin.nix @@ -0,0 +1,55 @@ +{ + stdenvNoCC, + fetchFromGitHub, + nix-update-script, + lib, + mkSourcemodPlugin, +}: +lib.extendMkDerivation { + constructDrv = mkSourcemodPlugin; + excludeDrvArgNames = ["name" "includes"]; + extendDrvArgs = finalAttrs: { + name, + includes ? [], + ... + }: let + f2Includes = stdenvNoCC.mkDerivation { + pname = "sourcemod-f2-includes"; + inherit (finalAttrs) version src; + + installPhase = '' + mkdir $out + cp -r includes $out/include + ''; + }; + in { + pname = "sourcemod-plugin-${name}"; + version = "20260702-1782977488895-unstable-2026-07-02"; + src = fetchFromGitHub { + owner = "F2"; + repo = "F2s-sourcemod-plugins"; + rev = "2be8d34329603569a2848f66b68f3ca323c9d937"; + hash = "sha256-XN/LBD3P3tWTI9xwO0+a6+dRH4kyDUTNhGWs2FCCHd0="; + }; + + plugins = ["${name}/${name}.sp"]; + includes = includes ++ [f2Includes]; + + postInstall = '' + if [ -f "${name}.inc" ]; then + mkdir -p $out/addons/sourcemod/scripting/include/ + mv "${name}.inc" $out/addons/sourcemod/scripting/include/ + fi + ''; + + passthru = { + updateScript = nix-update-script { + extraArgs = [ + "--flake" + "--version=branch" + "--override-filename=nix/sourcemod/plugins/builder/f2-plugin.nix" + ]; + }; + }; + }; +} diff --git a/nix/sourcemod/plugins/builder/plugin.nix b/nix/sourcemod/plugins/builder/plugin.nix new file mode 100644 index 0000000..7a46cfa --- /dev/null +++ b/nix/sourcemod/plugins/builder/plugin.nix @@ -0,0 +1,44 @@ +{ + stdenvNoCC, + lib, + sourcepawn, + sourcemod-includes, +}: +lib.extendMkDerivation { + constructDrv = stdenvNoCC.mkDerivation; + excludeDrvArgNames = ["includes" "plugin"]; + extendDrvArgs = finalAttrs: { + includes ? [], + plugins, + src, + ... + }: let + inherit (lib) concatStringsSep map; + spcomp = sourcepawn.buildEnv ([ + sourcemod-includes + finalAttrs.src + ] + ++ includes); + spCompLines = concatStringsSep "\n" (map (plugin: "spcomp ${plugin}") plugins); + in { + nativeBuildInputs = [spcomp]; + + buildPhase = '' + runHook preBuild + + ${spCompLines} + + runHook preBuild + + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/addons/sourcemod/plugins/ + mv *.smx $out/addons/sourcemod/plugins/ + + runHook postInstall + ''; + }; +} diff --git a/nix/sourcemod/plugins/builder/spire-plugin.nix b/nix/sourcemod/plugins/builder/spire-plugin.nix index 4f10851..fb8f99a 100644 --- a/nix/sourcemod/plugins/builder/spire-plugin.nix +++ b/nix/sourcemod/plugins/builder/spire-plugin.nix @@ -1,24 +1,20 @@ { fetchFromGitea, - stdenvNoCC, nix-update-script, lib, - sourcepawn, - sourcemod-includes, + mkSourcemodPlugin, }: lib.extendMkDerivation { - constructDrv = stdenvNoCC.mkDerivation; - excludeDrvArgNames = ["name" "version" "rev" "hash" "includes"]; + constructDrv = mkSourcemodPlugin; + excludeDrvArgNames = ["name" "version" "rev" "hash"]; extendDrvArgs = finalAttrs: { name, version, rev, hash, - includes ? [sourcemod-includes], repo ? name, - }: let - spcomp = sourcepawn.buildEnv ([sourcemod-includes] ++ includes); - in { + ... + }: { pname = "sourcemod-plugin-${name}"; inherit version; src = fetchFromGitea { @@ -27,25 +23,7 @@ lib.extendMkDerivation { inherit rev hash repo; }; - nativeBuildInputs = [spcomp]; - - buildPhase = '' - runHook preBuild - - spcomp plugin/*.sp - - runHook preBuild - - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/addons/sourcemod/plugins/ - mv *.smx $out/addons/sourcemod/plugins/ - - runHook postInstall - ''; + plugins = ["plugin/*.sp"]; passthru = { updateScript = nix-update-script { diff --git a/nix/sourcemod/plugins/overlay.nix b/nix/sourcemod/plugins/overlay.nix index 89f4087..1e59175 100644 --- a/nix/sourcemod/plugins/overlay.nix +++ b/nix/sourcemod/plugins/overlay.nix @@ -1,5 +1,7 @@ final: prev: { + mkSourcemodPlugin = final.callPackage ./builder/plugin.nix {}; mkSpirePlugin = final.callPackage ./builder/spire-plugin.nix {}; + mkF2Plugin = final.callPackage ./builder/f2-plugin.nix {}; sourcemod-addon-curl = final.callPackage ./curl.nix {}; sourcemod-addon-steamworks = final.callPackage ./steamworks.nix {}; sourcemod-addon-socket = final.callPackage ./socket.nix {}; @@ -16,4 +18,5 @@ final: prev: { sourcemod-plugin-banned = final.callPackage ./banned.nix {}; sourcemod-plugin-who = final.callPackage ./who.nix {}; sourcemod-plugin-webrcon = final.callPackage ./webrcon.nix {}; + sourcemod-plugin-afk = final.callPackage ./afk.nix {}; } diff --git a/nix/sourcemod/plugins/progressive-ruleset-timer.nix b/nix/sourcemod/plugins/progressive-ruleset-timer.nix index 61b4d2b..4b7661c 100644 --- a/nix/sourcemod/plugins/progressive-ruleset-timer.nix +++ b/nix/sourcemod/plugins/progressive-ruleset-timer.nix @@ -1,9 +1,9 @@ { fetchFromGitHub, - stdenvNoCC, nix-update-script, + mkSourcemodPlugin, }: -stdenvNoCC.mkDerivation (finalAttrs: { +mkSourcemodPlugin (finalAttrs: { pname = "sourcemod-plugin-progressive-ruleset-timer"; version = "0-unstable-2022-09-08"; src = fetchFromGitHub { @@ -13,15 +13,7 @@ stdenvNoCC.mkDerivation (finalAttrs: { hash = "sha256-OHPMVDLZOVZpBv/b0N90xTOut3gBJUxr5f0T0PPqlIE="; }; - installPhase = '' - runHook preInstall - - mkdir $out - ls -l - mv addons cfg $out/ - - runHook postInstall - ''; + plugins = ["addons/sourcemod/scripting/improved_match_timer.sp"]; passthru = { updateScript = nix-update-script { diff --git a/nix/sourcemod/plugins/soap-tf2dm.nix b/nix/sourcemod/plugins/soap-tf2dm.nix index b401eb0..70671db 100644 --- a/nix/sourcemod/plugins/soap-tf2dm.nix +++ b/nix/sourcemod/plugins/soap-tf2dm.nix @@ -1,9 +1,10 @@ { fetchzip, - stdenvNoCC, + mkSourcemodPlugin, nix-update-script, + sourcemod-include-library, }: -stdenvNoCC.mkDerivation (finalAttrs: { +mkSourcemodPlugin (finalAttrs: { pname = "sourcemod-plugin-soap-tf2dm"; version = "4.4.8"; src = fetchzip { @@ -12,14 +13,11 @@ stdenvNoCC.mkDerivation (finalAttrs: { stripRoot = false; }; - installPhase = '' - runHook preInstall - - mkdir $out - mv addons cfg $out/ - - runHook postInstall - ''; + includes = [sourcemod-include-library "${finalAttrs.src}/addons/sourcemod/scripting"]; + plugins = [ + "addons/sourcemod/scripting/soap_tf2dm.sp" + "addons/sourcemod/scripting/soap_tournament.sp" + ]; passthru = { updateScript = nix-update-script {