Add Nebula.Windows with Sway IPC backend

Introduces a new `core/windows` module (`Nebula.Windows`) with `WindowService`, window/workspace models, and a Sway IPC backend for live window tracking and control (focus, close, move/resize, snap, maximize/restore, minimize, workspace switch). The desktop shell now links this module, uses compositor focus for top-bar active app text, and adds an Open Windows section in the launcher with focus/close actions.

Also updates application metadata handling to parse `StartupWMClass` and map window `app_id`/class to friendly names and icons, and revises Sway config/docs for the new floating-first Desktop 0.2 behavior with temporary compositor-provided decorations.
This commit is contained in:
2026-08-26 18:20:56 +12:00
parent 8c07c10050
commit 2f59d3c115
29 changed files with 2177 additions and 35 deletions
+22 -4
View File
@@ -8,6 +8,7 @@ A Linux desktop environment built around a custom compositor, shell, and service
|------|---------|
| `core/nebula-core` | Core runtime and platform APIs (growing) |
| `core/applications` | Installed `.desktop` discovery and launching |
| `core/windows` | Window and workspace management (`WindowService`) |
| `compositor/` | Compositor configuration (Sway is temporary) |
| `shells/` | Desktop and future Bigscreen shells |
| `packages/` | Shared UI (`Nebula.UI`), icons, API, and design tokens |
@@ -19,9 +20,9 @@ A Linux desktop environment built around a custom compositor, shell, and service
## Shells
**Nebula Desktop 0.1** is a C++20 Qt Quick/QML Wayland shell using LayerShellQt. It can discover installed applications and launch them (including Foot) from the GUI. See `shells/desktop/`.
**Nebula Desktop 0.2** is a C++20 Qt Quick/QML Wayland shell using LayerShellQt. It is floating-first: ordinary applications open as independently movable windows. See `shells/desktop/`.
**Nebula Bigscreen** is planned as a separate Qt Quick/QML shell with a controller-first interaction model, sharing `Nebula.UI` and `Nebula.Applications`.
**Nebula Bigscreen** is planned as a separate Qt Quick/QML shell with a controller-first interaction model, sharing `Nebula.UI`, `Nebula.Applications`, and `Nebula.Windows`.
Standalone Nebula applications may still use React/Tauri where that is a better fit. The operating-system shell does not.
@@ -34,13 +35,30 @@ Ubuntu
Wayland
Sway temporary compositor
Sway temporary compositor / window manager
Nebula Shell Qt Quick/QML
Nebula Shell Qt Quick/QML via LayerShellQt
```
Window management is abstracted:
```text
Nebula QML
WindowService
Sway IPC backend now
Nebula compositor later
Sway
/ \
Wayland app XWayland app
```
Applications and games render on their own Wayland/XWayland paths. They are not composited inside QML.
Sway currently provides temporary window decorations (title bar and border) so windows can be identified, dragged, and resized. Custom Nebula window chrome is later work.
## Getting started (development VM)
```bash