Extensions add immense flexibility to the GNOME 3 desktop environment. They give users the advantage of customizing their desktop while adding ease and efficiency to their workflow. The Fedora Magazine has already covered some great desktop extensions such as EasyScreenCast, gTile, and OpenWeather. This article continues that coverage by focusing on extensions tailored for developers.
If you need assistance installing GNOME extensions, refer to the article How to install a GNOME Shell extension.
Docker Integration
The Docker Integration extension is a must for developers using Docker for their apps. The status menu provides a list of Docker containers with the option to start, stop, pause and even remove them. The list updates automatically as new containers are added to the system.
After installing this extension, Fedora users may get the message: “Error occurred when fetching containers.” This is because Docker commands require sudo or root permissions by default. To configure your user account to run Docker, refer to the Docker Installation page on the Fedora Developer Portal.
You can find more information on the extension’s website.
Jenkins CI Server Indicator
The Jenkins CI Server Indicator extension makes it easy for developers to build their apps on a Jenkins CI Server. It displays a menu with a list of jobs and the state of those jobs. It also includes features such as easy access to the Jenkins web front-end, notifications for completed jobs, and the ability to trigger and filter jobs.
For more information, visit the developer’s site.
android-tool
android-tool can be a valuable extension for Android developers. Features include capturing bug reports, device screenshots and screen-recording. It can also connect to the Android device via USB or TCP.
This extension does require the adb package. To install adb from the official Fedora repository run this command:
sudo dnf install android-tools
You can find more information at the extension Github site.
GnomeHub
GnomeHub is a great extension for GNOME users using Github for their projects. It displays Github repositories and notifies the user of opened pull requests. In addition, users can add their favorite repositories in the extension’s settings.
For more information, refer to the project’s Github page.
gistnotes
Quite simply, gistnotes provides easy access for gist users to create, store and manage notes or code snippets. For more information refer to the project’s website.
Arduino Control
The Arduino Control extension allows users to connect to, and control, their Arduino boards. It also lets users add sliders and switches in the status menu. In addition, the developer includes scripts in the extension’s directory to connect to the board via Ethernet or USB.
Most importantly, this extension can be customized to fit your project. An example provided in the README file is the ability to “Control your Room Lights from any Computer on the Network.”
You can read more about the features and setup of this extension on the project’s Github page.
Hotel Manager
Developers using the Hotel process manager for their web apps should explore the Hotel Manager extension. It displays a list of web apps added to Hotel, and gives users the ability to start, stop and restart those apps. Furthermore, the computers icon to the right gives quick access to open, or view, that web app. The extension can also start, stop, or restart the Hotel daemon.
As of the publication of this article, Hotel Manager version 4 for GNOME 3.26 does not list the web apps in the extension’s drop-down menu. Version 4 also gives errors when installing on Fedora 28 (GNOME 3.28). However, version 3 works with Fedora 27 and Fedora 28.
For more details, see the project’s Github page.
VSCode Search Provider
VSCode Search Provider is a simple extension that displays Visual Studio Code projects in the GNOME overview search results. For heavy VSCode users, this extension saves time by giving developers quick access to their projects. You can find more information on the project’s Github page.
Do you have a favourite extension you use for development? Let us know in the comments.
Leslie Satenstein
My favourite gnome-extension is difficult to choose from amongst three of the top ones.
My first is activities configurator
My 2nd is Gno-Menu
My 3rd is TaskBar by Zpydr
Right click on activities configurator icon extension and you will have the equivalent of the TweakTool for gnome extensions.
Gno-Menu adds Gnome-2 menus to Gnome 3.
TaskBar does away with Dash to Dock by providing functionality to Gnome in the form of a favourites bar list and windows list.
Gnome-extensions are written with javascrypt. I would love to have these extensions written in a compiled language.
Extensions can also be installed to
/usr/share/gnome-shell/extensions with the
org*.xml extracted from within the extension/schema and copied to
/usr/share/glib-2.0/schemas
After making the extension globally accessable (to all users), run
glib-compile-schemas /usr/share/glib-2.0/schemas.
(on reboot, the global schemas will be available to all)
Paul W. Frields
Users should not write information directly into /usr, since this is an area reserved for vendor packaged software, so we don’t encourage this procedure. It’s better to package the extension and provide a local repo for it if needed. Also, there isn’t a benefit in having these in a compiled language. That would require client side build tools any time an extension is updated. This is precisely why the extensions are in Javascript.
Krystian
How often one updates an extension – once a week?
Adding few more seconds to compile an extension once and make the Shell experience better by improving the performance is the right way to do it.
Besides that, JS has many limitations and problems as a language affecting the final code quality and system stability while using it with gnome shell.
In general, there’s no gain from limiting the support to just one language/format.
Andy
The situation here is often mischaracterized and overblown. Extensions are written in GJS, which is more like PyGObject, in that they are essentially written in GLib, Gtk and Clutter (C libraries) via language bindings, and contrary to popular belief about 40% of Gnome Shell is written in C.
Truth be told, writing extensions in a compiled language is orthogonal code quality, will increase the time and difficulty required to review them properly, probably result in very speed difference (given how little most of them do), significantly reduce the amount of capable authors and alienate all the current ones.
Frederik
Is 0 equal to 0? In javascript? Who knows! Who cares? Let’s just hope I didn’t make a mistake and the interpreter just glazes over the problem and makes coffee, with extra cyanide, in my bathroom instead of verifying my data.
I wouldn’t be caught dead writing javascript if I have the option of using a real programming language. By restricting extensions to one language, you’re alienating everybody who doesn’t know or want to use the language. Javascript is likely the most hated language on the face of the planet to ever have existed — performance is not part of that problem.
Why Python wasn’t chosen instead of javascript really baffles me. All of the benefits of javascript, pretty much none of the problems and it’s actually liked by some people.
Philipp
Bad code is not a disadvantage owed by a specific programming language. It’s the developer writing bad code not the language that makes him writing bad code.
Let’s take C for example. It allows you to write even worse and even more dangerous code than most of the higher level programming languages.
Even tough it is possible to do so, a developer who is used to use a specific language might still be able to write code of a good quality.
If you are not satisfied with the possibilities provided by gnome and you are a developer yourself… write the required modifications yourself. The good thing is that you’re free to do so. 😉
Andy
What would make you think 0 doesn’t equal 0 in Javascript, and what problems with javascript as a language are you referring to? Some reasons Python wasn’t chosen:
You can’t monkey-patch like JS can, which is essential for extensions (these aren’t plugins)
JS is just a language (ECMA Script), not a whole platform of libraries and event loops that compete with the Gnome platform (GLib, Gtk, Clutter, etc)
JS was designed for asynchronous user interaction
JS has never broken backwards compatibility
Much of the hate towards JavaScript is really directed at “your dad’s JavaScript”, which is not the current state of affairs. There are classes, iterators/generators, async functions, weak sets/maps, typed arrays, Symbols (ala foo), and more that people erroneously complain JS can’t do.
I really like Python; I use it and often prefer it. But really, dragging the whole early-90s JavaScript bogey man out from under the bed thing is becoming quite tiresome.
Leslie Satenstein
Hi Paul
Why have multiple copies of the extensions in the 5 logons on my desktop when I, as admin,install them within /usr.
You mentioned “It’s better to package the extension and provide a local repo for it if needed”. is there a configuration for gnome to inform the shell that there is an additional global path to local provided extensions?
FYI, I wrote a script that does the migration, the extract from the extensions of the schemas/*.xml files to glib-2.0/schemas and a glib-compile-schemas. Please point me to documentation to do what you propose.
Off topic
The xml files are “schema compiled”. Why can the *.desktop be desktop compiled, as are the schemas? I could see this too, becoming a performance enhancement feature.
Paul W. Frields
Because users typically want different configurations of extensions. While they can enable/disable them individually if installed system-wide, you’ve now created a situation where they can’t be updated except by tedious manual intervention by only one person (the admin). Besides this, you’re relying on a writable /usr which may not be the case in future systems (such as Atomic editions). By packaging as RPM you avoid at least the manual intervention problem. But extensions are designed for per-user use and I see no good reason to override that.
Davi
All these extensions should have been gtk apps. It’s a shame that making and distributing gtk apps is so much harder. Flatpak is changing that, though.
Brian Exelbierd
This is a fantastic list! I am now super bummed not to be developing full-time anymore.
I wonder if we could find folks to extend the gnomehub extension to work with pagure.io?
John Smith
I use standard Gnome on Fedora. My favourite is “EasyScreenCast” – as far as I know, it is the only good screen recorder. It is also a very nicely done extension with many superb options.
After all, the “built-in” screen recorder in Gnome records all your monitors, which is fairly useless if you want to make a screencast for students or colleagues of one specific window (e.g., to demonstrate how to do something in LibreOffice).
My 2nd favorite extension is “OpenWeather”, it just shows the weather and forecast in the top line and on clicking the details, very convenient and I would not want to use gnome without it anymore.
But there are issues I hope the developers can attend:
1) It is not so clear how to find and install extensions. The only way I can do it is to use the Gnome epiphany browsers (aka “web”), then go to the exensions website (https://extensions.gnome.org/), and then you can easily search and install them.
And after that you can manage them with the tweak tool. Okay, I don’t mind it, but I wonder how new users would find out. It would be nice if there would be a simple Gnome program that can do this, or a link somewhere on the desktop saying “search and install extensions”.
2) They can terribly crash your system. Take for example my favorite “EasyScreenCast” (what I am writing is true for both Fedora 27 and 28) on Wayland: You install it; you then logout; upon login you get a grey screen and there is no way to fix it. After much searching online, I found the solution is this: i) logout. ii) login with Xorg-Gnome instead of Wayland (only one time is enough) iii) logout again, iv) Now it miraculously does not longer crash your Wayland gnome shell: https://bugzilla.redhat.com/show_bug.cgi?id=1394755 ; To me, this seems a really weird bug — what does the one login to Xorg fix the situation? Apparently, this has been an issue since 2016.
3) I have had the “Places” extension give me the same problem of not being able to login anymore and I had to remove it.
PS: I also would want to learn how to program extensions. Any recommendations for a tutorial?
Andy
1) It is not so clear how to find and install extensions.
If you’re using any recent version of Gnome you can actually browse and install extensions in “Software” (eg gnome-software).
2) They can terribly crash your system.
Gnome Shell extensions aren’t sandboxed or limited in any way; they can use sockets, HTTP requests, spawn external programs, create/delete files and anything else a “real” program can do. The catch is they can also crash things like any other program, which why the review process can be quite long; but still you can’t test for everything.
To my knowledge there aren’t any (current) start-to-finish tutorials for writing extensions, but their are ‘gjs’ and ‘gnome-shell’ tags on StackOverflow, #javascript and #gnome-shell channels on GimpNET (IRC) and most extensions list their Github repository on the official website. Most of the gnome-shell UI is written in JS too, so you can learn a lot about writing extensions just from reading that code.
Rene Reichenbach
VSCode Search Provider
3 words …
awesome awesome awesome !