
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 power | Low (blocking reads cost ~0) | Higher (compositor, GPU, frame timing) |
| RAM footprint | Tiny (kastrup ~50 MB) | Large (Thunderbird ~500 MB) |
| Cold start | Milliseconds | Seconds |
| Keyboard speed | Fast once memorized | Mouse-bound, slower |
| Discoverability | Poor (hidden shortcuts) | Good (menus, tooltips) |
| Rich media | Second-class (sixel, kitty hacks) | Native (images, video, rich text) |
| Typography | One monospace font | Full font stack with kerning |
| HTML email | Plain text | Renders properly |
| Composability | Pipe-friendly, scriptable | Locked behind the GUI |
| SSH friendly | Trivial | Forwarding lag and chrome trouble |
| Source readability | Hundreds of lines per file | Toolkit and DOM stacks |
| Theming | A few ANSI escapes | CSS or theme engines |
| Mouse and touch | Bolted on at best | First-class |
| Drag and drop | Nope | Native |
| Attack surface | Small | Large (codecs, JS, renderers) |
| Updates | Minimal | Frequent, invasive |
| Window sizing | Cell-aligned (coarse) | Pixel-precise |
| Predictable render | Always | DPI, font, theme surprises |
| Multi-monitor | Workable | Built for it |
| Charts and shapes | Unicode box drawing, Braille | Arbitrary 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:

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