64 lines
3.1 KiB
Markdown
64 lines
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."
|