A Wayland window-stacking compositor https://labwc.github.io
Find a file
2021-11-08 19:10:37 +00:00
.github/workflows ci: add actions/checkout@v2 to main.yml 2021-09-22 20:14:11 +01:00
docs theme: add menu.overlap.{x,y} 2021-11-08 17:36:39 +00:00
include build: fix name collision with wlroots, when linking statically 2021-11-08 19:10:37 +00:00
protocols add pointer constraints 2021-10-17 22:32:25 +01:00
src build: fix name collision with wlroots, when linking statically 2021-11-08 19:10:37 +00:00
subprojects wlroots.wrap: set url to https://gitlab.freedesktop.org/wlroots/wlroots 2021-11-01 22:07:18 +00:00
.clang-format Apply coding std to <mouse> code & add .clang-format 2021-09-01 07:05:37 +01:00
.editorconfig Add .editorconfig 2021-09-24 20:57:11 +01:00
.gitignore desktop: rename desktop_cycle_view() 2020-10-31 14:46:33 +00:00
LICENSE Initial commit 2019-05-11 21:21:58 +01:00
meson.build build: when building wlroots subproject, link statically 2021-11-08 19:10:37 +00:00
meson_options.txt Add man-pages option like swaywm/sway@ba16f16e4d 2021-03-04 06:35:15 +00:00
NEWS.md Update NEWS.md 2021-10-22 20:27:16 +01:00
README.md README.md: add a video showing SnapToEdge 2021-10-22 20:25:33 +01:00

labwc

1. What is this?

Labwc stands for Lab Wayland Compositor, with lab indicating a sense of experimentation and treading new ground.

It is a wlroots-based stacking compositor aiming to be light-weight and independent, with a focus on simply stacking windows well and rendering some window decorations. It relies on clients for wall-paper, panels, screenshots, and so on to create a full desktop environment.

Labwc tries to stay in keeping with wlroots and sway in terms of general approach and coding style.

In order to avoid re-inventing configuration & theme syntax, openbox-3.4 specification is used. This does not mean that labwc is an openbox clone but rather that configuration files will look and feel familiar.

video link date content
Video (0:18) 16-Oct-2021 SnapToEdge feature
Video (1:10) 05-Aug-2021 window gymnastics, theming and waybar
Video (3:42) 25-Feb-2021 setting background and themes; xwayland/xdg-shell windows

So far, labwc supports the following:

  • Config files (rc.xml, autostart, environment)
  • Theme files and xbm icons
  • Damage tracking to reduce CPU usage
  • A basic root-menu (configured with menu.xml)
  • HiDPI
  • wlr-output-management protocol
  • layer-shell protocol
  • foreign-toplevel protocol (e.g. to integrate with panels and bars)
  • Optionally xwayland

2. Build

meson build/
ninja -C build/

Dependencies include:

  • meson, ninja, gcc/clang
  • wlroots (master)
  • wayland (>=1.19)
  • wayland-protocols
  • libinput (>=1.14)
  • libxml2
  • cairo, pango, glib-2.0
  • xkbcommon
  • xwayland, xcb (optional)

Disable xwayland with meson -Dxwayland=disabled build/

For further details see wiki/Build.

3. Install

See wiki/Install.

4. Configure

Labwc uses the files listed below for configuration and theming.

file user over-ride location man page
rc.xml ~/.config/labwc/ labwc-config(5), labwc-actions(5)
menu.xml ~/.config/labwc/ labwc-menu(5)
autostart ~/.config/labwc/ labwc(1)
environment ~/.config/labwc/ labwc-environment(5)
themerc ~/.local/share/themes/<theme-name>/openbox-3/ labwc-theme(5)

The example rc.xml has been kept simple. For all options and default values, see rc.xml.all

Configuration and theme files are re-loaded on receiving SIGHUP (e.g. killall -SIGHUP labwc)

For keyboard settings, see environment and xkeyboard-config(7)

For themes, search the internet for "openbox themes" and place them in ~/.local/share/themes/. Some good starting points include:

5. Run

./build/labwc [-s <command>]

Click on the background to launch a menu.

If you have not created an rc.xml config file, default binds will be:

combination action
alt-tab activate next window
alt-escape exit
super-return alacritty
alt-F3 bemenu
alt-F4 close window
super-a toggle maximize
alt-mouse-left move window
alt-mouse-right resize window
alt-arrow move window to edge
super-arrow resize window to fill half the output
XF86_AudioLowerVolume amixer sset Master 5%-
XF86_AudioRaiseVolume amixer sset Master 5%+
XF86_AudioMute amixer sset Master toggle
XF86_MonBrightnessUp brightnessctl set +10%
XF86_MonBrightnessDown brightnessctl set 10%-

6. Integrate

Suggested apps to use with labwc:

7. Roadmap

A lot of emphasis is put on code simplicy when considering features.

The main development effort if focused on producing a solid foundation for a stacking compositor rather than adding configuration and theming options.

See acceptance criteria for details.

High-level summary of items which are not inteded to be implemented:

  • Icons (except window buttons)
  • Animations
  • Gradients for decoration and menus
  • Any theme option not required to reasonably render common themes (it's amazing how few options are actually required).

8. Contribute

Let's try to stick to this coding style