5e7c2d6cef
GitOrigin-RevId: f99e5f03cc0aa231ab5950a15ed02afec45ed51a
100 lines
3.2 KiB
Nix
100 lines
3.2 KiB
Nix
{ lib, stdenv, fetchurl
|
|
, autoPatchelfHook, makeDesktopItem, copyDesktopItems, makeWrapper, gnugrep, asar
|
|
, electron, python3, alsa-lib, gtk3, libdbusmenu, libxshmfence, mesa, nss
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "whalebird";
|
|
version = "5.0.7";
|
|
|
|
src = let
|
|
downloads = "https://github.com/h3poteto/whalebird-desktop/releases/download/v${version}";
|
|
in
|
|
if stdenv.system == "x86_64-linux" then
|
|
fetchurl {
|
|
url = downloads + "/Whalebird-${version}-linux-x64.tar.bz2";
|
|
hash = "sha256-eufP038REwF2VwAxxI8R0S3fE8oJ+SX/CES5ozuut2w=";
|
|
}
|
|
else if stdenv.system == "aarch64-linux" then
|
|
fetchurl {
|
|
url = downloads + "/Whalebird-${version}-linux-arm64.tar.bz2";
|
|
hash = "sha256-U0xVTUUm6wsRxYc1w4vfNtVE6o8dNzXTSi+IX4mgDEE=";
|
|
}
|
|
else
|
|
throw "Whalebird is not supported for ${stdenv.system}";
|
|
|
|
nativeBuildInputs = [
|
|
autoPatchelfHook
|
|
makeWrapper
|
|
copyDesktopItems
|
|
gnugrep
|
|
asar
|
|
];
|
|
|
|
buildInputs = [ alsa-lib gtk3 libdbusmenu libxshmfence mesa nss ];
|
|
|
|
desktopItems = [
|
|
(makeDesktopItem {
|
|
desktopName = "Whalebird";
|
|
comment = meta.description;
|
|
categories = [ "Network" ];
|
|
exec = "whalebird";
|
|
icon = "whalebird";
|
|
name = "whalebird";
|
|
})
|
|
];
|
|
|
|
unpackPhase = ''
|
|
mkdir -p opt
|
|
tar -xf ${src} -C opt
|
|
# remove the version/target suffix from the untar'd directory
|
|
mv opt/Whalebird-* opt/Whalebird
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
# Necessary steps to find the tray icon
|
|
# For aarch64-linux, we need to overwrite this symlink first as it points to
|
|
# /usr/bin/python3
|
|
if [ "${stdenv.system}" = "aarch64-linux" ]
|
|
then ln -sf ${python3}/bin/python3 \
|
|
opt/Whalebird/resources/app.asar.unpacked/node_modules/better-sqlite3/build/node_gyp_bins/python3
|
|
fi
|
|
asar extract opt/Whalebird/resources/app.asar "$TMP/work"
|
|
substituteInPlace "$TMP/work/dist/electron/main.js" \
|
|
--replace "$(grep -oE '.{2},"tray_icon.png"' "$TMP/work/dist/electron/main.js")" \
|
|
"\"$out/opt/Whalebird/resources/build/icons/tray_icon.png\""
|
|
asar pack --unpack='{*.node,*.ftz,rect-overlay}' "$TMP/work" opt/Whalebird/resources/app.asar
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir $out
|
|
mv opt $out
|
|
|
|
# install icons
|
|
for icon in $out/opt/Whalebird/resources/build/icons/*.png; do
|
|
mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps"
|
|
ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/whalebird.png"
|
|
done
|
|
|
|
makeWrapper ${electron}/bin/electron $out/bin/whalebird \
|
|
--add-flags $out/opt/Whalebird/resources/app.asar \
|
|
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = with lib; {
|
|
description = "Electron based Mastodon, Pleroma and Misskey client for Windows, Mac and Linux";
|
|
homepage = "https://whalebird.social";
|
|
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
|
license = licenses.gpl3Only;
|
|
maintainers = with maintainers; [ wolfangaukang colinsane weathercold ];
|
|
platforms = [ "x86_64-linux" "aarch64-linux" ];
|
|
};
|
|
}
|