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) }, })