AvengeMedia / AvengeMedia/DankMaterialShell

architectural guidance: Interfacing QML Taskbar/Workspace components with a Go-based backend in niri

Open
#2,004 2 comments 0 reactions 0 assignees View on GitHub
support
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

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.