{ lib, stdenv, fetchFromGitHub, makeWrapper, makeDesktopItem, copyDesktopItems, nodejs_20, fetchYarnDeps, fixup_yarn_lock, electron, libpulseaudio, pipewire, alsa-utils, which, }: stdenv.mkDerivation rec { pname = "prospect-mail"; version = "24e49ca0187884fa772a5928c56d7a9ed76441bd"; src = fetchFromGitHub { owner = "julian-alarcon"; repo = pname; rev = version; sha256 = "sha256-taFVVExBKsE6GToiNWh8E0tVlx8qaWw5t8krydyiG24="; }; offlineCache = fetchYarnDeps { yarnLock = "${src}/yarn.lock"; sha256 = "sha256-bWVJvhaEue47uXzQQg7OPI6bjVcbmWcacmBeXTc8A6c="; }; nativeBuildInputs = [nodejs_20.pkgs.yarn fixup_yarn_lock nodejs_20 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}/libexec/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/ mkdir -p $out/share/icons/hicolor/256x256/apps cp build/icon.png $out/share/icons/hicolor/256x256/apps/prospect-mail.png # 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"]; }) ]; meta = with lib; { description = "Prospect mail, Outlook client for linux"; homepage = "https://github.com/julian-alarcon/prospect-mail"; license = licenses.mit; }; }