pragma Singleton import Quickshell import Quickshell.Io import QtQuick Singleton { id: root property string osName property string osPrettyName property string osId property list osIdLike property string osLogo: `file://${Quickshell.shellDir}/assets/logo.svg` property bool isDefaultLogo: true property string uptime readonly property string user: Quickshell.env("USER") readonly property string wm: Quickshell.env("XDG_CURRENT_DESKTOP") || Quickshell.env("XDG_SESSION_DESKTOP") readonly property string shell: Quickshell.env("SHELL").split("/").pop() FileView { id: osRelease path: "/etc/os-release" onLoaded: { const lines = text().split("\n"); const fd = key => lines.find(l => l.startsWith(`${key}=`))?.split("=")[1].replace(/"/g, "") ?? ""; root.osName = fd("NAME"); root.osPrettyName = fd("PRETTY_NAME"); root.osId = fd("ID"); root.osIdLike = fd("ID_LIKE").split(" "); const logo = Quickshell.iconPath(fd("LOGO"), true); if (logo) { root.osLogo = logo; root.isDefaultLogo = false; } } } Timer { running: true repeat: true interval: 15000 onTriggered: fileUptime.reload() } FileView { id: fileUptime path: "/proc/uptime" onLoaded: { const up = parseInt(text().split(" ")[0] ?? 0); const days = Math.floor(up / 86400); const hours = Math.floor((up % 86400) / 3600); const minutes = Math.floor((up % 3600) / 60); let str = ""; if (days > 0) str += `${days} day${days === 1 ? "" : "s"}`; if (hours > 0) str += `${str ? ", " : ""}${hours} hour${hours === 1 ? "" : "s"}`; if (minutes > 0 || !str) str += `${str ? ", " : ""}${minutes} minute${minutes === 1 ? "" : "s"}`; root.uptime = str; } } }