Open Pulp (GNOME RSS) links into a dedicated Chromium tab group — Nix flake + MV3 extension
Nix 44%
Shell 34%
JavaScript 20%
HTML 2%
<1%

README.md

pulp-tab-group #

Open links from Pulp (GNOME RSS reader) into a dedicated Chromium tab group named Pulp.

Pulp only knows webbrowser.open(url). Chromium has no CLI for tab groups. This flake bridges them:

Pulp  ──$BROWSER──►  pulp-open-url-flatpak  ──host──►  pulp-open-url
                                                              │
                                                              ▼
                                              chrome-extension://…/open.html?url=…
                                                              │
                                                              ▼
                                              MV3 extension → tab group "Pulp"

Install #

# profile
nix profile add 'git+https://tangled.org/nandi.uk/pulp-tab-group'

# or one-shot
nix run 'git+https://tangled.org/nandi.uk/pulp-tab-group#setup'
nix run 'git+https://tangled.org/nandi.uk/pulp-tab-group' -- 'https://example.com'

Local checkout:

nix build .#
nix run .#setup

One-time Chromium step #

  1. Open chrome://extensions
  2. Enable Developer mode
  3. Load unpacked → the extension directory:
    • From the package:
      $(nix build --print-out-paths .#)/share/pulp-tab-group/extension
    • Or after Home Manager activation:
      ~/.local/share/pulp-tab-group/extension
  4. Confirm the id is baodhkncmldphoeohjmkdjdghgieniaj
    (pinned via the key field in manifest.json)

Wire Pulp (flatpak) #

pulp-tab-group-setup
# or: nix run .#setup

This sets a user flatpak override:

  • BROWSER → pulp-open-url-flatpak
  • flatpak-spawn --host talk name so the sandbox can reach the host opener

Fully quit and restart Pulp, then press o (Open in Browser) on an article.

Undo:

pulp-tab-group-setup --undo

Home Manager #

{
  inputs.pulp-tab-group.url = "git+https://tangled.org/nandi.uk/pulp-tab-group";

  # …
  home-manager.users.you = {
    imports = [ inputs.pulp-tab-group.homeModules.default ];
    # if the overlay is not applied:
    # programs.pulp-tab-group.package = inputs.pulp-tab-group.packages.${pkgs.system}.default;

    nixpkgs.overlays = [ inputs.pulp-tab-group.overlays.default ];
    programs.pulp-tab-group.enable = true;
  };
}

Activation will:

  1. Put pulp-open-url on PATH
  2. Sync the extension to ~/.local/share/pulp-tab-group/extension
  3. Apply the Pulp flatpak override (setupFlatpak = true by default)

You still need the one-time Load unpacked in Chromium (Chrome does not allow declarative unpacked install without enterprise policy).

Package layout #

Path Role
bin/pulp-open-url Host opener → extension landing page
bin/pulp-open-url-flatpak Sandbox wrapper (flatpak-spawn --host)
bin/pulp-tab-group-setup Flatpak override helper
share/pulp-tab-group/extension/ Chromium MV3 extension
share/pulp-tab-group/ext_id Stable extension id

Customize #

Knob How
Group title / color extension/background.js → GROUP_TITLE, GROUP_COLOR
Chromium binary PULP_TAB_GROUP_BROWSER
Profile directory PULP_TAB_GROUP_PROFILE (default Default)
Extension id PULP_TAB_GROUP_EXT_ID

Why not pure CLI? #

Chromium has no --tab-group=… switch (issue 40876419). The extension uses chrome.tabs + chrome.tabGroups after a tiny chrome-extension:// hop so only Pulp-originated opens are grouped — not every external link.

License #

MIT