WARNING: This application is under development and not stable yet.
ibswm
is a tiling window manager that represents windows as
the leaves of full binary tree. It only manages events sent from
X server and messages it received from the socket communication.
ibsc
is a program that writes messages into the ibswm
's
socket. This window manager doesn't handle any keyboard or mouse
events. You need a third party program (like sxhkd
) to communicate
informations between your action and the window manager, through
ibsc
commands.
This project is strongly inspired by bspwm
and tries to improve it. It is also entirely written in Crystal.
TODO
You can easily configure ibswm
behavior using bash file stored into
$HOME/.config/ibswm/ibswmrc
file. This file is executed directly right
after the window manager is booted. It can handle any bash command to start
when the window manager is executed. Also, this file is a perfect place
to configure the window manager through ibsc
command like :
ibsc config window_gap 18
ibsc config focus_follows_pointer true
Configure a monitor. To configure a monitor, you must known the
monitor ID, given by xrandr --query
. You can have an unlimited number
of desktops by monitor. By default, if you did not configure a monitor,
the window manager will try to detect informations for you. Also, you can
give a name to a monitor in order to apply some configuration just for
this monitor.
ibsc monitor MONITOR_ID --name NAME --desktops DESKTOP_0 DESKTOP_1 DESKTOP_N
Configure a monitor. Every command listed here can use the --monitor
argument to only configure a monitor and not every of them.
Key | Value | Description |
---|---|---|
window_gap |
int |
Gap between window on the same desktop. |
focus_follows_pointer |
bool |
Focus when hovering window. |
Configure a rule for a particular application. This command is useful when you want an application to always map a specific monitor, or to be started as float by default.
bspc rule --application git-cola --state STATE --desktop DESKTOP_0
To know which name an application have, you can start your application and execute this command :
xwininfo -root -children
ibswm
works using a binary tree.
TODO: Implement this part of documentation.
ibswm
tries to follow as much as possible the following protocols :
To improve this application, you need to install some dependencies into order to test your modification. You'll need the following packages installed into your distribution :
xserver-xephyr
sudo apt install xserver-xephyr
Now, you can clone the repository and start working on it.
# Start a background process to see your modification.
Xephyr -screen 640x480 +extension RANDR -ac +xinerama :1 &
# Start the window manager and map the display to Xephyr server.
DISPLAY=:1 cargo run -- -vv
# Start an application and map it to Xephyr display.
DISPLAY=:1 alacritty
- Fork it (https://github.com/cmizzi/ibspwm/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- Cyril Mizzi - creator and maintainer