1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-03 20:18:31 -04:00

feat(power): lower refresh rate on battery (#2428)

* feat(power): lower refresh rate on battery (#1203)

Add a Power & Sleep setting that lowers eligible displays to 60 Hz on battery and restores their previous mode on AC power.

Skip displays without an available 60 Hz mode, displays with a single refresh-rate option, current modes at or below 60 Hz, and VRR-enabled outputs.
Apply niri changes at runtime through output commands and use wlr-output-management as fallback.

* fix(quickshell): debounce display refresh sync

* chore: regenerate settings_search_index.json for pre-commit CI fix

* fix: translator context is missing for lowerDisplayRefreshRateOnBattery

* fix: activeDisplayProfileModes is missing from SettingsSpec

* feat: added guard to syncRefreshRates function

* refactor(display): move refresh sync listeners to display service

* fix(display): publish active profile modes after config write

* feat(display): persist previous refresh modes

* fix(display): route refresh mode writes through compositor backends

* fix(display): detect preferred niri refresh modes

* some small cleanups

---------

Co-authored-by: bbedward <bbedward@gmail.com>
This commit is contained in:
Artem Timofeev
2026-07-17 15:41:08 +02:00
committed by GitHub
parent 95e1d6b72e
commit adbbd9b112
6 changed files with 677 additions and 1 deletions
@@ -187,6 +187,16 @@ Item {
}
}
SettingsToggleRow {
settingKey: "lowerDisplayRefreshRateOnBattery"
tags: ["power", "battery", "display", "refresh", "rate", "60hz", "hz"]
text: I18n.tr("Lower display refresh rate on battery", "setting title under power & sleep tab")
description: I18n.tr("Switch displays with an available 60 Hz mode to 60 Hz on battery and restore the previous mode on AC. Skips displays with VRR enabled.")
checked: SettingsData.lowerDisplayRefreshRateOnBattery
visible: BatteryService.batteryAvailable
onToggled: checked => SettingsData.set("lowerDisplayRefreshRateOnBattery", checked)
}
Rectangle {
width: parent.width
height: 1