{ lib, stdenv, fetchFromGitHub, makeWrapper, makeDesktopItem, copyDesktopItems, nodejs_16, fetchYarnDeps, fixup_yarn_lock, electron, libpulseaudio, pipewire, alsa-utils, which, }: stdenv.mkDerivation rec { pname = "prospect-mail"; version = "0.4.0"; src = fetchFromGitHub { owner = "julian-alarcon"; repo = pname; rev = "v${version}"; sha256 = "sha256-MIQgJFTqXuhShEU+iAV1VS2TAq1d/fQXU1Rct1XIEsM="; }; offlineCache = fetchYarnDeps { yarnLock = "${src}/yarn.lock"; sha256 = "sha256-rN15aGTROnfUgws7f+U8DXcj5dL6MC8DqUE+uxfH1Zo="; }; nativeBuildInputs = [nodejs_16.pkgs.yarn fixup_yarn_lock nodejs_16 copyDesktopItems makeWrapper]; configurePhase = '' runHook preConfigure export HOME=$(mktemp -d) yarn config --offline set yarn-offline-mirror $offlineCache fixup_yarn_lock yarn.lock yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive patchShebangs node_modules/ runHook postConfigure ''; buildPhase = '' runHook preBuild yarn --offline electron-builder \ --dir ${ if stdenv.isDarwin then "--macos" else "--linux" } ${ if stdenv.hostPlatform.isAarch64 then "--arm64" else "--x64" } \ -c.electronDist=${electron}/lib/electron \ -c.electronVersion=${electron.version} runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/share/{applications,prospect-mail} cp dist/${ if stdenv.isDarwin then "darwin-" else "linux-" }${lib.optionalString stdenv.hostPlatform.isAarch64 "arm64-"}unpacked/resources/app.asar $out/share/prospect-mail/ pushd build/icons for image in *png; do mkdir -p $out/share/icons/hicolor/''${image%.png}/apps cp -r $image $out/share/icons/hicolor/''${image%.png}/apps/prospect-mail.png done popd # Linux needs 'aplay' for notification sounds, 'libpulse' for meeting sound, and 'libpipewire' for screen sharing makeWrapper '${electron}/bin/electron' "$out/bin/prospect-mail" \ ${lib.optionalString stdenv.isLinux '' --prefix PATH : ${lib.makeBinPath [alsa-utils which]} \ --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libpulseaudio pipewire]} \ ''} \ --add-flags "$out/share/prospect-mail/app.asar" \ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" runHook postInstall ''; desktopItems = [ (makeDesktopItem { name = pname; exec = pname; icon = pname; desktopName = "Outlook for Linux"; comment = "Outlook wrapper client for Linux"; categories = ["Network" "Email"]; }) ]; }