Runtime API
local lush = require("lush")
top-level modules:
lush.uilush.datalush.statelush.signallush.windowslush.notificationslush.osdlush.schedulerlush.processlush.audiolush.store
lush.data
start providers explicitly:
lush.data.use("cpu", { interval = 2 })
lush.data.use("network", { interval = 1, iface = "wlan0" })
lush.data.use("disk", { path = "/" })
lush.data.use("audio")
lush.data.use("compositor", { output = "focused" })
stop a provider if you have to:
lush.data.unuse("cpu")
reactive watch:
local stop = lush.data.watch("cpu", { immediate = true }, function(snapshot)
print(snapshot["data.cpu.percent"])
end)
-- if you want to stop:
stop()
provider signal keys are listed in signals reference.
lush.state and lush.signal
both write to the same runtime signal bus.
lush.state.set("app.mode", "normal")
lush.signal.emit("app.mode", "normal")
watch one key:
local unwatch = lush.state.watch("app.mode", function(v)
print("mode: ", v)
end, { immediate = true })
watch many:
local unwatch = lush.state.watch_many({
"data.cpu.percent",
"data.memory.percent",
}, function(values)
print(values["data.cpu.percent"], values["data.memory.percent"])
end)
lush.windows
control named windows:
lush.windows.toggle("bar")
lush.windows.open("bar")
lush.windows.close("bar")
lush.windows.set_visible("control-center", true)
lush.process
watch shell command output:
local stop = lush.process.watch("date +%H:%M:%S", 1, function(out)
lush.state.set("custom.clock", out)
end, {
queue_policy = "latest", -- or "drop"
})
lush.scheduler
local id = lush.scheduler.after(1.2, function()
print("once")
end)
local every_id = lush.scheduler.every(5, function()
print("tick")
end)
lush.scheduler.cancel(every_id)
lush.osd
bind a named window to one or more signals and auto-hide:
lush.osd.create({
window = volume_osd, -- ui.window table with name
signals = { "data.audio.volume", "data.audio.muted" },
timeout = 1200,
})
use this instead of manual state.watch + scheduler show/hide loops.