Files
community-plugins/phone-connect/plugin.toml
T
CSY2569andGitHub c3f96b59e7 add icefish/phone-connect v0.1.0 (#155)
* add icefish/phone-connect v0.1.0

* update phone-connect README with screenshot

* fix phone-connect: add thumbnail.webp and missing en.json keys

* fix phone-connect: remove unused assets and screenshot.png

* fix phone-connect: CI compliance fixes

* fix phone-connect: command seq and MPRIS performance

* fix phone-connect: MPRIS sequential + media action delay

* fix phone-connect: seek format + live position polling

* fix phone-connect: use Set position for media seek

* fix phone-connect: shell-quote seek variant

* fix phone-connect: seek position tracking

* fix phone-connect: final compliance — remove LICENSE, update thumbnail, fix tags
2026-07-31 08:17:12 -04:00

176 lines
5.3 KiB
TOML

# Noctalia v5 plugin manifest for Phone Connect (KDE Connect backend only)
# Plugin system is beta; APIs may change before v5 stable.
#
# plugin_api = 16: targets the last released level of v5.0.0. We avoid 17/18
# (Unreleased) so the plugin loads on stable v5.0.0. None of our code relies on
# 17+ features: onExit is unused, onConfigChanged is a baseline service hook.
#
# Status: KDE Connect only. Valent backend is intentionally out of scope for
# now, but the service entry (service.luau) is written as a swappable backend
# owner that publishes state to UI entries, so Valent can replace its internals
# later without UI changes.
id = "icefish/phone-connect"
name = "Phone Connect"
version = "0.1.0"
plugin_api = 16
author = "icefish"
license = "MIT"
deprecated = false
icon = "devices"
description = "Control paired phones via KDE Connect — battery, ring, ping, share, clipboard, pairing."
tags = ["bar", "panel", "service", "media"]
dependencies = ["kdeconnect", "sshfs"]
# ── Plugin-level settings (shared across all entries) ───────────────────────
# Mirrors the persisted keys of the original DankKDEConnect plugin where they
# make sense as typed settings. Per-device maps (image/type/recent-images-path)
# stay in pluginDataDir() JSON because they are dynamic, not declarative.
[[setting]]
key = "state_update_interval"
type = "int"
label_key = "settings.state_update_interval.label"
description_key = "settings.state_update_interval.description"
default = 30
min = 0
max = 300
[[setting]]
key = "enable_charging_animation"
type = "bool"
label_key = "settings.enable_charging_animation.label"
description_key = "settings.enable_charging_animation.description"
default = true
[[setting]]
key = "custom_image"
type = "file"
label_key = "settings.custom_image.label"
description_key = "settings.custom_image.description"
default = ""
extensions = [".png", ".jpg", ".jpeg", ".webp", ".svg"]
[[setting]]
key = "device_alias"
type = "string"
label_key = "settings.device_alias.label"
description_key = "settings.device_alias.description"
default = "Your-Phone"
[[setting]]
key = "language"
type = "select"
label_key = "settings.language.label"
description_key = "settings.language.description"
default = "en"
options = [
{ value = "en", label_key = "settings.language.en" },
{ value = "zh_hans", label_key = "settings.language.zh_hans" },
]
[[setting]]
key = "enable_clipboard_action"
type = "bool"
label_key = "settings.enable_clipboard_action.label"
description_key = "settings.enable_clipboard_action.description"
default = true
[[setting]]
key = "show_ongoing_media"
type = "bool"
label_key = "settings.show_ongoing_media.label"
description_key = "settings.show_ongoing_media.description"
default = true
[[setting]]
key = "show_device_placeholder"
type = "bool"
label_key = "settings.show_device_placeholder.label"
description_key = "settings.show_device_placeholder.description"
default = true
[[setting]]
key = "scan_subdirectories"
type = "bool"
label_key = "settings.scan_subdirectories.label"
description_key = "settings.scan_subdirectories.description"
default = false
[[setting]]
key = "max_recent_images"
type = "int"
label_key = "settings.max_recent_images.label"
description_key = "settings.max_recent_images.description"
default = 4
min = 1
max = 12
[[setting]]
key = "panel_placement"
type = "select"
label_key = "settings.panel_placement.label"
description_key = "settings.panel_placement.description"
default = "attached"
options = [
{ value = "attached", label_key = "settings.panel_placement.attached" },
{ value = "floating", label_key = "settings.panel_placement.floating" },
{ value = "widget", label_key = "settings.panel_placement.widget" },
]
# ── Entries ─────────────────────────────────────────────────────────────────
# Four entries: a background service that talks DBus, a bar widget, a control
# center tile, and a panel for the detailed device view.
[[service]]
id = "kde"
entry = "service.luau"
[[widget]]
id = "bar"
entry = "widget.luau"
# Right-click opens the details panel via onRightClick in the script
# (noctalia.togglePanel). We deliberately do not bind [widget.actions] here:
# the panel-toggle action grammar for opening a *plugin* panel by id is not
# documented, so we drive it from the script instead.
[[shortcut]]
id = "tile"
entry = "tile.luau"
[[panel]]
id = "details"
entry = "panel.luau"
width = 500
height = 600
placement = "attached"
position = "auto"
open_near_click = true
keyboard_focus = "on_demand"
# Floating variant: same script, opens detached (screen center). The widget/tile
# pick which panel id to toggle based on the "panel_placement" setting, so users
# choose attached vs floating without a runtime setPlacement API.
[[panel]]
id = "details_floating"
entry = "panel.luau"
width = 500
height = 600
placement = "floating"
position = "center"
keyboard_focus = "on_demand"
# Floating-near-widget variant: floating surface that opens near the toggling
# bar widget (open_near_click), i.e. suspended just below the widget rather than
# anchored to the bar edge (attached) or screen-centered (floating).
[[panel]]
id = "details_widget"
entry = "panel.luau"
width = 500
height = 600
placement = "floating"
position = "auto"
open_near_click = true
keyboard_focus = "on_demand"