Battery drains fast on Omarchy
Why an Omarchy laptop burns battery faster than Windows, what power management actually ships in 4.0.4, and the profile, screensaver, and hybrid GPU fixes.
Omarchy ships power-profiles-daemon and nothing else, so nothing tunes the machine for you beyond the profile. Set the battery profile once with omarchy powerprofiles set battery power-saver and it is remembered per power source. Then kill the two big drains: the idle screensaver on HiDPI or multi-monitor setups, and an NVIDIA dGPU that never sleeps on hybrid laptops.
An Omarchy laptop that empties in two hours is almost never one bug. It is a stack of small things: a power profile that was never applied, a screensaver that rasterizes on the CPU, and on hybrid laptops a discrete GPU that never sleeps. Everything below was checked against the v4.0.4 source tree, with v3.8.4 for comparison.
The fix
1. Check the profile actually applied, then set the one you want for battery.
powerprofilesctl get
omarchy powerprofiles list
omarchy powerprofiles set battery power-saver
Since 4.0.0 Omarchy remembers an explicit choice per power source. omarchy-powerprofiles-set writes it to ~/.local/state/omarchy/powerprofiles/battery (or /ac) and restores it next time you are in that state. Out of the box you get performance on AC and balanced on battery, so battery never drops to power-saver unless you ask. The system sleep chapter covers the same commands.
On 3.x there was no memory. The helper always picked balanced on battery, driven by udev rules in /etc/udev/rules.d/99-power-profile.rules. Those rules ran a script out of your home directory, and the 4.x migration 1788102906 removes or quarantines them. If you upgraded, confirm the profile still changes when you unplug.
2. Measure before you change anything.
omarchy battery status
sudo pacman -S powertop && sudo powertop
omarchy battery status prints percentage, time remaining, and instantaneous draw in watts, read from power_now in sysfs rather than UPower’s lagging average. Note the watts with the screen on and nothing running. Anything above roughly 10 W idle on a modern thin laptop means something is awake that should not be. Powertop’s overview tab names it.
3. Turn off the screensaver if you have a HiDPI or multi-monitor setup.
omarchy toggle screensaver
The screensaver starts after 150 seconds of idle by default and opens one fullscreen terminal per monitor at a hardcoded 120 frames per second. Omarchy’s shipped terminal is foot, which rasterizes on the CPU. markvogel measured 5.3 cores of CPU, a package temperature climb from 60 C to 97 C, and rising throttle counts on a three monitor Framework 13 in issue #9193. That is the single worst idle drain on the list and it fires while you are away from the machine.
Idle timings live in ~/.config/omarchy/shell.json under idle, as screensaver and lock in seconds. The shipped defaults are 150 and 300.
4. On a hybrid NVIDIA laptop, check whether the dGPU is actually asleep.
cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status
sudo lsof /dev/nvidia*
Use your own PCI address from lspci. If the status is active at idle, or Hyprland and the launcher hold the device open, the card is burning watts for nothing. That is issue #1776, where itsmedardan showed the dGPU never reaching d3cold and another reporter halved power draw after moving rendering to the iGPU. On supported laptops omarchy toggle hybrid gpu installs supergfxctl and switches modes. See hybrid GPU and NVIDIA drivers on Omarchy 4 first, because switching modes can cost you a session.
5. Close the power panel when you are done with it.
Leaving the panel open runs three helper processes every five seconds, one of which produces data the panel never displays. evo-social-world documented it in issue #7582, still open on 4.0.4. It is small, but it is exactly the kind of never stopping wakeup that keeps a CPU out of deep idle.
6. If you run the dev channel, update.
Dev builds of Quattro polled powerprofilesctl get every two seconds for the whole session. vstoyanov measured that at roughly 5 percent of a core and 111 ms of CPU per call in issue #11058. dhh swapped the Python CLI for a busctl property read in PR #11637, merged 2026-09-13; the two second timer stays, but each tick is a cheap D-Bus call instead of an interpreter start. The battery service in the tagged 4.0.x trees has no such timer at all, so this only matters on dev or an older dev checkout.
Verify it worked
Unplug, leave the machine idle at the desktop with the lid open, wait a minute, then run omarchy battery status twice about 30 seconds apart. You want a stable watt figure, not a moving one. Compare it with what you noted in step 2.
Then confirm the profile survives a plug cycle:
powerprofilesctl get # while unplugged
powerprofilesctl get # again, a few seconds after plugging in
If nothing changes on unplug, the shell’s battery service is not firing. It reacts to UPower.onBattery, so check busctl get-property org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower OnBattery while unplugged.
Why it happens
Omarchy ships one power daemon and nothing else. install/omarchy-base.packages lists power-profiles-daemon, and install/config/enable-services.sh enables it. There is no TLP, no laptop-mode-tools, no disk or PCIe tuning. Intel machines with a battery additionally get thermald, and Alder Lake and newer hybrid Intel CPUs get intel-lpmd, both from install/hardware/intel/. That is the whole of it. Arch with a bare profile daemon idles higher than a vendor tuned Windows install, which is what reports like issue #8648 describe. Automatic switching on plug and unplug only arrived in 3.4.0; before that, people wired it up themselves with udev rules, as in discussion #933.
Two shipped defaults deliberately spend power. Wi-Fi power save is switched off in /etc/NetworkManager/conf.d/omarchy-wifi-powersave.conf, and the file says why: it trades a fraction of a watt for avoiding latency spikes and broken Intel BE200 firmware. A migration turns it off on running interfaces too. The USB autosuspend file every 4.0.x release ships at /etc/modprobe.d/omarchy-usb-autosuspend.conf sets a usbcore option that cannot apply, because usbcore is built into the kernel, which jordanglean documented in issue #12095. So USB devices keep whatever the udev hwdb gives them.
The low battery warning is a warning only. The shell’s battery service checks every 30 seconds and, at 10 percent while discharging, runs omarchy-battery-low, which sends the “Time to recharge!” notification and fires the battery-low hook. Drop an executable script in ~/.config/omarchy/hooks/battery-low.d/ to add your own action. There is a play-warning-sound.sample to copy. Nothing in that path reduces power draw or suspends the machine for you.
One more failure mode worth ruling out: the profile may never have applied at boot. In issue #8184, on a machine upgraded from 3.x that still carried the old 99-power-profile.rules, the udev event fired before power-profiles-daemon had started, the helper exited 1, and the machine stayed on whatever profile was left over. A clean 4.x install has no udev rule; the shell applies the profile when UPower reports a change. journalctl -b | grep powerprofiles shows either path.
If that did not work
Consider TLP, with your eyes open. pomartel’s guide in discussion #3907 replaces power-profiles-daemon with tlp plus tlp-pd and symlinks powerprofilesctl to tlpctl. It works, and TLP tunes far more than CPU governors. But the two daemons conflict and cannot both be installed, as pomartel put it in the accepted answer on discussion #4768. Worse on 4.x: when the daemon is masked, powerprofilesctl crashes with SIGABRT instead of failing cleanly, and the shell calls it from the power panel, the menu, and every AC transition. That is ogrt’s issue #8596, open as of 2026-09-16. Note that tlp-pd was not in the Arch repos for at least one reader of that guide, and pomartel later wrote in the same thread that he went back to power-profiles-daemon because TLP caused odd issues when not tuned carefully.
Check the battery itself. omarchy battery status prints the full charge capacity in watt hours; compare it with the design capacity in /sys/class/power_supply/BAT0/energy_full_design. A cell at half its design capacity drains twice as fast and no software fixes that. On dual battery laptops the readout covers only the first battery: omarchy-battery-status takes the first UPower BAT device, so a ThinkPad with an internal and an external pack shows one of them.
Look for a single runaway process. A stuck Chromium tab, a compile loop, or an agent CLI left running will beat every tweak on this page. btop ships by default.
The drains with measurements attached are the screensaver, the dGPU, and the dev channel poll. If you measure something else, open an issue with omarchy debug output attached.
Related
Upstream threads about this error
220 issues on the Omarchy tracker match this error cluster. Newest fixes often appear as comments on the most-discussed threads.
| Issue | State | Comments | Opened |
|---|---|---|---|
| #1684 Slow launches on laptop | closed | 39 | 2025-09-15 |
| #1776 Laptop / Hybrid GPU Power Management Issue (NVIDIA, iGPU + dGPU) | closed | 15 | 2025-09-18 |
| #1840 Omarchy lid/sleep/suspend issue on MacBook (bug + solution to be tested) | closed | 14 | 2025-09-20 |
| #6223 Crash and restart after omarchy-system-lock | open | 26 | 2026-07-14 |
| #2800 google-chrome flickers | open | 23 | 2025-10-24 |
| #4184 Suspend not working in Omarchy 3.3 · fixed by #4940 | open | 17 | 2026-01-09 |
| #2599 Windows VM: RDP connects too early, “Connection reset by peer”, VM auto-stops · fixed by #3958 | closed | 18 | 2025-10-20 |
| #5953 Dell XPS 14 DA14260 periodic hard reset after unplugging; power-button diagnostic blink code | open | 19 | 2026-05-23 |
| #2658 Bricked Alienware 17 R3 | closed | 18 | 2025-10-21 |
| #3066 Battery Low Warning · fixed by #3838 | closed | 12 | 2025-11-02 |
Accepted answers upstream
- ⚡️ Auto Switch Power Profiles on AC/Battery · answered by c4software
- Battery charging level threshold · answered by emourad
- Guide: Replacing Power Profiles with TLP to improve battery life · answered by levyvix
- tick_nohz_handler is consuming too much power · answered by Arekaldi
Questions people ask
- Does Omarchy install TLP?
- No. The only power daemon in install/omarchy-base.packages is power-profiles-daemon, enabled in install/config/enable-services.sh. Intel laptops with a battery also get thermald and, on Alder Lake and newer hybrid CPUs, intel-lpmd. Nothing else tunes disks, PCIe, or USB.
- Can I just install TLP instead?
- You can, but it is a trade. TLP and power-profiles-daemon conflict, and if you mask the daemon the shell's power panel and menu still shell out to powerprofilesctl, which crashes against a dead daemon. That is issue #8596, still open on 4.0.4.
- Why is there no charge limit slider?
- Omarchy 4.0.4 reads charge thresholds for display in omarchy-battery-status but ships no command to set one. Set it in firmware, or with your laptop vendor's own tool.
- Does the bespoke kernel in 4.0.4 help battery life?
- The 4.0.4 release notes describe linux-omarchy as tuned for desktop responsiveness under load and for gaming, and say it refines power management, without numbers or a battery life claim. If your drain started exactly at 4.0.4, the stock linux kernel is still installable as a comparison.
Sources and credit
Fixes on this page were worked out by itsmedardan (Documented the NVIDIA dGPU never entering d3cold on hybrid laptops and the render offload setup that halved power draw for others in the thread), markvogel (Measured the idle screensaver at 5.3 cores and 97 C package temperature on a HiDPI multi-monitor Framework 13), vstoyanov (Measured the two second powerprofilesctl poll in dev builds at roughly 5 percent of a core), ogrt (Showed that masking power-profiles-daemon for TLP makes powerprofilesctl crash on every power event), pomartel (Wrote the TLP replacement guide and the note that TLP and power-profiles-daemon cannot both be installed), kshatriya-abhay (Traced the boot time profile helper failing because udev fires before power-profiles-daemon starts). Text here is our own paraphrase; follow the links for the original threads.
- manualOmarchy manual: System sleep · omacom · 2026-09-15
- issueIssue #1776: Laptop / Hybrid GPU Power Management Issue (NVIDIA, iGPU + dGPU) · itsmedardan · 2025-09-18
- issueIssue #9193: Screensaver saturates 5+ CPU cores and thermally throttles on HiDPI displays · markvogel · 2026-08-30
- issueIssue #8596: powerprofilesctl crashes (SIGABRT) when power-profiles-daemon is masked, hit on every power event with TLP · ogrt · 2026-08-27
- issueIssue #11058: Battery service forks powerprofilesctl get every 2 s for the whole session (~5% of a core, on battery too) · vstoyanov · 2026-09-09
- prPR #11637: Poll the active power profile over D-Bus instead of powerprofilesctl · dhh · 2026-09-13
- issueIssue #7582: Power panel spawns three helper processes every five seconds while open · evo-social-world · 2026-08-20
- issueIssue #8184: omarchy-powerprofiles-set fails at boot (exit 1): CPU power profile never applied on AC · kshatriya-abhay · 2026-08-25
- issueIssue #12095: omarchy-usb-autosuspend.conf is a no-op; Intel Bluetooth controllers still autosuspend · jordanglean · 2026-09-16
- issueIssue #8648: Consumiing insane amount of battery · notTanveer · 2026-08-27
- discussionDiscussion #3907: Guide: Replacing Power Profiles with TLP to improve battery life · pomartel · 2025-12-16
- discussionDiscussion #4768: System blackout after failed update 3.3.3 to 3.4.0 (pomartel's answer on the TLP conflict) · wearethesame13 · 2026-02-27
- discussionDiscussion #933: Auto Switch Power Profiles on AC/Battery · webbegg · 2025-08-20