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