Add Plugin
Automatically research and create a new plugin for the day/night cycle automation system.
Overview
This skill helps you add support for new applications to the day/night cycle automation. Given an app name, it will:
- •Research how theme switching works for the application
- •Identify configuration file locations or APIs
- •Create a new plugin file in the plugins/ directory
- •Register the plugin in plugins/plugin.go Registry map
- •Provide configuration examples
Instructions
When adding a plugin, follow these steps:
1. Research Phase
First, understand how theme switching works for the target application:
- •Search for official documentation on theme/appearance switching
- •Look for configuration file locations (JSON, YAML, plist, etc.)
- •Check for AppleScript support on macOS
- •Investigate CLI commands or APIs
- •Review GitHub issues or community discussions about automation
Key questions to answer:
- •Where are theme settings stored?
- •What file format is used?
- •What are the exact theme/preset names?
- •Does the app support live reloading of settings?
- •Are there any special requirements or permissions needed?
2. Implementation Phase
Create a new plugin file in the plugins/ directory:
Read existing plugins first:
Read: plugins/iterm2.go # or any other plugin as example Read: plugins/plugin.go # for helper functions
Create new file: plugins/[app_name].go
Plugin function signature:
package plugins
func [AppName](cfg map[string]interface{}, isLight bool) error {
// Implementation
}
Implementation patterns by type:
- •
JSON Config Files:
- •Use helper:
UpdateJSONTheme(path, key, value)from plugins/plugin.go - •Or read current file into struct or map
- •Update theme property
- •Marshal and write back
- •Verify write succeeded
- •Use helper:
- •
AppleScript (macOS apps):
- •Use
exec.Command("osascript", "-e", script) - •Set appropriate timeout
- •Handle errors gracefully
- •Use
- •
CLI Commands:
- •Use
exec.Command()with arguments - •Check error return values
- •Capture and handle stderr
- •Use
Available helpers in plugins/plugin.go:
- •
UpdateJSONTheme(path, key, value)- Update JSON config files - •
ExpandPath(path)- Expand ~ in file paths
Error handling requirements:
- •Return descriptive errors using
fmt.Errorf() - •Handle file not found separately from other errors
- •Print helpful messages to stderr when appropriate
3. Integration Phase
Register the plugin in the Registry:
Edit plugins/plugin.go:
var Registry = map[string]Func{
// ... existing plugins
"[app-name]": [AppName],
}
Test the plugin:
# Build first make build # Test light mode ./bin/day-night-cycle --config config.yaml light # Test dark mode ./bin/day-night-cycle --config config.yaml dark # Check status ./bin/day-night-cycle --config config.yaml status
4. Documentation Phase
Provide the user with:
- •Configuration example for
config.yaml:
plugins:
- name: [app-name]
enabled: true
# Include any custom options discovered
- •Setup instructions if needed:
- •Where to find theme names
- •Any prerequisites or permissions
- •How to verify it's working
Checklist
Before completing the task, verify:
- • New plugin file created in
plugins/directory (e.g.,plugins/vscode.go) - • File has
package pluginsdeclaration - • Function signature matches
func [AppName](cfg map[string]interface{}, isLight bool) error - • Extracts config values with proper type assertions
- • Handles both light and dark modes based on
isLightparameter - • Returns descriptive errors
- • Plugin registered in
plugins/plugin.goRegistry map - • Configuration example provided
- • Basic testing completed
Example Usage
User: "Add a plugin for Visual Studio Code"
Expected workflow:
- •Research VS Code settings location and theme configuration
- •Discover settings.json at
~/Library/Application Support/Code/User/settings.json - •Find that theme is controlled by
workbench.colorThemeproperty - •Create
plugins/vscode.gowithVSCodefunction - •Register in
plugins/plugin.goRegistry map as "vscode" - •Provide config example with popular theme names
- •Test the implementation
Common Pitfalls
- •Don't guess paths or APIs - Always research first
- •Check for platform differences - macOS vs Linux vs Windows
- •Verify theme names - Use exact names from the application
- •Test error cases - What if app isn't installed?
- •Consider permissions - Some apps may need accessibility permissions
Resources
- •Existing plugins: See files in
plugins/directory for implementation patterns - •Plugin helpers: See
plugins/plugin.gofor available helper functions - •Plugin patterns: See plugin-patterns.md in this skill directory
Notes
- •Always read existing plugin files in plugins/ directory before implementing
- •Each plugin gets its own file (e.g.,
plugins/iterm2.go) - •Use helper functions from
plugins/plugin.gowhen appropriate - •Follow the patterns from existing plugins
- •Research thoroughly before implementing
- •Return descriptive errors
- •Test both light and dark mode transitions