# My GNOME Shell must-haves

I’ve been using GNOME Shell full-time for nearly a year now. In that time, I’ve collected a rather lengthy list of modifications, mostly GNOME Shell Extensions, with others of my own design, which transform it from an unwieldy atrocity into capable and efficient desktop.

The first issue I ever encountered with GNOME Shell, and I think its most grievous error, is its reliance on gestures: namely, the Activities hot-corner, and the message tray; either of these events can quite easily break a large variety of different applications, and yet they’re some of the easiest events to actually trigger on the GNOME Shell desktop. Fortunately, these gestures can be disabled with relative ease using GNOME Shell Extensions:

The second was more about acclimating to GNOME Shell; other desktops, like newer versions of Windows, as well as Ubuntu’s Unity, allow you to use the keyboard shortcut [Super]+$n$ (for $n\in\{0..9\}$) to, conditionally, start up the $n$-th application on your taskbar/launcher if it is not already running, or switch to it if it is. GNOME Shell lacks this feature entirely. Apparently it isn’t particularly important to most users either, because I wasn’t able to find any extensions fixing this particular absence. So, I hacked together my own fix:

It’s just a simple shell script, but it works remarkably well for my own purposes, and conveniently it functions in just about every desktop I’ve used. The underlying commands rely on wmctrl, which can be installed (in Debian or Ubuntu) using apt. Using the script itself is pretty simple: just place it in your local “bin” directory (~/bin/) and ensure it’s executable (chmod +x launchit). Then, in your desktop environment’s settings, bind a keyboard shortcut of your choice to:

launchit [-a] -w ${windowclass} -l${launchcommand}

Replace ${windowclass} with the window class of the desired app (if you launch the app, and then execute the command “wmctrl -lx” in another terminal, the window class is the text in the third column, before the period) and replace${launchcommand} with the command you’d type to open up the program — and include “-a” if you wish for the script to bring windows on other desktops into focus. The resulting keyboard shortcut should behave in the same manner as a Unity or Windows [Super]-$n$ shortcut.

A diagram describing how launchit behaves.

The next category of modifications are dock-based modifications. The first allows the GNOME Shell’s favorites tray to be used as a dock:

It works pretty well for its intended purpose, with fewer negative interactions with apps than the built-in gestures, but I particularly appreciate the customization it enables for the dock; the default settings leave large blank spaces above and below the favorites tray, and this allows you to shrink them considerably and use your screen space more efficiently.

The other dock modification I use is just a very primitive, hand-made shell extension containing only the file stylesheet.css with three lines:

.dash-item-container > StButton {
}