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
108
109
110
111
|
diff --git a/pkgs/prospect-mail/default.nix b/pkgs/prospect-mail/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..cf8675e14c544e09b4152184955a7315742bff9f
--- /dev/null
+++ b/pkgs/prospect-mail/default.nix
@@ -0,0 +1,105 @@
+{
+ 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"];
+ })
+ ];
+}
|