pragma Singleton import QtQml import Quickshell import Quickshell.Io import Custom as Custom Singleton { id: root property string subsystem: "backlight" property string device: "intel_backlight" property real currBrightness property real exponent: 4 function calcCurrBrightness() { if (!currFile.loaded || !maxFile.loaded) return undefined; const curr = Number(currFile.text()); const max = Number(maxFile.text()); const val = Math.pow(curr / max, 1 / root.exponent); return val; } Connections { target: currFile function onLoaded() { const b = root.calcCurrBrightness(); if (typeof b !== 'undefined') root.currBrightness = b; } } Connections { target: maxFile function onLoaded() { const b = root.calcCurrBrightness(); if (typeof b !== 'undefined') root.currBrightness = b; } } onCurrBrightnessChanged: { root.currBrightness = Math.max(0, Math.min(1, root.currBrightness)); const prev = root.calcCurrBrightness(); if (typeof prev === 'undefined' || Math.abs(root.currBrightness - prev) < 0.01) return; const max = Number(maxFile.text()); const actual = Number(currFile.text()); let curr = Math.max(0, Math.min(max, Math.pow(root.currBrightness, root.exponent) * max)); if (Math.round(curr) == actual && curr < actual) curr = Math.max(0, actual - 1); else if (Math.round(curr) == actual && curr > actual) curr = Math.min(max, actual + 1); // root.currBrightness = Math.pow(curr / max, 1 / root.exponent); Custom.Systemd.setBrightness(root.subsystem, root.device, Math.round(curr)); } FileView { id: currFile path: `/sys/class/${root.subsystem}/${root.device}/brightness` blockAllReads: true watchChanges: true onFileChanged: reload() } FileView { id: maxFile path: `/sys/class/${root.subsystem}/${root.device}/max_brightness` blockAllReads: true watchChanges: true onFileChanged: reload() } }