You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A plugin can be one Lua script the launcher runs itself. wayrun --lua-host <script.lua> answers the external-host contract (list_plugins, search, top, forget) with Lua 5.4 compiled into the binary, so nothing has to be
installed beside it, and a plugins.tomlcommand entry points at the script
like any other host, its shebang naming the mode. The script runs sandboxed: a
curated global set (no os, io, package, load or print) and a wayrun table of bindings — t() for locale-correct strings, icon, urlencode, json/toml decoders, sqlite over an immutable snapshot of a
database, http.get, a scoped fs, time, env, home, cache_dir, web_search_engine, script_dir, plugin_dir and log. The API guide lives
in the WayRun-Plugins workspace (docs/en/LUA.md).
resident = true keeps a host process alive across calls: about a
millisecond per call against the fresh fork's several. A per-request deadline
kills and restarts a stalled or crashed host, a call a newer one overtook is
skipped so a keystroke burst cannot stack work on the pipe, and a host is
reaped when the launcher dismisses or after two minutes idle; a resident
host's stderr joins the journal, where a fork-per-call child's is nulled. See plugins.md.
wayrun.plugin_dir(id) names ~/.config/wayrun/plugins/<id>/, the directory
a plugin keeps its files in, and fs.read reads a relative path under it,
refusing an absolute path or a ..; wayrun.toml.decode parses the plugin's
own config file, the format the launcher's own configs are written in. A
plugin id is validated as a plain name, since it becomes a directory root.
Changed
Breaking: b, h and s no longer ship. The Firefox and web plugins are
Lua scripts in the WayRun-Plugins workspace now, registered as ordinary hosts
with a command entry, and what remains in the launcher is the mechanism: --lua-host, the bindings and resident. See plugins.md.
Breaking: wayrun.http.get answers {status, body} instead of the bare
body string, and takes a headers sub-table beside the query parameters. A
script that read the body must read res.body; the headers are there because
minreq sends no User-Agent of its own, so an API that requires one
(GitHub's) was unreachable from a plugin while the Python SDKs, whose urllib
sends one by default, never saw the problem.
Host rows parse from the reply without a per-item clone: measured on the real
Firefox payloads, the bookmark query takes 1.56 → 1.36 ms and the history
query 2.48 → 2.35 ms, and every Python host call gains the same slice.
Fixed
ui.locale governs the text the .desktop files contribute (application
names, their comments and desktop action labels), not just the launcher's own
strings: the core pins the configured locale into LANGUAGE as well, which is
the variable glib reads its language from, and the executor hands every app it
launches the session's original value back. See config.md and usage.md.