shelfmark: init at 1.2.0

Self-hosted web interface for searching and downloading books and
audiobooks from multiple sources. This packages the lite variant,
which relies on an external Cloudflare bypass (e.g. FlareSolverr).

https://github.com/calibrain/shelfmark
This commit is contained in:
Jamie Magee
2026-03-11 09:23:08 -07:00
parent f2b75e04af
commit a469aa29b0
2 changed files with 121 additions and 0 deletions
@@ -0,0 +1,25 @@
{
buildNpmPackage,
shelfmark,
}:
buildNpmPackage (finalAttrs: {
pname = "shelfmark-frontend";
inherit (shelfmark) version src;
sourceRoot = "${finalAttrs.src.name}/src/frontend";
npmDepsHash = "sha256-RAzotFGj0FGpfF7iyB5f2fdKFvMLcpJx142yplRwboU=";
installPhase = ''
runHook preInstall
cp -r dist $out
runHook postInstall
'';
meta = {
description = "Shelfmark frontend";
homepage = "https://github.com/calibrain/shelfmark/tree/main/src/frontend";
inherit (shelfmark.meta) changelog license maintainers;
};
})
+96
View File
@@ -0,0 +1,96 @@
{
lib,
stdenv,
fetchFromGitHub,
python3Packages,
makeWrapper,
nixosTests,
shelfmark-frontend,
unrar-free,
}:
let
pythonDeps = with python3Packages; [
flask
flask-cors
flask-socketio
python-socketio
requests
pysocks
defusedxml
beautifulsoup4
tqdm
dnspython
gunicorn
gevent
gevent-websocket
psutil
emoji
rarfile
qbittorrent-api
transmission-rpc
authlib
apprise
];
in
stdenv.mkDerivation (finalAttrs: {
pname = "shelfmark";
version = "1.2.0";
src = fetchFromGitHub {
owner = "calibrain";
repo = "shelfmark";
tag = "v${finalAttrs.version}";
hash = "sha256-t4t7je7Y/aezx/EX7paJIcsCq5qyZeU/+mPLeZ8oTPg=";
};
nativeBuildInputs = [
python3Packages.wrapPython
makeWrapper
];
pythonPath = pythonDeps;
installPhase = ''
runHook preInstall
wrapPythonPrograms
mkdir -p $out/libexec $out/bin
cp -r shelfmark $out/libexec/shelfmark
cp -r data $out/libexec/data
ln -s ${finalAttrs.passthru.frontend} $out/libexec/frontend-dist
makeWrapper ${python3Packages.python.interpreter} $out/bin/shelfmark \
--prefix PATH : ${
lib.makeBinPath [
python3Packages.python
unrar-free
]
} \
--set PYTHONPATH "$out/libexec:$program_PYTHONPATH" \
--set USING_EXTERNAL_BYPASSER true \
--add-flags "-m gunicorn.app.wsgiapp --worker-class geventwebsocket.gunicorn.workers.GeventWebSocketWorker --workers 1 -t 300 shelfmark.main:app"
runHook postInstall
'';
passthru = {
frontend = shelfmark-frontend.override {
shelfmark = finalAttrs.finalPackage;
};
tests = {
inherit (nixosTests) shelfmark;
};
};
meta = {
description = "Self-hosted web interface for searching and downloading books and audiobooks";
homepage = "https://github.com/calibrain/shelfmark";
changelog = "https://github.com/calibrain/shelfmark/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.jamiemagee ];
mainProgram = "shelfmark";
};
})