A minimal tiling window manager for X11, written in C++. One of biggest plus: ace uses only ~5 RAM megabytes
Every keybind can be changed in the config file, see Configuration.
- Maps new windows as soon as they are created and tiles them automatically
- Windows are arranged in a master and stack layout: the first window takes the left side, the rest are stacked on the right
- Focus follows the mouse pointer
- Focus the next or previous window:
Super+J/Super+K - Swap the focused window with the next or previous one:
Super+Shift+J/Super+Shift+K - Make the focused window the master:
Super+Return - Shrink or grow the master area:
Super+H/Super+L - Quit the window manager:
Super+Ctrl+Q - Close a window:
Super+Q - Open the application launcher:
Super+D - Open a terminal:
Super+Space - Switch workspace:
Super+0-9 - Move the focused window to a workspace:
Super+Shift+0-9 - Make fullscreen:
Super+F - Reload the config:
Super+R
If you want to select ace as a session from your login manager
(LightDM, GDM, SDDM, etc.), use the commands in Makefile.
make install copies the ace binary to /usr/bin and
assets/ace.desktop to /usr/share/xsessions, so it shows up in the
session picker on the login screen:
sudo make clean install
make uninstall removes both of these:
sudo make uninstall
Both commands require root, since they write to /usr/bin and
/usr/share/xsessions.
On first run, ace creates a config file at ~/.config/ace/config (if it
doesn't already exist) and fills it with the defaults. Keybinds are
defined with bind lines:
mod = Super
bind = mod+Space exec kitty
bind = mod+D exec rofi -show drun
bind = mod+Q close
bind = mod+1..9 workspace
bind = mod+Shift+1..9 move_to_workspace
modis the main modifier, written once and reused asmodin every bind. It can beSuper,Alt,Ctrl,Shift, or a combination such asSuper+Alt- A bind is
<modifiers>+<key> <action> [argument]. Key names are the usual X11 keysym names (Space,Return,Tab,F1,comma, ...) 1..9is a key range for workspace actions: each key switches to or moves the window to the workspace with the same number.0is workspace 10- Invalid lines are skipped and reported on stderr
- If the config has no
bindlines at all, the defaults are used
Available actions:
exec <command>: run a programclose: close the focused windowquit: quit acefullscreen: toggle fullscreen for the focused windowfocus_next,focus_prev: move focus through the windowsswap_next,swap_prev: swap the focused window with its neighbourpromote: make the focused window the mastermaster_shrink,master_grow: resize the master areaworkspace <1-10>: switch workspacemove_to_workspace <1-10>: move the focused window to a workspacereload: reload the config without restarting ace
ace itself doesn't launch anything on its own. The defaults rely on external programs:
Change kitty in the mod+Space line to any terminal emulator installed on
your system (e.g. xterm, alacritty, foot).
- g++ with C++17 support
- libX11 (headers and library)
On Arch Linux:
sudo pacman -S libx11 xorg-server-xephyr
On Debian based:
sudo apt install libx11-dev xserver-xephyr
On Alpine:
sudo apk add libx11 xorg-server-xephyr
make
The ace binary will be produced in the project root. You can write make help to see Makefile command list
For testing without leaving your current session, use Xephyr:
Xephyr :1 -screen 1280x800 &
DISPLAY=:1 ./ace
Alternatively, just run:
make run
This checks that Xephyr is installed, builds ace if needed, then starts
Xephyr and launches ace on DISPLAY=:1.
Then, in that same DISPLAY=:1, you can launch any X11 application, e.g.:
DISPLAY=:1 xterm
To use ace as your main window manager, add this to ~/.xinitrc:
exec /path/to/ace
and start your session with startx. Or select in your greeter
This project is licensed under the GNU General Public License v3.0 (GPLv3).
See the LICENSE file for the full text.



