Tiling window management for GNOME: a fork of Pop!_OS Shell. Shatter Shell is a keyboard-driven layer for GNOME Shell which allows for quick and sensible navigation and management of windows. The core feature of Shatter Shell is the addition of advanced tiling window management — a feature that has been highly sought within our community. For many — ourselves included — i3wm has become the leading competitor to the GNOME desktop. Tiling window management in GNOME is virtually nonexistent, which makes the desktop awkward to interact with when your needs exceed that of two windows at a given time. Luckily, GNOME Shell is an extensible desktop with the foundations that make it possible to implement a tiling window manager on top of the desktop. Therefore, we see an opportunity here to advance the usability of the GNOME desktop to better accommodate the needs of our community with Shatter Shell. Advanced tiling window management is a must for the desktop, so we've merged i3-like tiling window management with the GNOME desktop for the best of both worlds.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-X-004 warning
extensions should avoid synchronous file IO in shell code
Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.
config.js:190
file.value.load_contents(null)
utils.js:17
file.load_contents(null)
EGO-I-002 error
Gtk, Gdk and Adw must not be imported in shell process files
GTK library `Gdk` must not be imported in extension process files.
Do not import GTK libraries in GNOME Shell
settings.js:3
import Gdk from 'gi://Gdk';
window.js:7
import Gdk from 'gi://Gdk';
EGO-P-006 warning
unnecessary build and translation artifacts should not be shipped
Compiled GSettings schemas should not be shipped for 45+ packages.
Don't include unnecessary files
schemas/gschemas.compiled
schemas/gschemas.compiled
EGO-P-007 warning
JavaScript files should be reachable from extension.js or prefs.js
Some JavaScript files are not reachable from `extension.js` or `prefs.js` imports.
Don't include unnecessary files
color_dialog/main.js
floating_exceptions/main.js
shortcuts_dialog/adjustment_mode_page.js
shortcuts_dialog/main.js
shortcuts_dialog/manipulate_window_page.js
shortcuts_dialog/shortcut_label.js
shortcuts_dialog/welcome_page.js
shortcuts_dialog/workspaces_and_displays_page.js
EGO-L-001 warning
extension must not create GObject instances or modify shell before enable()
Resource creation or signal/source setup was found outside `enable()`.
Only use initialization for static resources
extension.js:160
this.settings.int.connect('changed::gtk-theme', () => {
this.register(Events.global(GlobalEvent.GtkThemeChanged));
})
extension.js:165
this.settings.shell.connect('changed::name', () => {
this.register(Events.global(GlobalEvent.GtkShellChanged));
})
extension.js:1954
id = actor.connect('first-frame', () => {
this.auto_tiler?.auto_tile(this, win, this.init);
grab_focus();
actor.disconnect(id);
})
extension.js:1954
actor.connect('first-frame', () => {
this.auto_tiler?.auto_tile(this, win, this.init);
grab_focus();
actor.disconnect(id);
})
extension.js:1690
GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => {
if (!this.movements.is_empty())
return true;
return func();
})
extension.js:456
GLib.timeout_add(GLib.PRIORITY_LOW, 500, () => {
this.exception_selecting = true;
overview.show();
return false;
})
EGO-L-004 warning
main loop sources should be removed in disable()
Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.
extension.js:1348
GLib.timeout_add(GLib.PRIORITY_LOW, 50, () => {
if (this.auto_tiler) {
for (const container of this.auto_tiler.forest.stacks.values()) {
container.restack();
}
}
const x = attempts;
attempts +
extension.js:1690
GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => {
if (!this.movements.is_empty())
return true;
return func();
})
extension.js:456
GLib.timeout_add(GLib.PRIORITY_LOW, 500, () => {
this.exception_selecting = true;
overview.show();
return false;
})
EGO-M-004 error
metadata shell-version must only include plausible stable releases and at most one development release
Field `shell-version` contains invalid values, more than one development release, or implausible future releases.
metadata.json must be well-formed
metadata.json
shell-version=['48', '49', '50', '51']
EGO-C45-001 warning
45+ preferences should use fillPreferencesWindow instead of getPreferencesWidget
45+ preferences code should use `fillPreferencesWindow()` instead of `getPreferencesWidget()`.
prefs.js:9
getPreferencesWidget() {
globalThis.shatterShellExtension = this;
const dialog = settings_dialog_new();
dialog.show();
log.debug(JSON.stringify(dialog));
return dialog;
}
| Version | Status |
|---|---|
| 2.4.1 (2) | Unreviewed |
| 2.4.0 (1) | Rejected |