{ lib, buildNpmPackage, pnpm_10, fetchPnpmDeps, pnpmConfigHook, nodejs_24, fetchFromGitHub, }: buildNpmPackage ( finalAttrs: let pnpm = pnpm_10.override { nodejs = nodejs_24; }; matrixrtcSrc = fetchFromGitHub { owner = "SableClient"; repo = "matrix-rtc"; rev = "519fe6b863cfac78700f4e2b1748649103bb8a8d"; hash = "sha256-n5f7529RdRxY8/a43Xkgrhg4yRz5aNgfoZqWrB7kvak="; }; livekitMobileSrc = fetchFromGitHub { owner = "SableClient"; repo = "tauri-plugin-livekit-mobile"; rev = "c6f0d02ab3da1174535bc1dc8e598a2e6873f977"; hash = "sha256-ZPx6Ic+Gkvzg9LXYP9BaQALzOrvLCcQHOms8U3VfnU0="; }; in { pname = "sable-unwrapped"; version = "1.21.0"; src = fetchFromGitHub { owner = "SableClient"; repo = "Sable"; tag = "v${finalAttrs.version}"; hash = "sha256-vYoKNflV4vdJpgYVxYCxAQhvqDh1Qf+7qgIFHxriTTU="; }; nodejs = nodejs_24; nativeBuildInputs = [ pnpm ]; npmConfigHook = pnpmConfigHook; npmDeps = finalAttrs.pnpmDeps; pnpmDeps = fetchPnpmDeps { inherit (finalAttrs) pname version src; inherit pnpm; fetcherVersion = 3; hash = "sha256-tzIU/5DQ4SpLABKOt6/Z2aD2d6nVt+MJvY7vHHnO4No="; }; npmInstallFlags = [ "--ignore-scripts" ]; preBuild = '' cp -r --no-preserve=mode ${matrixrtcSrc}/. node_modules/@sableclient/matrixrtc/ pnpm exec tsc -p node_modules/@sableclient/matrixrtc/tsconfig.build.json cp -r --no-preserve=mode ${livekitMobileSrc}/. node_modules/@sableclient/tauri-plugin-livekit-mobile/ pnpm exec tsc \ -p node_modules/@sableclient/tauri-plugin-livekit-mobile/tsconfig.json \ --noEmit false \ --declaration \ --rootDir node_modules/@sableclient/tauri-plugin-livekit-mobile/guest-js \ --outDir node_modules/@sableclient/tauri-plugin-livekit-mobile/dist-js ''; installPhase = '' runHook preInstall cp -r dist $out runHook postInstall ''; meta = { description = "An almost stable Matrix client"; homepage = "https://app.sable.moe/"; maintainers = with lib.maintainers; [ wymillerlinux ]; license = lib.licenses.agpl3Only; platforms = lib.platforms.all; }; } )