██████╗ ███████╗ ██████╗ ██╗███████╗████████╗██████╗ ██╗ ██╗ ██╔══██╗██╔════╝██╔════╝ ██║██╔════╝╚══██╔══╝██╔══██╗╚██╗ ██╔╝ ██████╔╝█████╗ ██║ ███╗██║███████╗ ██║ ██████╔╝ ╚████╔╝ ██╔══██╗██╔══╝ ██║ ██║██║╚════██║ ██║ ██╔══██╗ ╚██╔╝ ██║ ██║███████╗╚██████╔╝██║███████║ ██║ ██║ ██║ ██║ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
Thank you for contributing to the DankMaterialShell registry! This guide covers how to submit plugins and themes to the dms-plugin-registry repository.
Fork the repository
Create a new JSON file in the plugins/ directory:
plugins/{github-username}-{plugin-name}.json
daniel-42-z-powerusage.json, rochacbruno-worldclock.jsonFill in your plugin information using this schema:
{
"id": "pluginId",
"name": "PluginName",
"capabilities": ["dankbar-widget"],
"category": "monitoring",
"repo": "https://github.com/yourusername/your-plugin-repo",
"path": "optional/path/in/monorepo",
"author": "Your Name",
"description": "Brief description of what your plugin does",
"dependencies": ["dependency1", "dependency2"],
"compositors": ["niri", "hyprland"],
"distro": ["any"],
"screenshot": "https://url/to/screenshot.png"
}
idworldClock). Must match your plugin.jsonnameplugin.jsoncapabilities["dankbar-widget"]categorymonitoring, utilities, appearance, system, etc.repopathauthordescriptiondependencies[] if nonecompositors["niri", "hyprland"], ["any"]distro["any"], ["fedora"], ["arch"], etc.screenshot:::warning Important
The id and name fields must exactly match the corresponding fields in your plugin repository's plugin.json file.
:::
python3 .github/generate.py --validate
python3 .github/validate_links.py
Fork the repository
Create a new folder in the themes/ directory:
themes/{theme-id}/theme.json
tokyonight/, gruvbox-dark/, catppuccin-mocha/Create your theme.json with this schema:
{
"id": "themeId",
"name": "Theme Name",
"version": "1.0.0",
"author": "Your Name",
"description": "Brief description of your theme",
"dark": {
"primary": "#7aa2f7",
"primaryText": "#16161e",
"primaryContainer": "#7dcfff",
"secondary": "#bb9af7",
"surface": "#1a1b26",
"surfaceText": "#73daca",
"surfaceVariant": "#2f3549",
"surfaceVariantText": "#cbccd1",
"surfaceTint": "#7aa2f7",
"background": "#16161e",
"backgroundText": "#d5d6db",
"outline": "#787c99",
"surfaceContainer": "#2f3549",
"surfaceContainerHigh": "#444b6a",
"error": "#f7768e",
"warning": "#ff9e64",
"info": "#7dcfff"
},
"light": {
"primary": "#2e7de9",
"primaryText": "#d0d5e3",
"primaryContainer": "#007197",
"secondary": "#9854f1",
"surface": "#e1e2e7",
"surfaceText": "#387068",
"surfaceVariant": "#c4c8da",
"surfaceVariantText": "#1a1b26",
"surfaceTint": "#2e7de9",
"background": "#cbccd1",
"backgroundText": "#1a1b26",
"outline": "#4c505e",
"surfaceContainer": "#dfe0e5",
"surfaceContainerHigh": "#9699a3",
"error": "#f52a65",
"warning": "#b15c00",
"info": "#007197"
}
}
idtokyoNight, gruvboxDark)nameversion1.0.0)authordescriptionBoth dark and light objects require these color properties:
primaryprimaryTextprimaryContainersecondarysurfacesurfaceTextsurfaceVariantsurfaceVariantTextsurfaceTintbackgroundbackgroundTextoutlinesurfaceContainersurfaceContainerHigherrorwarninginfoFor more details on how these colors are used, see Custom Themes.
python3 .github/validate_themes.py
python3 .github/generate.py --validate
theme.json file (previews are auto-generated)#7aa2f7)dark and light variants are requiredid must be camelCase (starts lowercase, alphanumeric only)X.Y.Z)If you have questions about the contribution process, please open an issue in the registry repository.