Watch
1
0
Fork
You've already forked souveraine
0
souveraine/.handoff-from-phone/discord-betterdiscord/TASK.md
Fimeg 19fe6b1d0e shell: dock reorder, fullscreen detection fix, idle-power, sessiond, misc shell work
- Dock drag-to-reorder for pinned apps (insertion gap, quick-slide vs dwell)
- Fullscreen detection: scan all windows via HyprlandData.windowList
- IdleCoordinator, GlobalStates, Session.qml updates
- Deploy script, qmldir, settings, wallpaper, visualizer fixes
- sessiond server, memory module updates

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-22 22:18:20 -04:00

5.7 KiB

Task: Official Discord + BetterDiscord on SouveraineOS (Pixel 3, aarch64)

Status: BLOCKED on native Electron. Plan: cross-build Electron (and/or the Discord package) on an x86 box or a beefier arm64 host, ship the artifacts back to the phone.

Goal: Run the official Discord desktop client on this device and inject BetterDiscord into it (theming + plugins). Wrappers (Vesktop/WebCord/Legcord) were explicitly rejected — we want stock Discord + BetterDiscord specifically.


Device facts (verified on-device 2026-07-14)

  • OS: Souveraine OS (Arch Linux ARM), ID_LIKE=arch, BUILD_ID 20260707
  • Arch: aarch64
  • Pkg mgrs: pacman, flatpak (flathub system remote). AUR helpers present: yay, paru.
  • Repo bun NOT present; installed manually to ~/.bun/bin/bun (v1.3.14 aarch64).
  • ~/.config/discord exists but is EMPTY (no app version dir) — nothing to inject into yet.

What's in the repos (checked with pacman -Ss)

  • extra/betterdiscordctl 1.6.1-1 — BD manager CLI, installable, needs a Discord install to act on
  • extra/asar 4.1.2-1 — makedep for the Discord PKGBUILD
  • jq, brotli — present
  • NO electron package in any form (no electron, no electron36/37/...). pacman -Ssq electron returns nothing. THIS IS THE BLOCKER.

Flathub (all bundle their own Electron → run on arm64, but can't take BetterDiscord)

Vesktop dev.vencord.Vesktop, Equibop org.equicord.equibop, WebCord io.github.spacingbat3.webcord, Dissent so.libdb.dissent, Legcord, GoofCord. (Vesktop/Equibop have Vencord = plugins+themes, the closest BD-equivalent. Rejected for now.)


Already done (in /home/casey/projects/BetterDiscord)

BetterDiscord cloned from GitHub + built successfully:

  • git clone --depth 1 https://github.com/BetterDiscord/BetterDiscord.git
  • bun install (510 pkgs) then bun run build:productionsucceeded
  • Artifacts in dist/: betterdiscord.js (555kb), main.js, preload.js, earlyRenderer.js, editor bundle. Version 1.13.14, commit c7ef1c5.
  • bun run inject → fails as expected: "No version dir in /home/casey/.config/discord" (no official Discord app to patch).

Injector expects a Discord Desktop install dir like app-X.Y.Z under the config path.


The install path (why it's almost possible)

The AUR pkg discord_arch_electron (v1:1.0.146, 209 votes) is the target. Its PKGBUILD (saved alongside this file as PKGBUILD.x86-reference) shows Discord's Linux app is JavaScript + app.asar + brotli .distro module blobs — arch-independent. The ONLY native pieces are:

  1. Electron (the runtime) — pulled via depends=(electron). ← the real arch dependency
  2. discord_krisp/discord_krisp.node — x86-64 native noise-cancel lib; its krisp-patcher.py step WILL fail on aarch64. Krisp is OPTIONAL — comment it out, Discord still runs (PKGBUILD even says so).

So a working aarch64 build = provide an arm64 Electron + skip Krisp + flip arch.

Concrete cross-build plan

  1. Get/build an aarch64 Electron matching Discord's required major (Discord 1.0.146 era ships on a recent Electron — check core/resources/app/package.json electronVersion or the bundled build_info after extracting the tarball). Options:
    • Build the Arch electron PKGBUILD for aarch64 on a cross host (heavy: Chromium).
    • OR reuse a prebuilt arm64 Electron (e.g. from npm electron arm64 dist, or Alpine/Debian arm64 electron) and repackage.
  2. Fork the discord_arch_electron PKGBUILD:
    • arch=('x86_64' 'aarch64')
    • point depends at whatever electron pkg you produce (or vendor it)
    • COMMENT OUT the Krisp patcher block in build() (lines ~131-139) and the discord_krisp source line — OR guard it [[ $CARCH == x86_64 ]].
    • The .distro module URLs are /linux/x64/ paths but contents are JS/resources; they should work under arm64 electron. Verify at runtime.
  3. makepkg -si on-device (or build the pkg on the cross host and pacman -U the .pkg.tar.zst here).
  4. Once /usr/share/discord + /usr/bin/discord exist and launch:
    • betterdiscordctl install (repo pkg already available) — OR —
    • from ~/projects/BetterDiscord: bun run inject (now finds the app dir).
  5. Launch Discord, confirm BetterDiscord loaded (Settings → BetterDiscord panel).

Risks / open questions

  • Electron major-version mismatch vs what Discord's app.asar expects → white screen / API breakage. Match the major as closely as possible.
  • Voice: without Krisp, noise suppression off, but voice/WebRTC should still work (Electron's).
  • Discord may nag to "update" — PKGBUILD already sets newUpdater=false in build_info.json; keep that.
  • app.asar is repacked to use system electron paths (/usr/share/discord/resources); BetterDiscord injects into that asar/app — make sure BD inject runs AFTER the pkg's asar repack, against the installed /usr/share/discord/resources/app.asar.

Resume checklist (fast path)

  • Produce aarch64 Electron artifact (matching Discord's electron major)
  • Fork PKGBUILD: arch+=aarch64, swap electron dep, disable Krisp
  • Build pkg (cross or on-device), install with pacman
  • discord launches to login screen on the phone
  • Inject BetterDiscord (betterdiscordctl install or bun run inject from ~/projects/BetterDiscord)
  • Verify BD settings panel appears; load a theme/plugin

Key paths

  • BetterDiscord source+build: /home/casey/projects/BetterDiscord (dist/ built, v1.13.14)
  • This task dir: /home/casey/projects/unfinished/discord-betterdiscord/
  • Reference PKGBUILD: ./PKGBUILD.x86-reference
  • bun binary: ~/.bun/bin/bun