Skip to content

feat(browser): replace Chromium with Helium - #83

Merged
repparw merged 4 commits into
mainfrom
t3code/e1c147e5
Sep 16, 2026
Merged

repparw merged 4 commits into
mainfrom
t3code/e1c147e5

Conversation

@repparw

@repparw repparw commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Summary

  • replace the secondary Chromium installation with Helium while leaving Firefox as the primary browser
  • make the generic webapp helper launch-or-focus app windows through ndrop -F
  • use simple app IDs/classes (youtube, chatgpt, etc.) rather than browser-prefixed names
  • route the Niri YouTube binding through webapp youtube https://www.youtube.com
  • update the YouTube Niri window rule to match the new youtube app ID
  • preserve Chromium's accessibility/debugger flags and native-messaging integration
  • provision the existing Chromium extension set for Helium and add Bitwarden

Webapp interface

webapp <app-id> <url> [helium args...]

The helper runs Helium in --app mode with --class=<app-id> and uses ndrop -F -c <app-id> so repeated launches focus the existing app window instead of opening duplicates.

Runtime checks

Before merging, verify:

  • nixos-rebuild build --flake .#alpha
  • webapp youtube https://www.youtube.com opens a standalone Helium app window
  • launching it again focuses the existing youtube window
  • closing a normal Helium window leaves the webapp open
  • Mod+Y focuses/launches YouTube and the youtube window still opens on HDMI-A-1
  • externally provisioned extensions appear in helium://extensions
  • native messaging still works for Open in Firefox

Copilot AI lite review requested due to automatic review settings September 9, 2026 22:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@repparw repparw closed this Sep 15, 2026
@repparw repparw reopened this Sep 15, 2026
Helium/Chromium on native Wayland ignores --class for --app windows and
exposes chrome-<host>__<path>-Default (e.g. youtube ->
chrome-www.youtube.com__-Default). ndrop -c exact-matches app_id, so
webapp never matched and spawned a duplicate on every invocation.
Derive the id from the URL for ndrop matching, drop the ineffective
--class (it would also mislabel later normal windows when the webapp
starts the first browser process), and point the Niri YouTube rule at
the derived id so it still opens on HDMI-A-1.
Helium's user-data-dir on Linux is ~/.config/net.imput.helium (live
Default/, SingletonSocket and crashpad database all live there), so the
External Extensions descriptors and the NativeMessagingHosts manifest
under ~/.config/helium were never seen: none of the 7 extension IDs
appear in Preferences. Verified live that a descriptor placed under
<profile>/External Extensions/ triggers an update-server fetch, and
that platform policies are read from /etc/chromium (dropping the dead
/etc/helium copy).
Helium strips update-ping parameters (sends os=win with no prodversion
or lang), so the update server answers noupdate and external_update_url
descriptors never install anything: only uBlock Origin (bundled) showed
up after the descriptor fix. Vendor the 7 CRXs with pinned versions and
hashes and install them via external_crx + external_version instead.
Verified in a fresh profile: all 7 install on first launch.
@repparw
repparw merged commit 26fe5a9 into main Sep 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants