Files
TheaninovOS/desktops/hyprland/ags/modules/quicktoggles.js
2023-11-15 16:09:26 +01:00

177 lines
5.4 KiB
JavaScript

import {Widget, Utils, Service} from "../imports.js"
import Bluetooth from "resource:///com/github/Aylur/ags/service/bluetooth.js"
import Network from "resource:///com/github/Aylur/ags/service/network.js"
const {execAsync, exec} = Utils
import {BluetoothIndicator, NetworkIndicator} from "./statusicons.js"
import {setupCursorHover} from "./lib/cursorhover.js"
import {MaterialIcon} from "./lib/materialicon.js"
export const ToggleIconWifi = (props = {}) =>
Widget.Button({
className: "txt-small sidebar-iconbutton",
tooltipText: "Wifi | Right-click to configure",
onClicked: Network.toggleWifi,
onSecondaryClickRelease: () => {
execAsync(["bash", "-c", 'XDG_CURRENT_DESKTOP="gnome" gnome-control-center wifi', "&"])
},
child: NetworkIndicator(),
connections: [
[
Network,
button => {
button.toggleClassName(
"sidebar-button-active",
Network.wifi?.internet == "connected" || Network.wired?.internet == "connected",
)
},
],
[
Network,
button => {
button.tooltipText = `${Network.wifi?.ssid} | Right-click to configure` || "Unknown"
},
],
],
setup: button => setupCursorHover(button),
...props,
})
export const ToggleIconBluetooth = (props = {}) =>
Widget.Button({
className: "txt-small sidebar-iconbutton",
tooltipText: "Bluetooth | Right-click to configure",
onClicked: () => {
// Provided service doesn't work hmmm
const status = Bluetooth?.enabled
if (status) {
exec("rfkill block bluetooth")
} else {
exec("rfkill unblock bluetooth")
}
},
onSecondaryClickRelease: () => {
execAsync(["bash", "-c", 'XDG_CURRENT_DESKTOP="gnome" gnome-control-center bluetooth', "&"])
},
child: BluetoothIndicator(),
connections: [
[
Bluetooth,
button => {
button.toggleClassName("sidebar-button-active", Bluetooth?.enabled)
},
],
],
setup: button => setupCursorHover(button),
...props,
})
export const HyprToggleIcon = (icon, name, hyprlandConfigValue, props = {}) =>
Widget.Button({
className: "txt-small sidebar-iconbutton",
tooltipText: `${name}`,
onClicked: button => {
// Set the value to 1 - value
Utils.execAsync(`hyprctl -j getoption ${hyprlandConfigValue}`)
.then(result => {
const currentOption = JSON.parse(result).int
execAsync(["bash", "-c", `hyprctl keyword ${hyprlandConfigValue} ${1 - currentOption} &`]).catch(
print,
)
button.toggleClassName("sidebar-button-active", currentOption == 0)
})
.catch(print)
},
child: MaterialIcon(icon, "norm", {halign: "center"}),
setup: button => {
button.toggleClassName(
"sidebar-button-active",
JSON.parse(Utils.exec(`hyprctl -j getoption ${hyprlandConfigValue}`)).int == 1,
)
setupCursorHover(button)
},
...props,
})
export const ModuleNightLight = (props = {}) =>
Widget.Button({
className: "txt-small sidebar-iconbutton",
tooltipText: "Night Light",
onClicked: button => {
// Set the value to 1 - value
const shaderPath = JSON.parse(exec("hyprctl -j getoption decoration:screen_shader")).str
if (shaderPath != "[[EMPTY]]" && shaderPath != "") {
execAsync(["bash", "-c", `hyprctl keyword decoration:screen_shader ''`]).catch(print)
button.toggleClassName("sidebar-button-active", false)
} else {
execAsync([
"bash",
"-c",
`hyprctl keyword decoration:screen_shader ~/.config/hypr/shaders/extradark.frag`,
]).catch(print)
button.toggleClassName("sidebar-button-active", true)
}
},
child: MaterialIcon("nightlight", "norm"),
setup: button => setupCursorHover(button),
...props,
})
export const ModuleEditIcon = (props = {}) =>
Widget.Button({
// TODO: Make this work
...props,
className: "txt-small sidebar-iconbutton",
onClicked: () => {
execAsync(["bash", "-c", 'XDG_CURRENT_DESKTOP="gnome" gnome-control-center', "&"])
App.toggleWindow("sideright")
},
child: MaterialIcon("edit", "norm"),
setup: button => {
setupCursorHover(button)
},
})
export const ModuleReloadIcon = (props = {}) =>
Widget.Button({
...props,
className: "txt-small sidebar-iconbutton",
tooltipText: "Reload Hyprland",
onClicked: () => {
execAsync(["bash", "-c", "hyprctl reload &"])
App.toggleWindow("sideright")
},
child: MaterialIcon("refresh", "norm"),
setup: button => {
setupCursorHover(button)
},
})
export const ModuleSettingsIcon = (props = {}) =>
Widget.Button({
...props,
className: "txt-small sidebar-iconbutton",
tooltipText: "Open Settings",
onClicked: () => {
execAsync(["bash", "-c", 'XDG_CURRENT_DESKTOP="gnome" gnome-control-center', "&"])
App.toggleWindow("sideright")
},
child: MaterialIcon("settings", "norm"),
setup: button => {
setupCursorHover(button)
},
})
export const ModulePowerIcon = (props = {}) =>
Widget.Button({
...props,
className: "txt-small sidebar-iconbutton",
tooltipText: "Session",
onClicked: () => {
App.toggleWindow("session")
},
child: MaterialIcon("power_settings_new", "norm"),
setup: button => {
setupCursorHover(button)
},
})