About
GNOME 3 introduced an extensions framework that allows its users to extend the desktop shell by writing extensions using JavaScript and CSS. It works quite well and dozens of extensions have already been uploaded to the extensions site. Some of these solve some annoyances that users typically share with GNOME, while others add useful functionality.
During DebCamp last year, I started packaging some of these for Debian. That’s been going really well. Now that Ubuntu is finally dropping Unity in favour of GNOME, it helps to serve as a nudge to get this blog post out that’s been stuck in drafts. These extensions also make their way into Ubuntu and other Debian/Ubuntu derivatives.
Here are some extensions I’ve been packaging that’s already in the archive:

Provides a multitude of options for the shell dock. Not only really useful but also well maintained by upstream, see their website for more info. This is a great extension if you support previous Unity users, since you can set your panel to look and behave very similarly to Unity. I think the app launcher is slightly better in Gnome because apps are easier to discover.
Simple extension that hides the “Activities” button from the top left corner.

Speeds up shell animations. Animations can make the system more usable, but it can also be either distracting or cause some slight delays while waiting for the animation to complete. This gives you a sliding scale that lets you choose how much you’d like to speed it up.
Simple extension that moves the clock from the center of the panel to the right.
In gnome-shell, network manager doesn’t automatically refresh the list of available network, which can be quite annoying. Currently a user has to turn wifi off and back on in order to see a refreshed list. This has been fixed upstream and will be in the next version of GNOME. In the meantime, this extension fixes that.
Update: Refreshing wifi in the background has been fixed in Gnome 3.22.2, which is now in stretch. This extension will be removed from the archives.
Items in the top panel contain dropdown arrows, which are useful for new users who might not be aware that they expand into more entries. For more experience users, the arrows tend to result in extra clutter in the panel, this extension hides those arrows.
This allows you to hover over the volume control indicator and scroll up and down to increase/decrease the volume. Probably another extension that should really just be integrated into gnome-shell by default.

Many new laptops either don’t have a hard disk L.E.D. anymore, or they hide it so that it’s not really all that visible. This extension shows you hard disk activity in your panel. There’s also work being done to make it report reads and writes separately. I’ll be looking at backporting that when it’s available.
Allows you to disconnect from the current network without having to turn off wi-fi entirely.
Title bars can be incredibly pixel-hungry, which isn’t great on small displays. This extension hides the title bar when a window is maximised, and adds control buttons for that window to the top panel.

Displays a trash icon to the top panel when there are items in trash. From there you can view or delete the trash contents.
This extension adds some tweaks for users of multiple monitors. It’s most useful feature is that you can have desktop overviews on both displays and easily move apps between them.
More extensions
Here are some more extensions packaged in Debian that others have packaged:
- gnome-shell-extension-shortcuts – shows a keyboard shortcut overlay
- gnome-shell-extension-show-ip – shows ip address in the notification area
- gnome-shell-extension-autohidetopbar – hide the top panel
- gnome-shell-extension-caffeine – prevents computer from suspending when enabled
- gnome-shell-extension-mediaplayer – control mediaplayer from the system menu
- gnome-shell-extension-redshift – change colour temperature to improve attention span and sleep paterns
- gnome-shell-extension-suspend-button – adds suspend shortcut
- gnome-shell-extension-taskbar – adds plenty of options for the top panel and optional bottom taskbar
- ugnome-shell-extension-top-icons-plus – moves system tray icons from the bottom hidden menu to the top
- gnome-shell-extension-weather – weather report in panel
- gnome-shell-extensions-gpaste – clipbook manager
- gnome-shell-extension-onboard – on screen keyboard manager
Didn’t make it this time
Both Debian and Ubuntu are in feature freeze right now, and the following didn’t make it in the archives in time, but should be in the following releases (they’re still installable via the extensions site in the meantime):
- gnome-shell-extension-remove-round-corners – remove round corners on top panel
- gnome-shell-extension-proxy-switcher – adds menu in system menu to quickly switch between proxy settings
- gnome-shell-extension-apt-update-indicator – show apt status and available upgrades
- gnome-shell-extension-uptime-indicator- indicator that displays uptime
- gnome-shell-extension-dash-to-panel – great extension that combines the dock into the top panel
- gnome-shell-extension-tilix-dropdown – shortcut configurator for tilix’s quake mode
Next steps
Consider auto-enable
Currently, when you install these debian packages, (most of) the extensions won’t be enabled by default. Users have to use the gnome-tweak-tool to enable them after installation. The rationale behind this is that a system administrator of a network of computers might only want to enable certain extensions for certain users. After some more consideration, I think such administrators will probably already have a system (like a configuration management system) in place to manage this. So, to make it easier for the typical user, I think it’s worth considering enabling these by default with installation. Feedback welcome :)
Debian team
The list of packaged extensions are growing fast, and it would be nice to have these team-maintained. It might be a good idea to start a team for this or use an existing team under the Debian gnome team namespace.
Packaging guide
I’ve packaged enough Gnome extensions to be aware of the typical gotchas and things that need fixing. They’re overall easy to package and a good place to start for someone who wants to get into packaging. I want to put together a good short guide on how to properly package gnome-shell extensions.
Anything else?
Any other extensions you’d like to see packaged? Let me know. Even better, package it yourself and help test my extension package guide (once it exists) so that we can improve that too.