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

142 lines
4.6 KiB
JavaScript

const {Gdk, Gtk} = imports.gi
import {Utils, Widget} from "../imports.js"
const {execAsync, exec} = Utils
const {Box, EventBox} = Widget
import {
ToggleIconBluetooth,
ToggleIconWifi,
HyprToggleIcon,
ModuleNightLight,
ModuleEditIcon,
ModuleReloadIcon,
ModuleSettingsIcon,
ModulePowerIcon,
} from "./quicktoggles.js"
import ModuleNotificationList from "./notificationlist.js"
import {ModuleMusicControls} from "./musiccontrols.js"
import {ModuleCalendar} from "./calendar.js"
const NUM_OF_TOGGLES_PER_LINE = 5
const togglesFlowBox = Widget({
type: Gtk.FlowBox,
className: "sidebar-group spacing-h-10",
setup: self => {
self.set_max_children_per_line(NUM_OF_TOGGLES_PER_LINE)
self.add(ToggleIconWifi({hexpand: "true"}))
self.add(ToggleIconBluetooth({hexpand: "true"}))
self.add(HyprToggleIcon("mouse", "Raw input", "input:force_no_accel", {hexpand: "true"}))
self.add(
HyprToggleIcon("front_hand", "No touchpad while typing", "input:touchpad:disable_while_typing", {
hexpand: "true",
}),
)
self.add(ModuleNightLight({hexpand: "true"}))
// Setup flowbox rearrange
self.connect("child-activated", (self, child) => {
if (child.get_index() === 0) {
self.reorder_child(child, self.get_children().length - 1)
} else {
self.reorder_child(child, 0)
}
})
},
})
const togglesBox = Widget.Box({
className: "sidebar-group spacing-h-10",
children: [
ToggleIconWifi({hexpand: "true"}),
ToggleIconBluetooth({hexpand: "true"}),
HyprToggleIcon("mouse", "Raw input", "input:force_no_accel", {hexpand: "true"}),
HyprToggleIcon("front_hand", "No touchpad while typing", "input:touchpad:disable_while_typing", {
hexpand: "true",
}),
ModuleNightLight({hexpand: "true"}),
],
})
export default () =>
Box({
// vertical: true,
vexpand: true,
hexpand: true,
children: [
EventBox({
onPrimaryClick: () => App.closeWindow("sideright"),
onSecondaryClick: () => App.closeWindow("sideright"),
onMiddleClick: () => App.closeWindow("sideright"),
}),
Box({
vertical: true,
vexpand: true,
className: "sidebar-right",
children: [
Box({
vertical: true,
vexpand: true,
className: "spacing-v-15",
children: [
Box({
vertical: true,
className: "spacing-v-5",
children: [
Box({
// Header
className: "spacing-h-5 sidebar-group-invisible-morehorizpad",
children: [
Widget.Label({
className: "txt-title txt",
connections: [
[
5000,
label => {
execAsync([`date`, "+%H:%M"])
.then(timeString => {
label.label = timeString
})
.catch(print)
},
],
],
}),
Widget.Label({
halign: "center",
className: "txt-small txt",
connections: [
[
5000,
label => {
execAsync([
"bash",
"-c",
`uptime -p | sed -e 's/up //;s/ hours,/h/;s/ minutes/m/'`,
])
.then(upTimeString => {
label.label = `• uptime ${upTimeString}`
})
.catch(print)
},
],
],
}),
Widget.Box({hexpand: true}),
// ModuleEditIcon({ halign: 'end' }), // TODO: Make this work
ModuleReloadIcon({halign: "end"}),
ModuleSettingsIcon({halign: "end"}),
ModulePowerIcon({halign: "end"}),
],
}),
// togglesFlowBox,
togglesBox,
],
}),
ModuleNotificationList({vexpand: true}),
ModuleCalendar(),
],
}),
],
}),
],
})