mirror of
https://github.com/miracle-wm-org/miracle-wm.git
synced 2024-11-23 12:15:59 +03:00
Miracle is a Wayland tiling window manager built on Mir
.idea | ||
src | ||
.gitignore | ||
CMakeLists.txt | ||
demo.mkv | ||
README.md |
Mir Compositor Technical Challenge by Matthew Kosarek
Goal
My goal was to make an i3-like tiling window manager within the Mir ecosystem. To that end, I programmed the following features:
- A tiling window manager with support for horizontal and vertical placement
- A keyboard-based window selection mechanic
- A application-qutting mechanic
Demo
You can watch demo.mkv
to see it in action.
Prerequisites
I used the mir-builder.ova
virtual machine with VirtualBox
for all of my testing. Please copy this project folder (or setup a shared folder) into the VirtualBox.
On that machine, I did the following:
sudo apt update && sudo apt upgrade
sudo apt install xinit
sudo apt install xwayland
sudo reboot now
startx
Please also install xfce4-terminal
, as it is the terminal that I used for testing and it is hardcoded within the program:
sudo apt install xfce4-terminal
Buiding
mkdir build
cd build
cmake ..
make
Running
After building:
cd build
./bin/compositor
Controls
In this section, "META" refers to the Windows key (or whatever else you might have it bound to!).
Keybind | Effect |
---|---|
META + ENTER | Open xfce-4 terminal |
META + v | Split the selected terminal vertically |
META + h | Split the selected terminal horizontally |
META + SHIFT + q | Delete the selected application |
META + LEFT | Move left in the Tile Grid |
META + RIGHT | Move right in the Tile Grid |
CTRL + SHIFT + BACKSPACE | Exit the compositor |
Future work
If I had more time to complete the assignment, I would prioritize the following features in this order:
- When a user closes an application, the whole grid should resize accordingly
- Resizing individual
TileNode
s - Moving
TileNode
s within the grid - Improved performance, specifically with grid searches
- Unit testing all of these things, which I have left out of this assignment