GNOME has a maddening "developer experience". The theory is that if you learn GObject and survive the mental contortions of doing OOP/IPC in C, you can write anything in GNOME... except there are dozens of ways of interacting with the same API, each of them broken or unmaintained in some unknowable way. GNOME devs realized this, which is why, they created this syntactic sugar language called Vala that compiles to C, which is passable. Except when you want to write for the shell, you can't do that in Vala. If you want to add any functionality to the shell, you must do so in Javascript, using a bizarre runtime called GJS, that uses all kinds of non-standard JS ways of doing things, like includes using URI aliases, class constructors/initializers having a special naming convention used nowhere else `_init()`. And once you manage to do all that, when you are ready to run your Flatpak package, nothing works because Flatpak runs in a container that is not the same environment you wrote your code in. It's like combining a selection the worst of win32 COM objects, the worst of Docker containers, the worst of C#, the worst of vfs, the worst of C and somehow running a desktop on top of it. My deepest respect to the people that make it work on every release.