Merge pull request #329823 from ExpidusOS/fix/pkgsllvm/elfutils
[NixPkgs.git] / pkgs / servers / photoprism / default.nix
blobc9b05257de865842bf54af05a3106b6ccaf7c796
1 { pkgs, lib, stdenv, fetchFromGitHub, fetchzip, darktable, rawtherapee, ffmpeg, libheif, exiftool, imagemagick, makeWrapper, testers }:
3 let
4   version = "240420-ef5f14bc4";
5   pname = "photoprism";
7   src = fetchFromGitHub {
8     owner = pname;
9     repo = pname;
10     rev = version;
11     hash = "sha256-oJRd4eTwoTYKAJAsG9y0mnG+zF+eeLlSXNgaKLcb43w=";
12   };
14   libtensorflow = pkgs.callPackage ./libtensorflow.nix { };
15   backend = pkgs.callPackage ./backend.nix { inherit libtensorflow src version; };
16   frontend = pkgs.callPackage ./frontend.nix { inherit src version; };
18   fetchModel = { name, hash }:
19     fetchzip {
20       inherit hash;
21       url = "https://dl.photoprism.org/tensorflow/${name}.zip";
22       stripRoot = false;
23     };
25   facenet = fetchModel {
26     name = "facenet";
27     hash = "sha256-aS5kkNhxOLSLTH/ipxg7NAa1w9X8iiG78jmloR1hpRo=";
28   };
30   nasnet = fetchModel {
31     name = "nasnet";
32     hash = "sha256-bF25jPmZLyeSWy/CGXZE/VE2UupEG2q9Jmr0+1rUYWE=";
33   };
35   nsfw = fetchModel {
36     name = "nsfw";
37     hash = "sha256-zy/HcmgaHOY7FfJUY6I/yjjsMPHR2Ote9ppwqemBlfg=";
38   };
40   assets_path = "$out/share/${pname}";
42 stdenv.mkDerivation {
43   inherit pname version;
45   nativeBuildInputs = [
46     makeWrapper
47   ];
49   dontUnpack = true;
50   dontBuild = true;
52   installPhase = ''
53     runHook preInstall
55     mkdir -p $out/bin ${assets_path}
57     # install backend
58     ln -s ${backend}/bin/photoprism $out/bin/photoprism
59     wrapProgram $out/bin/photoprism \
60       --set PHOTOPRISM_ASSETS_PATH ${assets_path} \
61       --set PHOTOPRISM_DARKTABLE_BIN ${darktable}/bin/darktable-cli \
62       --set PHOTOPRISM_RAWTHERAPEE_BIN ${rawtherapee}/bin/rawtherapee-cli \
63       --set PHOTOPRISM_HEIFCONVERT_BIN ${libheif}/bin/heif-convert \
64       --set PHOTOPRISM_FFMPEG_BIN ${ffmpeg}/bin/ffmpeg \
65       --set PHOTOPRISM_EXIFTOOL_BIN ${exiftool}/bin/exiftool \
66       --set PHOTOPRISM_IMAGEMAGICK_BIN ${imagemagick}/bin/convert
68     # install frontend
69     ln -s ${frontend}/assets/* ${assets_path}
70     # install tensorflow models
71     ln -s ${nasnet}/nasnet ${assets_path}
72     ln -s ${nsfw}/nsfw ${assets_path}
73     ln -s ${facenet}/facenet ${assets_path}
75     runHook postInstall
76   '';
78   passthru.tests.version = testers.testVersion { package = pkgs.photoprism; };
80   meta = with lib; {
81     homepage = "https://photoprism.app";
82     description = "Personal Photo Management powered by Go and Google TensorFlow";
83     inherit (libtensorflow.meta) platforms;
84     license = licenses.agpl3Only;
85     maintainers = with maintainers; [ benesim ];
86     mainProgram = "photoprism";
87   };