From 4d03d658abac0fa87611d0eb9fb560f9cd9cc856 Mon Sep 17 00:00:00 2001
From: 514fpv <koishi@514fpv.one>
Date: Mon, 4 Mar 2024 09:26:16 +0800
Subject: [PATCH] feat(photoview): package photoview

---
 package/photoview/default.nix | 63 +++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)
 create mode 100644 package/photoview/default.nix

diff --git a/package/photoview/default.nix b/package/photoview/default.nix
new file mode 100644
index 00000000..d4d8e4a4
--- /dev/null
+++ b/package/photoview/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, pkg-config
+, libjpeg_turbo
+, libheif
+, lapack
+, dlib
+, blas
+, ffmpeg
+, exiftool
+, darktable
+, fetchFromGitHub
+, buildGoModule
+, buildNpmPackage
+, makeWrapper }: buildGoModule rec {
+  pname = "photoview";
+  version = "2.3.13";
+
+  source = fetchFromGitHub {
+    name = "${pname}-src";
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-O6k5nbiWTsuOi8YLX0rsZJ9dOIo5d6pdwjhFZrdwI0E=";
+  };
+
+  src = source + "/api";
+  vendorHash = "sha256-0SWywy9YdPtgvxRhwKhKvspPmhbnibSuhvzhsjIQvZk=";
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+  buildInputs = [
+    libjpeg_turbo
+    libheif
+    lapack
+    dlib
+    blas
+  ];
+
+  ui = buildNpmPackage {
+    pname = "${pname}-ui";
+    inherit version;
+    src = source + "/ui";
+    npmDepsHash = "sha256-31CyjyNd85hNg4MXIWctoQ3YgorGqCMz+wDAu/K1lWo=";
+  };
+
+  postInstall = ''
+    mv "$out/bin/api" "$out/bin/${pname}"
+    mkdir -p "$out/lib/${pname}"
+    wrapProgram $out/bin/${pname} \
+      --prefix PATH ":" "${lib.makeBinPath [
+        ffmpeg
+        exiftool
+        darktable
+      ]}" \
+      --set PHOTOVIEW_SERVE_UI 1 \
+      --set PHOTOVIEW_UI_PATH "$out/lib/${pname}/ui"
+
+    cp -r \
+    "${ui}/lib/node_modules/photoview-ui/dist" \
+    "$out/lib/${pname}/ui"
+  '';
+}