signals
all keys are string-based values on the shared signal bus.
window visibility keys
written by runtime when named windows are shown/hidden:
window.<name>.visible->"1"or"0"
notification live keys
primary active notification mirror:
notification.visiblenotification.idnotification.app_namenotification.summarynotification.titlenotification.bodynotification.iconnotification.urgencynotification.urgency_namenotification.changed(incremented once per logical notification update)notification.active_count(visible count in live stack)notification.history_count(visible count in history stack)
notification lifecycle event keys (last event snapshot):
notification.event(pushed|closed|history_cleared|history_deleted)notification.event_seq(incremented per lifecycle event)notification.event.idnotification.event.app_namenotification.event.summarynotification.event.titlenotification.event.bodynotification.event.iconnotification.event.urgencynotification.event.urgency_namenotification.event.history_index(0unlesshistory_deleted)
stack slots (MAX_NOTIFICATION_SLOTS = 3):
notification.slot1.*notification.slot2.*notification.slot3.*
each slot has:
id,app_name,summary,title,body,icon,urgency,urgency_name,visible
history slots (MAX_HISTORY_SLOTS = 32):
notification.history1.*…notification.history32.*
notification control keys
observed by notification runtime:
notification.history_clearornotification.history.clearnotification.history_deleteornotification.history.delete
trigger behavior:
- clear: clears all history
- delete: deletes one history row
data providers (lush.data)
cpu provider:
data.cpu.percentdata.cpu.state(normal|warn|critical)data.cpu.userdata.cpu.systemdata.cpu.idledata.cpu.total
memory provider:
data.memory.percentdata.memory.state(normal|warn|critical)data.memory.total_mbdata.memory.used_mbdata.memory.available_mbdata.memory.total_gbdata.memory.used_gbdata.memory.available_gb
network provider:
data.network.down_bpsdata.network.up_bpsdata.network.down_kibpsdata.network.up_kibpsdata.network.iface(allor requested interface name)data.network.state(idle|active)data.network.down_total_bytesdata.network.up_total_bytesdata.network.ssid(empty when unavailable/not Wi-Fi)data.network.wifi_strength_percent(0..100,0when unavailable)data.network.wifi_signal_dbm(empty when unavailable)
disk provider:
data.disk.pathdata.disk.total_percent(always100)data.disk.used_percentdata.disk.free_percentdata.disk.total_gbdata.disk.used_gbdata.disk.free_gbdata.disk.total_bytesdata.disk.used_bytesdata.disk.free_bytes
battery provider:
data.battery.percentdata.battery.state(charging|discharging|full|unknown|unavailable)data.battery.time_left_mindata.battery.power_w
audio provider:
data.audio.volume(0..150)data.audio.muted(1muted,0unmuted)data.audio.sink
bluetooth provider:
data.bluetooth.available(1when adapter exists, else0)data.bluetooth.powered(1on,0off)data.bluetooth.connected_countdata.bluetooth.connected_name(first connected device alias/name)data.bluetooth.connected_address(first connected device MAC)data.bluetooth.connected_battery_percent(0..100when bluezBattery1is available)data.bluetooth.adapter(adapter alias/name)data.bluetooth.state(unavailable|off|on|connected)data.bluetooth.summary
mpris provider:
data.mpris.available(1when at least one MPRIS player exists, else0)data.mpris.player(selected player identity)data.mpris.status(playing|paused|stopped|unknown)data.mpris.titledata.mpris.artistdata.mpris.albumdata.mpris.art_url(cover art URI/path)data.mpris.length_us(track length in microseconds)data.mpris.position_us(playback position in microseconds)data.mpris.summary
compositor provider:
data.compositor.namedata.compositor.summarydata.compositor.focused_maskdata.compositor.occupied_maskdata.compositor.urgent_maskdata.compositor.focused_workspacedata.compositor.focused_window.titledata.compositor.focused_window.app_iddata.compositor.focused_window.workspace
state and signal note
lush.state.set("x", "y") and lush.signal.emit("x", "y") are equivalent, both write to the same runtime bus and dispatch watchers.