Replace AstalBrightness with brightnessctl and update app defaults
Switch brightness control from AstalBrightness to `brightnessctl` for better hardware support, with async system sync when the shell opens. Also change default launchers to foot, firefox, and koreader, and update the refresh command to the local pinenote-refresh script.
This commit is contained in:
+34
-16
@@ -6,7 +6,6 @@ import { execAsync } from "ags/process"
|
|||||||
import { readFile } from "ags/file"
|
import { readFile } from "ags/file"
|
||||||
import { createBinding, createState, createComputed, createEffect } from "ags"
|
import { createBinding, createState, createComputed, createEffect } from "ags"
|
||||||
import Hyprland from "gi://AstalHyprland"
|
import Hyprland from "gi://AstalHyprland"
|
||||||
import Brightness from "gi://AstalBrightness"
|
|
||||||
|
|
||||||
const { TOP, BOTTOM, LEFT, RIGHT } = Astal.WindowAnchor
|
const { TOP, BOTTOM, LEFT, RIGHT } = Astal.WindowAnchor
|
||||||
|
|
||||||
@@ -32,20 +31,34 @@ function einkRefresh() {
|
|||||||
|
|
||||||
class BrightnessController {
|
class BrightnessController {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.astal = Brightness.get_default()
|
const [level, setLevel] = createState(100)
|
||||||
this.screen = this.astal?.screen
|
this.level = level
|
||||||
|
this.setLevel = setLevel
|
||||||
|
this.updateFromSystem()
|
||||||
}
|
}
|
||||||
|
|
||||||
get current() {
|
async updateFromSystem() {
|
||||||
if (!this.screen) return 0
|
try {
|
||||||
return Math.round(this.screen.brightness * 100)
|
const info = await execAsync(["brightnessctl", "-m"])
|
||||||
|
const parts = info.split(",")
|
||||||
|
// brightnessctl -m output: device,class,current%,value,max
|
||||||
|
const percent = parseInt(parts[2], 10)
|
||||||
|
this.setLevel(Number.isNaN(percent) ? 100 : percent)
|
||||||
|
} catch (err) {
|
||||||
|
console.log(`Could not read brightness: ${err.message}`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set(level) {
|
async set(level) {
|
||||||
if (!this.screen) return
|
try {
|
||||||
this.screen.brightness = level / 100
|
await execAsync(["brightnessctl", "set", `${level}%`])
|
||||||
|
this.setLevel(level)
|
||||||
|
notify(`Brightness set to ${level}%`)
|
||||||
// PineNote: force an e-ink refresh so the brightness change is visible
|
// PineNote: force an e-ink refresh so the brightness change is visible
|
||||||
einkRefresh()
|
einkRefresh()
|
||||||
|
} catch (err) {
|
||||||
|
notify(`Failed to set brightness: ${err.message}`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,9 +123,9 @@ class PowerManager {
|
|||||||
class LauncherManager {
|
class LauncherManager {
|
||||||
launch(appType) {
|
launch(appType) {
|
||||||
const launchers = {
|
const launchers = {
|
||||||
terminal: "alacritty",
|
terminal: "foot",
|
||||||
browser: "brave-browser",
|
browser: "firefox",
|
||||||
"e-reader": "calibre",
|
"e-reader": "koreader",
|
||||||
}
|
}
|
||||||
|
|
||||||
const cmd = launchers[appType]
|
const cmd = launchers[appType]
|
||||||
@@ -126,7 +139,7 @@ class LauncherManager {
|
|||||||
class RefreshController {
|
class RefreshController {
|
||||||
async triggerRefresh() {
|
async triggerRefresh() {
|
||||||
try {
|
try {
|
||||||
await execAsync(["pdlc-cli", "--refresh"])
|
await execAsync(["bash", "-c", "/home/fegger/.local/bin/pinenote-refresh"])
|
||||||
notify("E-ink display refreshed")
|
notify("E-ink display refreshed")
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(`Failed to refresh display: ${err.message}`)
|
console.log(`Failed to refresh display: ${err.message}`)
|
||||||
@@ -176,9 +189,14 @@ function PinenoteShell() {
|
|||||||
if (visible()) einkRefresh()
|
if (visible()) einkRefresh()
|
||||||
})
|
})
|
||||||
|
|
||||||
const brightnessLevel = brightness.screen
|
const brightnessLevel = brightness.level
|
||||||
? createBinding(brightness.screen, "brightness")((v) => Math.round((v || 0) * 100))
|
|
||||||
: createState(100)[0]
|
// Keep the reactive value in sync with the system whenever the widget opens.
|
||||||
|
createEffect(() => {
|
||||||
|
if (visible()) {
|
||||||
|
brightness.updateFromSystem()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const currentWaveform = waveform.current[0]
|
const currentWaveform = waveform.current[0]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user