AvengeMedia / AvengeMedia/DankMaterialShell

Add Wayfire compositor support

Open
#2,374 1 comment 3 reactions 0 assignees View on GitHub
feature request
Dominant language
QML
Stars
8.1k
Forks
515
Avg merge
1d 8h
Merged PRs (30d)
102

Description

### Feature Description

Add first-class support for Wayfire (https://wayfire.org), a wlroots-based 3D Wayland compositor inspired by Compiz. DMS already supports niri, Hyprland, Sway, Scroll, MangoWC, labwc, dwl, and Miracle WM, so Wayfire is a natural addition.

Today DMS launches on Wayfire and Wayland-protocol-only features work (bar, tray, notifications, spotlight, clipboard, idle), but compositor-aware paths fall through because there's no `WayfireService.qml` and no `isWayfire` branch in `CompositorService.qml`. Most visibly: power-menu logout does nothing because `SessionService._logout()` falls through to `Hyprland.dispatch("exit")`. Workspace clicks in the bar also don't switch workspaces.

### Use Case

Wayfire is the closest thing on Wayland to a macOS-style floating-window experience: its `scale` plugin is true Mission Control / Exposé (arrange all windows side-by-side, click to focus), `expo` gives a workspace grid, and it ships native hot-corner support. None of the currently-supported compositors offer this combination, so users who want this UX have to either give up DMS or live with broken logout/workspace-switching.

Adoption-wise, Wayfire is a long-running, actively maintained wlroots compositor (currently 0.10) packaged in Arch `extra`, Debian, Fedora, and most other major distros. It's the canonical choice for users who want compiz-spiritual successor behaviour on Wayland.

### Compositor(s)

Other (specify below)

### If Other, please specify

Wayfire

### Proposed Solution

Mirror the existing pattern used for niri/labwc/dwl:

1. Detection in `CompositorService.qml`: add `isWayfire` boolean. Detect via `XDG_CURRENT_DESKTOP` containing `Wayfire` (Wayfire's session entry sets `XDG_CURRENT_DESKTOP=Wayfire:wlroots`).

2. New `Services/WayfireService.qml` mirroring `NiriService.qml`. Wayfire ships an official IPC plugin (`libipc.so` + `libipc-rules.so`) that exposes a JSON-over-Unix-socket protocol for workspace, view, and output queries plus dispatch, equivalent in scope to niri's IPC. Implement at minimum: workspace list, current workspace, switch workspace, output → workspace mapping, and quit.

3. Logout fix in `SessionService.qml:308-332`: add a Wayfire branch that sends `core/quit` over IPC (or `pkill -SIGTERM wayfire` as a fallback).

4. Greeter template under `Modules/Greetd/assets/` (`dms-wayfire.ini`) following the existing per-compositor pattern.

Layout-override settings (`*LayoutGapsOverride` etc.) can be deferred since Wayfire doesn't expose gaps in the same way.

Happy to test or contribute a PR if there's appetite for accepting one, wanted to check interest before sinking time into it.

### Alternatives/Existing Solutions

- waybar + nwg-shell / nwg-panel work on Wayfire but are visually and architecturally far from DMS's Material You design.
- wf-shell (Wayfire's reference shell) is functional but minimal, no theming/notifications/material design.
- ags-based shells can target Wayfire but require building a shell from scratch.

DMS is the only Quickshell-based Material design shell with broad multi-compositor support, which is why adding Wayfire here (rather than starting a separate Wayfire-specific project) seems like the right home for it.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.