Home

nur @78c5cc2c6a45336526c992b0dc10928a5d195719 - refs - log -
-
https://git.jolheiser.com/nur.git
My NUR
nur / pkgs / prospect-mail / default.nix
- raw
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
{
  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;
  };
}