app-id: com.pears.pass runtime: org.gnome.Platform runtime-version: '49' sdk: org.gnome.Sdk command: pearpass finish-args: - --share=ipc - --share=network - --socket=x11 - --socket=fallback-x11 - --socket=system-bus - --device=dri - --filesystem=home - --filesystem=xdg-config/pear:create - --talk-name=org.freedesktop.Notifications - --talk-name=org.freedesktop.secrets - --system-talk-name=org.freedesktop.DBus - --system-talk-name=org.bluez - --system-talk-name=org.freedesktop.UPower modules: - name: pearpass buildsystem: simple build-commands: # ── Extract AppImage ────────────────────────────────────────────── - chmod +x PearPass.AppImage - ./PearPass.AppImage --appimage-extract # ── Install extracted AppImage payload ──────────────────────────── - mkdir -p /app/lib/pearpass - cp -a squashfs-root/. /app/lib/pearpass/ # ── Install wrapper script ──────────────────────────────────────── - mkdir -p /app/bin - | cat > /app/bin/pearpass <<'WRAPPER' #!/bin/sh APP_ROOT="/app/lib/pearpass" export LD_LIBRARY_PATH="$APP_ROOT${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" # Force X11 backend: Wayland auto-detection inside the flatpak sandbox # is unreliable and was producing a black window on CI-built bundles. # X11 works natively on X11 sessions and via XWayland on Wayland sessions. export GDK_BACKEND=x11 cd "$APP_ROOT" exec "$APP_ROOT/pearpass-app-desktop" \ --no-sandbox \ --disable-gpu \ --disable-gpu-sandbox \ --disable-dev-shm-usage \ --enable-features=UseOzonePlatform \ --ozone-platform=x11 \ "$@" WRAPPER - chmod +x /app/bin/pearpass # ── Native messaging host entry point ──────────────────────────── # Invoked via `flatpak run --command=pearpass-native-host com.pears.pass` # by the host-side wrapper script that Chrome's Native Messaging API # launches. Runs the bridge bundle through Electron's embedded Node. - | cat > /app/bin/pearpass-native-host <<'NMHOST' #!/bin/sh # Call the Electron binary directly, bypassing the pearpass-app-desktop # shell launcher which unconditionally injects --no-sandbox. Under # ELECTRON_RUN_AS_NODE=1 the binary runs as Node and rejects that flag, # causing Chrome to see "Native host has exited". APP_ROOT="/app/lib/pearpass" export LD_LIBRARY_PATH="$APP_ROOT${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" export ELECTRON_RUN_AS_NODE=1 exec "$APP_ROOT/pearpass-app-desktop.bin" \ "$APP_ROOT/resources/app/dist/native-messaging-bridge.bundle.cjs" \ "$@" NMHOST - chmod +x /app/bin/pearpass-native-host # ── Desktop integration ─────────────────────────────────────────── - install -Dm644 com.pears.pass.desktop /app/share/applications/com.pears.pass.desktop - install -Dm644 com.pears.pass.metainfo.xml /app/share/metainfo/com.pears.pass.metainfo.xml # ── Install icon (pre-resized to 512x512 by build script) ──────── - install -Dm644 icon-512.png /app/share/icons/hicolor/512x512/apps/com.pears.pass.png sources: - type: file path: appimage/PearPass.AppImage - type: file path: com.pears.pass.desktop - type: file path: com.pears.pass.metainfo.xml - type: file path: icon-512.png