{"id":13442801,"url":"https://github.com/malcolmstill/ulubis","last_synced_at":"2025-09-01T16:37:52.691Z","repository":{"id":56077579,"uuid":"68007975","full_name":"malcolmstill/ulubis","owner":"malcolmstill","description":"A Wayland compositor written in Common Lisp","archived":false,"fork":false,"pushed_at":"2020-11-26T19:41:26.000Z","size":9382,"stargazers_count":243,"open_issues_count":17,"forks_count":19,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-03-14T18:40:59.541Z","etag":null,"topics":["common-lisp","linux","opengl","wayland-compositor"],"latest_commit_sha":null,"homepage":"","language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/malcolmstill.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-12T12:43:49.000Z","updated_at":"2025-01-31T17:11:43.000Z","dependencies_parsed_at":"2022-08-15T12:40:54.003Z","dependency_job_id":null,"html_url":"https://github.com/malcolmstill/ulubis","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malcolmstill%2Fulubis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malcolmstill%2Fulubis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malcolmstill%2Fulubis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malcolmstill%2Fulubis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/malcolmstill","download_url":"https://codeload.github.com/malcolmstill/ulubis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243742620,"owners_count":20340673,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["common-lisp","linux","opengl","wayland-compositor"],"created_at":"2024-07-31T03:01:51.200Z","updated_at":"2025-03-15T14:30:43.344Z","avatar_url":"https://github.com/malcolmstill.png","language":"Common Lisp","readme":"# Ulubis\n\n[![Join the chat at https://gitter.im/ulubis/Lobby](https://badges.gitter.im/ulubis/Lobby.svg)](https://gitter.im/ulubis/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n![Ulubis in action](https://github.com/malcolmstill/ulubis/raw/master/ulubis.gif)\n\nUlubis 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](https://github.com/malcolmstill/ulubis/blob/master/alt-tab-mode.lisp) as an example of defining a custom mode)\n\nUsing SLIME you can connect to the running compositor and modify its behaviour live.\n\n![SLIME](https://github.com/malcolmstill/ulubis/raw/master/slide-and-edit.gif)\n\n(I currently call it a compositor intentionally...let's get a bit more window management functionality in before calling it a WM)\n\n## Installation of ulubis\n\n- Ensure you have SBCL and Quicklisp installed.\n- Build `ulubis` / `ulubis-sdl`\n```\ngit clone --recurse-submodules https://github.com/malcolmstill/ulubis.git\ncd ulubis\ncat build-ulubis.lisp | sbcl\n```\n\n\n## Running ulubis\n\nTo run `ulubis` the user must be a member of the `input` and `video` groups. Navigate to a virtual terminal and run\n\n```\n\u003e ulubis\n```\n\nFor the SDL2 backend simply run `ulubis-sdl` when in X.\n\n## Configuration\n\nUlubis looks for the file `~/.ulubis.lisp` and loads it if it exists.\n\nAn example configuration is as follows:\n\n```\n(in-package :ulubis)\n\n(if (string-equal (symbol-name ulubis-backend:backend-name) \"backend-drm-gbm\")\n    (progn\n      (setf (screen-width *compositor*) 1920)\n      (setf (screen-height *compositor*) 1080))\n    (progn\n      (setf (screen-width *compositor*) 1400)\n      (setf (screen-height *compositor*) 900)))\n\n(set-keymap *compositor* \"evdev\" \"apple\" \"gb\" \"\" \"\")\n\n(defun startup ()\n  (swank-loader:init)\n  (swank:create-server :port 4005 :style :spawn :dont-close t)\n  (swank:set-package \"ULUBIS\")\n\n  ;; Make the default screen\n  (make-screen 'virtual-desktop-mode)\n  ;; Add 4 views (virtual desktops) using the desktop-mode as default\n  (loop :for i :from 0 :to 3\n     :do (push-view 'desktop-mode))\n  (setf (active-surface (screen *compositor*))\n\t(first (surfaces (screen *compositor*)))))\n```\n\n## Hacking on ulubis\n\nDownload `ulubis` and its dependencies to quicklisp's `local-projects/` dir and hack away, rebuilding the executables as per installation.\n\n## Contributors\n\nAll glory to our lovely contributors, please join us:\n\n- [naryl](https://github.com/naryl) very kindly added a nicer cursor using cairo\n- [cbaggers](https://github.com/cbaggers) very kindly updated various bits and pieces to use the latest CEPL tech\n\n\n## Status\n\nUlubis 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.\n\n## Roadmap\n\nThe vague roadmap for ulubis is as follows (not necessarily in order):\n- [x] Add screenshotting\n- [ ] Wallpapers\n- [ ] Add (an at least rudimentary) menu system\n- [ ] Server-side decorations\n- [ ] Add screen locking\n- [ ] Add video capture\n- [ ] Support multiple monitors\n- [ ] Support more Wayland clients (a web browser would be very nice)\n- [ ] XWayland support\n- [ ] Potentially define custom Wayland protocols for ulubis (maybe you want to replace a built-in menu with your own menu written in QML)\n\n## Dependencies\n\nUlubis depends on:\n- libwayland\n- [cl-wayland](https://github.com/malcolmstill/cl-wayland)\n- libxkbcommon\n- [cl-xkb](https://github.com/malcolmstill/cl-xkb)\n- [cepl](https://github.com/cbaggers/cepl)\n- [vydd's easing library](https://github.com/vydd/easing)\n- [osicat](https://github.com/osicat/osicat)\n- trivial-dump-core\n- trivial-backtrace\n\nUlubis has two backends: [ulubis-sdl](https://github.com/malcolmstill/ulubis-sdl) (an SDL2 backend) and [ulubis-drm-gbm](https://github.com/malcolmstill/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.\n\nThe DRM/GBM backend depends on:\n- libdrm \n- libgbm \n- libEGL\n- [cl-drm](https://github.com/malcolmstill/cl-drm)\n- [cl-gbm](https://github.com/malcolmstill/cl-gbm)\n- [cl-egl](https://github.com/malcolmstill/cl-egl)\n- [cepl.drm-gbm](https://github.com/malcolmstill/cepl.drm-gbm)\n- [cl-libinput](https://github.com/malcolmstill/cl-libinput)\n\nThe dependencies for the SDL2 backend are:\n- SDL2\n- [cepl.sdl2](https://github.com/cbaggers/cepl.sdl2)\n\n\n","funding_links":[],"categories":["Common Lisp"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalcolmstill%2Fulubis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalcolmstill%2Fulubis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalcolmstill%2Fulubis/lists"}