feat: convert to workspace with native plugin architecture

BREAKING: Restructure from monolithic binary to modular plugin ecosystem

Architecture changes:
- Convert to Cargo workspace with crates/ directory
- Create owlry-plugin-api crate with ABI-stable interface (abi_stable)
- Move core binary to crates/owlry/
- Extract providers to native plugin crates (13 plugins)
- Add owlry-lua crate for Lua plugin runtime

Plugin system:
- Plugins loaded from /usr/lib/owlry/plugins/*.so
- Widget providers refresh automatically (universal, not hardcoded)
- Per-plugin config via [plugins.<name>] sections in config.toml
- Backwards compatible with [providers] config format

New features:
- just install-local: build and install core + all plugins
- Plugin config: weather and pomodoro read from [plugins.*]
- HostAPI for plugins: notifications, logging

Documentation:
- Update README with new package structure
- Add docs/PLUGINS.md with all plugin documentation
- Add docs/PLUGIN_DEVELOPMENT.md

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-30 03:01:37 +01:00
parent a582f0181c
commit 384dd016a0
124 changed files with 18609 additions and 3692 deletions

View File

@@ -0,0 +1,10 @@
// Hello World Plugin for Owlry
//
// This minimal plugin demonstrates:
// 1. Using owlry::log_* for logging
// 2. Basic Rune syntax
pub fn main() {
owlry::log_info("Hello Rune plugin loading...");
owlry::log_info("Hello Rune plugin loaded successfully!");
}

View File

@@ -0,0 +1,16 @@
# Hello World Plugin for Owlry (Rune version)
#
# This example demonstrates a minimal Rune plugin.
[plugin]
id = "hello-rune"
name = "Hello Rune"
version = "1.0.0"
description = "A simple greeting plugin written in Rune"
author = "Owlry Team"
license = "GPL-3.0-or-later"
owlry_version = ">=0.3.0"
entry = "init.rn"
[provides]
providers = ["greeting"]