diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 6ad5ce64a98e..35654b0fbe46 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -1418,7 +1418,7 @@ in
sharkey = runTest ./web-apps/sharkey.nix;
shattered-pixel-dungeon = runTest ./shattered-pixel-dungeon.nix;
shiori = runTest ./shiori.nix;
- shoko = runTest ./shoko.nix;
+ shoko = import ./shoko.nix { inherit runTest; };
signal-desktop = runTest ./signal-desktop.nix;
silverbullet = runTest ./silverbullet.nix;
simple = runTest ./simple.nix;
diff --git a/nixos/tests/shoko.nix b/nixos/tests/shoko.nix
index 2d464d45d8ab..dfddc19b83c5 100644
--- a/nixos/tests/shoko.nix
+++ b/nixos/tests/shoko.nix
@@ -1,19 +1,49 @@
-{ lib, ... }:
+{ runTest }:
+
{
- name = "Shoko";
+ default = runTest (
+ { lib, ... }:
- nodes.machine = {
- services.shoko.enable = true;
- };
+ {
+ name = "Shoko";
- testScript = ''
- machine.wait_for_unit("shoko.service")
- machine.wait_for_open_port(8111)
- machine.succeed("curl --fail http://localhost:8111")
- '';
+ nodes.machine = {
+ services.shoko.enable = true;
+ };
- meta.maintainers = with lib.maintainers; [
- diniamo
- nanoyaki
- ];
+ testScript = ''
+ machine.wait_for_unit("shoko.service")
+ machine.wait_for_open_port(8111)
+ machine.succeed("curl --fail http://localhost:8111")
+ '';
+
+ meta.maintainers = with lib.maintainers; [
+ diniamo
+ nanoyaki
+ ];
+ }
+ );
+
+ withPlugins = runTest (
+ { pkgs, lib, ... }:
+
+ {
+ name = "Shoko with plugins";
+
+ nodes.machine = {
+ services.shoko = {
+ enable = true;
+ plugins = [ pkgs.luarenamer ];
+ };
+ };
+
+ testScript = ''
+ machine.wait_for_unit("shoko.service")
+ machine.wait_for_open_port(8111)
+ machine.succeed("curl --fail http://localhost:8111")
+ '';
+
+ meta.maintainers = with lib.maintainers; [ nanoyaki ];
+ }
+ );
}
diff --git a/pkgs/by-name/lu/luarenamer/deps.json b/pkgs/by-name/lu/luarenamer/deps.json
new file mode 100644
index 000000000000..e2152a081e39
--- /dev/null
+++ b/pkgs/by-name/lu/luarenamer/deps.json
@@ -0,0 +1,32 @@
+[
+ {
+ "pname": "KeraLua",
+ "version": "1.4.5",
+ "hash": "sha256-O3ozcLw1IVc6ssc3SZfPIvp5s0+xLyLuTZw6qrjyEyE="
+ },
+ {
+ "pname": "Microsoft.Extensions.DependencyInjection",
+ "version": "8.0.0",
+ "hash": "sha256-+qIDR8hRzreCHNEDtUcPfVHQdurzWPo/mqviCH78+EQ="
+ },
+ {
+ "pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
+ "version": "8.0.0",
+ "hash": "sha256-75KzEGWjbRELczJpCiJub+ltNUMMbz5A/1KQU+5dgP8="
+ },
+ {
+ "pname": "Microsoft.Extensions.Logging.Abstractions",
+ "version": "8.0.0",
+ "hash": "sha256-Jmddjeg8U5S+iBTwRlVAVLeIHxc4yrrNgqVMOB7EjM4="
+ },
+ {
+ "pname": "NLua",
+ "version": "1.7.5",
+ "hash": "sha256-1s8cc1RqKnfwafhxpBhOdkr8ZteNjt5fBN2sfLy4e5k="
+ },
+ {
+ "pname": "Shoko.Plugin.Abstractions",
+ "version": "5.2.0",
+ "hash": "sha256-tNLOeum4rc30OEWRiH1zTzLk5+1MfSEOfvkON1MU/SY="
+ }
+]
diff --git a/pkgs/by-name/lu/luarenamer/nozip.patch b/pkgs/by-name/lu/luarenamer/nozip.patch
new file mode 100644
index 000000000000..4275043d6611
--- /dev/null
+++ b/pkgs/by-name/lu/luarenamer/nozip.patch
@@ -0,0 +1,35 @@
+diff --git a/LuaRenamer/LuaRenamer.csproj b/LuaRenamer/LuaRenamer.csproj
+index c4f0508..b9e001c 100644
+--- a/LuaRenamer/LuaRenamer.csproj
++++ b/LuaRenamer/LuaRenamer.csproj
+@@ -33,30 +33,4 @@
+
+
+
+-
+-
+-
+-
+-
+-
+- $([System.Text.RegularExpressions.Regex]::Match('$(GitInfo)', '\d+\.\d+\.\d+'))
+- $(GitInfo)
+-
+-
+-
+-
+-
+- $(PublishDir)ZipDir/
+- $(PublishDir)../$(ProjectName)_$([MSBuild]::ValueOrDefault("$(RuntimeIdentifier)","Portable"))_$(GitInfo).zip
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
diff --git a/pkgs/by-name/lu/luarenamer/package.nix b/pkgs/by-name/lu/luarenamer/package.nix
new file mode 100644
index 000000000000..a07b0d64f1fb
--- /dev/null
+++ b/pkgs/by-name/lu/luarenamer/package.nix
@@ -0,0 +1,49 @@
+# SPDX-FileCopyrightText: 2025-2026 Hana Kretzer
+#
+# SPDX-License-Identifier: MIT
+{
+ lib,
+ buildDotnetModule,
+ fetchFromGitHub,
+ dotnet-sdk_8,
+ dotnet-aspnetcore_8,
+ nix-update-script,
+}:
+
+buildDotnetModule (finalAttrs: {
+ pname = "luarenamer";
+ version = "5.10.1";
+
+ src = fetchFromGitHub {
+ owner = "Mik1ll";
+ repo = "LuaRenamer";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-ZN7o9q3APgc7vL+IRpk6Phd0Btpzyqdp53aoGp6sA8o=";
+ };
+
+ patches = [
+ ./nozip.patch
+ ];
+
+ dotnet-sdk = dotnet-sdk_8;
+ dotnet-runtime = dotnet-aspnetcore_8;
+
+ nugetDeps = ./deps.json;
+ projectFile = "LuaRenamer/LuaRenamer.csproj";
+
+ executables = [ ];
+
+ passthru.updateScript = nix-update-script { };
+
+ meta = {
+ homepage = "https://github.com/Mik1ll/LuaRenamer";
+ changelog = "https://github.com/Mik1ll/LuaRenamer/releases/tag/${finalAttrs.src.tag}";
+ description = "Plugin for Shoko that allows users to rename their collection using Lua";
+ license = [
+ lib.licenses.gpl3
+ lib.licenses.lgpl3
+ ];
+ maintainers = with lib.maintainers; [ nanoyaki ];
+ inherit (dotnet-sdk_8.meta) platforms;
+ };
+})
diff --git a/pkgs/by-name/sh/shoko-webui/package.nix b/pkgs/by-name/sh/shoko-webui/package.nix
index e429a3d59682..b537f3d6e6d3 100644
--- a/pkgs/by-name/sh/shoko-webui/package.nix
+++ b/pkgs/by-name/sh/shoko-webui/package.nix
@@ -11,13 +11,13 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "shoko-webui";
- version = "2.2.0";
+ version = "2.4.1";
src = fetchFromGitHub {
owner = "ShokoAnime";
repo = "Shoko-WebUI";
tag = "v${finalAttrs.version}";
- hash = "sha256-plXTAN3V0tcAe+uMs4XwYHO1UC9DCAxcMPVNKdFobcY=";
+ hash = "sha256-/frP6qI5xAmogb5a5AA83IJxgOhVUi6X0E4h3Qg5u6w=";
};
# Avoid requiring git as a build time dependency. It's used for version
@@ -28,7 +28,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
fetcherVersion = 3;
- hash = "sha256-4/Qbg+jUagPUiQPoc57drorbEkn1ShsPZynvct+HX7A=";
+ hash = "sha256-rTlem83dFptgvKUKUaHK8vi5B0FBehPFtkCUhOnUKd0=";
};
nativeBuildInputs = [
diff --git a/pkgs/by-name/sh/shoko/deps.json b/pkgs/by-name/sh/shoko/deps.json
index 95bc329bc12d..b6a073b86b27 100644
--- a/pkgs/by-name/sh/shoko/deps.json
+++ b/pkgs/by-name/sh/shoko/deps.json
@@ -46,13 +46,13 @@
},
{
"pname": "Magick.NET-Q8-AnyCPU",
- "version": "13.6.0",
- "hash": "sha256-LzHv4Acau5YKP3mnqHY3S9b4TL/xZAr+LqlJkzictPA="
+ "version": "14.9.1",
+ "hash": "sha256-4svX77hA0bfAo9Lbbks6RfAwB4DbUI8mwduMbmyaEfQ="
},
{
"pname": "Magick.NET.Core",
- "version": "13.6.0",
- "hash": "sha256-9y7fLtgmWc830XbH6Vfj61H9W/DGqBqv+tIrg1L9U2c="
+ "version": "14.9.1",
+ "hash": "sha256-FkFcEeK08Jrp9y1znQzy4uyW6sMU1bVi3s5e5em2of4="
},
{
"pname": "MessagePack",
@@ -299,6 +299,11 @@
"version": "1.1.1",
"hash": "sha256-fAcX4sxE0veWM1CZBtXR/Unky+6sE33yrV7ohrWGKig="
},
+ {
+ "pname": "Microsoft.Bcl.AsyncInterfaces",
+ "version": "8.0.0",
+ "hash": "sha256-9aWmiwMJKrKr9ohD1KSuol37y+jdDxPGJct3m2/Bknw="
+ },
{
"pname": "Microsoft.CodeAnalysis.Analyzers",
"version": "3.3.4",
@@ -1219,11 +1224,6 @@
"version": "1.4.2",
"hash": "sha256-/giVqikworG2XKqfN9uLyjUSXr35zBuZ2FX2r8X/WUY="
},
- {
- "pname": "Shoko.Plugin.Abstractions",
- "version": "4.0.0-beta5",
- "hash": "sha256-Tc3cOHkEFjaqWTdHvAscMUfOawH5fc93/u2ztXWGtSc="
- },
{
"pname": "SQLitePCLRaw.bundle_e_sqlite3",
"version": "2.1.6",
@@ -1294,11 +1294,6 @@
"version": "4.5.0",
"hash": "sha256-THw2znu+KibfJRfD7cE3nRYHsm7Fyn5pjOOZVonFjvs="
},
- {
- "pname": "System.Buffers",
- "version": "4.5.1",
- "hash": "sha256-wws90sfi9M7kuCPWkv1CEYMJtCqx9QB/kj0ymlsNaxI="
- },
{
"pname": "System.ClientModel",
"version": "1.0.0",
@@ -1624,11 +1619,6 @@
"version": "4.5.1",
"hash": "sha256-5g6C2vb0RCUiSBw/tlCUbmrIbCvT9zQ+w/45o3l6Ctg="
},
- {
- "pname": "System.Numerics.Vectors",
- "version": "4.4.0",
- "hash": "sha256-auXQK2flL/JpnB/rEcAcUm4vYMCYMEMiWOCAlIaqu2U="
- },
{
"pname": "System.Numerics.Vectors",
"version": "4.5.0",
diff --git a/pkgs/by-name/sh/shoko/package.nix b/pkgs/by-name/sh/shoko/package.nix
index 8de64de5b0cb..ac4db1f494bb 100644
--- a/pkgs/by-name/sh/shoko/package.nix
+++ b/pkgs/by-name/sh/shoko/package.nix
@@ -12,13 +12,13 @@
buildDotnetModule (finalAttrs: {
pname = "shoko";
- version = "5.1.0";
+ version = "5.2.1";
src = fetchFromGitHub {
owner = "ShokoAnime";
repo = "ShokoServer";
tag = "v${finalAttrs.version}";
- hash = "sha256-ZO5S0zMwzr4giaO1bmQ4dLBIPrv6eZY7k9Os4GiO4C4=";
+ hash = "sha256-V8DwYLjxklKYmOnYNLp51GRJXgOXKnbgDD4DL4T4lVc=";
fetchSubmodules = true;
};
@@ -46,7 +46,7 @@ buildDotnetModule (finalAttrs: {
];
};
- tests.shoko = nixosTests.shoko;
+ tests = { inherit (nixosTests) shoko; };
};
meta = {