Merge pull request #330251 from water-sucks/armcord-src

armcord: package from source
This commit is contained in:
tomberek 2024-08-02 02:11:44 -04:00 committed by GitHub
commit a3c4347a0b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,141 +1,83 @@
{ lib
, stdenv
, fetchurl
, autoPatchelfHook
, dpkg
, makeShellWrapper
, wrapGAppsHook3
, alsa-lib
, at-spi2-atk
, at-spi2-core
, atk
, cairo
, cups
, dbus
, expat
, ffmpeg
, fontconfig
, freetype
, gdk-pixbuf
, glib
, gtk3
, libappindicator-gtk3
, libdrm
, libnotify
, libpulseaudio
, libsecret
, libuuid
, libxkbcommon
, mesa
, nss
, pango
, systemd
, xdg-utils
, xorg
, wayland
, pipewire
, fetchFromGitHub
, pnpm
, nodejs
, electron_30
, makeWrapper
, copyDesktopItems
, makeDesktopItem
}:
stdenv.mkDerivation rec {
pname = "armcord";
version = "3.2.7";
src =
let
base = "https://github.com/ArmCord/ArmCord/releases/download";
in
{
x86_64-linux = fetchurl {
url = "${base}/v${version}/ArmCord_${version}_amd64.deb";
hash = "sha256-TFgO9ddz/Svi4QfugjTTejpV/m+xc1548cokzhVgwkw=";
};
aarch64-linux = fetchurl {
url = "${base}/v${version}/ArmCord_${version}_arm64.deb";
hash = "sha256-AJ4TSG3ry2P40vzK1fsaWgQ/O0z9r3z8+0uxSmddZKo=";
};
}.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
src = fetchFromGitHub {
owner = "ArmCord";
repo = "ArmCord";
rev = "v${version}";
hash = "sha256-+o/w3bYW3IR3APo7HppSMOTl+cU+01J+p1L0YrYgsUU=";
};
nativeBuildInputs = [ autoPatchelfHook dpkg makeShellWrapper wrapGAppsHook3 ];
nativeBuildInputs = [ pnpm.configHook nodejs makeWrapper copyDesktopItems ];
dontWrapGApps = true;
pnpmDeps = pnpm.fetchDeps {
inherit pname version src;
hash = "sha256-UJ3E/2+MspgVbRT7s6K4lGDvTQbWD3bwyICbJjctwDI=";
};
buildInputs = [
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
dbus
expat
ffmpeg
fontconfig
freetype
gdk-pixbuf
glib
gtk3
pango
systemd
mesa # for libgbm
nss
libuuid
libdrm
libnotify
libsecret
libpulseaudio
libxkbcommon
libappindicator-gtk3
xorg.libX11
xorg.libxcb
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXScrnSaver
xorg.libxshmfence
xorg.libXtst
wayland
pipewire
];
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
sourceRoot = ".";
unpackCmd = "dpkg-deb -x $src .";
buildPhase = ''
runHook preBuild
pnpm build
npm exec electron-builder -- \
--dir \
-c.electronDist="${electron_30}/libexec/electron" \
-c.electronVersion="${electron_30.version}"
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out/bin"
cp -R "opt" "$out"
cp -R "usr/share" "$out/share"
chmod -R g-w "$out"
mkdir -p "$out/share/lib/armcord"
cp -r ./dist/*-unpacked/{locales,resources{,.pak}} "$out/share/lib/armcord"
# use makeShellWrapper (instead of the makeBinaryWrapper provided by wrapGAppsHook3) for proper shell variable expansion
# see https://github.com/NixOS/nixpkgs/issues/172583
makeShellWrapper $out/opt/ArmCord/armcord $out/bin/armcord \
install -Dm644 "build/icon.png" "$out/share/icons/hicolor/256x256/apps/armcord.png"
makeShellWrapper "${lib.getExe electron_30}" "$out/bin/armcord" \
--add-flags "$out/share/lib/armcord/resources/app.asar" \
"''${gappsWrapperArgs[@]}" \
--prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland --enable-features=UseOzonePlatform --enable-features=WebRTCPipeWireCapturer }}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath buildInputs}" \
--suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
# Fix desktop link
substituteInPlace $out/share/applications/armcord.desktop \
--replace /opt/ArmCord/ $out/bin/
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
--set-default ELECTRON_IS_DEV 0 \
--inherit-argv0
runHook postInstall
'';
desktopItems = [
(makeDesktopItem {
name = "armcord";
desktopName = "ArmCord";
exec = "${placeholder "out"}/bin/armcord %U";
icon = "armcord";
comment = meta.description;
categories = [ "Network" ];
startupWMClass = "ArmCord";
terminal = false;
})
];
meta = with lib; {
description = "Lightweight, alternative desktop client for Discord";
homepage = "https://armcord.app";
downloadPage = "https://github.com/ArmCord/ArmCord";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.osl3;
maintainers = with maintainers; [ wrmilling ];
maintainers = with maintainers; [ wrmilling water-sucks ];
platforms = [ "x86_64-linux" "aarch64-linux" ];
mainProgram = "armcord";
};