Skip to content

feat: add asteroidz as a supported compositor#2806

Closed
asteroidzman wants to merge 2 commits into
AvengeMedia:masterfrom
asteroidzman:asteroidz-compositor-support
Closed

feat: add asteroidz as a supported compositor#2806
asteroidzman wants to merge 2 commits into
AvengeMedia:masterfrom
asteroidzman:asteroidz-compositor-support

Conversation

@asteroidzman

@asteroidzman asteroidzman commented Jul 10, 2026

Copy link
Copy Markdown

Adds first-class support for asteroidz — a wlroots compositor of the dwl/mango lineage (dwm-style tags, nested-KDL config) — alongside the existing mango backend. The whole change is additive: no mango/niri/hyprland/sway path is removed or repointed.

Design

  • Detection: CompositorService recognizes asteroidz via ASTEROIDZ_INSTANCE_SIGNATURE as its own compositor (isAsteroidz), independent of isMango.
  • Shared dwl-tag path: mango and asteroidz share the same tag model, so shared gates use isDwlTagCompositor = isMango || isAsteroidz, and shared service calls (bar, dock, workspace switcher, keybinds, session, config) route through a single accessor:
    readonly property var dwlService: isAsteroidz ? AsteroidzService : (isMango ? MangoService : null)
    → mango keeps using MangoService, asteroidz uses AsteroidzService, one code path.
  • asteroidz-only features (per-output HDR/VRR, named special workspaces) stay gated on isAsteroidz, so mango never enters those branches.

Contents

  • AsteroidzService.qml — IPC/state service (parallels MangoService).
  • core/internal/config/conf2kdl.go — DMS .conf → asteroidz nested-KDL (+ tests).
  • core/internal/windowrules/providers/asteroidz_parser.go — window-rule parser (+ tests); additive windowrules.Actions fields.
  • asteroidz cases in the config/windowrules/keybinds commands.
  • Bar/dock/settings wiring, asteroidz icon + matugen templates, regenerated translations.

Testing status — please read

  • go build ./... and the full Go test suite pass (incl. new conf2kdl / asteroidz_parser tests).
  • qmllint reports no syntax errors across all changed QML.
  • ⚠️ Not yet runtime-tested by me: I don't have both a mango and an asteroidz session to verify at runtime. The QML wiring is verified structurally (build + lint) but the dwlService routing and isMango || isAsteroidz gates should be exercised on a real mango session (to confirm no regression) and a real asteroidz session. Happy to adjust based on your testing / CI.

Notes

asteroidz is a wlroots/dwl-lineage compositor that shares mango's tag model
and uses a nested-KDL config. This adds first-class support for it, alongside
the existing mango backend, without disturbing mango:

- CompositorService: detect asteroidz via ASTEROIDZ_INSTANCE_SIGNATURE as a
  distinct compositor (isAsteroidz), and route the shared dwl-tag sort/filter
  helpers through a dwlService accessor so both mango and asteroidz work
- AsteroidzService: IPC/state service for asteroidz (parallels MangoService)
- core: nested-KDL config generation (conf2kdl), asteroidz window-rule parser,
  and asteroidz cases added to the config/windowrules/keybinds commands
- assets: asteroidz icon + matugen templates

Additive only: mango, niri, hyprland, sway paths are unchanged; new Go
packages ship with tests (conf2kdl, asteroidz_parser) and the suite passes.
Complete the additive UI wiring for asteroidz alongside mango:
- shared dwl-tag gates now fire for both: isDwlTagCompositor = isMango || isAsteroidz
- shared service calls (bar/dock/workspace/keybinds/session/config) route through
  CompositorService.dwlService (= isAsteroidz ? AsteroidzService : MangoService),
  so mango keeps using MangoService and asteroidz uses AsteroidzService
- asteroidz-only features (per-output HDR/VRR, special workspaces) stay gated on
  isAsteroidz, so mango never enters those paths
- AboutTab/settings label the active compositor (asteroidz or mangowc) additively
- regenerated translations + settings search index from source

Verified: go build ./... + full Go test suite pass; qmllint reports no syntax
errors across all changed QML. Mango/niri/hyprland/sway paths unchanged.
@asteroidzman asteroidzman changed the title feat: add asteroidz as a supported compositor (RFC / draft) feat: add asteroidz as a supported compositor Jul 10, 2026
@asteroidzman asteroidzman marked this pull request as ready for review July 10, 2026 16:05
@Purian23

Copy link
Copy Markdown
Collaborator

Hi there, thank you for inquiring about integrated support into DMS. At this time, the Team believes as your project is quite new, that it will be best to give it time to mature and gain a user base before implementation it into our project.

It's best to open a draft or discussion for matters like these going forward before you spend the time on PR integrations. Good luck and feel free to reopen a discussion in the future.

@Purian23 Purian23 closed this Jul 10, 2026
@bbedward

Copy link
Copy Markdown
Collaborator

New projects with this much code dependencies just add a lot of maintenance burden and they tend to iterate a lot and break a lot (like MangoWM itself has, between 1.4 and 1.5).

Personally I'd recommend keeping things tighter with MangoWM so its easier to just flip a flag (like Sway/Scroll) - once userbase and stability and adoption grows then do things like migrate to KDL configuration format and what not. But since this is so much new code to maintain, its a bit tough to want it in mainstream DMS.

Maybe if we had a mechanism to make compositor support more pluggable, that would be good for stuff like this.

@asteroidzman

Copy link
Copy Markdown
Author

Sounds good, thanks, I realize it is a very big PR. Let's give it some time, thank you for your work!

@asteroidzman asteroidzman deleted the asteroidz-compositor-support branch July 10, 2026 19:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants