Files
Dotfiles/roles/ags/files/widget/quicksettings/widgets/PowerProfile.ts
Keule0010 8aa6bcd5cb Added ags
TODO copy ags config
2024-04-16 00:28:26 +02:00

100 lines
3.1 KiB
TypeScript

import { ArrowToggleButton, Menu } from "../ToggleButton"
import icons from "lib/icons"
import asusctl from "service/asusctl"
const asusprof = asusctl.bind("profile")
const AsusProfileToggle = () => ArrowToggleButton({
name: "asusctl-profile",
icon: asusprof.as(p => icons.asusctl.profile[p]),
label: asusprof,
connection: [asusctl, () => asusctl.profile !== "Balanced"],
activate: () => asusctl.setProfile("Quiet"),
deactivate: () => asusctl.setProfile("Balanced"),
activateOnArrow: false,
})
const AsusProfileSelector = () => Menu({
name: "asusctl-profile",
icon: asusprof.as(p => icons.asusctl.profile[p]),
title: "Profile Selector",
content: [
Widget.Box({
vertical: true,
hexpand: true,
children: [
Widget.Box({
vertical: true,
children: asusctl.profiles.map(prof => Widget.Button({
on_clicked: () => asusctl.setProfile(prof),
child: Widget.Box({
children: [
Widget.Icon(icons.asusctl.profile[prof]),
Widget.Label(prof),
],
}),
})),
}),
],
}),
Widget.Separator(),
Widget.Button({
on_clicked: () => Utils.execAsync("rog-control-center"),
child: Widget.Box({
children: [
Widget.Icon(icons.ui.settings),
Widget.Label("Rog Control Center"),
],
}),
}),
],
})
const pp = await Service.import("powerprofiles")
const profile = pp.bind("active_profile")
const profiles = pp.profiles.map(p => p.Profile)
const pretty = (str: string) => str
.split("-")
.map(str => `${str.at(0)?.toUpperCase()}${str.slice(1)}`)
.join(" ")
const PowerProfileToggle = () => ArrowToggleButton({
name: "asusctl-profile",
icon: profile.as(p => icons.powerprofile[p]),
label: profile.as(pretty),
connection: [pp, () => pp.active_profile !== profiles[1]],
activate: () => pp.active_profile = profiles[0],
deactivate: () => pp.active_profile = profiles[1],
activateOnArrow: false,
})
const PowerProfileSelector = () => Menu({
name: "asusctl-profile",
icon: profile.as(p => icons.powerprofile[p]),
title: "Profile Selector",
content: [Widget.Box({
vertical: true,
hexpand: true,
child: Widget.Box({
vertical: true,
children: profiles.map(prof => Widget.Button({
on_clicked: () => pp.active_profile = prof,
child: Widget.Box({
children: [
Widget.Icon(icons.powerprofile[prof]),
Widget.Label(pretty(prof)),
],
}),
})),
}),
})],
})
export const ProfileToggle = asusctl.available
? AsusProfileToggle : PowerProfileToggle
export const ProfileSelector = asusctl.available
? AsusProfileSelector : PowerProfileSelector