Miracle is a Wayland tiling window manager built on Mir
Go to file
2023-09-08 16:50:02 -04:00
.idea An initial WIP 2023-09-08 16:50:02 -04:00
src An initial WIP 2023-09-08 16:50:02 -04:00
.gitignore Able to create a window that takes up the whole screen 2023-02-19 13:37:30 -05:00
CMakeLists.txt An initial WIP 2023-09-08 16:50:02 -04:00
demo.mkv Demo 2023-02-26 10:43:29 -05:00
README.md Happy with the readme 2023-02-26 10:58:45 -05:00

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:

  1. When a user closes an application, the whole grid should resize accordingly
  2. Resizing individual TileNodes
  3. Moving TileNodes within the grid
  4. Improved performance, specifically with grid searches
  5. Unit testing all of these things, which I have left out of this assignment

References