mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2025-12-12 19:46:20 +00:00
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { sh } from "lib/utils"
|
|
|
|
type Profile = "Performance" | "Balanced" | "Quiet"
|
|
type Mode = "Hybrid" | "Integrated"
|
|
|
|
class Asusctl extends Service {
|
|
static {
|
|
Service.register(this, {}, {
|
|
"profile": ["string", "r"],
|
|
"mode": ["string", "r"],
|
|
})
|
|
}
|
|
|
|
available = !!Utils.exec("which asusctl")
|
|
#profile: Profile = "Balanced"
|
|
#mode: Mode = "Hybrid"
|
|
|
|
async nextProfile() {
|
|
await sh("asusctl profile -n")
|
|
const profile = await sh("asusctl profile -p")
|
|
const p = profile.split(" ")[3] as Profile
|
|
this.#profile = p
|
|
this.changed("profile")
|
|
}
|
|
|
|
async setProfile(prof: Profile) {
|
|
await sh(`asusctl profile --profile-set ${prof}`)
|
|
this.#profile = prof
|
|
this.changed("profile")
|
|
}
|
|
|
|
async nextMode() {
|
|
await sh(`supergfxctl -m ${this.#mode === "Hybrid" ? "Integrated" : "Hybrid"}`)
|
|
this.#mode = await sh("supergfxctl -g") as Mode
|
|
this.changed("profile")
|
|
}
|
|
|
|
constructor() {
|
|
super()
|
|
|
|
if (this.available) {
|
|
sh("asusctl profile -p").then(p => this.#profile = p.split(" ")[3] as Profile)
|
|
sh("supergfxctl -g").then(m => this.#mode = m as Mode)
|
|
}
|
|
}
|
|
|
|
get profiles(): Profile[] { return ["Performance", "Balanced", "Quiet"] }
|
|
get profile() { return this.#profile }
|
|
get mode() { return this.#mode }
|
|
}
|
|
|
|
export default new Asusctl
|