Thank you for your interest in contributing to DevWatch! This document provides guidelines to help you get started.
If this is your first GNOME extension contribution, start with the quick path:
- Install dependencies for your distro
- Run
make link - Enable extension:
gnome-extensions enable devwatch@github.io - Tail logs with
make log - Make a small change and reload to verify your environment works
| Tool | Purpose |
|---|---|
| GNOME Shell 45-49 | Runtime for the extension |
ss |
Port scanning (from iproute2) |
git |
Project root detection |
glib-compile-schemas |
Compiles GSettings schemas |
make |
Build automation |
gettext |
i18n tooling |
Ubuntu / Debian:
sudo apt update
sudo apt install -y git make gettext-base gettext gnome-shell-extension-prefs libglib2.0-binFedora:
sudo dnf install -y git make gettext gnome-extensions-appArch Linux:
sudo pacman -S --needed git make gettext gnome-extensions# 1. Fork and clone the repository
git clone https://github.com/<your-username>/DevWatch.git
cd DevWatch
# 2. Compile schemas and symlink files into GNOME
make link
# 3. Enable the extension
gnome-extensions enable devwatch@github.io
# 4. Confirm it is enabled
gnome-extensions info devwatch@github.io
# 5. Reload GNOME Shell (if changes do not appear immediately)
# Wayland: log out and back in
# X11: killall -SIGUSR1 gnome-shell- Edit any
.jsor.cssfile - Re-link files (important after adding files or schema changes):
make link
- Disable and re-enable the extension:
gnome-extensions disable devwatch@github.io && sleep 1 && gnome-extensions enable devwatch@github.io
- Watch logs for errors:
make log
A nested GNOME Shell runs inside a window — safe for testing:
make nested
# Inside the nested window, open a terminal and run:
gnome-extensions enable devwatch@github.ioNote: Run
make nestedfrom a native GNOME Terminal (not VS Code terminal), as it requires$WAYLAND_DISPLAY.
After creating any new .js, .css, .json, or schema file, re-run:
make link- Language: GJS (GNOME JavaScript) with ES Modules (GNOME 45+ syntax)
- Indentation: 4 spaces (no tabs)
- Strings: Single quotes preferred
- Naming:
camelCasefor variables/functions,PascalCasefor classes - UI strings: Wrap all user-facing text in
_('...')for i18n - Async: Prefer existing helpers in
utils/subprocess.jsand never block the main loop - No external dependencies — everything runs on GJS + system tools
Run this quick checklist:
make link
gnome-extensions disable devwatch@github.io && sleep 1 && gnome-extensions enable devwatch@github.io
gnome-extensions info devwatch@github.ioThen verify:
- The extension loads without GNOME Shell errors (
make log) - Your feature/fix works with real menu interactions (expand/collapse, buttons)
- Existing behavior is not regressed (ports, sessions, build activity)
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes
- Test in a nested session (
make nested) - Commit using Conventional Commits:
feat: add new featurefix: resolve port scanning bugstyle: adjust padding in project rowsdocs: update installation guidechore: clean up unused variables
- Push and open a Pull Request against the
mainbranch
When opening the PR, include:
- What changed
- Why it changed
- How you tested it
- Screenshots/GIFs for UI changes
# 1. Add your locale code to po/LINGUAS
echo "de" >> po/LINGUAS # German example
# 2. Extract strings and create .po file
make update-po
# 3. Translate strings in po/<lang>.po
# 4. Compile and test
make compile-mo
make linkUse GitHub Issues. Include:
- GNOME Shell version (
gnome-shell --version) - Distribution and version
- Steps to reproduce
- Relevant log output (
make logorjournalctl -o cat /usr/bin/gnome-shell)
DevWatch/
├── extension.js ← Entry point (ESM, GNOME 45+)
├── prefs.js ← GTK4/Adw preferences window
├── metadata.json ← Extension identity & GNOME version compatibility
├── stylesheet.css ← St widget CSS
├── Makefile ← Dev helpers (link, pack, i18n, log, …)
├── core/ ← Data layer — no UI, pure logic
├── ui/ ← Stateless UI renderers
├── utils/ ← Async subprocess, /proc reader, i18n helpers
├── schemas/ ← GSettings schema definition
└── po/ ← Translation source files
By contributing, you agree that your contributions will be licensed under the MIT License.