malcolmstill / ulubis

A Wayland compositor written in Common Lisp
BSD 3-Clause "New" or "Revised" License
239 stars 19 forks source link
common-lisp linux opengl wayland-compositor

Ulubis

Join the chat at https://gitter.im/ulubis/Lobby

Ulubis in action

Ulubis is a Wayland compositor written in Common Lisp. It is inspired by FVWM and StumpWM. The idea is that it is easy to hack on, customise, define your own interaction modes, etc. (see alt-tab-mode.lisp as an example of defining a custom mode)

Using SLIME you can connect to the running compositor and modify its behaviour live.

SLIME

(I currently call it a compositor intentionally...let's get a bit more window management functionality in before calling it a WM)

Installation of ulubis

Running ulubis

To run ulubis the user must be a member of the input and video groups. Navigate to a virtual terminal and run

> ulubis

For the SDL2 backend simply run ulubis-sdl when in X.

Configuration

Ulubis looks for the file ~/.ulubis.lisp and loads it if it exists.

An example configuration is as follows:

(in-package :ulubis)

(if (string-equal (symbol-name ulubis-backend:backend-name) "backend-drm-gbm")
    (progn
      (setf (screen-width *compositor*) 1920)
      (setf (screen-height *compositor*) 1080))
    (progn
      (setf (screen-width *compositor*) 1400)
      (setf (screen-height *compositor*) 900)))

(set-keymap *compositor* "evdev" "apple" "gb" "" "")

(defun startup ()
  (swank-loader:init)
  (swank:create-server :port 4005 :style :spawn :dont-close t)
  (swank:set-package "ULUBIS")

  ;; Make the default screen
  (make-screen 'virtual-desktop-mode)
  ;; Add 4 views (virtual desktops) using the desktop-mode as default
  (loop :for i :from 0 :to 3
     :do (push-view 'desktop-mode))
  (setf (active-surface (screen *compositor*))
    (first (surfaces (screen *compositor*)))))

Hacking on ulubis

Download ulubis and its dependencies to quicklisp's local-projects/ dir and hack away, rebuilding the executables as per installation.

Contributors

All glory to our lovely contributors, please join us:

Status

Ulubis is known to work with sbcl and ccl. I have only tested it on two machines which Intel graphics chips, please get in touch if it does / doesn't work with Nvidia or AMD cards. It is very alpha.

Roadmap

The vague roadmap for ulubis is as follows (not necessarily in order):

Dependencies

Ulubis depends on:

Ulubis has two backends: ulubis-sdl (an SDL2 backend) and ulubis-drm-gbm (a DRM/GBM backend). The DRM/GBM backend is intended to be the backend whilst the SDL2 is intended for testing on X.

The DRM/GBM backend depends on:

The dependencies for the SDL2 backend are: