Files
2026-06-01 12:46:52 +02:00

166 lines
5.1 KiB
Lua

function neofetch( is_return )
local M = {}
function M.get_os_name()
local raw_os_name, raw_arch_name = '', ''
if jit and jit.os and jit.arch then
raw_os_name = jit.os
raw_arch_name = jit.arch
else
if package.config:sub(1,1) == '\\' then
raw_os_name = os.getenv('OS') or ''
raw_arch_name = os.getenv('PROCESSOR_ARCHITECTURE') or ''
else
raw_os_name = io.popen('uname -s','r'):read('*l') or ''
raw_arch_name = io.popen('uname -m','r'):read('*l') or ''
end
end
raw_os_name = raw_os_name:lower()
raw_arch_name = raw_arch_name:lower()
local os_patterns = {
['windows'] = 'Windows',
['linux'] = 'Linux',
['mac'] = 'Mac',
['darwin'] = 'Mac',
['bsd$'] = 'BSD',
['sunos'] = 'Solaris',
}
local arch_patterns = {
['^x86$'] = 'x86',
['i[%d]86'] = 'x86',
['amd64'] = 'x86_64',
['x86_64'] = 'x86_64',
['x64'] = 'x86_64',
['^arm'] = 'arm',
['aarch64'] = 'arm64',
}
local os_name, arch_name = 'unknown', 'unknown'
for pattern, name in pairs(os_patterns) do
if raw_os_name:match(pattern) then os_name = name break end
end
for pattern, name in pairs(arch_patterns) do
if raw_arch_name:match(pattern) then arch_name = name break end
end
return os_name, arch_name
end
function M.get_cpu_cores()
local cores = "unknown"
local handle = io.popen('wmic cpu get NumberOfCores')
cores = handle:read("*a")
handle:close()
return cores:match("%d+") or cores
end
-- Total and used RAM (with percentage)
function M.get_memory_info()
local total, free = 0, 0
for line in io.popen('wmic ComputerSystem get TotalPhysicalMemory /Value'):lines() do
local v = line:match("TotalPhysicalMemory=(%d+)")
if v then total = tonumber(v) end
end
for line in io.popen('wmic OS get FreePhysicalMemory /Value'):lines() do
local v = line:match("FreePhysicalMemory=(%d+)")
if v then free = tonumber(v)*1024 end
end
local used = total - free
local percent = total > 0 and math.floor(used / total*100) or 0
return total, used, percent
end
function M.get_disk_usage()
local usage = {}
for line in io.popen('wmic logicaldisk get Caption,FreeSpace,Size /format:csv'):lines() do
if not line:match("Node") and line:match("%S") then
local node, caption, free, size = line:match("([^,]*),([^,]*),([^,]*),([^,]*)")
caption = caption or "?"
free = tonumber(free) or 0
size = tonumber(size) or 0
local used = size - free
local percent = (size > 0) and math.floor( used / size*100 ) or 0
table.insert(usage, string.format("%s %.1f GB used / %.1f GB total (%d%%)",
caption, (used / 1024^3), (size / 1024^3), percent))
end
end
for line in io.popen('df -h --output=source,size,used,avail,pcent,target'):lines() do
if not line:match("Filesystem") and line:match("%S") then
usage[#usage+1] = line
end
end
return table.concat(usage, "<br>")
end
function M.get_hostname()
local h = io.popen('hostname'):read("*l")
return h or "unknown"
end
function M.get_info()
local tempString = "<br>Process start: #@process_start@#<br>Uptime: #@uptime@#<br>Process Load: #@process_load@#%<br>Process Memory: #@process_memory@#<br>Paged Memory: #@paged_memory@#<br>Current Online: #@curr_online@#<br><br>OS: #@os@# #@arch@#<br>HOST: #@host@#<br>CPU [#@cpucores@# cores]<br>#@ram@#<br><br>DISK USAGE:<br>#@diskusage@#<br>OS CLOCK TIME: #@osclock@#<br>DATE: #@date@#<br>LUA: #@luaver@#<br>"
local os_name, arch = M.get_os_name()
local total, used, percent = M.get_memory_info()
local process_start = get_env("process.start")
local uptime = get_env("process.uptime")
local process_load = get_env("process.load")
local process_memory = get_env("process.memory")
local paged_memory = get_env("process.paged_memory")
local curr_online = function()
local usersCnt = tonumber(get_env("game.user_count")) or 0
if usersCnt == 0 then return "0 players"
elseif usersCnt == 1 then return "1 player"
else return usersCnt .. " players"
end
end
local outputString = sconv(tempString, "#@process_start@#", process_start, "#@uptime@#", uptime, "#@process_load@#", process_load, "#@process_memory@#", process_memory, "#@paged_memory@#", paged_memory, "#@curr_online@#", ( curr_online() ), "#@os@#", os_name, "#@arch@#", arch, "#@host@#", M.get_hostname(), "#@cpucores@#", M.get_cpu_cores(), "#@ram@#", string.format("RAM: %.1f GB used / %.1f GB total (%d%%)", used/1024^3, total/1024^3, percent), "#@diskusage@#", M.get_disk_usage(), "#@osclock@#", os.clock(), "#@date@#", os.date("%d.%m.%Y"), "#@luaver@#", _VERSION)
return outputString
end
function M.show_info()
dlg_general(M.get_info())
end
if is_return == nil or is_return == '' or is_return == 0 then
return M.show_info()
else
M.get_info()
end
end
function check_globals(names)
for _, name in ipairs(names) do
local val = _G[name]
if val ~= nil then
notice(name .. ": V available (" .. type(val) .. ")")
else
notice(name .. ": X missing")
end
end
end
function globalcheck()
check_globals({
"os", "io", "table", "string", "math", "debug",
"coroutine", "package", "utf8", "collectgarbage"
})
end