about summary refs log tree commit diff
path: root/pkgs/by-name/ve/vesktop/package.nix
diff options
context:
space:
mode:
authorseth <getchoo@tuta.io>2024-05-22 16:39:02 -0400
committerseth <getchoo@tuta.io>2024-06-10 20:30:53 -0400
commit4cc1769e98d6a202f3e11c182c85d8fd45aae946 (patch)
tree57beadb0c6a02dd0c1ac48446657e779a82cf298 /pkgs/by-name/ve/vesktop/package.nix
parenta53f8b3cd09470a10e919a589402ec0331c6de63 (diff)
vesktop: add support for darwin
Diffstat (limited to 'pkgs/by-name/ve/vesktop/package.nix')
-rw-r--r--pkgs/by-name/ve/vesktop/package.nix148
1 files changed, 96 insertions, 52 deletions
diff --git a/pkgs/by-name/ve/vesktop/package.nix b/pkgs/by-name/ve/vesktop/package.nix
index e1fba619ec740..942e8e3ae2cf6 100644
--- a/pkgs/by-name/ve/vesktop/package.nix
+++ b/pkgs/by-name/ve/vesktop/package.nix
@@ -3,6 +3,7 @@
   stdenv,
   fetchFromGitHub,
   substituteAll,
+  makeBinaryWrapper,
   makeWrapper,
   makeDesktopItem,
   copyDesktopItems,
@@ -31,19 +32,35 @@ stdenv.mkDerivation (finalAttrs: {
   };
 
   pnpmDeps = pnpm.fetchDeps {
-    inherit (finalAttrs) pname version src patches;
+    inherit (finalAttrs)
+      pname
+      version
+      src
+      patches
+      ;
     hash = "sha256-PogE8uf3W5cKSCqFHMz7FOvT7ONUP4FiFWGBgtk3UC8=";
   };
 
-  nativeBuildInputs = [
-    autoPatchelfHook
-    copyDesktopItems
-    makeWrapper
-    nodejs
-    pnpm.configHook
-  ];
+  nativeBuildInputs =
+    [
+      nodejs
+      pnpm.configHook
+    ]
+    ++ lib.optionals stdenv.isLinux [
+      # vesktop uses venmic, which is a shipped as a prebuilt node module
+      # and needs to be patched
+      autoPatchelfHook
+      copyDesktopItems
+      # we use a script wrapper here for environment variable expansion at runtime
+      # https://github.com/NixOS/nixpkgs/issues/172583
+      makeWrapper
+    ]
+    ++ lib.optionals stdenv.isDarwin [
+      # on macos we don't need to expand variables, so we can use the faster binary wrapper
+      makeBinaryWrapper
+    ];
 
-  buildInputs = [
+  buildInputs = lib.optionals stdenv.isLinux [
     libpulseaudio
     pipewire
     stdenv.cc.cc.lib
@@ -58,63 +75,88 @@ stdenv.mkDerivation (finalAttrs: {
 
   ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
 
+  # disable code signing on macos
+  # https://github.com/electron-userland/electron-builder/blob/77f977435c99247d5db395895618b150f5006e8f/docs/code-signing.md#how-to-disable-code-signing-during-the-build-process-on-macos
+  postConfigure = lib.optionalString stdenv.isDarwin ''
+    export CSC_IDENTITY_AUTO_DISCOVERY=false
+  '';
+
+  # electron builds must be writable on darwin
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    cp -r ${electron}/Applications/Electron.app .
+    chmod -R u+w Electron.app
+  '';
+
   buildPhase = ''
     runHook preBuild
 
     pnpm build
-    # using `pnpm exec` here apparently makes it ignore ELECTRON_SKIP_BINARY_DOWNLOAD
-    ./node_modules/.bin/electron-builder \
+    pnpm exec electron-builder \
       --dir \
       -c.asarUnpack="**/*.node" \
-      -c.electronDist=${electron}/libexec/electron \
+      -c.electronDist=${if stdenv.isDarwin then "." else "${electron}/libexec/electron"} \
       -c.electronVersion=${electron.version}
 
     runHook postBuild
   '';
 
-  # this is consistent with other nixpkgs electron packages and upstream, as far as I am aware
-  installPhase = ''
-    runHook preInstall
-
-    mkdir -p $out/opt/Vesktop
-    cp -r dist/linux-*unpacked/resources $out/opt/Vesktop/
-
+  postBuild = lib.optionalString stdenv.isLinux ''
     pushd build
     ${libicns}/bin/icns2png -x icon.icns
-    for file in icon_*x32.png; do
-      file_suffix=''${file//icon_}
-      install -Dm0644 $file $out/share/icons/hicolor/''${file_suffix//x32.png}/apps/vesktop.png
-    done
-
-    makeWrapper ${electron}/bin/electron $out/bin/vesktop \
-      --add-flags $out/opt/Vesktop/resources/app.asar \
-      ${lib.optionalString withTTS "--add-flags \"--enable-speech-dispatcher\""} \
-      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime}}"
-
-    runHook postInstall
+    popd
   '';
 
-  desktopItems = [
-    (makeDesktopItem {
-      name = "vesktop";
-      desktopName = "Vesktop";
-      exec = "vesktop %U";
-      icon = "vesktop";
-      startupWMClass = "Vesktop";
-      genericName = "Internet Messenger";
-      keywords = [
-        "discord"
-        "vencord"
-        "electron"
-        "chat"
-      ];
-      categories = [
-        "Network"
-        "InstantMessaging"
-        "Chat"
-      ];
-    })
-  ];
+  installPhase =
+    ''
+      runHook preInstall
+    ''
+    + lib.optionalString stdenv.isLinux ''
+      mkdir -p $out/opt/Vesktop
+      cp -r dist/*unpacked/resources $out/opt/Vesktop/
+
+      for file in build/icon_*x32.png; do
+        file_suffix=''${file//icon_}
+        install -Dm0644 $file $out/share/icons/hicolor/''${file_suffix//x32.png}/apps/vesktop.png
+      done
+    ''
+    + lib.optionalString stdenv.isDarwin ''
+      mkdir -p $out/{Applications,bin}
+      mv dist/mac*/Vesktop.App $out/Applications
+    ''
+    + ''
+      runHook postInstall
+    '';
+
+  postFixup =
+    lib.optionalString stdenv.isLinux ''
+      makeWrapper ${electron}/bin/electron $out/bin/vesktop \
+        --add-flags $out/opt/Vesktop/resources/app.asar \
+        ${lib.optionalString withTTS "--add-flags \"--enable-speech-dispatcher\""} \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime}}"
+    ''
+    + lib.optionalString stdenv.isDarwin ''
+      makeWrapper $out/Applications/Vesktop.app/Contents/MacOS/Vesktop $out/bin/vesktop
+    '';
+
+  desktopItems = lib.optional stdenv.isLinux (makeDesktopItem {
+    name = "vesktop";
+    desktopName = "Vesktop";
+    exec = "vesktop %U";
+    icon = "vesktop";
+    startupWMClass = "Vesktop";
+    genericName = "Internet Messenger";
+    keywords = [
+      "discord"
+      "vencord"
+      "electron"
+      "chat"
+    ];
+    categories = [
+      "Network"
+      "InstantMessaging"
+      "Chat"
+    ];
+  });
 
   passthru = {
     inherit (finalAttrs) pnpmDeps;
@@ -131,10 +173,12 @@ stdenv.mkDerivation (finalAttrs: {
       vgskye
       pluiedev
     ];
+    mainProgram = "vesktop";
     platforms = [
       "x86_64-linux"
       "aarch64-linux"
+      "x86_64-darwin"
+      "aarch64-darwin"
     ];
-    mainProgram = "vesktop";
   };
 })