Compare commits

..

4 commits

Author SHA1 Message Date
Benjamin Palko
d043f86269 add battery for laptops 2025-09-03 12:00:54 -04:00
Benjamin Palko
9505748b32 add charging icon 2025-09-03 11:51:14 -04:00
Benjamin Palko
da4654e4a6 animate icon color 2025-09-03 11:51:09 -04:00
Benjamin Palko
c500637fd8 remove unused 2025-09-03 09:54:18 -04:00
6 changed files with 80 additions and 4 deletions

View file

@ -2,9 +2,12 @@ import qs.config
import QtQuick
Text {
color: Theme.palette.basecontent
Behavior on color {
ColorAnimation {
duration: 100
}
}
font.family: Theme.lucide.font.family
font.pixelSize: Dimensions.gpu.iconSize
font.bold: true

View file

@ -3,6 +3,7 @@ pragma Singleton
import Quickshell
Singleton {
property string batteryCharging: "\u{E058}"
property string batteryFull: "\u{E059}"
property string batteryMedium: "\u{E05b}"
property string batteryLow: "\u{E05a}"

View file

@ -107,6 +107,8 @@ PanelWindow {
Gpu {}
Power {}
Clock {}
Notifications {}

View file

@ -0,0 +1,60 @@
import qs.components
import qs.config
import qs.constants
import qs.widgets
import QtQuick
import QtQuick.Layouts
import Quickshell.Services.UPower
StyledButton {
id: root
property UPowerDevice laptopBattery: UPower.devices.values.find(device => device.isLaptopBattery)
property bool isCritical: laptopBattery.percentage < 0.10
contentItem: RowLayout {
spacing: 4
LucideIcon {
Layout.alignment: Qt.AlignVCenter
color: {
if (root.isCritical) {
return Theme.palette.error;
}
if (root.hovered) {
return Theme.palette.primarycontent;
}
return Theme.palette.basecontent;
}
font.pixelSize: 16
text: {
if (root.laptopBattery.state == UPowerDeviceState.Charging) {
return Icons.batteryCharging;
}
if (root.isCritical) {
return Icons.batteryWarning;
}
if (root.laptopBattery.percentage < 0.33) {
return Icons.batteryLow;
}
if (root.laptopBattery.percentage < 0.66) {
return Icons.batteryMedium;
}
return Icons.batteryFull;
}
}
StyledText {
Layout.alignment: Qt.AlignVCenter
color: {
if (root.isCritical) {
return Theme.palette.error;
}
if (root.hovered) {
return Theme.palette.primarycontent;
}
return Theme.palette.basecontent;
}
text: `${root.laptopBattery.percentage * 100}%`
}
}
visible: laptopBattery
}

View file

@ -2,10 +2,8 @@ pragma ComponentBehavior: Bound
import "services"
import qs.components
import qs.config
import qs.constants
import qs.services
import qs.widgets
import Quickshell.Hyprland
import Quickshell.Wayland
import QtQuick

12
services/PowerService.qml Normal file
View file

@ -0,0 +1,12 @@
pragma Singleton
import Quickshell
import Quickshell.Services.UPower
Singleton {
id: root
property bool onBattery: UPower.onBattery
property UPowerDevice laptopBattery: UPower.devices.values.find(device => device.isLaptopBattery)
}