style(nix-monitor): reformat with stylua

This commit is contained in:
avivbintangaringga
2026-07-16 16:38:52 +07:00
parent 132575905e
commit 486b106d2e
3 changed files with 384 additions and 370 deletions
+30 -31
View File
@@ -1,53 +1,52 @@
function tr(key)
return noctalia.tr(key)
return noctalia.tr(key)
end
function cfg(key)
return noctalia.getConfig(key)
return noctalia.getConfig(key)
end
function getState(key)
return noctalia.state.get(key)
return noctalia.state.get(key)
end
function displayWidget(glyph: string, text: string, color: string?)
local _color = color or "on_surface"
local _color = color or "on_surface"
if cfg("colorize_text") then
barWidget.setColor(_color)
end
if cfg("colorize_text") then
barWidget.setColor(_color)
end
if cfg("colorize_glyph") then
barWidget.setGlyphColor(_color)
end
if cfg("colorize_glyph") then
barWidget.setGlyphColor(_color)
end
if cfg("show_glyph") then
barWidget.setGlyph(glyph)
end
if cfg("show_glyph") then
barWidget.setGlyph(glyph)
end
if cfg("show_text") then
barWidget.setText(text)
end
if cfg("show_text") then
barWidget.setText(text)
end
end
-- Hooks
function update()
if getState("isRemoteCheckRunning") then
displayWidget(cfg("checking_glyph"), tr("bar.checking"), cfg("checking_color"))
else
if getState("isUpdateAvailable") then
displayWidget(cfg("update_available_glyph"), tr("bar.update_available"), cfg("update_available_color"))
else
if getState("localHash") == "n/a" or getState("remoteHash") == "n/a" then
displayWidget(cfg("unknown_glyph"), tr("bar.unknown"), cfg("unknown_color"))
else
displayWidget(cfg("up_to_date_glyph"), tr("bar.up_to_date"), cfg("up_to_date_color"))
end
end
end
if getState("isRemoteCheckRunning") then
displayWidget(cfg("checking_glyph"), tr("bar.checking"), cfg("checking_color"))
else
if getState("isUpdateAvailable") then
displayWidget(cfg("update_available_glyph"), tr("bar.update_available"), cfg("update_available_color"))
else
if getState("localHash") == "n/a" or getState("remoteHash") == "n/a" then
displayWidget(cfg("unknown_glyph"), tr("bar.unknown"), cfg("unknown_color"))
else
displayWidget(cfg("up_to_date_glyph"), tr("bar.up_to_date"), cfg("up_to_date_color"))
end
end
end
end
function onClick()
noctalia.togglePanel("avivbintangaringga/nix-monitor:panel")
noctalia.togglePanel("avivbintangaringga/nix-monitor:panel")
end
+148 -144
View File
@@ -2,34 +2,34 @@ noctalia.setUpdateInterval(1000)
-- Helper functions
function tr(key)
return noctalia.tr(key)
return noctalia.tr(key)
end
function cfg(key)
return noctalia.getConfig(key)
return noctalia.getConfig(key)
end
function getState(key)
return noctalia.state.get(key)
return noctalia.state.get(key)
end
function setState(key, val)
noctalia.state.set(key, val)
noctalia.state.set(key, val)
end
function watchState(key, cb)
noctalia.state.watch(key, cb)
noctalia.state.watch(key, cb)
end
function killWithPidFile(file)
if noctalia.fileExists(file) then
local pid = noctalia.string.trim(noctalia.readFile(file))
if noctalia.fileExists(file) then
local pid = noctalia.string.trim(noctalia.readFile(file))
if type(pid) == "string" and pid ~= "" then
noctalia.runAsync(`pkill -9 -P {pid} && kill -9 {pid}`)
end
noctalia.removeFile(file)
end
if type(pid) == "string" and pid ~= "" then
noctalia.runAsync(`pkill -9 -P {pid} && kill -9 {pid}`)
end
noctalia.removeFile(file)
end
end
-- Vars
@@ -47,14 +47,14 @@ local storePidFile = stateDir .. "/storeSize.pid"
local closurePidFile = stateDir .. "/closureSize.pid"
local showUpdateAvailableNotification = true
local localHashCmd = "nixos-version --hash 2> /dev/null | cut -c -7"
local localHashCmd = "nixos-version --hash 2> /dev/null | cut -c -7"
local remoteHashCmd = "git ls-remote https://github.com/NixOS/nixpkgs " .. branch .. " 2>/dev/null | cut -c 1-7"
local nixosGenerationsCmd = "nixos-rebuild list-generations | tail -n +2 | wc -l"
local nixosCurrentGenCmd = "nixos-rebuild list-generations | grep True | awk '{print $1}'"
local hmGenerationsCmd = "home-manager generations | wc -l"
local hmCurrentGenCmd = "home-manager generations | grep '(current)' | awk '{print $5}'"
local storeSizeCmd = "du -s --block-size=1GiB /nix/store | awk '\{print $1 \" GiB\"\}'"
local closureSizeCmd = "nix path-info --closure-size --human-readable /run/current-system | awk '\{print $2, $3\}'"
local storeSizeCmd = "du -s --block-size=1GiB /nix/store | awk '{print $1 \" GiB\"}'"
local closureSizeCmd = "nix path-info --closure-size --human-readable /run/current-system | awk '{print $2, $3}'"
-- State inits
setState("lastLocalCheckTime", os.time())
@@ -82,12 +82,12 @@ noctalia.writeFile(remoteHashFile, "")
-- Local check
function checkLocalHash()
setState("lastLocalCheckTime", os.time())
noctalia.runAsync(localHashCmd, function(res)
if res.exitCode == 0 then
setState("localHash", noctalia.string.trim(res.stdout))
end
end)
setState("lastLocalCheckTime", os.time())
noctalia.runAsync(localHashCmd, function(res)
if res.exitCode == 0 then
setState("localHash", noctalia.string.trim(res.stdout))
end
end)
end
-- Remote check
@@ -95,116 +95,118 @@ end
-- Currently it is writing to a file because when I use the runAsync with
-- the callback, it is timed out
function checkRemoteHash(delay: number?)
local delay = delay or 0
local delay = delay or 0
if getState("isRemoteCheckRunning") then
return
end
if getState("isRemoteCheckRunning") then
return
end
setState("isRemoteCheckRunning", true)
setState("lastRemoteCheckRunTime", os.time())
setState("isRemoteCheckRunning", true)
setState("lastRemoteCheckRunTime", os.time())
if cfg("show_update_check_notification") then
noctalia.notify(tr("notification.checking_update"))
end
if cfg("show_update_check_notification") then
noctalia.notify(tr("notification.checking_update"))
end
noctalia.writeFile(remoteHashFile, "")
noctalia.runAsync(`sleep {delay} && {remoteHashCmd} > {remoteHashFile} & echo $! > {remotePidFile}`)
noctalia.writeFile(remoteHashFile, "")
noctalia.runAsync(`sleep {delay} && {remoteHashCmd} > {remoteHashFile} & echo $! > {remotePidFile}`)
end
-- Check if the remoteHash check command is finished by reading the file
function checkRemoteStatus()
local remoteHash = noctalia.string.trim(noctalia.readFile(remoteHashFile))
local remoteHash = noctalia.string.trim(noctalia.readFile(remoteHashFile))
if type(remoteHash) == "string" and remoteHash ~= "" then
setState("isRemoteCheckRunning", false)
setState("remoteHash", remoteHash)
onRemoteHashCheckCompleted()
end
if type(remoteHash) == "string" and remoteHash ~= "" then
setState("isRemoteCheckRunning", false)
setState("remoteHash", remoteHash)
onRemoteHashCheckCompleted()
end
end
function onRemoteHashCheckCompleted()
if cfg("show_update_check_notification") then
noctalia.notify(tr("notification.update_check_completed"))
end
if cfg("show_update_check_notification") then
noctalia.notify(tr("notification.update_check_completed"))
end
setState("lastRemoteCheckTime", os.time())
setState("lastRemoteCheckTime", os.time())
local date = noctalia.formatTime("%Y-%m-%d %H:%M:%S")
setState("lastRemoteCheckTimeStr", date)
local date = noctalia.formatTime("%Y-%m-%d %H:%M:%S")
setState("lastRemoteCheckTimeStr", date)
noctalia.removeFile(remotePidFile)
noctalia.removeFile(remotePidFile)
end
function cancelRemoteCheck()
setState("isRemoteCheckRunning", false)
killWithPidFile(remotePidFile)
setState("isRemoteCheckRunning", false)
killWithPidFile(remotePidFile)
end
-- Generation check
function checkGenerations()
setState("lastGenerationsCheckTime", os.time())
setState("lastGenerationsCheckTime", os.time())
noctalia.runAsync(nixosGenerationsCmd, function(result)
setState("nixosGenerations", noctalia.string.trim(result.stdout))
end)
noctalia.runAsync(nixosGenerationsCmd, function(result)
setState("nixosGenerations", noctalia.string.trim(result.stdout))
end)
noctalia.runAsync(nixosCurrentGenCmd, function(result)
setState("nixosCurrentGen", noctalia.string.trim(result.stdout))
end)
noctalia.runAsync(nixosCurrentGenCmd, function(result)
setState("nixosCurrentGen", noctalia.string.trim(result.stdout))
end)
if getState("hasHomeManager") then
noctalia.runAsync(hmGenerationsCmd, function(result)
setState("hmGenerations", noctalia.string.trim(result.stdout))
end)
if getState("hasHomeManager") then
noctalia.runAsync(hmGenerationsCmd, function(result)
setState("hmGenerations", noctalia.string.trim(result.stdout))
end)
noctalia.runAsync(hmCurrentGenCmd, function(result)
setState("hmCurrentGen", noctalia.string.trim(result.stdout))
end)
end
noctalia.runAsync(hmCurrentGenCmd, function(result)
setState("hmCurrentGen", noctalia.string.trim(result.stdout))
end)
end
end
-- System stats check
function checkSystemStats()
if getState("isSystemStatsCheckRunning") then
return
end
if getState("isSystemStatsCheckRunning") then
return
end
setState("isSystemStatsCheckRunning", true)
setState("lastSystemStatsCheckRunTime", os.time())
setState("isSystemStatsCheckRunning", true)
setState("lastSystemStatsCheckRunTime", os.time())
-- Sleep 0 to trigger noctalia calling /bin/sh
noctalia.runAsync(`sleep 0 && {storeSizeCmd} > {storeSizeFile} & echo $! > {storePidFile}`)
noctalia.runAsync(`sleep 0 && {closureSizeCmd} > {closureSizeFile} & echo $! > {closurePidFile}`)
-- Sleep 0 to trigger noctalia calling /bin/sh
noctalia.runAsync(`sleep 0 && {storeSizeCmd} > {storeSizeFile} & echo $! > {storePidFile}`)
noctalia.runAsync(`sleep 0 && {closureSizeCmd} > {closureSizeFile} & echo $! > {closurePidFile}`)
end
function checkSystemStatsFile()
local storeSize = noctalia.string.trim(noctalia.readFile(storeSizeFile))
local closureSize = noctalia.string.trim(noctalia.readFile(closureSizeFile))
local storeSize = noctalia.string.trim(noctalia.readFile(storeSizeFile))
local closureSize = noctalia.string.trim(noctalia.readFile(closureSizeFile))
if typeof(storeSize) == "string" and storeSize ~= "" then
setState("storeSize", storeSize)
end
if typeof(storeSize) == "string" and storeSize ~= "" then
setState("storeSize", storeSize)
end
if typeof(closureSize) == "string" and closureSize ~= "" then
setState("closureSize", closureSize)
end
if typeof(closureSize) == "string" and closureSize ~= "" then
setState("closureSize", closureSize)
end
local success = typeof(storeSize) == "string" and storeSize ~= "" and
typeof(closureSize) == "string" and closureSize ~= ""
local success = typeof(storeSize) == "string"
and storeSize ~= ""
and typeof(closureSize) == "string"
and closureSize ~= ""
if success then
setState("isSystemStatsCheckRunning", false)
setState("lastSystemStatsCheckTime", os.time())
noctalia.removeFile(storePidFile)
noctalia.removeFile(closurePidFile)
end
if success then
setState("isSystemStatsCheckRunning", false)
setState("lastSystemStatsCheckTime", os.time())
noctalia.removeFile(storePidFile)
noctalia.removeFile(closurePidFile)
end
end
function cancelSystemCheck()
setState("isSystemStatsCheckRunning", false)
killWithPidFile(storePidFile)
killWithPidFile(closurePidFile)
setState("isSystemStatsCheckRunning", false)
killWithPidFile(storePidFile)
killWithPidFile(closurePidFile)
end
-- Init
@@ -214,18 +216,18 @@ checkSystemStats()
-- Command watcher
watchState("command", function(command)
if command == "check" then
checkLocalHash()
cancelRemoteCheck()
checkRemoteHash()
checkGenerations()
checkSystemStats()
end
if command == "check" then
checkLocalHash()
cancelRemoteCheck()
checkRemoteHash()
checkGenerations()
checkSystemStats()
end
if command == "cancel" then
cancelRemoteCheck()
cancelSystemCheck()
end
if command == "cancel" then
cancelRemoteCheck()
cancelSystemCheck()
end
end)
--
@@ -233,60 +235,62 @@ end)
--
function update()
-- Check local hash every 10 seconds
if (os.time() - getState("lastLocalCheckTime") >= 10) then
checkLocalHash()
end
-- Check local hash every 10 seconds
if os.time() - getState("lastLocalCheckTime") >= 10 then
checkLocalHash()
end
-- Remote check
if (os.time() - getState("lastRemoteCheckTime")) >= 60 * updateCheckInterval then
checkRemoteHash()
end
-- Remote check
if (os.time() - getState("lastRemoteCheckTime")) >= 60 * updateCheckInterval then
checkRemoteHash()
end
if getState("isRemoteCheckRunning") then
checkRemoteStatus()
if getState("isRemoteCheckRunning") then
checkRemoteStatus()
-- Remote check timeout
if (os.time() - getState("lastRemoteCheckRunTime")) >= 60 * updateCheckDurationThreshold then
cancelRemoteCheck()
end
end
-- Remote check timeout
if (os.time() - getState("lastRemoteCheckRunTime")) >= 60 * updateCheckDurationThreshold then
cancelRemoteCheck()
end
end
if getState("localHash") ~= getState("remoteHash") and
getState("localHash") ~= "n/a" and getState("remoteHash") ~= "n/a"
then
setState("isUpdateAvailable", true)
if
getState("localHash") ~= getState("remoteHash")
and getState("localHash") ~= "n/a"
and getState("remoteHash") ~= "n/a"
then
setState("isUpdateAvailable", true)
if cfg("show_update_available_notification") and showUpdateAvailableNotification then
noctalia.notify(tr("notification.update_is_available"))
showUpdateAvailableNotification = false
end
else
setState("isUpdateAvailable", false)
showUpdateAvailableNotification = true
end
if cfg("show_update_available_notification") and showUpdateAvailableNotification then
noctalia.notify(tr("notification.update_is_available"))
showUpdateAvailableNotification = false
end
else
setState("isUpdateAvailable", false)
showUpdateAvailableNotification = true
end
-- Generations check
if (os.time() - getState("lastGenerationsCheckTime")) >= 10 then
checkGenerations()
end
-- Generations check
if (os.time() - getState("lastGenerationsCheckTime")) >= 10 then
checkGenerations()
end
-- System stats check
if (os.time() - getState("lastSystemStatsCheckTime")) >= 60 * systemStatsCheckInterval then
checkSystemStats()
end
-- System stats check
if (os.time() - getState("lastSystemStatsCheckTime")) >= 60 * systemStatsCheckInterval then
checkSystemStats()
end
if getState("isSystemStatsCheckRunning") then
checkSystemStatsFile()
if getState("isSystemStatsCheckRunning") then
checkSystemStatsFile()
-- System stats check timeout
if (os.time() - getState("lastSystemStatsCheckRunTime")) >= 60 * systemStatsCheckDurationThreshold then
cancelSystemCheck()
end
end
-- System stats check timeout
if (os.time() - getState("lastSystemStatsCheckRunTime")) >= 60 * systemStatsCheckDurationThreshold then
cancelSystemCheck()
end
end
end
function onExit(signal)
cancelRemoteCheck()
cancelSystemCheck()
cancelRemoteCheck()
cancelSystemCheck()
end
+206 -195
View File
@@ -1,210 +1,221 @@
-- Helper functions
function tr(key)
return noctalia.tr(key)
return noctalia.tr(key)
end
function cfg(key)
return noctalia.getConfig(key)
return noctalia.getConfig(key)
end
function getState(key)
return noctalia.state.get(key)
return noctalia.state.get(key)
end
function setState(key, val)
noctalia.state.set(key, val)
noctalia.state.set(key, val)
end
function watchState(key, cb)
noctalia.state.watch(key, cb)
noctalia.state.watch(key, cb)
end
local function getBackgroundColor()
local color = cfg("panel_card_color")
local opacity = cfg("panel_card_opacity") / 100
return `{color}/{opacity}`
local color = cfg("panel_card_color")
local opacity = cfg("panel_card_opacity") / 100
return `{color}/{opacity}`
end
local function labelBox(subtext, text, glyph)
return ui.column({
fill = getBackgroundColor(),
flexGrow = 1,
height = 100,
radius = 8,
align = "center",
padding = 12,
justify = "space_between"
}, {
ui.glyph({
name = glyph,
size = 30
}),
ui.label({
text = text,
fontWeight = "bold"
}),
ui.label({
text = subtext,
fontSize = 12,
fontWeight = "medium"
}),
})
return ui.column({
fill = getBackgroundColor(),
flexGrow = 1,
height = 100,
radius = 8,
align = "center",
padding = 12,
justify = "space_between",
}, {
ui.glyph({
name = glyph,
size = 30,
}),
ui.label({
text = text,
fontWeight = "bold",
}),
ui.label({
text = subtext,
fontSize = 12,
fontWeight = "medium",
}),
})
end
local function statLabel(text, glyph: string?)
local items = {}
if glyph ~= nil then
table.insert(items, ui.glyph({
name = glyph,
size = 16
}))
end
local items = {}
if glyph ~= nil then
table.insert(
items,
ui.glyph({
name = glyph,
size = 16,
})
)
end
table.insert(items, ui.label({
text = text,
fontSize = 12,
fontWeight = "semibold"
}))
table.insert(
items,
ui.label({
text = text,
fontSize = 12,
fontWeight = "semibold",
})
)
return ui.row({
gap = 8,
align = "center"
}, items)
return ui.row({
gap = 8,
align = "center",
}, items)
end
local function render()
local buttons = {}
local buttons = {}
if getState("isRemoteCheckRunning") then
table.insert(buttons, ui.button({
text = tr("panel.cancel"),
glyph = "cancel",
flexGrow = 1,
variant = "destructive",
onClick = "onCancelClicked",
}))
else
if getState("isUpdateAvailable") and not cfg("hide_update_button") then
table.insert(buttons, ui.button({
text = tr("panel.update"),
glyph = "progress-down",
flexGrow = 1,
variant = "primary",
onClick = "onUpdateClicked",
}))
else
table.insert(buttons, ui.button({
text = tr("panel.check"),
glyph = "search",
flexGrow = 1,
variant = "outline",
onClick = "onCheckClicked",
}))
end
end
if getState("isRemoteCheckRunning") then
table.insert(
buttons,
ui.button({
text = tr("panel.cancel"),
glyph = "cancel",
flexGrow = 1,
variant = "destructive",
onClick = "onCancelClicked",
})
)
else
if getState("isUpdateAvailable") and not cfg("hide_update_button") then
table.insert(
buttons,
ui.button({
text = tr("panel.update"),
glyph = "progress-down",
flexGrow = 1,
variant = "primary",
onClick = "onUpdateClicked",
})
)
else
table.insert(
buttons,
ui.button({
text = tr("panel.check"),
glyph = "search",
flexGrow = 1,
variant = "outline",
onClick = "onCheckClicked",
})
)
end
end
if not cfg("hide_clean_button") then
table.insert(buttons, ui.button({
text = tr("panel.clean"),
glyph = "trash",
flexGrow = 1,
variant = "destructive",
onClick = "onCleanClicked",
}))
end
if not cfg("hide_clean_button") then
table.insert(
buttons,
ui.button({
text = tr("panel.clean"),
glyph = "trash",
flexGrow = 1,
variant = "destructive",
onClick = "onCleanClicked",
})
)
end
local lastCheckTimeStr = getState("lastRemoteCheckTimeStr")
local generationItems = {
statLabel(`SYS: {getState("nixosGenerations")}`, "device-desktop"),
statLabel(`{tr("panel.current")}: {getState("nixosCurrentGen")}`, "device-desktop-check")
}
local lastCheckTimeStr = getState("lastRemoteCheckTimeStr")
local generationItems = {
statLabel(`SYS: {getState("nixosGenerations")}`, "device-desktop"),
statLabel(`{tr("panel.current")}: {getState("nixosCurrentGen")}`, "device-desktop-check"),
}
if getState("hasHomeManager") and getState("hmGenerations") ~= ""
and getState("hmCurrentGen") ~= "" then
table.insert(generationItems,
statLabel(`HM: {getState("hmGenerations")}`, "home")
)
if getState("hasHomeManager") and getState("hmGenerations") ~= "" and getState("hmCurrentGen") ~= "" then
table.insert(generationItems, statLabel(`HM: {getState("hmGenerations")}`, "home"))
table.insert(generationItems,
statLabel(`{tr("panel.current")}: {getState("hmCurrentGen")}`, "home-check")
)
end
table.insert(generationItems, statLabel(`{tr("panel.current")}: {getState("hmCurrentGen")}`, "home-check"))
end
panel.render(
ui.column({
gap = 8,
}, {
ui.row({
justify = "space_between",
align = "center"
}, {
ui.label({
text = tr("panel.title"),
fontSize = 16,
}),
panel.render(ui.column({
gap = 8,
}, {
ui.row({
justify = "space_between",
align = "center",
}, {
ui.label({
text = tr("panel.title"),
fontSize = 16,
}),
ui.label({
text = cfg("branch"),
fontSize = 12,
}),
}),
ui.separator({
thickness = 2,
orientation = "horizontal",
spacing = 4
}),
ui.row({
gap = 8,
align = "center",
justify = "space_between"
}, {
labelBox(tr("panel.local"), getState("localHash"), "devices-pc"),
labelBox(tr("panel.remote"), getState("remoteHash"), "world"),
}),
ui.separator({
thickness = 2,
orientation = "horizontal",
spacing = 4
}),
ui.row({
fill = getBackgroundColor(),
align = "center",
justify = "space_between",
flexGrow = 1,
paddingV = 4,
paddingH = 8,
radius = 8,
}, generationItems),
ui.row({
fill = getBackgroundColor(),
align = "center",
justify = "center",
flexGrow = 1,
paddingV = 4,
paddingH = 8,
radius = 8,
}, {
statLabel(`{tr("panel.store_size")}: {getState("storeSize")}`, "database"),
ui.spacer({width = 16}),
statLabel(`{tr("panel.closure_size")}: {getState("closureSize")}`, "server"),
}),
ui.separator({
thickness = 2,
orientation = "horizontal",
spacing = 4
}),
ui.label({
text = `{tr("panel.last_checked")}: {lastCheckTimeStr}`,
fontSize = 12
}),
ui.row({
gap = 8,
align = "center",
justify = "space_between"
}, buttons)
})
)
ui.label({
text = cfg("branch"),
fontSize = 12,
}),
}),
ui.separator({
thickness = 2,
orientation = "horizontal",
spacing = 4,
}),
ui.row({
gap = 8,
align = "center",
justify = "space_between",
}, {
labelBox(tr("panel.local"), getState("localHash"), "devices-pc"),
labelBox(tr("panel.remote"), getState("remoteHash"), "world"),
}),
ui.separator({
thickness = 2,
orientation = "horizontal",
spacing = 4,
}),
ui.row({
fill = getBackgroundColor(),
align = "center",
justify = "space_between",
flexGrow = 1,
paddingV = 4,
paddingH = 8,
radius = 8,
}, generationItems),
ui.row({
fill = getBackgroundColor(),
align = "center",
justify = "center",
flexGrow = 1,
paddingV = 4,
paddingH = 8,
radius = 8,
}, {
statLabel(`{tr("panel.store_size")}: {getState("storeSize")}`, "database"),
ui.spacer({ width = 16 }),
statLabel(`{tr("panel.closure_size")}: {getState("closureSize")}`, "server"),
}),
ui.separator({
thickness = 2,
orientation = "horizontal",
spacing = 4,
}),
ui.label({
text = `{tr("panel.last_checked")}: {lastCheckTimeStr}`,
fontSize = 12,
}),
ui.row({
gap = 8,
align = "center",
justify = "space_between",
}, buttons),
}))
end
-- State watcher
@@ -217,48 +228,48 @@ watchState("closureSize", render)
-- Hooks
function onOpen(_ctx)
render()
render()
end
function update()
render()
render()
end
-- Click handler
function onCheckClicked()
setState("command", "check")
setState("command", "check")
end
function onCancelClicked()
setState("command", "cancel")
setState("command", "cancel")
end
function onUpdateClicked()
local command = cfg("update_command")
if command == "" then
noctalia.notifyError(tr("notification.update_command_is_empty"))
return
end
local command = cfg("update_command")
if command == "" then
noctalia.notifyError(tr("notification.update_command_is_empty"))
return
end
if cfg("close_on_enter") then
command = `{command} && echo && read -p "{tr("terminal.press_enter_to_exit")}"`
end
if cfg("close_on_enter") then
command = `{command} && echo && read -p "{tr("terminal.press_enter_to_exit")}"`
end
panel.close()
noctalia.runInTerminal(command)
panel.close()
noctalia.runInTerminal(command)
end
function onCleanClicked()
local command = cfg("clean_command")
if command == "" then
noctalia.notifyError(tr("notification.clean_command_is_empty"))
return
end
local command = cfg("clean_command")
if command == "" then
noctalia.notifyError(tr("notification.clean_command_is_empty"))
return
end
if cfg("close_on_enter") then
command = `{command} && echo && read -p "{tr("terminal.press_enter_to_exit")}"`
end
if cfg("close_on_enter") then
command = `{command} && echo && read -p "{tr("terminal.press_enter_to_exit")}"`
end
panel.close()
noctalia.runInTerminal(command)
panel.close()
noctalia.runInTerminal(command)
end