mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2025-12-12 11:36:20 +00:00
177 lines
5.4 KiB
JavaScript
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)
|
|
},
|
|
})
|