on this page
status.lua
The status bar. This is the status table in the config.
The bar is built from templates, one per line, so it can be as tall and say as
much as you like. Leave lines out and it follows the layout's own default.
Templates
A template is literal text with fields in braces. Anything that is not a field is printed as written.
| Syntax | Does |
|---|---|
{field} |
Replaced by the field's current value |
{|} |
Pushes everything after it to the right-hand edge |
{?field} ... {/} |
Drops everything between the two when field is empty |
{{ and }} |
A literal { and } |
The {?field} group is what keeps a bar tidy. On its own, [Lag: {lag}ms]
reads [Lag: ms] until the first reading arrives. Written as
{?lag}[Lag: {lag}ms] {/}, it leaves nothing behind until there is something
to show.
A field luir does not know is drawn as nothing, so a template written for a later version degrades quietly rather than showing its own source.
Fields
Most fields are empty when there is nothing to say, which is what
{?field} ... {/} tests for. Unless plain is on, several are drawn in a
colour from the theme that says what they mean.
| Field | Shows |
|---|---|
time |
The local time, as 14:28 |
date |
The local date, as 2026-09-09 |
buffer |
The name of the buffer you are in, in the accent colour |
network |
The name of that buffer's network |
server |
The host of the server that network is connected to |
nick |
Your nick on that network |
umodes |
Your user modes on that network, without the + |
cmodes |
The channel's modes, without the + |
away |
Your away message, while you are away |
lag |
The latest lag reading, in milliseconds, as a bare number |
lagchart |
A braille chart of recent lag readings. Empty until the first reading |
sendrate |
A braille chart of frames going out, one reading a second. Empty while nothing is being sent |
unread |
The unread count for this buffer, when there is one. On the luir row it includes Lurker's system messages, while merge_system_row puts them there |
highlights |
How many messages in this buffer mention you, when any do. Counted the same way as unread on the luir row |
members |
How many people are in the channel |
topic |
The channel's topic |
scroll |
How far back you are scrolled, while you are |
typing |
Who is typing in this buffer: avery is typing…, then avery and kestrel are typing…, then 3 people are typing… |
state |
connecting or reconnecting 5s while not connected, and empty once connected |
flash |
A short notice, such as config reloaded, for six seconds |
activity |
The sidebar numbers of buffers with unread traffic, as 4,5, with any that mention you called out in the highlight colour |
joined |
not joined in a channel you have left but kept open |
A name in typing goes stale eight seconds after its last notice, and drops as
soon as that person actually says something.
The two charts share chart_width. The lag chart's height follows the tallest
reading on screen, down to chart_floor_ms, and its colour follows the reading.
The send-rate chart is coloured against luir's own sending limit, so it turns
red as a large paste reaches the point where luir holds frames back.
The defaults
With lines left out, the modern layout draws:
[{time}] [{nick}{?umodes}(+{umodes}){/}] {?lag}[Lag: {lag}ms{?lagchart} {lagchart}{/}] {/}[{buffer}@{network}] {?typing}· {typing} {/}{?flash}· {flash} {/}{|}{?sendrate}[tx {sendrate}] {/}{?activity}[Act: {activity}]{/}
And the classic layout:
[{time}] [{nick}{?umodes}(+{umodes}){/}{?away}/away{/}] [{buffer}{?cmodes}(+{cmodes}){/}@{network}] {?lag}[Lag: {lag}ms] {/}{?typing}[{typing}] {/}{?flash}· {flash} {/}{?activity}[Act: {activity}]{/}
Options
- lines
One template for each line of the bar. The bar is as tall as this list. Leave it out to use the layout's default, shown above.
- background
The bar's background. Unset, it follows the theme's status_bg. Takes any value a theme colour does.
- foreground
The bar's text colour. Unset, it follows the theme's status_fg.
- backgrounds
A background for each line, so a two-line bar can shade its lines apart. The list is cycled when it is shorter than
lines, and wins overbackgroundfor the lines it covers.- plain
Draw every field in the line's own colour, instead of colouring nicks, lag, unread counts and activity by what they mean.
- chart_width
How many cells wide the
lagchartandsendratecharts are. Braille fits two readings into a cell, so a chart shows twice this many.0hides both, and a template that wraps them in{?lagchart}and{?sendrate}groups closes up around the gap.- chart_floor_ms
The lowest the lag chart's scale will go, in milliseconds. The scale otherwise follows the tallest reading on screen, so that a bad link uses the full height. Without a floor, a millisecond of jitter on a good connection would look like a mountain range.
Examples
A second line for the topic, under the default first line:
return {
lines = {
" [{time}] [{nick}{?umodes}(+{umodes}){/}] {?lag}[Lag: {lag}ms{?lagchart} {lagchart}{/}] {/}[{buffer}@{network}] {?typing}· {typing} {/}{?flash}· {flash} {/}{|}{?sendrate}[tx {sendrate}] {/}{?activity}[Act: {activity}]{/} ",
" {?topic}{topic}{/}",
},
backgrounds = { "#1c2030", "#141824" },
}
A short bar of your own, with the charts on either side:
return {
lines = { " {nick} {?lagchart}{lagchart} {/}{|} {?sendrate}{sendrate}{/} " },
}
The lag as a number only, without its chart: drop the {?lagchart} group from
the default.
return {
lines = { " [{time}] [{nick}] {?lag}[Lag: {lag}ms] {/}[{buffer}@{network}]{|}{?activity}[Act: {activity}]{/} " },
}
