|
| 1 | +{ |
| 2 | + stdenv, |
| 3 | + lib, |
| 4 | + fetchFromGitHub, |
| 5 | + fetchYarnDeps, |
| 6 | + nodejs, |
| 7 | + electron_34, |
| 8 | + yarnConfigHook, |
| 9 | + copyDesktopItems, |
| 10 | + vips, |
| 11 | + ffmpeg, |
| 12 | + makeWrapper, |
| 13 | + autoPatchelfHook, |
| 14 | + makeDesktopItem, |
| 15 | + imagemagick, |
| 16 | +}: |
| 17 | +let |
| 18 | + electron = electron_34; |
| 19 | +in |
| 20 | + |
| 21 | +stdenv.mkDerivation (finalAttrs: { |
| 22 | + pname = "ente-desktop"; |
| 23 | + version = "1.7.10"; |
| 24 | + |
| 25 | + src = fetchFromGitHub { |
| 26 | + owner = "ente-io"; |
| 27 | + repo = "ente"; |
| 28 | + fetchSubmodules = true; |
| 29 | + sparseCheckout = [ |
| 30 | + "desktop" |
| 31 | + "web" |
| 32 | + ]; |
| 33 | + tag = "photosd-v${finalAttrs.version}"; |
| 34 | + hash = "sha256-iH9fbeUOd/8oVVQbMCSlWyruQZKgSjexNrOuS7szJ9w="; |
| 35 | + }; |
| 36 | + |
| 37 | + sourceRoot = "${finalAttrs.src.name}/desktop"; |
| 38 | + |
| 39 | + offlineCache = fetchYarnDeps { |
| 40 | + name = "ente-desktop-${finalAttrs.version}-offline-cache"; |
| 41 | + inherit (finalAttrs) src sourceRoot; |
| 42 | + hash = "sha256-kiL2XQPPN9VkDa3rzO1rLwUZVTbwEz0zeqpgpWOSy7Y="; |
| 43 | + }; |
| 44 | + webOfflineCache = fetchYarnDeps { |
| 45 | + name = "ente-desktop-${finalAttrs.version}-web-offline-cache"; |
| 46 | + inherit (finalAttrs) src; |
| 47 | + sourceRoot = "${finalAttrs.src.name}/web"; |
| 48 | + hash = "sha256-7epwOEWi5lZNo6Z7Rf+QZtGvVCZxk5bXU2aN+9KDYCc="; |
| 49 | + }; |
| 50 | + |
| 51 | + nativeBuildInputs = [ |
| 52 | + nodejs |
| 53 | + yarnConfigHook |
| 54 | + makeWrapper |
| 55 | + autoPatchelfHook # for onnxruntime |
| 56 | + copyDesktopItems |
| 57 | + imagemagick |
| 58 | + ]; |
| 59 | + |
| 60 | + buildInputs = [ |
| 61 | + (lib.getLib stdenv.cc.cc) # for onnxruntime |
| 62 | + ]; |
| 63 | + |
| 64 | + # Path to vips (otherwise it looks within the electron derivation) |
| 65 | + postPatch = '' |
| 66 | + substituteInPlace src/main/services/image.ts --replace-fail "process.resourcesPath" "\"$out/share/ente-desktop/resources\"" |
| 67 | + ''; |
| 68 | + |
| 69 | + postConfigure = '' |
| 70 | + chmod u+w -R .. |
| 71 | +
|
| 72 | + pushd ../web |
| 73 | + offlineCache=$webOfflineCache yarnConfigHook |
| 74 | + popd |
| 75 | +
|
| 76 | + cp -r ${electron.dist} ./electron_dist |
| 77 | + chmod u+w -R ./electron_dist |
| 78 | + ''; |
| 79 | + |
| 80 | + buildPhase = '' |
| 81 | + runHook preBuild |
| 82 | +
|
| 83 | + pushd ../web |
| 84 | + _ENTE_IS_DESKTOP=1 yarn build |
| 85 | + popd |
| 86 | + cp -r ../web/apps/photos/out out |
| 87 | +
|
| 88 | + yarn run tsc |
| 89 | + yarn run electron-builder --dir -c.electronDist=./electron_dist -c.electronVersion=${electron.version} |
| 90 | +
|
| 91 | + runHook postBuild |
| 92 | + ''; |
| 93 | + |
| 94 | + installPhase = '' |
| 95 | + runHook preInstall |
| 96 | +
|
| 97 | + for size in 16 32 48 64 72 96 128 192 256 512 1024; do |
| 98 | + mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps |
| 99 | + convert -resize "$size"x"$size" build/icon.png $out/share/icons/hicolor/"$size"x"$size"/apps/ente-desktop.png |
| 100 | + done |
| 101 | +
|
| 102 | + mkdir -p $out/share/ente-desktop |
| 103 | + cp -r dist/*/resources $out/share/ente-desktop |
| 104 | + ln -s ${vips}/bin/vips $out/share/ente-desktop/resources/vips |
| 105 | + ln -s ${ffmpeg}/bin/ffmpeg $out/share/ente-desktop/resources/app.asar.unpacked/node_modules/ffmpeg-static/ffmpeg |
| 106 | +
|
| 107 | + # executable wrapper |
| 108 | + makeWrapper '${electron}/bin/electron' "$out/bin/ente-desktop" \ |
| 109 | + --set ELECTRON_FORCE_IS_PACKAGED 1 \ |
| 110 | + --set ELECTRON_IS_DEV 0 \ |
| 111 | + --add-flags "$out/share/ente-desktop/resources/app.asar" \ |
| 112 | + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" |
| 113 | +
|
| 114 | + runHook postInstall |
| 115 | + ''; |
| 116 | + |
| 117 | + # The desktop item properties should be kept in sync with data from upstream: |
| 118 | + # https://github.com/ente-io/ente/blob/main/desktop/electron-builder.yml |
| 119 | + desktopItems = [ |
| 120 | + (makeDesktopItem { |
| 121 | + name = "ente-desktop"; |
| 122 | + desktopName = "Ente"; |
| 123 | + exec = "ente-desktop %U"; |
| 124 | + terminal = false; |
| 125 | + type = "Application"; |
| 126 | + icon = "ente-desktop"; |
| 127 | + mimeTypes = [ |
| 128 | + "x-scheme-handler/ente" |
| 129 | + ]; |
| 130 | + categories = [ |
| 131 | + "Photography" |
| 132 | + ]; |
| 133 | + }) |
| 134 | + ]; |
| 135 | + |
| 136 | + meta = { |
| 137 | + description = "Desktop (Electron) client for Ente Photos"; |
| 138 | + homepage = "https://ente.io/"; |
| 139 | + changelog = "https://github.com/ente-io/photos-desktop/releases"; |
| 140 | + license = lib.licenses.agpl3Only; |
| 141 | + maintainers = with lib.maintainers; [ |
| 142 | + pinpox |
| 143 | + yuka |
| 144 | + ]; |
| 145 | + platforms = lib.platforms.all; |
| 146 | + }; |
| 147 | +}) |
0 commit comments