dms_tailscalectl/skills/dms-plugin-dev/docs/ecosystem.md
vybe 01ac7e9041 feat: add dms-plugin-dev agent skill for Dank Material Shell plugin development
- Introduces a general-purpose opencode skill to help agents build, debug, and publish DMS plugins.
- Includes orientation, decision trees (plugin types), condensed cheat sheets, ecosystem map, and four generic vertical-slice starter templates (bar widget, popout widget, launcher, desktop widget).
- Skill is versioned here for this project while remaining available as a global opencode skill.
- Updated .gitignore to ignore globally-installed copies of the skill.

Written by AI agent working for @jtmorris. Model: grok-build-0.1.
2026-05-24 09:31:06 +00:00

64 lines
No EOL
3.1 KiB
Markdown

# DMS Plugin Ecosystem — Where to Look
## Canonical Documentation (Start Here)
- Plugin Overview: https://danklinux.com/docs/dankmaterialshell/plugins-overview
- Plugin Development (the comprehensive guide): https://danklinux.com/docs/dankmaterialshell/plugin-development
- Current DMS version docs are versioned; always match the user's installed version.
## High-Quality Example Code
1. **Inside the main DMS monorepo** (best for "how the shell itself expects plugins to behave"):
https://github.com/AvengeMedia/DankMaterialShell/tree/master/quickshell/PLUGINS
Small, focused examples:
- ColorDemoPlugin
- ExampleEmojiPlugin (popout + grid)
- LauncherExample / LauncherImageExample
- ControlCenterExample
- WallpaperWatcherDaemon
- ExampleDesktopClock
- QuickNotesExample (good state API usage)
2. **First-party maintained plugins** (real production code, kept up to date):
https://github.com/AvengeMedia/dms-plugins
Good references for patterns:
- DankGifSearch, DankStickerSearch (launcher with images/tiles/categories)
- DankActions, DankHooks, DankPomodoroTimer, DankBatteryAlerts
3. **Community plugins via the registry** (inspiration for what people actually ship):
https://plugins.danklinux.com/
Source: https://github.com/AvengeMedia/dms-plugin-registry (the `plugins/` and `themes/` directories)
Look for plugins in the same category as what you're building. Many are high quality.
## Tooling & Helpers You Should Know Exist
- `dms` CLI (the Go binary) — `dms ipc call plugins ...`, `dms plugins install`, etc.
- `Proc` singleton (`qs.Common`) — debounced external command runner with stdout capture.
- `PopoutComponent` (`qs.Modules.Plugins`) — consistent header + close behavior for popouts.
- The family of `*Setting` components + `PluginSettings` wrapper (`qs.Modules.Plugins`).
- `PluginGlobalVar` helper for reactive cross-instance state.
- `DesktopPluginComponent` for desktop layer widgets.
## Development Environment
- Quickshell language server (qmlls) setup is documented in the official development guide and in the DMS repo's CONTRIBUTING.md.
- Symlink + `dms ipc call plugins reload <id>` is the standard fast iteration loop.
- Many plugin authors keep their source outside the plugins directory and symlink during development.
## Registry Submission
- Follow the instructions in https://github.com/AvengeMedia/dms-plugin-registry/blob/master/CONTRIBUTING.md
- You will need: public Git repo, `plugin.json`, README, screenshots, (ideally) a version tag.
- The schema is enforced.
## When You're Really Stuck
1. Reproduce the problem in the smallest possible plugin using one of the templates in this skill.
2. Run the shell from a terminal and watch the logs.
3. Search the DMS GitHub issues and discussions with the exact error or behavior.
4. The Matrix/Discord space linked from the official site is active.
This ecosystem is unusually well-documented and has a healthy set of real examples. The fastest path is almost always "find a plugin that does something similar and read its source while keeping the official development guide open."