`JBwHdM~Ad4}8jF#RWrZ_gXC9fJYo}
z>{3fqm+xD`MboC7!{fg>tH0&L`dp4b#1(cq1!x>x=easceK6VB3z9Q
z-ik}9@SysY#lCr9OUC5UJF)?;@I43zM&IPoc*Tw*>dyQD?XfCxo#DGH=E!Ls1g-V;
zs4DUh5P;K}qFqh|*3G~J&rC#jQD+>w&qQpU6_DbG2AqbUm=)rTN2xHHt-IHySKEEq
zAXTS?V8g(*&6V)Pi8UO)54Yxd89>DJ$o`U5?ERh)2>^bQk{OT;vD^{)CoRqrIiXTa
z4}4s?sj61i&FM3kS89nVsNk~aa((3mgg9|8jSfY6!(vdHrLLw9dltw8&Y72dhWX52
zNUK>%uP4-xS)&c9@8`@D0+3HE9{BT_&O^cIKb&^WP0>tSM0zU5_QWyfHO5l5vQ*9q
z6l&Li1K(zrg4vWG6@Oe~`*KQ^V1kYxP)3FCNgjok5J0fAKyl*S_KSPG?{mgm8}Fut
z;adlJjE*S8hQE%AyDVsHv7l@Ozn4`|(IL{4H}&HV%F{p=mTJv%T1f#G&7b232rm3?
zRN_-;oby?2eFyzl>KYE>Y51iCQzlKdNxC-MO@id+W-h8G@(tn!+!(#}Ye%TBuu2g}
zOPM*p<8_M3oKK~v9aBU#oh2mMniQ(x&)e5k}mA}-%|BO!y~V3#StTPvTaPfbHhKkL)l1)an>n$OGE9S4$<
zX9u2>v?Hb+JmFX@8^${6PFp(=#-$beEg(m3j=dh$$h!sUWVy8?Zq5qY2>yT>qZjD+
zKUF$Ig72Y3TGxt~!G>Q}Z@a_VjrHK@Oq|-$l*?-4t`}fdlU<0fxwT%
z0FP>EnIdzu9;~d*VIt
zRj}RIsNywzJY#)Ujg=Qa3=<E6^EMn1cXJ;Tss{dE*)u-YVq{_adK6lLV}yDI|&n
z)z^j8yV)w>3x^NL@%s`1Xk!{bE)iZC{!8N+D5KC08L}Fi)yb&Tr?Lq!!P0NDJhbd(
zX_|SOJ!7e0hF<}^ua^;KekrbN!ZcI0B2Ei2vXJhK(lZpE3v1f-!dX!{M40jDy=n@9
znYM!;TX?sGSgf@B#AyQGxxOoS+(ct(O)Mw-1RrJq(;rmQQN#nA8z)%nAO9JUXjb!g
zy}jwf&sTZ5)n9wT_y7drju%%PQ>ylnuul+}g!<#f-T}jSNrRI98|^K+NEpl
zK?X$~M=t<0R$IQB58FtdHZN>`47_N9+cp=41=%b4Slko~^j3jOI#WodCtv8(#Z=Vm
zilRJU~Q10)C)*3#T7w`=hT1f4+c5l2UglqYcC70gB&*#ic=o4cdHb|f?
zjMLCX;7kB3Q}d60^FI2WQfO0fdhWo>lnhsXo2bsUvDZDE|G7^~gMoXq0Tz8LN)2ra
zo4Gxg@z?$|iQcj8uoGyzKWobpS^?sgHN)lF-8`Gwzz28iv5EAy0iE$;WU3nw2m2us
zn_y8V^JMkt3L)049c9EwOZ_(iUEXh
zK;jg}aLbdh$(`_Q1L6&0GNO3= 1000000000 then
+ return string.format(compact and "%.1fG/s" or "%.1f GB/s", value / 1000000000)
+ elseif value >= 1000000 then
+ return string.format(compact and "%.1fM/s" or "%.1f MB/s", value / 1000000)
+ elseif value >= 1000 then
+ return string.format(compact and "%.1fk/s" or "%.1f kB/s", value / 1000)
+ end
+
+ return string.format(compact and "%.0fB/s" or "%.0f B/s", value)
+end
+
+local function configBool(key, fallback)
+ local value = noctalia.getConfig(key)
+ if type(value) == "boolean" then
+ return value
+ end
+
+ return fallback
+end
+
+local function configString(key, fallback)
+ local value = noctalia.getConfig(key)
+ if type(value) == "string" and value ~= "" then
+ return value
+ end
+
+ return fallback
+end
+
+local function swapPercent(swap)
+ if type(swap) ~= "table"
+ or type(swap.usedMb) ~= "number"
+ or type(swap.totalMb) ~= "number"
+ or swap.totalMb <= 0 then
+ return nil
+ end
+
+ return swap.usedMb / swap.totalMb * 100
+end
+
+local function appendMetric(children, glyph, text)
+ table.insert(children, ui.glyph({ name = glyph, size = 14 }))
+ table.insert(children, ui.label({ text = text, fontWeight = "medium" }))
+end
+
+local function appendDivider(children)
+ local mark = barWidget.isVertical() and "─" or "│"
+ table.insert(children, ui.label({ text = mark, color = "outline", fontWeight = "light" }))
+end
+
+local function appendGroup(children, group, showSeparators)
+ if #group == 0 then
+ return
+ end
+
+ if #children > 0 and showSeparators then
+ appendDivider(children)
+ end
+
+ for _, child in ipairs(group) do
+ table.insert(children, child)
+ end
+end
+
+local function metric(glyph, text)
+ return {
+ ui.glyph({ name = glyph, size = 14 }),
+ ui.label({ text = text, fontWeight = "medium" }),
+ }
+end
+
+local function appendMetricToGroup(group, glyph, text)
+ for _, child in ipairs(metric(glyph, text)) do
+ table.insert(group, child)
+ end
+end
+
+local function renderUnavailable(showTooltip)
+ barWidget.render(ui.row({ gap = 4, align = "center" }, {
+ ui.glyph({ name = "cpu", size = 14 }),
+ ui.label({ text = "System data unavailable", fontWeight = "medium" }),
+ }))
+ if showTooltip then
+ barWidget.setTooltip("System monitoring is disabled or no sample is available yet.")
+ else
+ barWidget.clearTooltip()
+ end
+end
+
+function update()
+ noctalia.setUpdateInterval(1000)
+
+ local showCpuUsage = configBool("show_cpu_usage", true)
+ local showCpuTemperature = configBool("show_cpu_temperature", true)
+ local showRam = configBool("show_ram", true)
+ local showSwap = configBool("show_swap", true)
+ local showDisk = configBool("show_disk", true)
+ local showDownload = configBool("show_download", true)
+ local showUpload = configBool("show_upload", true)
+ local showSeparators = configBool("show_separators", true)
+ local showTooltip = configBool("show_tooltip", true)
+ local compactNetwork = configBool("compact_network", true)
+ local diskPath = configString("disk_path", "/")
+
+ local stats = noctalia.systemStats()
+ if stats == nil then
+ renderUnavailable(showTooltip)
+ return
+ end
+
+ local disk = showDisk and noctalia.diskStats(diskPath) or nil
+ local cpuUsage = stats.cpu and stats.cpu.usagePercent or nil
+ local cpuTemp = stats.cpu and stats.cpu.tempC or nil
+ local ramUsage = stats.ram and stats.ram.usagePercent or nil
+ local swapUsage = swapPercent(stats.swap)
+ local diskUsage = disk and disk.usagePercent or nil
+ local rx = stats.net and stats.net.rxBytesPerSec or nil
+ local tx = stats.net and stats.net.txBytesPerSec or nil
+
+ local cpuText = formatPercent(cpuUsage)
+ local tempText = formatTemperature(cpuTemp)
+ local ramText = formatPercent(ramUsage)
+ local swapText = formatPercent(swapUsage)
+ local diskText = formatPercent(diskUsage)
+ local rxText = formatRate(rx, compactNetwork)
+ local txText = formatRate(tx, compactNetwork)
+
+ local children = {}
+ local processor = {}
+ local memory = {}
+ local storage = {}
+ local network = {}
+
+ if showCpuUsage then appendMetricToGroup(processor, "cpu", cpuText) end
+ if showCpuTemperature then appendMetricToGroup(processor, "temperature", tempText) end
+ if showRam then appendMetricToGroup(memory, "server-2", ramText) end
+ if showSwap then appendMetricToGroup(memory, "arrows-exchange", swapText) end
+ if showDisk then appendMetricToGroup(storage, "database", diskText) end
+ if showDownload then appendMetricToGroup(network, "arrow-down", rxText) end
+ if showUpload then appendMetricToGroup(network, "arrow-up", txText) end
+
+ appendGroup(children, processor, showSeparators)
+ appendGroup(children, memory, showSeparators)
+ appendGroup(children, storage, showSeparators)
+ appendGroup(children, network, showSeparators)
+
+ if #children == 0 then
+ barWidget.render(ui.row({ gap = 4, align = "center" }, {
+ ui.glyph({ name = "adjustments", size = 14 }),
+ ui.label({ text = "No metrics", fontWeight = "medium" }),
+ }))
+ if showTooltip then
+ barWidget.setTooltip("Enable at least one metric in the widget settings.")
+ else
+ barWidget.clearTooltip()
+ end
+ return
+ end
+
+ local container = barWidget.isVertical() and ui.column or ui.row
+ barWidget.render(container({ gap = 4, align = "center" }, children))
+
+ if showTooltip then
+ local lines = {}
+ if showCpuUsage then table.insert(lines, "CPU: " .. cpuText) end
+ if showCpuTemperature then table.insert(lines, "Temperature: " .. tempText) end
+ if showRam then table.insert(lines, "RAM: " .. ramText) end
+ if showSwap then table.insert(lines, "Swap: " .. swapText) end
+ if showDisk then table.insert(lines, "Disk " .. diskPath .. ": " .. diskText) end
+ if showDownload then table.insert(lines, "Download: " .. rxText) end
+ if showUpload then table.insert(lines, "Upload: " .. txText) end
+ barWidget.setTooltip(table.concat(lines, "\n"))
+ else
+ barWidget.clearTooltip()
+ end
+end
From eb60fdff2cdadc6226be2d25d0218a837c26d63b Mon Sep 17 00:00:00 2001
From: TMelik <97912092+TMelik@users.noreply.github.com>
Date: Mon, 24 Aug 2026 16:56:12 +0400
Subject: [PATCH 2/3] Use the selected widget screenshot
---
system-monitor/screenshot.png | Bin 0 -> 4910 bytes
system-monitor/screenshot.webp | Bin 5882 -> 0 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 system-monitor/screenshot.png
delete mode 100644 system-monitor/screenshot.webp
diff --git a/system-monitor/screenshot.png b/system-monitor/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..edc7acaf2162f36059abb1c434839d717bbdccb7
GIT binary patch
literal 4910
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
literal 0
HcmV?d00001
diff --git a/system-monitor/screenshot.webp b/system-monitor/screenshot.webp
deleted file mode 100644
index 514d2724c0234f9eb506752f3336ebdae09279fd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5882
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
From 8b7a0a9fc3ed4eef6f216e1b3994126f1123cf66 Mon Sep 17 00:00:00 2001
From: TMelik <97912092+TMelik@users.noreply.github.com>
Date: Mon, 24 Aug 2026 17:46:05 +0400
Subject: [PATCH 3/3] Use generated System Monitor thumbnail
---
system-monitor/screenshot.png | Bin 4910 -> 0 bytes
system-monitor/thumbnail.webp | Bin 22886 -> 53182 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 system-monitor/screenshot.png
diff --git a/system-monitor/screenshot.png b/system-monitor/screenshot.png
deleted file mode 100644
index edc7acaf2162f36059abb1c434839d717bbdccb7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4910
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
diff --git a/system-monitor/thumbnail.webp b/system-monitor/thumbnail.webp
index fa16bb0f9d2012567177c20d38de8301446f351a..a81069374c66f7ac763f933473a43000afc8468e 100644
GIT binary patch
literal 53182
zcmV(-K-|AlNk&Gt&j0{dMM6+kP&go}&j0|h;{u%lD!>CA0zL@>fk1&m000n{cHm(R
z3%Jki^-cGm)cJW_;#uD`Is?>1%l&7iYcl`%I(BVV^;N)sBO5#j=>K*7G5LqO--P(z
z^84?j`27)mpZp&;Z)E-N{onZS^FQx@&wu~=kN+$G5BneUU-v#}|62bY{}=O@=wtPB
z{crd0@jvoE$^318;`|)_*8jQer}k6*_xdm0&zisaU$g%GKfeFP_96bi{s;aqwzsR_
z??18U?FX!n{r~=7@BSvgyMMU<&Hlgl|KcD0-{%*9M@K)cfA{o*^ndk#%>F`p2jsuS
zAH06Ge|P_<{#V;m%16q7t^YgntK5I&KWRR_{qy|S_&@C*{D0AX==<375BLA#ztw(O
z|Eu{9{BQWz^xy3tus_)U`2Vr>-|?>8|L1xHdk6GC^FQD}#{b#>4e%}apYgxW`pxz?
z{r~wd-B0pg|Nj8Lm47(??ft*@_xrE^@Auz#|HSe(`?vg$+z)_X=il9b@PDBHUHf(P
z>HaVMpY?y~Kk9#{|NsAU=daYi^}o}9wg2J%U;qE$r}Ka8zv_R(f1dxR{s;g6{ZA?0
zg+jY>nlYBl!EMgxDhkf2HAe9wK2ppJxZGEw=p6E!*W?z*dNrL^CwRRyxMPLNVwRZXvhd%L+GFW>My!)B;S=WT=7r>i*N>1*%vscN|R*WCr&$}b2g
z>r4+T%T#k5z^?t&6%?+CgVtbpStN?Obk3PU_VRyYCeh@)VN>i_-29Z8gZTLh_`A!>
zMy!XlldN=3#MFbVbi3{U;!!8ExgVN}5hqsb^14bFo
z!)+kVh;}ixq(eCIB7~+tS0b$tv};>|%q_&Tlk;VRy&Hp|!&w-3#X_nhK26>VXx_52
zge3?XhZp1QKb|#r@#?yrYJJ3M%iF)G9H{?Syb>4xELjVXC1>0(5lwTG=Od^i;ykFc
z0F4xJAXW@I;gia)vSNKQpU7~8sp0>Iwob
zpi|~e=hNdv>?us9uY$PLqusEgj}ZtxL-5WxeH@&w9aU;lib)1_D61!#uRMrz3gP$8
zMfm<@)1IqXm0POp5B2%|1gBsF*
zzRvexKfaMwCB+`E(8i_p7C=?W2NNoT66d>i%TVfl*1W<#dIO2Vdj8|8PNkeUkwBfo
zZ-k~h1t-XUD%^aY$+RgMoiYha=j!WM9SXWdS5SQ6TKyTgML-$nkJsZPaIIyQJgbgR
zXvs^u=!EAkI8az~Zb?1W%~_bnuDg9fclo_1-0x_dqdO~ocEt_7xSZ|y_pHc+JxIsC
zzFV3bvF$05c}yppUb(NqTx)z;C1jR;t=v_Cmfy@MX?9b^`^~ihndW(vI-PNszL($g
ze7#pPQ~1Uu|0XoDHv$qlfRJwE*{asI|;}di>$lXz?|YN#rT8YxQ@*T+DF8NaQNQ
zi=2J-E&vJa?SyQIHkGbU{#j`z6(+qbSy_<
zBX<)srOU88>rzkqCT0m