gnome-shell-extension-local-devlisted
Install: claude install-skill papanito/ai-skills
# GNOME Shell Extension Local Dev (GNOME 46–50)
## When to use
Creating, iterating on, or packaging a GNOME Shell extension. Covers project structure, import paths, gettext, threading, live install/enable, debugging, and CI packaging.
## Project structure (GNOME 50 verified)
```
<uuid>@<domain>/
metadata.json # uuid, name, shell-version[], version (int), version-name (str), settings-schema, gettext-domain
extension.js # import { Extension, gettext as _ } from 'resource:///org/gnome/shell/extensions/extension.js'
prefs.js # import { ExtensionPreferences } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'
codeburn.js (etc) # helper modules — receive gettext as a parameter, never import it
stylesheet.css
schemas/<schema>.gschema.xml
install.sh # symlink/enable/reload script (pure bash)
Makefile # install/link/uninstall/schemas targets
.gitlab-ci.yml # pack/validate/upload/release pipeline
```
UUID format: `name@domain.tld`. The extension dir name MUST equal the uuid.
## Import paths (critical — getting either wrong silently breaks loading)
- **extension.js**: `import { Extension, gettext as _ } from 'resource:///org/gnome/shell/extensions/extension.js'` (lowercase `shell`)
- **prefs.js**: `import { ExtensionPreferences } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'` (capital `Shell/Extensions`, different path `js/extensions/prefs.js`)
- **helper