about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/photoprism
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
committerAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
commit99fcaeccb89621dd492203ce1f2d551c06f228ed (patch)
tree41cb730ae07383004789779b0f6e11cb3f4642a3 /nixpkgs/pkgs/servers/photoprism
parent59c5f5ac8682acc13bb22bc29c7cf02f7d75f01f (diff)
parent75a5ebf473cd60148ba9aec0d219f72e5cf52519 (diff)
downloadnixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.gz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.bz2
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.lz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.xz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.zst
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.zip
Merge branch 'nixos-unstable' of https://github.com/NixOS/nixpkgs
Conflicts:
	nixpkgs/nixos/modules/config/console.nix
	nixpkgs/nixos/modules/services/mail/mailman.nix
	nixpkgs/nixos/modules/services/mail/public-inbox.nix
	nixpkgs/nixos/modules/services/mail/rss2email.nix
	nixpkgs/nixos/modules/services/networking/ssh/sshd.nix
	nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
	nixpkgs/pkgs/applications/networking/irc/weechat/default.nix
	nixpkgs/pkgs/applications/window-managers/sway/default.nix
	nixpkgs/pkgs/build-support/go/module.nix
	nixpkgs/pkgs/build-support/rust/build-rust-package/default.nix
	nixpkgs/pkgs/development/interpreters/python/default.nix
	nixpkgs/pkgs/development/node-packages/overrides.nix
	nixpkgs/pkgs/development/tools/b4/default.nix
	nixpkgs/pkgs/servers/dict/dictd-db.nix
	nixpkgs/pkgs/servers/mail/public-inbox/default.nix
	nixpkgs/pkgs/tools/security/pinentry/default.nix
	nixpkgs/pkgs/tools/text/unoconv/default.nix
	nixpkgs/pkgs/top-level/all-packages.nix
Diffstat (limited to 'nixpkgs/pkgs/servers/photoprism')
-rw-r--r--nixpkgs/pkgs/servers/photoprism/backend.nix38
-rw-r--r--nixpkgs/pkgs/servers/photoprism/default.nix87
-rw-r--r--nixpkgs/pkgs/servers/photoprism/frontend.nix28
-rw-r--r--nixpkgs/pkgs/servers/photoprism/libtensorflow.nix89
4 files changed, 242 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/photoprism/backend.nix b/nixpkgs/pkgs/servers/photoprism/backend.nix
new file mode 100644
index 000000000000..c014044311a6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/photoprism/backend.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, coreutils, libtensorflow, src, version, ... }:
+
+buildGoModule rec {
+  inherit src version;
+  pname = "photoprism-backend";
+
+  buildInputs = [
+    coreutils
+    libtensorflow
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  postPatch = ''
+    substituteInPlace internal/commands/passwd.go --replace '/bin/stty' "${coreutils}/bin/stty"
+  '';
+
+  vendorSha256 = "sha256-jkBGFO18m5OyyMr8M7qeQHcHc9koLudGU5t8vFUBjuE=";
+
+  subPackages = [ "cmd/photoprism" ];
+
+  # https://github.com/mattn/go-sqlite3/issues/822
+  CGO_CFLAGS = "-Wno-return-local-addr";
+
+  # https://github.com/tensorflow/tensorflow/issues/43847
+  CGO_LDFLAGS = "-fuse-ld=gold";
+
+  meta = with lib; {
+    homepage = "https://photoprism.app";
+    description = "Photoprism's backend";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ benesim ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/photoprism/default.nix b/nixpkgs/pkgs/servers/photoprism/default.nix
new file mode 100644
index 000000000000..312772a74369
--- /dev/null
+++ b/nixpkgs/pkgs/servers/photoprism/default.nix
@@ -0,0 +1,87 @@
+{ pkgs, lib, stdenv, fetchFromGitHub, fetchzip, darktable, rawtherapee, ffmpeg, libheif, exiftool, imagemagick, makeWrapper, testers }:
+
+let
+  version = "230603-378d4746a";
+  pname = "photoprism";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-lywVP4Vvq88g+Yk4BuzOaB+9EbWrxGgIF4lOPW33E1U=";
+  };
+
+  libtensorflow = pkgs.callPackage ./libtensorflow.nix { };
+  backend = pkgs.callPackage ./backend.nix { inherit libtensorflow src version; };
+  frontend = pkgs.callPackage ./frontend.nix { inherit src version; };
+
+  fetchModel = { name, sha256 }:
+    fetchzip {
+      inherit sha256;
+      url = "https://dl.photoprism.org/tensorflow/${name}.zip";
+      stripRoot = false;
+    };
+
+  facenet = fetchModel {
+    name = "facenet";
+    sha256 = "sha256-aS5kkNhxOLSLTH/ipxg7NAa1w9X8iiG78jmloR1hpRo=";
+  };
+
+  nasnet = fetchModel {
+    name = "nasnet";
+    sha256 = "sha256-bF25jPmZLyeSWy/CGXZE/VE2UupEG2q9Jmr0+1rUYWE=";
+  };
+
+  nsfw = fetchModel {
+    name = "nsfw";
+    sha256 = "sha256-zy/HcmgaHOY7FfJUY6I/yjjsMPHR2Ote9ppwqemBlfg=";
+  };
+
+  assets_path = "$out/share/${pname}";
+in
+stdenv.mkDerivation {
+  inherit pname version;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  dontUnpack = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin ${assets_path}
+
+    # install backend
+    ln -s ${backend}/bin/photoprism $out/bin/photoprism
+    wrapProgram $out/bin/photoprism \
+      --set PHOTOPRISM_ASSETS_PATH ${assets_path} \
+      --set PHOTOPRISM_DARKTABLE_BIN ${darktable}/bin/darktable-cli \
+      --set PHOTOPRISM_RAWTHERAPEE_BIN ${rawtherapee}/bin/rawtherapee-cli \
+      --set PHOTOPRISM_HEIFCONVERT_BIN ${libheif}/bin/heif-convert \
+      --set PHOTOPRISM_FFMPEG_BIN ${ffmpeg}/bin/ffmpeg \
+      --set PHOTOPRISM_EXIFTOOL_BIN ${exiftool}/bin/exiftool \
+      --set PHOTOPRISM_IMAGEMAGICK_BIN ${imagemagick}/bin/convert
+
+    # install frontend
+    ln -s ${frontend}/assets/* ${assets_path}
+    # install tensorflow models
+    ln -s ${nasnet}/nasnet ${assets_path}
+    ln -s ${nsfw}/nsfw ${assets_path}
+    ln -s ${facenet}/facenet ${assets_path}
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion { package = pkgs.photoprism; };
+
+  meta = with lib; {
+    homepage = "https://photoprism.app";
+    description = "Personal Photo Management powered by Go and Google TensorFlow";
+    inherit (libtensorflow.meta) platforms;
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ benesim ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/photoprism/frontend.nix b/nixpkgs/pkgs/servers/photoprism/frontend.nix
new file mode 100644
index 000000000000..1451aa61ed91
--- /dev/null
+++ b/nixpkgs/pkgs/servers/photoprism/frontend.nix
@@ -0,0 +1,28 @@
+{ lib, buildNpmPackage, src, version }:
+
+buildNpmPackage {
+  inherit src version;
+  pname = "photoprism-frontend";
+
+  postPatch = ''
+    cd frontend
+  '';
+
+  npmDepsHash = "sha256-lZpgv3YFF+b9nPJlbG2KdGYC5UMy+VnYqRgz7JLj85g=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp -r ../assets $out/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://photoprism.app";
+    description = "Photoprism's frontend";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ benesim ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/photoprism/libtensorflow.nix b/nixpkgs/pkgs/servers/photoprism/libtensorflow.nix
new file mode 100644
index 000000000000..e1c8f9338cc8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/photoprism/libtensorflow.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv, fetchurl, ... }:
+let
+  inherit (stdenv.hostPlatform) system;
+in
+stdenv.mkDerivation rec {
+  pname = "libtensorflow-photoprism";
+  version = "1.15.2";
+
+  srcs = [
+    # Photoprism-packaged libtensorflow tarball (with pre-built libs for both arm64 and amd64)
+    # We need this specific version because of https://github.com/photoprism/photoprism/issues/222
+    (fetchurl {
+      sha256 = {
+        x86_64-linux = "sha256-bZAC3PJxqcjuGM4RcNtzYtkg3FD3SrO5beDsPoKenzc=";
+        aarch64-linux = "sha256-qnj4vhSWgrk8SIjzIH1/4waMxMsxMUvqdYZPaSaUJRk=";
+      }.${system};
+
+      url =
+        let
+          systemName = {
+            x86_64-linux = "amd64";
+            aarch64-linux = "arm64";
+          }.${system};
+        in
+        "https://dl.photoprism.app/tensorflow/${systemName}/libtensorflow-${systemName}-${version}.tar.gz";
+    })
+    # Upstream tensorflow tarball (with .h's photoprism's tarball is missing)
+    (fetchurl {
+      url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.15.0.tar.gz";
+      sha256 = "sha256-3sv9WnCeztNSP1XM+iOTN6h+GrPgAO/aNhfbeeEDTe0=";
+    })
+  ];
+
+  sourceRoot = ".";
+
+  unpackPhase = ''
+    sources=($srcs)
+
+    mkdir downstream upstream
+    tar xf ''${sources[0]} --directory downstream
+    tar xf ''${sources[1]} --directory upstream
+
+    mv downstream/lib .
+    mv upstream/{include,LICENSE,THIRD_PARTY_TF_C_LICENSES} .
+    rm -r downstream upstream
+
+    cd lib
+    ln -sT libtensorflow.so{,.1}
+    ln -sT libtensorflow_framework.so{,.1}
+    cd ..
+  '';
+
+  # Patch library to use our libc, libstdc++ and others
+  patchPhase =
+    let
+      rpath = lib.makeLibraryPath [ stdenv.cc.libc stdenv.cc.cc.lib ];
+    in
+    ''
+      chmod -R +w lib
+      patchelf --set-rpath "${rpath}:$out/lib" lib/libtensorflow.so
+      patchelf --set-rpath "${rpath}" lib/libtensorflow_framework.so
+    '';
+
+  buildPhase = ''
+    # Write pkg-config file.
+    mkdir lib/pkgconfig
+    cat > lib/pkgconfig/tensorflow.pc << EOF
+    Name: TensorFlow
+    Version: ${version}
+    Description: Library for computation using data flow graphs for scalable machine learning
+    Requires:
+    Libs: -L$out/lib -ltensorflow
+    Cflags: -I$out/include/tensorflow
+    EOF
+  '';
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r LICENSE THIRD_PARTY_TF_C_LICENSES lib include $out
+  '';
+
+  meta = with lib; {
+    homepage = "https://dl.photoprism.app/tensorflow/";
+    description = "Libtensorflow version for usage with photoprism backend";
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benesim ];
+  };
+}