* Implemented strict linting standards and prettier formatting config. * More linter fixes and type updates. * More linter updates and type fixes * Remove noisy comments * Linter and type updates * Linter, formatting and type updates. * Linter updates * Type updates * Type updates * fixed all linter errors * Fixed all linting, formatting and type issues. * Resolve merge conflicts.
75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
// <3 Aylur for this brightness service
|
|
import { bash, dependencies, sh } from 'lib/utils';
|
|
|
|
if (!dependencies('brightnessctl')) App.quit();
|
|
|
|
const get = (args: string): number => Number(Utils.exec(`brightnessctl ${args}`));
|
|
const screen = await bash`ls -w1 /sys/class/backlight | head -1`;
|
|
const kbd = await bash`ls -w1 /sys/class/leds | head -1`;
|
|
|
|
class Brightness extends Service {
|
|
static {
|
|
Service.register(
|
|
this,
|
|
{},
|
|
{
|
|
screen: ['float', 'rw'],
|
|
kbd: ['int', 'rw'],
|
|
},
|
|
);
|
|
}
|
|
|
|
#kbdMax = get(`--device ${kbd} max`);
|
|
#kbd = get(`--device ${kbd} get`);
|
|
#screenMax = get(`--device ${screen} max`);
|
|
#screen = get(`--device ${screen} get`) / (get(`--device ${screen} max`) || 1);
|
|
|
|
get kbd(): number {
|
|
return this.#kbd;
|
|
}
|
|
get screen(): number {
|
|
return this.#screen;
|
|
}
|
|
|
|
set kbd(value) {
|
|
if (value < 0 || value > this.#kbdMax) return;
|
|
|
|
sh(`brightnessctl -d ${kbd} s ${value} -q`).then(() => {
|
|
this.#kbd = value;
|
|
this.changed('kbd');
|
|
});
|
|
}
|
|
|
|
set screen(percent) {
|
|
if (percent < 0) percent = 0;
|
|
|
|
if (percent > 1) percent = 1;
|
|
|
|
sh(`brightnessctl set ${Math.round(percent * 100)}% -d ${screen} -q`).then(() => {
|
|
this.#screen = percent;
|
|
this.changed('screen');
|
|
});
|
|
}
|
|
|
|
constructor() {
|
|
super();
|
|
|
|
const screenPath = `/sys/class/backlight/${screen}/brightness`;
|
|
const kbdPath = `/sys/class/leds/${kbd}/brightness`;
|
|
|
|
Utils.monitorFile(screenPath, async (f) => {
|
|
const v = await Utils.readFileAsync(f);
|
|
this.#screen = Number(v) / this.#screenMax;
|
|
this.changed('screen');
|
|
});
|
|
|
|
Utils.monitorFile(kbdPath, async (f) => {
|
|
const v = await Utils.readFileAsync(f);
|
|
this.#kbd = Number(v) / this.#kbdMax;
|
|
this.changed('kbd');
|
|
});
|
|
}
|
|
}
|
|
|
|
export default new Brightness();
|