Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 35a0f580c3 | |||
| 7ed36c58c2 | |||
| 7cccd3b512 | |||
| 9f6d0c5935 | |||
| 026a232e0c | |||
| 1557119448 | |||
| b814d07382 | |||
| 0dead603ec | |||
| c1eb5ae2eb | |||
| 07847c76d8 | |||
| 2dfce67f3b | |||
| b1198f4600 | |||
| e6776b803c |
34
Cargo.lock
generated
34
Cargo.lock
generated
@@ -2373,7 +2373,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry"
|
name = "owlry"
|
||||||
version = "0.4.4"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"clap",
|
"clap",
|
||||||
@@ -2402,7 +2402,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-lua"
|
name = "owlry-lua"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"chrono",
|
"chrono",
|
||||||
@@ -2420,7 +2420,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-api"
|
name = "owlry-plugin-api"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -2428,7 +2428,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-bookmarks"
|
name = "owlry-plugin-bookmarks"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"dirs",
|
"dirs",
|
||||||
@@ -2440,7 +2440,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-calculator"
|
name = "owlry-plugin-calculator"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"meval",
|
"meval",
|
||||||
@@ -2449,7 +2449,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-clipboard"
|
name = "owlry-plugin-clipboard"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"owlry-plugin-api",
|
"owlry-plugin-api",
|
||||||
@@ -2457,7 +2457,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-emoji"
|
name = "owlry-plugin-emoji"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"owlry-plugin-api",
|
"owlry-plugin-api",
|
||||||
@@ -2465,7 +2465,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-filesearch"
|
name = "owlry-plugin-filesearch"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"dirs",
|
"dirs",
|
||||||
@@ -2474,7 +2474,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-media"
|
name = "owlry-plugin-media"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"owlry-plugin-api",
|
"owlry-plugin-api",
|
||||||
@@ -2482,7 +2482,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-pomodoro"
|
name = "owlry-plugin-pomodoro"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"dirs",
|
"dirs",
|
||||||
@@ -2494,7 +2494,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-scripts"
|
name = "owlry-plugin-scripts"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"dirs",
|
"dirs",
|
||||||
@@ -2503,7 +2503,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-ssh"
|
name = "owlry-plugin-ssh"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"dirs",
|
"dirs",
|
||||||
@@ -2512,7 +2512,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-system"
|
name = "owlry-plugin-system"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"owlry-plugin-api",
|
"owlry-plugin-api",
|
||||||
@@ -2520,7 +2520,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-systemd"
|
name = "owlry-plugin-systemd"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"owlry-plugin-api",
|
"owlry-plugin-api",
|
||||||
@@ -2528,7 +2528,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-weather"
|
name = "owlry-plugin-weather"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"dirs",
|
"dirs",
|
||||||
@@ -2541,7 +2541,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-plugin-websearch"
|
name = "owlry-plugin-websearch"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_stable",
|
"abi_stable",
|
||||||
"owlry-plugin-api",
|
"owlry-plugin-api",
|
||||||
@@ -2549,7 +2549,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owlry-rune"
|
name = "owlry-rune"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"dirs",
|
"dirs",
|
||||||
|
|||||||
46
README.md
46
README.md
@@ -32,10 +32,10 @@ yay -S owlry
|
|||||||
yay -S owlry-plugin-calculator owlry-plugin-weather
|
yay -S owlry-plugin-calculator owlry-plugin-weather
|
||||||
|
|
||||||
# Or install bundles:
|
# Or install bundles:
|
||||||
yay -S owlry-essentials # calculator, system, ssh, scripts, bookmarks
|
yay -S owlry-meta-essentials # calculator, system, ssh, scripts, bookmarks
|
||||||
yay -S owlry-widgets # weather, media, pomodoro
|
yay -S owlry-meta-widgets # weather, media, pomodoro
|
||||||
yay -S owlry-tools # clipboard, emoji, websearch, filesearch, systemd
|
yay -S owlry-meta-tools # clipboard, emoji, websearch, filesearch, systemd
|
||||||
yay -S owlry-full # everything
|
yay -S owlry-meta-full # everything
|
||||||
|
|
||||||
# For custom Lua/Rune plugins
|
# For custom Lua/Rune plugins
|
||||||
yay -S owlry-lua # Lua 5.4 runtime
|
yay -S owlry-lua # Lua 5.4 runtime
|
||||||
@@ -53,7 +53,7 @@ yay -S owlry-rune # Rune runtime
|
|||||||
| `owlry-plugin-clipboard` | History via cliphist |
|
| `owlry-plugin-clipboard` | History via cliphist |
|
||||||
| `owlry-plugin-emoji` | 400+ searchable emoji |
|
| `owlry-plugin-emoji` | 400+ searchable emoji |
|
||||||
| `owlry-plugin-scripts` | User scripts |
|
| `owlry-plugin-scripts` | User scripts |
|
||||||
| `owlry-plugin-bookmarks` | Chrome, Brave, Edge bookmarks |
|
| `owlry-plugin-bookmarks` | Firefox, Chrome, Brave, Edge bookmarks |
|
||||||
| `owlry-plugin-websearch` | Web search (`? query`) |
|
| `owlry-plugin-websearch` | Web search (`? query`) |
|
||||||
| `owlry-plugin-filesearch` | File search (`/ filename`) |
|
| `owlry-plugin-filesearch` | File search (`/ filename`) |
|
||||||
| `owlry-plugin-systemd` | User services with actions |
|
| `owlry-plugin-systemd` | User services with actions |
|
||||||
@@ -158,6 +158,21 @@ Owlry follows the [XDG Base Directory Specification](https://specifications.free
|
|||||||
| `~/.local/share/owlry/scripts/` | User scripts |
|
| `~/.local/share/owlry/scripts/` | User scripts |
|
||||||
| `~/.local/share/owlry/frecency.json` | Usage history |
|
| `~/.local/share/owlry/frecency.json` | Usage history |
|
||||||
|
|
||||||
|
System locations:
|
||||||
|
| Path | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `/usr/lib/owlry/plugins/*.so` | Installed native plugins |
|
||||||
|
| `/usr/lib/owlry/runtimes/*.so` | Lua/Rune script runtimes |
|
||||||
|
| `/usr/share/doc/owlry/config.example.toml` | Example configuration |
|
||||||
|
|
||||||
|
### Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Copy example config
|
||||||
|
mkdir -p ~/.config/owlry
|
||||||
|
cp /usr/share/doc/owlry/config.example.toml ~/.config/owlry/config.toml
|
||||||
|
```
|
||||||
|
|
||||||
### Example Configuration
|
### Example Configuration
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
@@ -169,8 +184,8 @@ tabs = ["app", "cmd", "uuctl"]
|
|||||||
# launch_wrapper = "uwsm app --" # Auto-detected
|
# launch_wrapper = "uwsm app --" # Auto-detected
|
||||||
|
|
||||||
[appearance]
|
[appearance]
|
||||||
width = 700
|
width = 850
|
||||||
height = 500
|
height = 650
|
||||||
font_size = 14
|
font_size = 14
|
||||||
border_radius = 12
|
border_radius = 12
|
||||||
# theme = "owl" # Or: catppuccin-mocha, nord, dracula, etc.
|
# theme = "owl" # Or: catppuccin-mocha, nord, dracula, etc.
|
||||||
@@ -178,17 +193,18 @@ border_radius = 12
|
|||||||
[plugins]
|
[plugins]
|
||||||
disabled = [] # Plugin IDs to disable, e.g., ["emoji", "pomodoro"]
|
disabled = [] # Plugin IDs to disable, e.g., ["emoji", "pomodoro"]
|
||||||
|
|
||||||
# Per-plugin configuration (new in 0.4.0)
|
[providers]
|
||||||
[plugins.weather]
|
applications = true # .desktop files
|
||||||
provider = "wttr.in" # or: openweathermap, open-meteo
|
commands = true # PATH executables
|
||||||
location = "Berlin" # city name or "lat,lon"
|
frecency = true # Boost frequently used items
|
||||||
# api_key = "..." # Required for OpenWeatherMap
|
frecency_weight = 0.3 # 0.0-1.0
|
||||||
|
|
||||||
[plugins.pomodoro]
|
# Web search engine: google, duckduckgo, bing, startpage, brave, ecosia
|
||||||
work_mins = 25 # Work session duration
|
search_engine = "duckduckgo"
|
||||||
break_mins = 5 # Break duration
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
See `/usr/share/doc/owlry/config.example.toml` for all options with documentation.
|
||||||
|
|
||||||
## Plugin System
|
## Plugin System
|
||||||
|
|
||||||
Owlry uses a modular plugin architecture. Plugins are loaded from:
|
Owlry uses a modular plugin architecture. Plugins are loaded from:
|
||||||
|
|||||||
91
ROADMAP.md
Normal file
91
ROADMAP.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Owlry Roadmap
|
||||||
|
|
||||||
|
Feature ideas and future development plans for Owlry.
|
||||||
|
|
||||||
|
## High Value, Low Effort
|
||||||
|
|
||||||
|
### Plugin hot-reload
|
||||||
|
Detect `.so` file changes in `/usr/lib/owlry/plugins/` and reload without restarting the launcher. The loader infrastructure already exists.
|
||||||
|
|
||||||
|
### Frecency pruning
|
||||||
|
Add `max_entries` and `max_age_days` config options. Prune old entries on startup to prevent `frecency.json` from growing unbounded.
|
||||||
|
|
||||||
|
### `:recent` prefix
|
||||||
|
Show last N launched items. Data already exists in frecency.json — just needs a provider to surface it.
|
||||||
|
|
||||||
|
### Clipboard images
|
||||||
|
`cliphist` supports images. Extend the clipboard plugin to show image thumbnails in results.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Medium Effort, High Value
|
||||||
|
|
||||||
|
### Actions on any result
|
||||||
|
Generalize the submenu system beyond systemd. Every result type gets contextual actions:
|
||||||
|
|
||||||
|
| Provider | Actions |
|
||||||
|
|----------|---------|
|
||||||
|
| Applications | Open, Open in terminal, Show .desktop location |
|
||||||
|
| Files | Open, Open folder, Copy path, Delete |
|
||||||
|
| SSH | Connect, Copy hostname, Edit config |
|
||||||
|
| Bookmarks | Open, Copy URL, Open incognito |
|
||||||
|
| Clipboard | Paste, Delete from history |
|
||||||
|
|
||||||
|
This is the difference between a launcher and a command palette.
|
||||||
|
|
||||||
|
### Plugin settings UI
|
||||||
|
A `:settings` provider that lists installed plugins and their configurable options. Edit values inline, writes to `config.toml`.
|
||||||
|
|
||||||
|
### Result action capture
|
||||||
|
Calculator shows `= 5+3 → 8`. Allow pressing Tab or Ctrl+C to copy the result to clipboard instead of "launching" it. Useful for calculator, file paths, URLs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bigger Bets
|
||||||
|
|
||||||
|
### Window switcher with live thumbnails
|
||||||
|
A `windows` plugin using Wayland screencopy to show live thumbnails of open windows. Hyprland and Sway expose window lists via IPC. Could replace Alt+Tab.
|
||||||
|
|
||||||
|
### Cross-device bookmark sync
|
||||||
|
Firefox and Chrome sync bookmarks across devices. Parse sync metadata to show "recently added on other devices" or "bookmarks from phone".
|
||||||
|
|
||||||
|
### Natural language commands
|
||||||
|
Parse simple natural language into system commands:
|
||||||
|
|
||||||
|
```
|
||||||
|
"shutdown in 30 minutes" → systemd-run --user --on-active=30m systemctl poweroff
|
||||||
|
"remind me in 1 hour" → notify-send scheduled via at/systemd timer
|
||||||
|
"volume 50%" → wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.5
|
||||||
|
```
|
||||||
|
|
||||||
|
Local pattern matching, no AI/cloud required.
|
||||||
|
|
||||||
|
### Plugin marketplace
|
||||||
|
A curated registry of third-party Lua/Rune plugins with one-command install:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
owlry plugin install github-notifications
|
||||||
|
owlry plugin install todoist
|
||||||
|
owlry plugin install spotify-controls
|
||||||
|
```
|
||||||
|
|
||||||
|
The script runtimes make this viable without recompiling.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Technical Debt
|
||||||
|
|
||||||
|
### Replace meval with evalexpr
|
||||||
|
`meval` depends on `nom v1.2.4` which will be rejected by future Rust versions. Migrate calculator plugin and Lua runtime to `evalexpr` v13+.
|
||||||
|
|
||||||
|
### Plugin API backwards compatibility
|
||||||
|
When `API_VERSION` increments, provide a compatibility shim so v3 plugins work with v4 core. Prevents ecosystem fragmentation.
|
||||||
|
|
||||||
|
### Per-plugin configuration
|
||||||
|
Current flat `[providers]` config doesn't scale. Design a `[plugins.weather]`, `[plugins.pomodoro]` structure that plugins can declare and the core validates.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Priority
|
||||||
|
|
||||||
|
If we had to pick one: **Actions on any result**. It transforms every provider from "search and launch" to "search and do anything". The ROI is massive.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-lua"
|
name = "owlry-lua"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-api"
|
name = "owlry-plugin-api"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-bookmarks"
|
name = "owlry-plugin-bookmarks"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-calculator"
|
name = "owlry-plugin-calculator"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-clipboard"
|
name = "owlry-plugin-clipboard"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-emoji"
|
name = "owlry-plugin-emoji"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-filesearch"
|
name = "owlry-plugin-filesearch"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-media"
|
name = "owlry-plugin-media"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-pomodoro"
|
name = "owlry-plugin-pomodoro"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-scripts"
|
name = "owlry-plugin-scripts"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-ssh"
|
name = "owlry-plugin-ssh"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-system"
|
name = "owlry-plugin-system"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-systemd"
|
name = "owlry-plugin-systemd"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-weather"
|
name = "owlry-plugin-weather"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-websearch"
|
name = "owlry-plugin-websearch"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-rune"
|
name = "owlry-rune"
|
||||||
version = "0.4.3"
|
version = "0.4.6"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.90"
|
rust-version = "1.90"
|
||||||
description = "Rune scripting runtime for owlry plugins"
|
description = "Rune scripting runtime for owlry plugins"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry"
|
name = "owlry"
|
||||||
version = "0.4.4"
|
version = "0.4.6"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.90"
|
rust-version = "1.90"
|
||||||
description = "A lightweight, owl-themed application launcher for Wayland"
|
description = "A lightweight, owl-themed application launcher for Wayland"
|
||||||
|
|||||||
@@ -143,9 +143,10 @@ chmod +x ~/.local/share/owlry/scripts/backup.sh
|
|||||||
**Prefix:** `:bm`
|
**Prefix:** `:bm`
|
||||||
**Package:** `owlry-plugin-bookmarks`
|
**Package:** `owlry-plugin-bookmarks`
|
||||||
|
|
||||||
Browser bookmarks from Chromium-based browsers.
|
Browser bookmarks from Firefox and Chromium-based browsers.
|
||||||
|
|
||||||
**Supported browsers:**
|
**Supported browsers:**
|
||||||
|
- Firefox (reads places.sqlite)
|
||||||
- Google Chrome
|
- Google Chrome
|
||||||
- Brave
|
- Brave
|
||||||
- Microsoft Edge
|
- Microsoft Edge
|
||||||
@@ -236,13 +237,7 @@ Current weather displayed at the top of results.
|
|||||||
- OpenWeatherMap (requires API key)
|
- OpenWeatherMap (requires API key)
|
||||||
- Open-Meteo (no API key required)
|
- Open-Meteo (no API key required)
|
||||||
|
|
||||||
**Configuration:**
|
**Note:** Weather configuration is currently embedded in the plugin. Future versions will support runtime configuration.
|
||||||
```toml
|
|
||||||
[plugins.weather]
|
|
||||||
provider = "wttr.in" # or: openweathermap, open-meteo
|
|
||||||
location = "London" # city name or "lat,lon" (empty for auto-detect)
|
|
||||||
# api_key = "..." # Required for OpenWeatherMap
|
|
||||||
```
|
|
||||||
|
|
||||||
**Features:**
|
**Features:**
|
||||||
- Temperature, condition, humidity, wind speed
|
- Temperature, condition, humidity, wind speed
|
||||||
@@ -274,13 +269,6 @@ MPRIS media player controls.
|
|||||||
|
|
||||||
Pomodoro timer with work/break cycles.
|
Pomodoro timer with work/break cycles.
|
||||||
|
|
||||||
**Configuration:**
|
|
||||||
```toml
|
|
||||||
[plugins.pomodoro]
|
|
||||||
work_mins = 25 # Work session duration (default: 25)
|
|
||||||
break_mins = 5 # Break duration (default: 5)
|
|
||||||
```
|
|
||||||
|
|
||||||
**Features:**
|
**Features:**
|
||||||
- Configurable work session duration
|
- Configurable work session duration
|
||||||
- Configurable break duration
|
- Configurable break duration
|
||||||
@@ -301,17 +289,17 @@ For convenience, plugins are available in bundle meta-packages:
|
|||||||
|
|
||||||
| Bundle | Plugins |
|
| Bundle | Plugins |
|
||||||
|--------|---------|
|
|--------|---------|
|
||||||
| `owlry-essentials` | calculator, system, ssh, scripts, bookmarks |
|
| `owlry-meta-essentials` | calculator, system, ssh, scripts, bookmarks |
|
||||||
| `owlry-widgets` | weather, media, pomodoro |
|
| `owlry-meta-widgets` | weather, media, pomodoro |
|
||||||
| `owlry-tools` | clipboard, emoji, websearch, filesearch, systemd |
|
| `owlry-meta-tools` | clipboard, emoji, websearch, filesearch, systemd |
|
||||||
| `owlry-full` | All of the above |
|
| `owlry-meta-full` | All of the above |
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install everything
|
# Install everything
|
||||||
yay -S owlry-full
|
yay -S owlry-meta-full
|
||||||
|
|
||||||
# Or pick a bundle
|
# Or pick a bundle
|
||||||
yay -S owlry-essentials owlry-widgets
|
yay -S owlry-meta-essentials owlry-meta-widgets
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Edit `Cargo.toml`:
|
|||||||
[package]
|
[package]
|
||||||
name = "owlry-plugin-myplugin"
|
name = "owlry-plugin-myplugin"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2021"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
@@ -38,7 +38,7 @@ Edit `src/lib.rs`:
|
|||||||
use abi_stable::std_types::{ROption, RStr, RString, RVec};
|
use abi_stable::std_types::{ROption, RStr, RString, RVec};
|
||||||
use owlry_plugin_api::{
|
use owlry_plugin_api::{
|
||||||
owlry_plugin, PluginInfo, PluginItem, ProviderHandle, ProviderInfo,
|
owlry_plugin, PluginInfo, PluginItem, ProviderHandle, ProviderInfo,
|
||||||
ProviderKind, API_VERSION,
|
ProviderKind, ProviderPosition, API_VERSION,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" fn plugin_info() -> PluginInfo {
|
extern "C" fn plugin_info() -> PluginInfo {
|
||||||
@@ -59,6 +59,8 @@ extern "C" fn plugin_providers() -> RVec<ProviderInfo> {
|
|||||||
icon: RString::from("application-x-executable"),
|
icon: RString::from("application-x-executable"),
|
||||||
provider_type: ProviderKind::Static,
|
provider_type: ProviderKind::Static,
|
||||||
type_id: RString::from("myplugin"),
|
type_id: RString::from("myplugin"),
|
||||||
|
position: ProviderPosition::Normal,
|
||||||
|
priority: 0, // Use frecency-based ordering
|
||||||
}].into()
|
}].into()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,12 +200,19 @@ pub struct ProviderInfo {
|
|||||||
pub icon: RString, // Default icon name
|
pub icon: RString, // Default icon name
|
||||||
pub provider_type: ProviderKind, // Static or Dynamic
|
pub provider_type: ProviderKind, // Static or Dynamic
|
||||||
pub type_id: RString, // Short ID for badges
|
pub type_id: RString, // Short ID for badges
|
||||||
|
pub position: ProviderPosition, // Normal or Widget
|
||||||
|
pub priority: i32, // Result ordering (higher = first)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum ProviderKind {
|
pub enum ProviderKind {
|
||||||
Static, // Items loaded at startup via refresh()
|
Static, // Items loaded at startup via refresh()
|
||||||
Dynamic, // Items computed per-query via query()
|
Dynamic, // Items computed per-query via query()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum ProviderPosition {
|
||||||
|
Normal, // Standard results (sorted by score/frecency)
|
||||||
|
Widget, // Displayed at top when query is empty
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### PluginItem
|
### PluginItem
|
||||||
|
|||||||
Reference in New Issue
Block a user