[]([https://ko-fi.com/domferr](https://github.com/domferr/tilingshell/releases))


[](https://ko-fi.com/domferr)
[](https://patreon.com/domferr)
# Tiling Shell #
This is a Gnome Shell extension implementing modern windows tiling system by extending GNOME's default 2 columns to any layout you want! Can be installed on Gnome Shells from **42 to 51** on X11 and Wayland: the most recent GNOME Shell is supported, and older releases will include all the features and bug fixes!
- 🤩 First and only extension that provides Windows 11's **snap assistant**
- 🖥️🖥️ **multiple monitors support**, even with different scaling factors!
- ⚙️ Manage, edit, create and delete layouts with a **built-in editor**
- 💡 Layouts are not strict, you can **span multiple tiles** if you want
- 🚀 Automatically sets the same UI of your GNOME theme, for a **seamless integration**!
Go to Usage ⬆️
### Snap Assistant ### When grabbing and moving a window, the snap assistant will be available on top of the screen. Move the window near it to activate the snap assistant. While still grabbing the window, move your mouse to the tile you are interested in. By stopping grabbing the window will be tiled to the selected tile! [snap_assistant.webm](https://github.com/domferr/tilingshell/assets/14203981/33511582-fa92-445e-b1ba-8b08f9a8e43a) > Snap Assistant's sensibility can be customized from the preferences.Go to Usage ⬆️
### Select a layout ### Click on Tiling Shell's panel indicator and the available layouts will be shown. Select the one you prefer by clicking on it. That layout will be applied to every monitor in case you have more than one. [layout_selection.webm](https://github.com/domferr/tilingshell/assets/14203981/f4956a34-64e3-4c24-b177-8f9b08fcc45c)Go to Usage ⬆️
### Select multiple tiles ### The layout is not strict. You can select multiple tiles too! Just hold ALT while using the tiling system (you can choose another key from the preferences). [multiple_selection.webm](https://github.com/domferr/tilingshell/assets/14203981/92b29130-260c-479d-9237-bf5c87427e52)Go to Usage ⬆️
### Layout editor ### | Split a tile | Split a tile _vertically_ | Delete a tile | Save, close the editor or open the menu | |:---:|:---:|:---:|:---:| | LEFT CLICK | LEFT CLICK + CTRL | RIGHT CLICK | Click the Tiling Shell's iconGo to Usage ⬆️
### Smart resize ### You can resize adjacent tiled windows together! [Resizing tiled windows](https://github.com/domferr/tilingshell/assets/14203981/da4ef97e-cdbb-4981-a8ab-9ca8cd23d63d) > It can be enabled/disabled from the preferencesGo to Usage ⬆️
### Tile with Keyboard ### Move window through the tiles using keyboard shortcuts (SUPER+←/↑/↓/→). They can be customized from the preferences! [Tile with Keyboard Video](https://github.com/user-attachments/assets/6f8dedbb-2733-41d8-8a94-0fa62dffb915) > It can be enabled/disabled from the preferencesGo to Usage ⬆️
### Edge Tiling ### You can tile a window by moving it to the edge. [Screencast from 2024-06-22 22-12-22.webm](https://github.com/domferr/tilingshell/assets/14203981/6e5a2ba9-cd38-44bb-b791-51e41e07f7a0)Go to Usage ⬆️
### Tiling Buttons ### Right-click on a window to use the auto-tile buttons and the snap assistant from there! The auto-tile buttons allow you to tile to the leftmost or rightmost empty tile, based on your selected layout. The "Move to best tile" button suggests tiling to the nearest empty tile to the center of the screen. [Screencast from 2024-07-13 18-21-57.webm](https://github.com/user-attachments/assets/8fd79faa-a476-4b55-b79c-6329e4b59519)Go to Usage ⬆️
### Per-workspace layout ### You can select your favorite layout for each workspace of each monitor. [per-workspace](https://github.com/user-attachments/assets/41226602-5950-47d1-bbf6-3d7ff3e265fb)Go to Usage ⬆️
### Auto-tiling ### When a window is created, it is automatically moved to the best tile according to where other windows are tiled and the current layout. This is disabled by default and can be enabled in the preferences. [automatic_tiling](https://github.com/user-attachments/assets/76abc53f-2c6d-47ab-bee3-bbcdd946f2a1) ### Export and import layouts ### *Tiling Shell* supports importing and exporting its layouts to a JSON file. With this you can create your own custom layouts without the built-in graphical editor, or share your layouts with others! If you are interested into knowing more about the contents of the layout file check the official [documentation](./doc/json-internal-documentation.md).Go to Usage ⬆️
### Tiling context menu ### Right-click on a window to use the auto-tile buttons and the snap assistant from there! These buttons allow you to tile to the leftmost or rightmost empty tile, based on your selected layout. The "Move to best tile" button suggests tiling to the nearest empty tile to the center of the screen.Check the demonstration video to see it in action!
[Screencast from 2024-07-13 18-21-57.webm](https://github.com/user-attachments/assets/8fd79faa-a476-4b55-b79c-6329e4b59519) > The original idea was to show the snap assistant when hovering the maximize button (as it is done on Windows 11). Unfortunately, GNOME doesn't let us handle the hovering of the maximize button or add another button near it...Go to Usage ⬆️
### Smart border radius ### In GNOME, different windows may have different border radius. Drawing a border around the focused window is hard because it is not possible to know the window border radius. All the existing extensions just draw a border with a static value, making the UI less polished. Tiling Shell, **dynamically** computes the focused window border radius at runtime. Moreover, if you have an extension or anything else who customize the border radius, the focused window border radius adapts as well! This can be enabled/disabled from the extension's preferences too.
Go to Usage ⬆️
### Windows Suggestions ### After placing a window in a tile using the tiling system, snap assistant or active screen edges, you’ll see suggestions for other windows to fill the remaining tiles. Got too many windows open? No problem! If all suggestions don’t fit within the available space, you’ll get a **scrollable list** for quick and easy navigation. See it in action: https://github.com/user-attachments/assets/fbf68458-199d-490b-90cf-3e976d5b511b _Can I choose to opt in or out?_ Yes. From the extension's preferences you find a section called Windows Suggestions. You can enable and disable windows suggestions for tiling system, snap assistant and screen edges. You can choose which of the three to keep enabled, or all of them, to personalize for your needs and preferences.Go to Usage ⬆️
## Installation This extension is published on [extensions.gnome.org](https://extensions.gnome.org/extension/7065/tiling-shell/)! You can install from there or install manually. By installing from [extensions.gnome.org](https://extensions.gnome.org/extension/7065/tiling-shell/) you will always have the latest update. ### Install manually Download the latest [release](https://github.com/domferr/tilingshell/releases). Extract the downloaded archive. Copy the folder to `~/.local/share/gnome-shell/extensions` directory. You need to reload GNOME Shell afterwards (e.g. by logging out). Then you can enable the extension: ```bash /usr/bin/gnome-extensions enable tilingshell@ferrarodomenico.com ``` ### Install via Source Clone the repo then run ```npm i``` to install dependencies and then run ```npm run build``` to build the extension. To finally install the extension run ```bash npm run install:extension ``` You can restart your GNOME shell e.g. logout then login, or restart in place with an `alt-F2` and entering `r` (X11 only) and enable the extension. Enjoy it! To enable via the command line you can run ```bash /usr/bin/gnome-extensions enable tilingshell@ferrarodomenico.com ``` To read the logs you can run ```bash journalctl --follow /usr/bin/gnome-shell ``` To read the logs of the preferences you can run ```bash journalctl -f -o cat /usr/bin/gjs ``` ### Uninstall Tiling Shell To uninstall, first disable the extension and then remove it. To disable via the command line you can run ```bash /usr/bin/gnome-extensions disable tilingshell@ferrarodomenico.com ``` ## Contributing Feel free to submit [issues](https://github.com/domferr/tilingshell/issues/new/choose) and [Pull Requests](https://github.com/domferr/tilingshell/pulls)! ### How to add new keybindings 1. Edit the file `resources/schemas/org.gnome.shell.extensions.tilingshell.gschema.xml` and add a new key with a name, default empty value and a summary. For example, add the following if the name is `highlight-current-window` and the summary is `Minimize all the other windows and show only the focused window`: ```xml