250 lines
7.0 KiB
TOML
250 lines
7.0 KiB
TOML
# 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.2.0"
|
|
plugin_api = 13
|
|
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",
|
|
"mpv",
|
|
]
|
|
|
|
# ── Panel entries (host-injected placement/size settings appear here, first in the settings editor) ──
|
|
|
|
# Main toolkit panel: tool grid + per-tool result views + recording controls.
|
|
# Open with: noctalia msg panel-toggle alexander/screen-toolkit:panel
|
|
# Compact layout (default). Full mode uses the "panel-full" entry below; the
|
|
# bar widget / shortcut open whichever entry matches the "panel-mode" setting.
|
|
[[panel]]
|
|
id = "panel"
|
|
entry = "panel.luau"
|
|
width = 380
|
|
height = 290
|
|
placement = "floating"
|
|
position = "center"
|
|
keyboard_focus = "on_demand"
|
|
capture_keys = ["Tab", "Backtab", "Shift+Tab", "Up", "Down", "Left", "Right", "Return", "Enter", "Space", "Escape"]
|
|
|
|
# Full-mode layout: the original spacious grid (660x340).
|
|
[[panel]]
|
|
id = "panel-full"
|
|
entry = "panel.luau"
|
|
width = 660
|
|
height = 340
|
|
placement = "floating"
|
|
position = "center"
|
|
keyboard_focus = "on_demand"
|
|
capture_keys = ["Tab", "Backtab", "Shift+Tab", "Up", "Down", "Left", "Right", "Return", "Enter", "Space", "Escape"]
|
|
|
|
# Legacy-mode layout: the original screen-toolkit v4 panel.
|
|
[[panel]]
|
|
id = "panel-legacy"
|
|
entry = "panel.luau"
|
|
width = 380
|
|
height = 260
|
|
placement = "floating"
|
|
position = "center"
|
|
keyboard_focus = "on_demand"
|
|
capture_keys = ["Tab", "Backtab", "Shift+Tab", "Up", "Down", "Left", "Right", "Return", "Enter", "Space", "Escape"]
|
|
|
|
# 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"
|
|
|
|
# ── 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
|
|
|
|
[[setting]]
|
|
key = "panel-mode"
|
|
type = "select"
|
|
label_key = "settings.panel_mode.label"
|
|
description_key = "settings.panel_mode.description"
|
|
default = "full"
|
|
options = [
|
|
{ value = "compact", label_key = "settings.panel_mode.options.compact" },
|
|
{ value = "full", label_key = "settings.panel_mode.options.full" },
|
|
{ value = "legacy", label_key = "settings.panel_mode.options.legacy" },
|
|
]
|
|
|
|
# ── 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"
|
|
|
|
# Headless engine: owns captures, tool pipelines, recording, and persistence.
|
|
[[service]]
|
|
id = "service"
|
|
entry = "service.luau"
|