some tab management helpers
  • JavaScript 55.4%
  • Python 21.8%
  • Nix 13.4%
  • HTML 9.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
jingus 641975d42c
All checks were successful
ci / flake-check (push) Successful in 50s
ci: consume attic-cache from main
2026-10-16 00:17:30 -05:00
.forgejo/workflows ci: consume attic-cache from main 2026-10-16 00:17:30 -05:00
assets init 2026-10-15 20:50:17 -05:00
e2e init 2026-10-15 20:50:17 -05:00
extension init 2026-10-15 20:50:17 -05:00
nix-modules init 2026-10-15 20:50:17 -05:00
test init 2026-10-15 20:50:17 -05:00
.envrc init 2026-10-15 20:50:17 -05:00
.gitignore init 2026-10-15 20:50:17 -05:00
flake.lock init 2026-10-15 20:50:17 -05:00
flake.nix init 2026-10-15 20:50:17 -05:00
README.md init 2026-10-15 20:50:17 -05:00

Tabberwockey

Tabberwockey placeholder icon

A chromium extension that enhances the experience of managing tab groups. I intend to use this with the Helium browser.

Features

Automatic Tab Grouping

For example, I want all GitLab MR tabs to automatically get put into an MRs group. These rules should persist and automatically apply.

This should basically happen when new tabs are created.

Persistent Tab Groups (Future)

I want to be able to state lifecycle rules for tab groups. I may want MR tabs to persist while other tabs are killed on close.

This should apply to customizations as well. If I say that the MRs tab group should be purple, it should be purple if I close all MRs and then open some more.

Tab Sourcing (Future)

I'd like to be able to define sources for the automatic opening of tabs. I'd like MRs to automatically be opened for example.

Loading the extension

  1. Open chrome://extensions in Helium (or any Chromium browser).
  2. Enable Developer mode.
  3. Click Load unpacked and select the extension/ directory.

Configure rules from the extension's Options page. Rules are regular expressions matched case-insensitively against tab URLs (first match wins) and persist via chrome.storage.sync.

The extension uses a placeholder icon; sized copies live in extension/icons/ and are generated from assets/placeholder-image.png:

nix shell nixpkgs#imagemagick --command bash -c 'for s in 16 32 48 128; do magick assets/placeholder-image.png -resize ${s}x${s} extension/icons/icon-${s}.png; done'

Development

Enter the dev shell (requires nix with flakes enabled):

nix develop
  • Unit tests: node --test "test/**/*.test.mjs"
  • E2E tests (drives a headless Chromium with the extension loaded): playwright test --config e2e/playwright.config.mjs
  • Everything CI runs: nix flake check

The dev shell links node_modules to nixpkgs' playwright-test package and points PLAYWRIGHT_BROWSERS_PATH at the nix-provided Chromium, so no npm install or browser download is needed.

Note: flakes only see git-tracked files. git add new files before running nix flake check.

CI

.forgejo/workflows/ci.yml runs nix flake check via Forgejo Actions. Adjust the runs-on label and container image to match your runner.