about summary refs log tree commit diff
path: root/pkgs/by-name/pr/protonmail-desktop
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/pr/protonmail-desktop')
-rw-r--r--pkgs/by-name/pr/protonmail-desktop/package.nix101
-rwxr-xr-xpkgs/by-name/pr/protonmail-desktop/update.sh29
2 files changed, 105 insertions, 25 deletions
diff --git a/pkgs/by-name/pr/protonmail-desktop/package.nix b/pkgs/by-name/pr/protonmail-desktop/package.nix
index b3edfaa9dc212..81866b4fd3a16 100644
--- a/pkgs/by-name/pr/protonmail-desktop/package.nix
+++ b/pkgs/by-name/pr/protonmail-desktop/package.nix
@@ -1,36 +1,78 @@
-{ lib
-, stdenv
-, fetchurl
-, makeWrapper
-, dpkg
-, electron
+{
+  lib,
+  stdenv,
+  fetchurl,
+  makeWrapper,
+  dpkg,
+  electron,
+  unzip,
 }:
 
 let
   mainProgram = "proton-mail";
-in stdenv.mkDerivation rec {
+  srcHashes = {
+    # Upstream info: It's intended to stay like this in further releases
+    # https://github.com/NixOS/nixpkgs/pull/326152#discussion_r1679558135
+    universal-darwin = "sha256-6b+CNCvrkIA1CvSohSJZq/veZZNsA3lyhVv5SsBlJlw=";
+    x86_64-linux = "sha256-v8ufnQQEqTT5cr7fq8Fozje/NDlBzaCeKIzE6yU/biE=";
+  };
+
+in
+stdenv.mkDerivation rec {
   pname = "protonmail-desktop";
-  version = "1.0.1";
+  # Upstream info: "v"-prefix got dropped
+  version = "1.0.6";
 
   src = fetchurl {
-    url = "https://github.com/ProtonMail/inbox-desktop/releases/download/v${version}/proton-mail_${version}_amd64.deb";
-    hash = "sha256-fNK//x3DOsynWSkG9N+nZ3wjYoC+RreaYVC6KEDXh4w=";
+    url =
+      if stdenv.hostPlatform.isDarwin then
+        "https://github.com/ProtonMail/inbox-desktop/releases/download/${version}/Proton.Mail-darwin-universal-${version}.zip"
+      else
+        "https://github.com/ProtonMail/inbox-desktop/releases/download/${version}/proton-mail_${version}_amd64.deb";
+    sha256 =
+      {
+        x86_64-linux = srcHashes.x86_64-linux;
+        x86_64-darwin = srcHashes.universal-darwin;
+        aarch64-darwin = srcHashes.universal-darwin;
+      }
+      .${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
   };
 
+  sourceRoot = lib.optionalString stdenv.hostPlatform.isDarwin ".";
+
   dontConfigure = true;
   dontBuild = true;
 
-  nativeBuildInputs = [ dpkg makeWrapper ];
+  nativeBuildInputs =
+    [
+      makeWrapper
+    ]
+    ++ lib.optional stdenv.hostPlatform.isLinux dpkg ++ lib.optional stdenv.hostPlatform.isDarwin unzip;
 
-  installPhase = ''
-    runHook preInstall
-    mkdir -p $out
-    cp -r usr/share/ $out/
-    cp -r usr/lib/proton-mail/resources/app.asar $out/share/
-    runHook postInstall
-  '';
+  installPhase =
+    let
+      darwin = ''
+        mkdir -p $out/{Applications,bin}
+        cp -r "Proton Mail.app" $out/Applications/
+        makeWrapper $out/Applications/"Proton Mail.app"/Contents/MacOS/Proton\ Mail $out/bin/protonmail-desktop
+      '';
+      linux = ''
+        runHook preInstall
+        mkdir -p $out
+        cp -r usr/share/ $out/
+        cp -r usr/lib/proton-mail/resources/app.asar $out/share/
+      '';
+
+    in
+    ''
+      runHook preInstall
 
-  preFixup = ''
+      ${if stdenv.hostPlatform.isDarwin then darwin else linux}
+
+      runHook postInstall
+    '';
+
+  preFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
     makeWrapper ${lib.getExe electron} $out/bin/${mainProgram} \
       --add-flags $out/share/app.asar \
       --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
@@ -39,14 +81,23 @@ in stdenv.mkDerivation rec {
       --inherit-argv0
   '';
 
-  meta = with lib; {
+  passthru.updateScript = ./update.sh;
+
+  meta = {
     description = "Desktop application for Mail and Calendar, made with Electron";
     homepage = "https://github.com/ProtonMail/inbox-desktop";
-    license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ rsniezek sebtm ];
-    platforms = [ "x86_64-linux" ];
-    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [
+      rsniezek
+      sebtm
+      matteopacini
+    ];
+    platforms = [
+      "x86_64-linux"
+      "x86_64-darwin"
+      "aarch64-darwin"
+    ];
+    sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
     inherit mainProgram;
   };
 }
-
diff --git a/pkgs/by-name/pr/protonmail-desktop/update.sh b/pkgs/by-name/pr/protonmail-desktop/update.sh
new file mode 100755
index 0000000000000..4b1a10f177386
--- /dev/null
+++ b/pkgs/by-name/pr/protonmail-desktop/update.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p common-updater-scripts jq
+
+# shellcheck disable=SC1008
+
+set -eu -o pipefail
+
+latestVersion=$(curl https://api.github.com/repos/ProtonMail/inbox-desktop/releases/latest | jq -r '.tag_name')
+
+declare -A platforms
+platforms[x86_64-linux]="amd64"
+platforms[x86_64-darwin]="universal"
+
+for platform in "${!platforms[@]}"
+do
+  arch=${platforms[$platform]}
+  os=$(echo "$platform" | cut -d "-" -f2)
+
+  if [[ "$os" == "linux" ]]; then
+    downloadUrl="https://github.com/ProtonMail/inbox-desktop/releases/download/${latestVersion}/proton-mail_${latestVersion}_${arch}.deb"
+  else
+    downloadUrl="https://github.com/ProtonMail/inbox-desktop/releases/download/${latestVersion}/Proton.Mail-${os}-${arch}-${latestVersion}.zip"
+  fi
+  echo "$downloadUrl"
+
+  latestSha=$(nix store prefetch-file "$downloadUrl" --json | jq -r '.hash')
+
+  update-source-version "protonmail-desktop" "$latestVersion" "$latestSha" --system="$platform" --ignore-same-version --file=./pkgs/by-name/pr/protonmail-desktop/package.nix
+done