Mahogany is a tiling window manager for Wayland modeled after stumpwm. While it is not a drop-in replacement for stumpwm, stumpwm users should be very comfortable with Mahogany. Its planned features are:
- [ ] Easy extensibility: through the use of different modes, users can modify keybindings present in Mahogany, and even have different keybindings for each program or window.
- [ ] Module system that allows users to load and use code at their descretion.
- [ ] Programs to interact with other running services such as pulseaudio and alsamixer, as well as facilities to controll screen brightness. These are module based, so they don’t have to be loaded if your system doesn’t use them.
- [ ] Good support for floating windows
- [X] A Common Lisp code base.
Currently, the only way to install Mahogany is to compile from source.
These are the requirements that must be manually installed. For
the lisp dependencies, it is enough to download the repositories
to where they can be found by asdf
, the lisp dependency manager. Either
place them in ~/common-lisp
, or use
one of the methods described in the relevant section of the asdf manual.
- cl-wayland. As of the time of writing, the distribution included with quicklisp is not up to date with the latest changes. Use the devel branch of linked repository instead; it will always be up to date.
- wlroots and cl-wlroots. Install them per the directions in each project’s
readme. The submodule included in the
cl-wlroots
repository will always work, but may lag behind several commits. For all the features of Mahogany, ensure that XWayland support is included. - Roswell. Roswell is an lisp implementation manager that makes it very easy to install common lisp implementations and create binaries.
- Quicklisp for automatically installing some of the lisp dependencies. Folow the instructions listed at the link. Not needed if you are using Roswell.
You can build an executable by running ros build mahogany.ros
in the root directory of the project. While mahogany will run
using sbcl, it is recommended to use CCL, as rendering is much
more stable. To download ccl using roswell, run ros install
ccl-bin
. Roswell may not use CCL by default, so use ros -L
ccl-bin build mahogany.ros
Please see the documentation directory for details on how to extend Mahogany.
Some parts of Mahogany are in a hackable state, and others can be adapted from other projects. If you want to work on Mahogany, here are some things you can do, in no particular order:
- The basic infrastructure for getting keyboard input is implemented. Reading and holding the state of the keyboard needs to be implemented. Rootson, the example compositor for wlroots is a good place to start. See the files backend/input/keyobard.lisp in this repo and rootson/keyboard.c in the wlroots repo.
- Command suppoort. We could probably get away with using the command system used in stumpwm. Everything is that we would need in present in the `command.lisp` file. Put it into its own package, and submit a pull request for both stumpwm and mahogany: this is on stumpwm’s todo iist as well as Mahogany’s.
- Paulownia has some code that we could use as well, Notably, the following files
in the
base
directory:data-dir.lisp
,load-rc.lisp
, andhooks.lisp
.