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

3.1 KiB

DMS Plugin Ecosystem — Where to Look

Canonical Documentation (Start Here)

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

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."