https://github.com/forge-ext/forge
Forge - Tiling and Window Manager for Gnome-Shell
https://github.com/forge-ext/forge
gnome gnome-extension gnome-shell gnome-shell-extension linux tiling window-management window-manager
Last synced: 7 months ago
JSON representation
Forge - Tiling and Window Manager for Gnome-Shell
- Host: GitHub
- URL: https://github.com/forge-ext/forge
- Owner: forge-ext
- License: gpl-3.0
- Created: 2021-06-26T23:19:08.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-09-29T21:42:01.000Z (about 1 year ago)
- Last Synced: 2024-10-27T23:25:07.163Z (12 months ago)
- Topics: gnome, gnome-extension, gnome-shell, gnome-shell-extension, linux, tiling, window-management, window-manager
- Language: JavaScript
- Homepage:
- Size: 859 KB
- Stars: 921
- Watchers: 13
- Forks: 49
- Open Issues: 119
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- stars - forge-ext/forge - Tiling and Window Manager for Gnome-Shell (HarmonyOS / Windows Manager)
README
# Forge is not maintained anymore
Forge is a GNOME Shell extension that provides tiling/window management **_AND_** is looking for a new owner or maintainer:
- https://github.com/orgs/forge-ext/discussions/276
- https://github.com/forge-ext/forge/issues/336## Features
- Tree-based tiling with vertical and horizontal split containers similar to i3-wm
- Vim-like keybindings for navigation/swapping windows/moving windows in the containers
- Drag and drop tiling
- Support for floating windows, smart gaps and focus hint
- Customizable shortcuts in extension preferences
- Some support for multi-display
- Tiling support per workspace
- Update hint color scheme from Preferences
- Stacked tiling layout
- Works on GNOME 3.36+ (feature-freeze) and 40. X11 and Wayland
- Swap current window with the last active window
- Auto Split or Quarter Tiling
- Show/hide tab decoration via keybinding https://github.com/forge-ext/forge/issues/180
- Window resize using keyboard shortcuts## Known Issues / Limitations
- Does not support dynamic workspaces
- Does not support vertical monitor setup## Installation
- Build it yourself via `make install` or `make dev`.
- Download from [GNOME extensions website](https://extensions.gnome.org/extension/4481/forge/).
- [AUR Package](https://aur.archlinux.org/packages/gnome-shell-extension-forge) - thanks to [@Radeox](https://github.com/Radeox)
- [Fedora Package](https://packages.fedoraproject.org/pkgs/gnome-shell-extension-forge/gnome-shell-extension-forge/) - thanks to [@carlwgeorge](https://github.com/carlwgeorge)
## Forge Keybinding Defaults
See the acceptable key combinations on the [wiki](https://github.com/forge-ext/forge/wiki/Keyboard-Shortcuts)
| Action | Shortcut |
| --- | --- |
| Increase active window size left | ` + + y` |
| Decrease active window size left | ` + + + o` |
| Increase active window size bottom | ` + + u` |
| Decrease active window size bottom | ` + + + i` |
| Increase active window size top | ` + + i` |
| Decrease active window size top | ` + + + u` |
| Increase active window size right | ` + + o` |
| Decrease active window size right | ` + + + y` |
| Open preferences | ` + period` |
| Toggle tiling mode |` + w` |
| Focus left | ` + h` |
| Focus right | ` + l` |
| Focus up | ` + k` |
| Focus down | ` + j` |
| Swap current window with last active | ` + Return` |
| Swap active window left | ` + + h` |
| Swap active window right | ` + + l` |
| Swap active window up | ` + + k` |
| Swap active window down | ` + + j` |
| Move active window left | ` + + h` |
| Move active window right | ` + + l` |
| Move active window up | ` + + k` |
| Move active window down | ` + + j` |
| Split container horizontally | ` + z` |
| Split container vertically | ` + v` |
| Toggle split container | ` + g` |
| Gap increase | ` + + Plus` |
| Gap decrease | ` + + Minus` |
| Toggle focus hint | ` + x` |
| Toggle active workspace tiling | ` + + w` |
| Toggle stacked layout | ` + + s` |
| Toggle tabbed layout | ` + + t` |
| Show/hide tab decoration | ` + + y` |
| Activate tile drag-drop | `Start dragging - Mod key configuration in prefs` |
| Snap active window left two thirds | ` + + e` |
| Snap active window right two thirds | ` + + t` |
| Snap active window left third | ` + + d` |
| Snap active window right third | ` + + g` |
| Persist toggle floating for active window | ` + c` |
| Persist toggle floating for active window and its window class | ` + c` |For any shortcut conflicts, the user has to manually configure those for now from the
`GNOME Control Center > Keyboard > Customize Shortcuts`. https://github.com/forge-ext/forge/issues/37## Forge Override Paths
- Window Overrides: `$HOME/.config/forge/config/windows.json`
- Stylesheet Overrides: `$HOME/.config/forge/stylesheet/forge/stylesheet.css`## GNOME Defaults
GNOME Shell has built in support for workspace management and seems to work well - so Forge will not touch those.
User is encouraged to bind the following:
- Switching/moving windows to different workspaces
- Switching to numbered, previous or next workspace## Development
- The `main` branch contains gnome-4x code.
- The `legacy` and `gnome-3-36` are the same and is now the source for gnome-3x.## Local Development Setup
- Install NodeJS 16+
- Install `gettext`
- Run `npm install`
- Commands:```bash
# Compile and override the gnome-shell update repo
make dev# Or run below, and restart the shell manually
make build && make debug && make install# X11 - build from source and restarts gnome-shell
make test-x# Wayland - build from source and starts a wayland instance (no restart)
make test-wayland# Formatting, when you do npm install,
# husky gets installed should force prettier formatting during commitnpm run format
```## Contributing
- Please be nice, friendly and welcoming on discussions/tickets.
- See existing [issues](https://github.com/forge-ext/forge/issues) or file a new ticket with title `bug: short description` if it doesn't exist.## Credits
Thank you to:
- Forge extension contributors
- Michael Stapelberg/contributors for i3
- System76/contributors for pop-shell
- ReworkCSS/contributors for css-parse/css-stringify