GNOME Shell extension that shows a GitHub-style contribution grid for a selected account in a top bar popup.
- Shows the last 365 days of GitHub contribution activity
- Renders a GitHub-style grid directly in the GNOME top bar popup
- Uses a configurable GitHub username
- Supports manual refresh and timed background refresh
- Displays summary data including total contributions, peak day, and longest streak
- Includes a preferences window for username and refresh interval
- GNOME Shell
46or49 glib-compile-schemasgnome-extensionsgjs- GPL-3.0-or-later license for EGO submission compatibility
-
Copy the extension directory into the local GNOME extensions directory:
mkdir -p ~/.local/share/gnome-shell/extensions/github-grid@walidozich cp -r github-grid@walidozich/. ~/.local/share/gnome-shell/extensions/github-grid@walidozich/
-
Compile the schema:
glib-compile-schemas ~/.local/share/gnome-shell/extensions/github-grid@walidozich/schemas -
On Wayland, log out and log back in if GNOME does not immediately discover the extension.
-
Check that GNOME sees the extension:
gnome-extensions info github-grid@walidozich
-
Open preferences and set the GitHub username:
gnome-extensions prefs github-grid@walidozich
-
Enable the extension:
gnome-extensions enable github-grid@walidozich
Build a distributable extension bundle with:
./scripts/package.shThis writes:
dist/github-grid@walidozich.shell-extension.zip
Install the built bundle with:
gnome-extensions install -f dist/github-grid@walidozich.shell-extension.zipThe current upload-ready bundle target is:
dist/github-grid@walidozich.shell-extension.zip
Submission preparation completed:
- license switched to GPL-3.0-or-later
metadata.jsonincludes a homepage URL- the pack script explicitly includes the contribution data modules
- the bundle excludes repository-only files such as screenshots, tests, and the repo root documentation
Before uploading to extensions.gnome.org, verify:
./scripts/package.shunzip -l dist/github-grid@walidozich.shell-extension.zip- confirm the archive contains:
metadata.json,extension.js,prefs.js,stylesheet.css,contributionData.js, and the schema files - upload the zip through the EGO upload form
For local iteration without reinstalling the zip each time:
cp -r github-grid@walidozich/. ~/.local/share/gnome-shell/extensions/github-grid@walidozich/
glib-compile-schemas ~/.local/share/gnome-shell/extensions/github-grid@walidozich/schemas
gnome-extensions disable github-grid@walidozich || true
gnome-extensions enable github-grid@walidozichIf GNOME Shell appears to hold stale module state on Wayland after code changes, log out and log back in.
- The extension fetches public contribution data from GitHub's contributions endpoint
- It parses GitHub's current contribution markup and extracts real counts from the tooltip elements associated with each day cell
- It renders the data as week columns in a GNOME Shell popup
- It summarizes the visible range with total contributions, peak day, and longest streak
The extension stores these settings:
usernamerefresh-interval-minutesgithub-tokencached-result
Current behavior:
usernamecontrols the GitHub account shown in the popuprefresh-interval-minutescontrols background refresh timinggithub-tokenis reserved for future authenticated API supportcached-resultstores the last successful payload for faster startup
Run the local smoke tests with:
gjs -m tests/contributions-smoke.js
glib-compile-schemas github-grid@walidozich/schemasWhat has been verified:
- shared parsing and summary logic through
gjssmoke tests - GNOME Shell extension discovery and activation
- valid username handling
- invalid username handling
- refresh path behavior
- rolling 365-day grid rendering
- chronological day ordering
- real count extraction from GitHub tooltip markup
Manual runtime checks are documented in:
tests/manual-runtime-checklist.md
github-grid@walidozich/
├── contributionData.js
├── extension.js
├── metadata.json
├── prefs.js
├── schemas/
│ └── org.gnome.shell.extensions.github-grid.gschema.xml
└── stylesheet.css
- The popup is intentionally placed in the top bar instead of the notification list so it remains easy to reopen
- GitHub may change the structure of the contributions markup in the future; parsing logic may need updates if that happens
- A logout/login cycle can be necessary on Wayland when GNOME Shell caches imported extension modules

