AvengeMedia / AvengeMedia/DankMaterialShell
architectural guidance: Interfacing QML Taskbar/Workspace components with a Go-based backend in niri
- Dominant language
- QML
- Stars
- 8.1k
- Forks
- 515
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 100
Description
### Compositor
Niri
### If Other, please specify
_No response_
### Distribution
NixOS
### If Other, please specify
_No response_
### Select your Installation Method
Distro Packaging
### Was your original Installation method different?
Yes
### If no, specify
_No response_
### dms doctor -vC
Click to expand
## DMS Doctor Report
**System**
- [ok] Operating System: NixOS 25.11 (Xantusia)
- Supported for runtime (install via NixOS module or Flake)
- [ok] Architecture: amd64
- [ok] Display Server: Wayland
- WAYLAND_DISPLAY=wayland-1
**Versions**
- [ok] DMS CLI: dms 1.4.3+date=2026-02-25_47b12d0
- /nix/store/cnywb2y4p599pchskds0ilf0m45p8i0l-dms-shell-1.4.3+date=2026-02-25_47b12d0/bin/.dms-wrapped
- [ok] Quickshell: quickshell 0.2.1, revision 41828c4180fb921df7992a5405f5ff05d2ac2fff, distributed by: Official-Nix-Flake
- /etc/profiles/per-user/ymo/bin/qs
- [ok] DMS Shell: 1.4.3+date=2026-02-25_47b12d0
- /nix/store/cnywb2y4p599pchskds0ilf0m45p8i0l-dms-shell-1.4.3+date=2026-02-25_47b12d0/share/quickshell/dms
**Installation**
- [ok] DMS Configuration: Found
- /nix/store/cnywb2y4p599pchskds0ilf0m45p8i0l-dms-shell-1.4.3+date=2026-02-25_47b12d0/share/quickshell/dms
- [ok] shell.qml: Present
- /nix/store/cnywb2y4p599pchskds0ilf0m45p8i0l-dms-shell-1.4.3+date=2026-02-25_47b12d0/share/quickshell/dms/shell.qml
- [info] Install Type: Nix store
- /nix/store/cnywb2y4p599pchskds0ilf0m45p8i0l-dms-shell-1.4.3+date=2026-02-25_47b12d0/share/quickshell/dms
**Compositor**
- [ok] niri: 25.11
- /run/current-system/sw/bin/niri
- [info] Active: niri
**Quickshell Features**
- [ok] Polkit: Available
- Authentication prompts
- [ok] IdleMonitor: Available
- Idle detection
- [ok] IdleInhibitor: Available
- Prevent idle/sleep
- [ok] ShortcutInhibitor: Available
- Allow shortcut management (niri)
**Optional Features**
- [ok] accountsservice: Available
- User accounts
- [ok] power-profiles-daemon: Available
- Power profile management
- [ok] logind: Available
- Session management
- [ok] cups-pk-helper: Available
- Printer management
- [info] I2C/DDC: No monitors detected
- External monitor brightness control
- [ok] qt6-imageformats: Installed (4 formats)
- Formats: WebP, TIFF, JP2, ICNS (/nix/store/pm7f9lmyvldrvn18llcl2jfqnqldi14i-qtimageformats-6.10.1/lib/qt-6/plugins/imageformats)
- [ok] kimageformats: Installed (4 formats)
- Formats: AVIF, HEIF, JXL, EXR (/nix/store/kdgrkz1y9ncc7sidpz41xxzqxdwh07pn-kimageformats-6.20.0/lib/qt-6/plugins/imageformats)
- [ok] Terminal: kitty
- [ok] Network: NetworkManager
- NetworkManager present. Using NM API.
- [ok] matugen: Installed
- Dynamic theming
- [ok] dgop: Installed
- System monitoring
- [ok] cava: Installed
- Audio visualizer
- [ok] khal: Installed
- Calendar events
- [info] danksearch: Not installed
- File search
- [info] fprintd: Not installed
- Fingerprint auth
**Config Files**
- [ok] settings.json: Present
- /home/ymo/.config/DankMaterialShell/settings.json
- [info] clsettings.json: Not yet created
- /home/ymo/.config/DankMaterialShell/clsettings.json
- [info] plugin_settings.json: Not yet created
- /home/ymo/.config/DankMaterialShell/plugin_settings.json
- [ok] session.json: Present
- /home/ymo/.local/state/DankMaterialShell/session.json
- [ok] dms-colors.json: Present
- /home/ymo/.cache/DankMaterialShell/dms-colors.json
**Services**
- [ok] dms.service: enabled, active
- [info] greetd: Not installed
- Optional greeter service
**Environment**
- [info] QT_QPA_PLATFORMTHEME: Not set
- [info] QS_ICON_THEME: Not set
---
**Summary:** 0 error(s), 0 warning(s), 29 ok
### Description
I am currently developing a workspace management tool inspired by [dms-unified-taskbar](https://www.google.com/search?q=https://github.com/jslandau/dms-unified-taskbar) with the goal of implementing "Client Workflow Profiles." My objective is to logically group workspaces by client/project (e.g., Client A, Client B) and filter the UI (Taskbar and Overview) to show only the active context.
Technical Strategy:
I intend to handle the heavy lifting (grouping logic, profile state, and workspace mapping) in a Go-based backend. I would like the QML components to act as a thin frontend that queries this Go service to populate the workspace list and manage the Overview visibility.
Current Goal:
Before tackling the Overview, I am focusing on a proof-of-concept: A QML-based workspace list that fetches and displays data from the Go backend.
Questions for the Maintainers:
Communication Protocol: For dms integrations, what is the recommended path for QML to communicate with a local Go binary? Would you suggest a standard REST/HTTP interface, or is D-Bus the preferred standard for this type of shell-extension-to-backend communication?
Implementation Pattern: Do you have (or can you point to) a minimal example of a QML plugin fetching a JSON list from an external source and rendering it using a Repeater and/or ListView?
State Sync: Given that workspace states change frequently, is there a specific dms recommended pattern for handling asynchronous updates so the UI stays reactive to the Go backend?
I am quite proficient in Go, so I am happy to handle the complexity there; I just need a nudge in the right direction regarding the QML/Go plumbing within the dms ecosystem.
I really appreciate any guidance you can offer on the architectural side. Since I'm coming from a heavy Go background, I'm excited to see how I can best bridge it with the dms ecosystem.
### Solutions Tried
_No response_
### Configuration Details
_No response_
### Screenshots/Recordings
_No response_
Contributor guide
Assessment
This issue has not been assessed yet.