Baseline is now 3.6W


TUI

With Terminal User Interface (TUI) for everything fiesible, my XPS 14 now idles at no more than 3.6W (sometimes even below 3W) with the screen at 70% brightness. The battery is 70 Wh. That gives:

70 Wh ÷ 3.6W ≈ 19.4 hours of idle battery life.

A full workday and then some, on a single charge, screen on. With screen off (lid closed but laptop not suspended), the drain is around 1.5W.

How I got here

Today I finished another round of idle-tick surgery on my Rust TUI stack. The numbers:

  • ~198,000 idle wakeups per day eliminated across kastrup and tock.
  • ~41,800 redundant SQLite queries per day removed from tock.
  • Two poller threads converted from 1-second spin-checks to Condvar waits.
  • One main loop moved from a 2-second wake tick to 10 seconds.

The wakeup count is only part of the story. The structural reason is simpler. Nearly every daily tool on this machine is a TUI written to be cold when idle. Browser, PDF viewer, and image viewer are the only GUIs I regularily use. Everything else lives in a tile WM, keyboard-driven.

TUI vs GUI

Property TUI GUI
Idle powerLow (blocking reads cost ~0)Higher (compositor, GPU, frame timing)
RAM footprintTiny (kastrup ~50 MB)Large (Thunderbird ~500 MB)
Cold startMillisecondsSeconds
Keyboard speedFast once memorizedMouse-bound, slower
DiscoverabilityPoor (hidden shortcuts)Good (menus, tooltips)
Rich mediaSecond-class (sixel, kitty hacks)Native (images, video, rich text)
TypographyOne monospace fontFull font stack with kerning
HTML emailPlain textRenders properly
ComposabilityPipe-friendly, scriptableLocked behind the GUI
SSH friendlyTrivialForwarding lag and chrome trouble
Source readabilityHundreds of lines per fileToolkit and DOM stacks
ThemingA few ANSI escapesCSS or theme engines
Mouse and touchBolted on at bestFirst-class
Drag and dropNopeNative
Attack surfaceSmallLarge (codecs, JS, renderers)
UpdatesMinimalFrequent, invasive
Window sizingCell-aligned (coarse)Pixel-precise
Predictable renderAlwaysDPI, font, theme surprises
Multi-monitorWorkableBuilt for it
Charts and shapesUnicode box drawing, BrailleArbitrary vector or raster

Conclusion

TUI wins for anything text-shaped: mail, chat, code, files, calendar, trading, clock. GUI is reserved for the inherently visual: browser, PDF, image viewer, presentations, video.

That split is the one I have converged on. The 3.6W idle figure is the reward for staying TUI-first wherever the content allows it.

Looking at the top strip on my screenshot - you can see a bunch of “asmites” (reporting elements written in Assembly). With screen at 80% (the yellow number after the blue 70% speaker volume) there is a battery drain reported over at the right; 3.28W:

Screenshot

The caveat

3.6W is the idle figure. Real usage is higher. With three heavy CC processes and browsing in ff it peaks around 8W-9W.

Compiling Rust pins all cores. Firefox with autoplaying media can push the system above 8W.

The point of optimizing idle is that idle covers the long hours between bursts of real work. With 3.6W as the floor, the battery actually lasts around 14h - up 5h from when I started the project less than 2 months ago.


Link to this post: https://isene.org/2026/05/Baseline.html