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 import QtQuick
Text { Text {
color: Theme.palette.basecontent color: Theme.palette.basecontent
Behavior on color {
ColorAnimation {
duration: 100
}
}
font.family: Theme.lucide.font.family font.family: Theme.lucide.font.family
font.pixelSize: Dimensions.gpu.iconSize font.pixelSize: Dimensions.gpu.iconSize
font.bold: true font.bold: true

View file

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

View file

@ -107,6 +107,8 @@ PanelWindow {
Gpu {} Gpu {}
Power {}
Clock {} Clock {}
Notifications {} 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 "services"
import qs.components import qs.components
import qs.config
import qs.constants import qs.constants
import qs.services import qs.services
import qs.widgets
import Quickshell.Hyprland import Quickshell.Hyprland
import Quickshell.Wayland import Quickshell.Wayland
import QtQuick 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)
}