From ef29ebf891e39cf1ecb91fc304cee856f0b8c974 Mon Sep 17 00:00:00 2001 From: Niko Cantero <97130632+nyabinary@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:44:48 -0400 Subject: [PATCH 1/3] legcord: 1.1.0 -> 1.1.1 --- pkgs/by-name/le/legcord/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/le/legcord/package.nix b/pkgs/by-name/le/legcord/package.nix index dc5f54495fddc..a59b58c1d8baa 100644 --- a/pkgs/by-name/le/legcord/package.nix +++ b/pkgs/by-name/le/legcord/package.nix @@ -12,13 +12,13 @@ }: stdenv.mkDerivation rec { pname = "legcord"; - version = "1.1.0"; + version = "1.1.1"; src = fetchFromGitHub { owner = "Legcord"; repo = "Legcord"; rev = "v${version}"; - hash = "sha256-IfRjblC3L6A7HgeEDeDrRxtIMvWQB3P7mpq5bhaHWqk="; + hash = "sha256-0RbLvRCvy58HlOhHLcAoErRFgYxjWrKFQ6DPJD50c5Q="; }; nativeBuildInputs = [ @@ -30,7 +30,7 @@ stdenv.mkDerivation rec { pnpmDeps = pnpm_9.fetchDeps { inherit pname version src; - hash = "sha256-LbHYY97HsNF9cBQzAfFw+A/tLf27y3he9Bbw9H3RKK4="; + hash = "sha256-UivO0e50zGNV69AaV4RilmJ9L6L6lctUrUh9CVIOry4="; }; ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; From 32270bad8340e7bd645249118ea81cad36e13b2b Mon Sep 17 00:00:00 2001 From: Niko Cantero <97130632+nyabinary@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:45:57 -0400 Subject: [PATCH 2/3] legcord: refactor --- pkgs/by-name/le/legcord/package.nix | 86 +++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 22 deletions(-) diff --git a/pkgs/by-name/le/legcord/package.nix b/pkgs/by-name/le/legcord/package.nix index a59b58c1d8baa..39170d3ed8a40 100644 --- a/pkgs/by-name/le/legcord/package.nix +++ b/pkgs/by-name/le/legcord/package.nix @@ -2,48 +2,70 @@ lib, stdenv, fetchFromGitHub, - pnpm_9, + pnpm, nodejs, - electron_34, + electron, makeWrapper, copyDesktopItems, makeDesktopItem, + autoPatchelfHook, + pipewire, + libpulseaudio, nix-update-script, }: -stdenv.mkDerivation rec { + +stdenv.mkDerivation (finalAttrs: { pname = "legcord"; version = "1.1.1"; src = fetchFromGitHub { owner = "Legcord"; repo = "Legcord"; - rev = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-0RbLvRCvy58HlOhHLcAoErRFgYxjWrKFQ6DPJD50c5Q="; }; nativeBuildInputs = [ - pnpm_9.configHook + pnpm.configHook nodejs + # we use a script wrapper here for environment variable expansion at runtime + # https://github.com/NixOS/nixpkgs/issues/172583 makeWrapper copyDesktopItems + # legcord uses venmic, which is a shipped as a prebuilt node module + # and needs to be patched + autoPatchelfHook ]; - pnpmDeps = pnpm_9.fetchDeps { - inherit pname version src; - hash = "sha256-UivO0e50zGNV69AaV4RilmJ9L6L6lctUrUh9CVIOry4="; - }; + buildInputs = [ + libpulseaudio + pipewire + (lib.getLib stdenv.cc.cc) + ]; - ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; + pnpmDeps = pnpm.fetchDeps { + inherit (finalAttrs) pname version src; + hash = "sha256-zAf3EGIt/BWSZ9BMHWWVPWo3m+whnl/p+SahmpdLoZ4="; + }; buildPhase = '' runHook preBuild pnpm build - npm exec electron-builder -- \ + # Replicating the build step to copy venmic from the vendored node module manually, + # since the install script does not do this for whatever reason + cp ./node_modules/@vencord/venmic/prebuilds/venmic-addon-linux-x64/node-napi-v7.node ./dist/venmic-x64.node + cp ./node_modules/@vencord/venmic/prebuilds/venmic-addon-linux-arm64/node-napi-v7.node ./dist/venmic-arm64.node + + # Patch venmic before putting it into the ASAR archive + autoPatchelf ./dist + + pnpm exec electron-builder \ --dir \ - -c.electronDist="${electron_34.dist}" \ - -c.electronVersion="${electron_34.version}" + -c.asarUnpack="**/*.node" \ + -c.electronDist="${electron.dist}" \ + -c.electronVersion="${electron.version}" runHook postBuild ''; @@ -56,37 +78,57 @@ stdenv.mkDerivation rec { install -Dm644 "build/icon.png" "$out/share/icons/hicolor/256x256/apps/legcord.png" - makeShellWrapper "${lib.getExe electron_34}" "$out/bin/legcord" \ + # use makeShellWrapper (instead of the makeBinaryWrapper provided by wrapGAppsHook3) for proper shell variable expansion + # see https://github.com/NixOS/nixpkgs/issues/172583 + makeShellWrapper "${lib.getExe electron}" "$out/bin/legcord" \ --add-flags "$out/share/lib/legcord/resources/app.asar" \ "''${gappsWrapperArgs[@]}" \ - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations,WebRTCPipeWireCapturer --enable-wayland-ime=true}}" \ --set-default ELECTRON_IS_DEV 0 \ --inherit-argv0 runHook postInstall ''; + env = { + ELECTRON_SKIP_BINARY_DOWNLOAD = 1; + }; + desktopItems = [ (makeDesktopItem { name = "legcord"; + genericName = "Internet Messenger"; desktopName = "Legcord"; exec = "legcord %U"; icon = "legcord"; - comment = meta.description; - categories = [ "Network" ]; + comment = finalAttrs.meta.description; + keywords = [ + "discord" + "vencord" + "electron" + "chat" + ]; + categories = [ + "Network" + "InstantMessaging" + "Chat" + ]; startupWMClass = "Legcord"; terminal = false; }) ]; - passthru.updateScript = nix-update-script { }; + passthru = { + inherit (finalAttrs) pnpmDeps; + updateScript = nix-update-script { }; + }; - meta = with lib; { + meta = { description = "Lightweight, alternative desktop client for Discord"; homepage = "https://legcord.app"; downloadPage = "https://github.com/Legcord/Legcord"; - license = licenses.osl3; - maintainers = with maintainers; [ + license = lib.licenses.osl3; + maintainers = with lib.maintainers; [ wrmilling water-sucks ]; @@ -96,4 +138,4 @@ stdenv.mkDerivation rec { ]; mainProgram = "legcord"; }; -} +}) From 4d50cf24f2649f2000dc5a6616cbf8f15b8ea09c Mon Sep 17 00:00:00 2001 From: Niko Cantero <97130632+nyabinary@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:46:40 -0400 Subject: [PATCH 3/3] legcord: add nyabinary as maintainer --- pkgs/by-name/le/legcord/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/le/legcord/package.nix b/pkgs/by-name/le/legcord/package.nix index 39170d3ed8a40..2bfd59135d5b1 100644 --- a/pkgs/by-name/le/legcord/package.nix +++ b/pkgs/by-name/le/legcord/package.nix @@ -131,6 +131,7 @@ stdenv.mkDerivation (finalAttrs: { maintainers = with lib.maintainers; [ wrmilling water-sucks + nyabinary ]; platforms = [ "x86_64-linux"