diff --git a/pkgs/by-name/ps/ps2patchelf/deps.json b/pkgs/by-name/ps/ps2patchelf/deps.json
new file mode 100644
index 000000000000..fe51488c7066
--- /dev/null
+++ b/pkgs/by-name/ps/ps2patchelf/deps.json
@@ -0,0 +1 @@
+[]
diff --git a/pkgs/by-name/ps/ps2patchelf/package.nix b/pkgs/by-name/ps/ps2patchelf/package.nix
new file mode 100644
index 000000000000..409592dc5353
--- /dev/null
+++ b/pkgs/by-name/ps/ps2patchelf/package.nix
@@ -0,0 +1,40 @@
+{
+ fetchFromGitHub,
+ buildDotnetModule,
+ dotnetCorePackages,
+ lib,
+}:
+
+buildDotnetModule rec {
+ version = "1.0.0";
+ pname = "PS2PatchElf";
+
+ src = fetchFromGitHub {
+ owner = "CaptainSwag101";
+ repo = "PS2PatchElf";
+ tag = "v${version}";
+ hash = "sha256-iQL3tT71UOEFIYBdf9BNLUM4++Fm9qEhr77NkMCZdrU=";
+ };
+
+ patches = [
+ ./patches/target_net8.0.patch
+ ./patches/fix_arg_check.patch
+ ];
+
+ dotnet-sdk = dotnetCorePackages.sdk_8_0;
+ dotnet-runtime = dotnetCorePackages.runtime_8_0;
+
+ dotnetFlags = [ "-p:TargetFramework=net8.0" ];
+
+ nugetDeps = ./deps.json;
+
+ projectFile = "PS2PatchElf/PS2PatchElf.csproj";
+
+ meta = {
+ homepage = "https://github.com/CaptainSwag101/PS2PatchElf/";
+ description = "Very basic tool for converting PCSX2 .pnach cheats to game executable patches";
+ maintainers = [ lib.maintainers.gigahawk ];
+ mainProgram = "PS2PatchElf";
+ license = lib.licenses.mit;
+ };
+}
diff --git a/pkgs/by-name/ps/ps2patchelf/patches/fix_arg_check.patch b/pkgs/by-name/ps/ps2patchelf/patches/fix_arg_check.patch
new file mode 100644
index 000000000000..5e846eabe43c
--- /dev/null
+++ b/pkgs/by-name/ps/ps2patchelf/patches/fix_arg_check.patch
@@ -0,0 +1,14 @@
+diff --git a/PS2PatchElf/Program.cs b/PS2PatchElf/Program.cs
+index 8c0f1b4..78f4042 100644
+--- a/PS2PatchElf/Program.cs
++++ b/PS2PatchElf/Program.cs
+@@ -9,7 +9,7 @@ namespace PS2PatchElf
+ {
+ static void Main(string[] args)
+ {
+- if (args.Length is not 2 or 3)
++ if (args.Length != 2 && args.Length != 3)
+ {
+ Console.WriteLine("Improper number of arguments specified.\nPlease pass an input ELF/SLUS, a PNACH file, and optionally the patched ELF/SLUS's output path, in that order!");
+ return;
+
diff --git a/pkgs/by-name/ps/ps2patchelf/patches/target_net8.0.patch b/pkgs/by-name/ps/ps2patchelf/patches/target_net8.0.patch
new file mode 100644
index 000000000000..420dfe7502c0
--- /dev/null
+++ b/pkgs/by-name/ps/ps2patchelf/patches/target_net8.0.patch
@@ -0,0 +1,26 @@
+diff --git a/PS2PatchElf/PS2PatchElf.csproj b/PS2PatchElf/PS2PatchElf.csproj
+index 3bfd30f..bb0c835 100644
+--- a/PS2PatchElf/PS2PatchElf.csproj
++++ b/PS2PatchElf/PS2PatchElf.csproj
+@@ -2,7 +2,7 @@
+
+
+ Exe
+- net6.0
++ net8.0
+ enable
+
+
+diff --git a/PS2PatchLib/PS2PatchLib.csproj b/PS2PatchLib/PS2PatchLib.csproj
+index 4de8048..8d2b232 100644
+--- a/PS2PatchLib/PS2PatchLib.csproj
++++ b/PS2PatchLib/PS2PatchLib.csproj
+@@ -1,7 +1,7 @@
+
+
+
+- net6.0
++ net8.0
+ enable
+
+