Commit a469aa29 authored by Jamie Magee's avatar Jamie Magee
Browse files

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
parent f2b75e04
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
{
  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 −0
Original line number Diff line number Diff line
{
  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";
  };
})