Skip to content

Conversation

@jimallen
Copy link

Summary

This PR adds the ability for plugins to provide custom tabs in DankDash, enabling plugin authors to create rich, integrated experiences within the shell's dashboard.

Features

  • New dashtab plugin type - Standalone tab plugins that only provide a DankDash tab
  • tabComponent manifest field - Widget plugins can now also provide a DankDash tab alongside their DankBar widget
  • Dynamic tab loading - Plugin tabs are automatically added/removed when plugins are enabled/disabled
  • Tab positioning - Plugins can specify tabPosition: "start" or "end" to control placement
  • Customizable appearance - tabName and tabIcon fields for tab bar display

Plugin Manifest Examples

Standalone tab plugin:

{
    "id": "myTab",
    "name": "My Tab",
    "type": "dashtab",
    "tabIcon": "dashboard",
    "component": "./MyTab.qml"
}

Widget plugin with optional tab:

{
    "id": "myWidget",
    "name": "My Widget", 
    "type": "widget",
    "component": "./MyWidget.qml",
    "tabComponent": "./MyTab.qml",
    "tabName": "My Tab",
    "tabIcon": "star"
}

Changes

QML (quickshell/):

  • Services/PluginService.qml - Added pluginDashTabComponents, tab component loading/unloading, getDashTabPlugins() function
  • Modules/DankDash/DankDashPopout.qml - Dynamic plugin tab rendering with proper index management

Go (core/):

  • internal/plugins/manager.go - Extended pluginManifest struct with tab fields and helper methods
  • internal/plugins/manager_test.go - Added comprehensive tests for tab manifest parsing

Documentation:

  • docs/PLUGINS.md - New plugin system documentation including tab plugin examples

Test Plan

  • make fmt - Code formatted
  • make test - All tests pass (including new tab manifest tests)
  • go mod tidy - Dependencies clean
  • Manual testing with a plugin that provides a tab component

🤖 Generated with Claude Code

Jim Allen and others added 2 commits December 23, 2025 12:03
Allow plugins to provide custom tabs in DankDash via:
- New `dashtab` plugin type for tab-only plugins
- `tabComponent` manifest field for widget plugins to also provide tabs
- Plugin tabs appear after builtin tabs, before Settings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Initialize pluginTabs as an empty array and populate it on component completion.
- Adjust pluginTabStartIndex to account for weather settings.
- Refactor stack index calculations for plugin tabs to enhance readability and maintainability.

Also, update .gitignore to include bmad files and core/dms directory.
@bbedward
Copy link
Collaborator

This is flawed for a few reasons

  1. No reason to change the plugin manager at all, it doesn't care about the contents besides for managing the plugins, the shell/qml side is the parser
  2. Tab metadata like the name and icon don't belong in the manifest they belong in a Plugin component (like DesktopPluginComponent)
  3. The dash itself is not customizable at all, that would probably be a pre requisite to plugins at all

I also wonder what kind of dash plugins are wanted at all, that wouldn't fit into the bar or control center. The dash is a special case where those 3 bar widgets have special behaviors when clicked unlike normal stuff - so there's a lot more to consider if there were plugins in general for it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants