# GNOME Shell extensions All extensions are packaged automatically. They can be found in the `pkgs.gnomeXYExtensions` where XY is a GNOME version. The package names are the extensions' UUIDs, which can be a bit unwieldy to use. `pkgs.gnomeExtensions` is a set of manually curated extensions that match the current `pkgs.gnome-shell` versions. Their names are human-friendly, compared to the other extension sets. Some of its extensions are manually packaged. ## Automatically packaged extensions The actual packages are created by `buildGnomeExtension.nix`, provided the correct arguments are fed into it. The important extension data is stored in `extensions.json`, one line/item per extension. That file is generated by running `update-extensions.py`. Furthermore, the automatically generated names are dumped in `collisions.json` for manual inspection. `extensionRenames.nix` contains new names for all extensions that collide. ### Extensions updates #### For everyday updates: 1. Run `update-extensions.py`. 2. Update `extensionRenames.nix` according to the comment at the top. #### To package the extensions for a new GNOME version: 1. Add a new `gnomeXYExtensions` set in `default.nix`. 2. Update `all-packages.nix` accordingly. (grep for `gnomeExtensions`) 3. Update `supported_versions` in `update-extensions.py`. 4. Follow the [For everyday updates](#for-everyday-updates) section. #### For GNOME updates: 1. Follow the [To package the extensions for new GNOME version](#to-package-the-extensions-for-new-gnome-version) section, if required. 2. Update `versions_to_merge` variable in `./update-extensions.py`. 3. Run `update-extensions.py --skip-fetch`, and update `extensionRenames.nix` according to the comment at the top. 4. Update `gnomeExtensions` in `default.nix` to the new versions. ## Manually packaged extensions Manually packaged extensions overwrite some of the automatically packaged ones in `pkgs.gnomeExtensions`. They are listed in `manuallyPackaged.nix`; every extension has its own sub-folder.