2
2
Fork
You've already forked lucid
0
Lucid wm - a BSPWM-like tiling wm for Wayland written in Rust. Not fleshed out in the slightest (yet).
  • Rust 100%
2026年07月07日 21:13:07 -04:00
ctl we're so back 2026年07月06日 17:30:37 -04:00
examples we're so back 2026年07月06日 17:30:37 -04:00
ipc we're so back 2026年07月06日 17:30:37 -04:00
man we're so back 2026年07月06日 17:30:37 -04:00
wm COMMANDS.md mostly written? I think? 2026年07月07日 21:12:42 -04:00
.gitignore Complete rewrite of the node tree structure using arena indexing 2026年03月13日 21:12:34 -04:00
Cargo.lock we're so back 2026年07月06日 17:30:37 -04:00
Cargo.toml we're so back 2026年07月06日 17:30:37 -04:00
COMMANDS.md COMMANDS.md mostly written? I think? 2026年07月07日 21:12:42 -04:00
LICENSE Initial commit 2026年03月08日 21:22:29 +01:00
README.md Update README.md 2026年07月07日 03:06:37 +02:00

Lucid WM

(Yes I named it after the car)


A wlroots-less (very) bspwm-like hybrid-dynamic tiling compositor for Wayland, written in Rust. Started out as a learning project for Rust and it quickly spiraled out of control, because I despise every Wayland compositor in existence for different reasons (except for you, Sway, I love you bbgirl). But I missed the ability to have direction preselectors, an exposed node tree, and the option for rotation.

It's still in its infancy, and there are things I need to add (namely touchscreen support), but it is currently functional.

The build has two separate binaries-- lucid (the actual compositor) and lucidctl (ipc parser/commands). Keybinds follow sxhkd's formatting, but are part of the lucid binary.

lucidctl has four primary classes: config, monitor, desktop, and node.

"config" is for any configuration/appearance settings, "monitor" is for any command that references the physical output, "desktop" is for a command that is scoped to an individual virtual desktop/workspace, and "node" scopes all the way down to an individual node on the binary tree (typically a surface or leaf node, but arguments can sometimes be passed to higher branch nodes).

I need to write a help page.


Installation / Dependencies

Dependencies:

  • cargo (required for compile, because I've never written a Makefile in my life)
  • foot (terminal used by the default configuration)
  • wofi (launcher used by the default configuration)

Optional Dependencies:

  • grim (screencapture used by default configuration)
  • slurp (same)

1.) Clone the git repo, and cd /path/to/dir/lucidwm/. 2.) Compile the binaries with cargo build --release 3.) This will create two binaries, "lucid" and "lucidctl". They need to be installed into /usr/bin: sudo install -m755 ./target/release/lucid /usr/bin/lucid && install -m755 ./target/release/lucidctl /usr/bin/lucidctl

// further instructions will be added as I go through the install process on a test machine


Why didn't you just stay on bspwm?

X11 suck.My daily workflow is a 3 different monitors, all with different resolutions and scaling factors, and X11 sucks at fractional scaling. Also I wanted better way to adopt orphaned desktops when hotplugging/unplugging monitors. bspwm's is okay but requires a lot of custom scripting.

Why no animations?

I don't use them, so I didn't want to add them. If someone wants to add them, feel free.


Known issues:

  • moving Xwayland windows across monitors that have different scaling factors screws with them (xwayland window no longer fits in the surface drawn by lucid, so pointer gets screwy until you resize the surface).
  • preselector edge drawing doesn't actually work (changes the full border color, not just the color of whatever edge is preselected)
  • cursor gets drawn really big on some GTK applications, I haven't really looked into why.
  • some dropdowns that extend past the surface edge (in any dir) when spawned from tiled windows lose pointer capture when they overlap another tiled surface.
  • floating surfaces, because they're rendered on a unified supersurface, are sticky and not confined to one desktop (I broke this at some point and I'm not sure where).

Stuff I want to add:

  • bspwm-style rules (allow things to spawn on specific desktops, floating, etc)
  • touchscreen support
  • ability to spawn stuff floating as a flag (coincides w/ rules)
  • alternative layouts (master/stack, stacking/tabbed nodes, etc)