Add Hello Plugin with settings pane and metadata

This commit is contained in:
stoorps 2026-04-25 00:17:31 +01:00
commit ec1456fe72
Signed by: stoorps
SSH key fingerprint: SHA256:AZlPfu9hTu042EGtZElmDQoy+KvMOeShLDan/fYLoNI
4 changed files with 115 additions and 0 deletions

11
Cargo.toml Normal file
View file

@ -0,0 +1,11 @@
[workspace]
resolver = "2"
members = ["plugins/ohn-plugin-hello"]
[workspace.dependencies]
hotplug-meta = { path = "/Users/sam.storer/repos/hotplug/crates/hotplug-meta" }
hotplug-macros = { path = "/Users/sam.storer/repos/hotplug/crates/hotplug-macros" }
hotplug-build = { path = "/Users/sam.storer/repos/hotplug/crates/hotplug-build" }
inventory = "0.3"
gpui = "0.2"
ohn-ui-plugin = { path = "/Users/sam.storer/repos/devism/crates/ohn-ui-plugin" }

17
index.json Normal file
View file

@ -0,0 +1,17 @@
[
{
"id": "org.devism.hello-plugin",
"name": "Hello Plugin",
"description": "A greeting demo plugin for ohn — shows how to contribute a settings pane.",
"versions": [
{
"version": "0.1.0",
"dependency_name": "ohn-plugin-hello",
"api_versions": {
"OhnUiPlugin": "1.0"
},
"download_url": "https://github.com/stoorps/ohn-plugins/archive/refs/heads/main.tar.gz"
}
]
}
]

View file

@ -0,0 +1,13 @@
[package]
name = "ohn-plugin-hello"
version = "0.1.0"
edition = "2024"
[package.metadata.hotplug.api_versions]
OhnUiPlugin = "1.0"
[dependencies]
ohn-ui-plugin = { workspace = true }
hotplug-meta = { workspace = true }
inventory = { workspace = true }
gpui = { workspace = true }

View file

@ -0,0 +1,74 @@
use gpui::prelude::*;
use gpui::*;
use ohn_ui_plugin::{OhnUiPlugin, PluginSettingsPane, PluginSidePanel};
/// Hello Plugin — a minimal demo of contributing a settings pane via OhnUiPlugin.
#[derive(Default)]
pub struct HelloPlugin;
impl hotplug_meta::PluginMeta for HelloPlugin {
fn id() -> &'static str {
"org.devism.hello-plugin"
}
fn name() -> &'static str {
"Hello Plugin"
}
fn version() -> &'static str {
env!("CARGO_PKG_VERSION")
}
}
impl OhnUiPlugin for HelloPlugin {
fn settings_pane(&self) -> Option<PluginSettingsPane> {
Some(PluginSettingsPane {
label: "Hello",
icon_name: "star",
build: std::sync::Arc::new(|_window, cx| cx.new(|_cx| HelloView).into()),
})
}
fn side_panel(&self) -> Option<PluginSidePanel> {
None
}
}
ohn_ui_plugin::register_ohn_ui_plugin!(HelloPlugin);
// ---------------------------------------------------------------------------
// Settings pane view
// ---------------------------------------------------------------------------
struct HelloView;
impl Render for HelloView {
fn render(
&mut self,
_window: &mut Window,
_cx: &mut Context<Self>,
) -> impl IntoElement {
div()
.flex()
.flex_col()
.items_center()
.justify_center()
.gap(px(16.0))
.p(px(40.0))
.child(
div()
.text_size(px(28.0))
.child("👋"),
)
.child(
div()
.text_size(px(18.0))
.font_weight(FontWeight::SEMIBOLD)
.child("Hello from the Hello Plugin!"),
)
.child(
div()
.text_size(px(13.0))
.text_color(gpui::rgb(0x888888))
.child("This demo plugin was installed via the hotplug registry."),
)
}
}