How to install Gnome Extensions globally and allow automatic updates?

I know how to install Gnome Extensions globally, by extracting them to /usr/share/gnome-shell/extensions/. I use this script (archived but works fine) to automate this via a single command per install. I use that in my own bash post-install script when I need to reinstall a laptop or parents pc.

However, with Fedora Silverblue, this info applies:
Technical Information :: Fedora Docs which means /usr is read-only.

  • Question 1: Where should I install Gnome Extensions globally for all users?
  • Even better is question 2: How should I install Gnome Extensions globally in such a way that they will be automatically updated?

One way I considered is by installing the awesome, non-officlal Gnome Extension Manager that functions like “Gnome Software” but for extensions; you can browse extensions, install them, manage them and it will keep them up to date. However, this only works for the user-installed extensions. Not globally installed extensions. It also cannot install extensions globally unfortunately.

Any ideas how to properly install a handful of extensions that I really need for my basic usage?

I need the following:

  • Arcmenu
  • Dash to Panel
  • Improved On Screen Keyboard
  • Allow Locked Remote Desktop
  • Desktop Icons NG
  • AppIndicator (for Panel)
  • Custom Hot Corners
  • would also love Bing Wallpapers optionally…

But manually keeping them up to date is a pain… usually you learn to update when something stops working… which is annoying for family members.

I believe what you want is:

  1. Learn how to write RPM specs
  2. Package the extensions as RPMs
  3. Create a COPR repo
  4. Distribute the extensions RPMs via the COPR repo
  5. Add the COPR repo in the systems
  6. Install from the COPR

After that you just need to keep the COPR working and you should see no problems.

You should also check first if somebody else is distributing the extensions you want, but then you will be telling on somebody’s else work.

Perhaps I should have introduced myself?
I am not a developer, not even close haha.

I believe what you are pointing at is rpm-ostree: I should try to find these extensions in rpm-ostree. If they are not there, my only option is to use user-level extension instead of global extensions.

Well, yes, what I mean is you should look for the GNOME Shell extensions in the official repos. The extensions there are in the format of gnome-shell-extension-{extension name}, you can search for that with either rpm-ostree search or dnf search.

Afaik, it’s only possible to write to /usr via overlaying RPMs, so, if they aren’t on the repos, you either search on COPR (basically user repos, like PPAs on deb-based distros) or fallback to local extensions.

Creating your own COPR is also a choice but you mentioned you are not a developer, so you likely you won’t want to learn the stuff needed for that.

I only see 47 packaged gnome-extensions in the rpm repo that I could layer per rpm-ostree on silverblue.

Most gnome-extensions I use I cannot find in the rpm repo.

awarda@fedora:~$ toolbox run dnf search gnome-shell-extension
Last metadata expiration check: 0:06:46 ago on Wed 27 Sep 2023 11:41:23 AM CEST.
=============================================================================================== Name & Summary Matched: gnome-shell-extension ================================================================================================
gnome-shell-extension-pop-shell-shortcut-overrides.noarch : Shortcut overrides for gnome-shell-extension-pop-shell
==================================================================================================== Name Matched: gnome-shell-extension =====================================================================================================
gnome-shell-extension-appindicator.noarch : AppIndicator/KStatusNotifierItem support for GNOME Shell
gnome-shell-extension-apps-menu.noarch : Application menu for GNOME Shell
gnome-shell-extension-argos.noarch : Create GNOME Shell extensions in seconds
gnome-shell-extension-auto-move-windows.noarch : Assign specific workspaces to applications in GNOME Shell
gnome-shell-extension-background-logo.noarch : Background logo extension for GNOME Shell
gnome-shell-extension-blur-my-shell.noarch : Adds a blur look to different parts of the GNOME Shell
gnome-shell-extension-bubblemail.noarch : GNOME Shell indicator for new and unread mail using Bubblemail
gnome-shell-extension-caffeine.noarch : Disable the screen saver and auto suspend in gnome shell
gnome-shell-extension-common.noarch : Files common to GNOME Shell Extensions
gnome-shell-extension-dash-to-dock.noarch : Dock for the Gnome Shell by micxgx@gmail.com
gnome-shell-extension-dash-to-panel.noarch : Integrated icon taskbar and status panel for Gnome Shell
gnome-shell-extension-disconnect-wifi.noarch : GNOME Shell Extension Disconnect Wifi by kgshank
gnome-shell-extension-drive-menu.noarch : Drive status menu for GNOME Shell
gnome-shell-extension-freon.noarch : GNOME Shell extension to display system temperature, voltage, and fan speed
gnome-shell-extension-frippery-applications-menu.noarch : Replace Activities button with an Applications menu
gnome-shell-extension-frippery-bottom-panel.noarch : Add a bottom panel to the shell
gnome-shell-extension-frippery-move-clock.noarch : Move clock to left of status menu button
gnome-shell-extension-frippery-panel-favorites.noarch : Add launchers for Favorites to the panel
gnome-shell-extension-gamemode.noarch : GameMode integration for GNOME Shell
gnome-shell-extension-gamerzilla.noarch : A gnome-shell extension to connect to gamerzilla
gnome-shell-extension-gpaste.noarch : GNOME Shell extension for GPaste
gnome-shell-extension-gsconnect.x86_64 : KDE Connect implementation for GNOME Shell
gnome-shell-extension-ibus-font.noarch : A GNOME Shell extension for ibus-setup custom font settings
gnome-shell-extension-just-perfection.noarch : Extension to Customize GNOME Shell and Disable UI Elements
gnome-shell-extension-launch-new-instance.noarch : Always launch a new application instance for GNOME Shell
gnome-shell-extension-native-window-placement.noarch : Native window placement for GNOME Shell
gnome-shell-extension-netspeed.noarch : A gnome-shell extension to show speed of the internet
gnome-shell-extension-no-overview.noarch : GNOME Shell extension for no overview at start-up
gnome-shell-extension-openweather.noarch : Display weather information for any location on Earth
gnome-shell-extension-pidgin.noarch : Make Pidgin IM conversations appear in the Gnome Shell message tray
gnome-shell-extension-places-menu.noarch : Places status menu for GNOME Shell
gnome-shell-extension-pop-shell.noarch : GNOME Shell extension for advanced tiling window management
gnome-shell-extension-refresh-wifi.noarch : GNOME Shell Extension Refresh Wifi Connections by kgshank
gnome-shell-extension-screen-autorotate.noarch : Dynamic Screen rotation for GNOME Shell
gnome-shell-extension-screenshot-window-sizer.noarch : Screenshot window sizer for GNOME Shell
gnome-shell-extension-suspend-button.noarch : GNOME Shell Extension Suspend-Button by laserb
gnome-shell-extension-system-monitor-applet.noarch : A Gnome shell system monitor extension
gnome-shell-extension-unite.noarch : GNOME Shell Extension Unite by hardpixel
gnome-shell-extension-user-theme.noarch : Support for custom themes in GNOME Shell
gnome-shell-extension-vertical-overview.noarch : GNOME Shell extension for vertical overview and workspaces
gnome-shell-extension-vertical-workspaces.noarch : Customize your GNOME Shell UX to suit your workflow
gnome-shell-extension-window-list.noarch : Display a window list at the bottom of the screen in GNOME Shell
gnome-shell-extension-windowsNavigator.noarch : Support for keyboard selection of windows and workspaces in GNOME Shell
gnome-shell-extension-workspace-indicator.noarch : Workspace indicator for GNOME Shell
awarda@fedora:~$ ls -1 /home/awarda/.local/share/gnome-shell/extensions
Always-Show-Titles-In-Overview@gmail.com
awesome-tiles@velitasali.com
batterythreshold@francku.gitlab.com
bluetooth-quick-connect@bjarosze.gmail.com
BringOutSubmenuOfPowerOffLogoutButton@pratap.fastmail.fm
dash-to-panel@jderose9.github.com
extension-list@tu.berry
gnome-ui-tune@itstime.tech
launch-new-instance@gnome-shell-extensions.gcampax.github.com
system-monitor-next@paradoxxx.zero.gmail.com
tactile@lundal.io
Vitals@CoreCoding.com
window-app-switcher-on-active-monitor@NiKnights.com
window-state-manager@kishorv06.github.io

You can use rpm-ostree usroverlay to make the /usr and subdirectories transient. This would be more for testing if the plugins behave as expected since it would get overwritten next update. If you use rpm-ostree usroverlay --hotfix this should keep changes across updates. See rpmostree usroverlay --help for more info.

1 Like

Simplest option here is to just have the extensions installed for 1 user and symlink ~/.local/share/gnome-shell/extensions (path from memory so not 100%) across the other users, if that’s the issue.

Confused on your OP if your system is used by more than 1 user, if not then just don’t install them globally.

In terms of automatic updates, I would first say don’t. Extensions often introduce bugs or breaking changes that don’t work across every environment but if you insist; you could setup a nightly cron-job to update those extensions.

1 Like

I have found that to be the case across major versions of Gnome but not through the minor changes. With Gnome 45 on Fedora 39 all (earlier version) extensions are broken since they are not compatible with the new way of doing extensions. The commands I gave above will allow for upgrading the extensions via rpm-ostree update without taking further action by the user since they become a part of their locally built image from then on, until the user decides to remove them.

*in the event said extensions are available as packages, which has been previously demonstrated to not be the case.

No, as the Op stated they want to place the extensions globally, so in order to do that they need to be copied (not installed via package) to /usr/share/gnome-shell/extensions/ so using rpm-ostree usroverlay --hotfix then copying the extensions to the desired directory, /usr/share/gnome-shell/extensions/ will result in the extensions becoming a part of the base image built locally every time Silverblue or other image based fedora variant updates normally. No RPM’s required. No overlaying since this is modifying the base image.
[Edit] Also, the extensions won’t update automatically, their presence just won’t get overwritten. So the user would still need to update them periodically. I don’t mean to give the impression the extensions will automatically update too.

@elken @jakfrost Thank you for your extensive replies. This feedback really good, pragmatic and to the point than I experienced in fora of some other distros.
I used Ubuntu (Budgie) for 2 years, did not like the bad out-of-the-box experience, switched to Manjaro, 3 years now, amazed by the good experience (with Ubuntu, simple shutdown/reboot already caused trouble with network-manager forever waiting to quit after a clean install on a very common not-brand-new laptop).
But I prefer a system that is more simple with sane design choices. I was afraid Fedora was too bleeding edge, so I tried OpenSUSE TW for a week, but you basically need to love the terminal (for example: no way to upgrade through the GUI, even though they install lots of GUI tools to update, documentation and fora recommends not to use those…).

SilverBlue is great, it allows me to rely on its immutable design to make sure parents/family don’t mess up. Additionally, I use a post-install script to remove/install a few basic programs, apply dconf (so all systems I install have the same Gnome GUI and behaviour) etc. I believe I can still do this with Silverblue.

The only real downer is the installation + updating of Extensions. But that is OK, because indeed, single user :slight_smile: with 2 Firefox profiles, one for me one for my partner (which syncs through my homeserver with Firefox on mobile and other devices).

To have a “install once and forget” experience, I will:

  • Use rpm-ostree for the few extensions that are available (dash-to-panel, appindicator and maybe a few I didn’t know about that @awarda has installed on his system, thanks for that!)
  • Install (via post-install script) the rest of the extensions on user-level.
  • install Extension Manager, it’s available on Flathub! :slight_smile: Extension Manager | Flathub → this ensures user-level extensions are auto-updated.

I disagree with not auto-updating Gnome Extensions: you absolutely need to, otherwise I get phonecalls with every minor (!!) Gnome update when the pinned apps on Panel (dash-to-panel) disappear or Arcmenu is gone because the extension isn’t compatible with it. This happened very often, even with minor updates. Extension Manager solves this issue. It also clearly shows which installed extensions were disabled because there is no compatible version yet, and auto updates when a compatible version becomes available.

Extensions for me are part of the basic GUI, so they need to match the version of Gnome. I hope at some point Extension Manager becomes part of Fedora base image :smiley:

Additionally, I try to only use very popular extensions with very active/multiple developers to ensure they are up to date with the latest stable Gnome.

Thanks again for all the help!
I am sure more questions will pop up while exploring Fedora SB but at least I know this forum is a good source if I can’t find something in the documentation.