screen-toolkit : full screen utility (#221)
* screen-toolkit: add Noctalia v5 plugin * screen-toolkit: credit original plugin * screen-toolkit: fix recording, OCR capture, and result panel UX * screen-toolkit: rename record tool labels to Record / Rec FS * screen-toolkit: update plugin thumbnail * screen-toolkit: fix README validation (backtick deps, result panel toggle) * screen-toolkit: fix OCR results and dependencies * screen-toolkit: backtick recording and annotator deps in README --------- Co-authored-by: Ahmed5Emad <ahmed5emad@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
# Screen Toolkit — a unified set of screen utilities for the Noctalia shell.
|
||||
#
|
||||
# Port of the v4 "screen-toolkit" plugin to the v5 plugin API. All tool logic
|
||||
# (captures, OCR, palette, QR, lens, recording, sharing) lives in a headless
|
||||
# [[service]]; the bar [[widget]], control-center [[shortcut]], and the main
|
||||
# [[panel]] are thin clients that read the published state and drive the service
|
||||
# through the plugin's "command" state channel.
|
||||
|
||||
id = "alexander/screen-toolkit"
|
||||
name = "Screen Toolkit"
|
||||
version = "1.0.0"
|
||||
plugin_api = 9
|
||||
author = "alexander"
|
||||
license = "MIT"
|
||||
icon = "crosshair"
|
||||
description = "Screen tools: color picker, OCR, QR, palette, lens, annotate, measure, and recording."
|
||||
tags = ["recording", "utility", "bar", "panel", "shortcut", "service", "hyprland", "niri", "sway"]
|
||||
dependencies = [
|
||||
"slurp",
|
||||
"grim",
|
||||
"hyprpicker",
|
||||
"tesseract",
|
||||
"imagemagick",
|
||||
"zbar",
|
||||
"curl",
|
||||
"ffmpeg",
|
||||
"ffprobe",
|
||||
"jq",
|
||||
"translate-shell",
|
||||
"bc",
|
||||
"stat",
|
||||
"pkill",
|
||||
"xdg-open",
|
||||
"hyprctl",
|
||||
"swappy",
|
||||
"satty",
|
||||
"gimp",
|
||||
"gpu-screen-recorder",
|
||||
"wl-screenrec",
|
||||
"wf-recorder",
|
||||
]
|
||||
|
||||
# ── Plugin-level settings (shared by every entry, edited in Settings → Plugins) ──
|
||||
|
||||
[[setting]]
|
||||
key = "screenshot-path"
|
||||
type = "folder"
|
||||
label_key = "settings.screenshot_path.label"
|
||||
description_key = "settings.screenshot_path.description"
|
||||
default = "~/Pictures/Screenshots"
|
||||
|
||||
[[setting]]
|
||||
key = "video-path"
|
||||
type = "folder"
|
||||
label_key = "settings.video_path.label"
|
||||
description_key = "settings.video_path.description"
|
||||
default = "~/Videos"
|
||||
|
||||
[[setting]]
|
||||
key = "filename-format"
|
||||
type = "string"
|
||||
label_key = "settings.filename_format.label"
|
||||
description_key = "settings.filename_format.description"
|
||||
default = "%Y-%m-%d_%H-%M-%S"
|
||||
|
||||
[[setting]]
|
||||
key = "selected-ocr-lang"
|
||||
type = "string"
|
||||
label_key = "settings.selected_ocr_lang.label"
|
||||
description_key = "settings.selected_ocr_lang.description"
|
||||
default = "eng"
|
||||
|
||||
[[setting]]
|
||||
key = "search-engine-url"
|
||||
type = "string"
|
||||
label_key = "settings.search_engine_url.label"
|
||||
description_key = "settings.search_engine_url.description"
|
||||
default = ""
|
||||
|
||||
[[setting]]
|
||||
key = "x02-api-key"
|
||||
type = "string"
|
||||
label_key = "settings.x02_api_key.label"
|
||||
description_key = "settings.x02_api_key.description"
|
||||
default = ""
|
||||
|
||||
[[setting]]
|
||||
key = "x02-expiry"
|
||||
type = "select"
|
||||
label_key = "settings.x02_expiry.label"
|
||||
description_key = "settings.x02_expiry.description"
|
||||
default = "7d"
|
||||
options = [
|
||||
{ value = "1h", label_key = "settings.x02_expiry.options.1h" },
|
||||
{ value = "1d", label_key = "settings.x02_expiry.options.1d" },
|
||||
{ value = "7d", label_key = "settings.x02_expiry.options.7d" },
|
||||
{ value = "30d", label_key = "settings.x02_expiry.options.30d" },
|
||||
{ value = "permanent", label_key = "settings.x02_expiry.options.permanent" },
|
||||
]
|
||||
|
||||
[[setting]]
|
||||
key = "share-skip-popover"
|
||||
type = "bool"
|
||||
label_key = "settings.share_skip_popover.label"
|
||||
description_key = "settings.share_skip_popover.description"
|
||||
default = false
|
||||
|
||||
[[setting]]
|
||||
key = "record-audio-out"
|
||||
type = "bool"
|
||||
label_key = "settings.record_audio_out.label"
|
||||
description_key = "settings.record_audio_out.description"
|
||||
default = false
|
||||
|
||||
[[setting]]
|
||||
key = "record-audio-in"
|
||||
type = "bool"
|
||||
label_key = "settings.record_audio_in.label"
|
||||
description_key = "settings.record_audio_in.description"
|
||||
default = false
|
||||
|
||||
[[setting]]
|
||||
key = "hide-cursor"
|
||||
type = "bool"
|
||||
label_key = "settings.hide_cursor.label"
|
||||
description_key = "settings.hide_cursor.description"
|
||||
default = true
|
||||
|
||||
[[setting]]
|
||||
key = "record-codec"
|
||||
type = "select"
|
||||
label_key = "settings.record_codec.label"
|
||||
description_key = "settings.record_codec.description"
|
||||
default = "h264"
|
||||
options = [
|
||||
{ value = "h264", label_key = "settings.record_codec.options.h264" },
|
||||
{ value = "hevc", label_key = "settings.record_codec.options.hevc" },
|
||||
{ value = "av1", label_key = "settings.record_codec.options.av1" },
|
||||
]
|
||||
|
||||
[[setting]]
|
||||
key = "record-fps"
|
||||
type = "int"
|
||||
label_key = "settings.record_fps.label"
|
||||
description_key = "settings.record_fps.description"
|
||||
default = 60
|
||||
min = 15
|
||||
max = 240
|
||||
|
||||
[[setting]]
|
||||
key = "record-skip-confirmation"
|
||||
type = "bool"
|
||||
label_key = "settings.record_skip_confirmation.label"
|
||||
description_key = "settings.record_skip_confirmation.description"
|
||||
default = false
|
||||
|
||||
[[setting]]
|
||||
key = "record-copy-to-clipboard"
|
||||
type = "bool"
|
||||
label_key = "settings.record_copy_to_clipboard.label"
|
||||
description_key = "settings.record_copy_to_clipboard.description"
|
||||
default = false
|
||||
|
||||
[[setting]]
|
||||
key = "gif-max-seconds"
|
||||
type = "int"
|
||||
label_key = "settings.gif_max_seconds.label"
|
||||
description_key = "settings.gif_max_seconds.description"
|
||||
default = 30
|
||||
min = 1
|
||||
max = 600
|
||||
|
||||
# ── Entries ─────────────────────────────────────────────────────────────────
|
||||
|
||||
# Bar widget: crosshair glyph; shows a pulsing red dot while recording.
|
||||
# Left click toggles the main panel (or stops a recording); right click quick-picks a color.
|
||||
[[widget]]
|
||||
id = "widget"
|
||||
entry = "widget.luau"
|
||||
|
||||
# Control-center quick tile. Mirrors the bar widget.
|
||||
[[shortcut]]
|
||||
id = "toggle"
|
||||
entry = "shortcut.luau"
|
||||
|
||||
# Main toolkit panel: tool grid + per-tool result views + recording controls.
|
||||
# Open with: noctalia msg panel-toggle alexander/screen-toolkit:panel
|
||||
[[panel]]
|
||||
id = "panel"
|
||||
entry = "panel.luau"
|
||||
width = 660
|
||||
height = 340
|
||||
placement = "floating"
|
||||
position = "center"
|
||||
|
||||
# Result panel: opened by the service when a capture tool finishes.
|
||||
[[panel]]
|
||||
id = "result"
|
||||
entry = "result.luau"
|
||||
width = 560
|
||||
height = 520
|
||||
placement = "floating"
|
||||
position = "center"
|
||||
|
||||
# Headless engine: owns captures, tool pipelines, recording, and persistence.
|
||||
[[service]]
|
||||
id = "service"
|
||||
entry = "service.luau"
|
||||
Reference in New Issue
Block a user