Unbork journals audit logs and introduce audit option (#379629)
[NixPkgs.git] / pkgs / by-name / ph / photoprism / package.nix
blob14c8b832876be7db2cb1676e0c1c65db17ec909a
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   fetchzip,
6   darktable,
7   rawtherapee,
8   ffmpeg,
9   libheif,
10   exiftool,
11   imagemagick,
12   makeWrapper,
13   testers,
14   callPackage,
15   nixosTests,
16   librsvg,
19 let
20   version = "240711-2197af848";
21   pname = "photoprism";
23   src = fetchFromGitHub {
24     owner = pname;
25     repo = pname;
26     rev = version;
27     hash = "sha256-ihDv5c5RUjDbFcAHJjzp/8qCwKfA+rlFXPziaYarzs8=";
28   };
30   libtensorflow = callPackage ./libtensorflow.nix { };
31   backend = callPackage ./backend.nix { inherit libtensorflow src version; };
32   frontend = callPackage ./frontend.nix { inherit src version; };
34   fetchModel =
35     { name, hash }:
36     fetchzip {
37       inherit hash;
38       url = "https://dl.photoprism.org/tensorflow/${name}.zip";
39       stripRoot = false;
40     };
42   facenet = fetchModel {
43     name = "facenet";
44     hash = "sha256-aS5kkNhxOLSLTH/ipxg7NAa1w9X8iiG78jmloR1hpRo=";
45   };
47   nasnet = fetchModel {
48     name = "nasnet";
49     hash = "sha256-bF25jPmZLyeSWy/CGXZE/VE2UupEG2q9Jmr0+1rUYWE=";
50   };
52   nsfw = fetchModel {
53     name = "nsfw";
54     hash = "sha256-zy/HcmgaHOY7FfJUY6I/yjjsMPHR2Ote9ppwqemBlfg=";
55   };
57   assets_path = "$out/share/${pname}";
59 stdenv.mkDerivation (finalAttrs: {
60   inherit pname version;
62   nativeBuildInputs = [
63     makeWrapper
64   ];
66   dontUnpack = true;
67   dontBuild = true;
69   installPhase = ''
70     runHook preInstall
72     mkdir -p $out/bin ${assets_path}
74     # install backend
75     ln -s ${backend}/bin/photoprism $out/bin/photoprism
76     wrapProgram $out/bin/photoprism \
77       --set PHOTOPRISM_ASSETS_PATH ${assets_path} \
78       --set PHOTOPRISM_DARKTABLE_BIN ${darktable}/bin/darktable-cli \
79       --set PHOTOPRISM_RAWTHERAPEE_BIN ${rawtherapee}/bin/rawtherapee-cli \
80       --set PHOTOPRISM_HEIFCONVERT_BIN ${libheif}/bin/heif-dec \
81       --set PHOTOPRISM_RSVGCONVERT_BIN ${librsvg}/bin/rsvg-convert \
82       --set PHOTOPRISM_FFMPEG_BIN ${ffmpeg}/bin/ffmpeg \
83       --set PHOTOPRISM_EXIFTOOL_BIN ${exiftool}/bin/exiftool \
84       --set PHOTOPRISM_IMAGEMAGICK_BIN ${imagemagick}/bin/convert
86     # install frontend
87     ln -s ${frontend}/assets/* ${assets_path}
88     # install tensorflow models
89     ln -s ${nasnet}/nasnet ${assets_path}
90     ln -s ${nsfw}/nsfw ${assets_path}
91     ln -s ${facenet}/facenet ${assets_path}
93     runHook postInstall
94   '';
96   passthru.tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
97   passthru.tests.photoprism = nixosTests.photoprism;
99   meta = with lib; {
100     homepage = "https://photoprism.app";
101     description = "Personal Photo Management powered by Go and Google TensorFlow";
102     inherit (libtensorflow.meta) platforms;
103     license = licenses.agpl3Only;
104     maintainers = with maintainers; [ benesim ];
105     mainProgram = "photoprism";
106   };