With tlp and a 5.10ish kernel, my T480 handles light web browsing at 3-5 W depending on display brightness (wqhd display). Heavier websites, high-res video decoding, etc. will bring it up to 7-10 W. Maybe 20 W when compiling something, or when attempting to use the (worthless) Nvidia GPU (which I leave powered down most of the time).
It has a dual battery setup with a 24 Wh internal battery and a 72 Wh external battery (I use the bulbous 6-cell, but you can get a thinner one if you prefer), so even when setting the charge stop thresholds at 80% to preserve cell lifetime, the computer easily lasts all day on battery.
That being said, it would be easy to find a random laptop that either idles at something stupid or that can't go to sleep properly because of just one wacky peripheral, making Linux power management seem bad.
Half the battle is picking the right starting point (e.g. a Thinkpad), and then setting everything up so you can actually measure the power in all of the different states so that you can actually confirm that your setup works properly before relying on it and ending up disappointed at the airport.
On ThinkPads (and probably on others), you can monitor the instantaneous power consumption by poking around in:
/sys/class/power_supply/*
There are widgets that can monitor this for you and alert you if anything seems amiss, but I just have a script that puts some text and symbols in my menu bar:https://github.com/ohazi/dotfiles/blob/master/bin/battery.sh
You can use this to confirm that (for example) your wifi card is actually powering down when you ask it to.
I have a friend who I convinced to buy a Thinkpad and stick ubuntu 20.04 on it. Unfortunately he got a more expensive X1 one with an Nvidia Graphics card, it strangely overheats when he needs to charge it and plugs it into the AC. I suspect the power settings are all over the place. I've not had chance to get a log from him yet. How did you "power down" your nvidia card?
First I made sure X was working the way I wanted with Intel graphics. There are a handful of ways to do hybrid graphics on Linux, depending on what you want to be able to do, and how old your hardware is (including "I didn't even want this thing, just keep it powered off forever"). The Arch wiki has some pretty good guides [1] that are helpful even if you're using a different system.
bbswitch seems to work on my system, and the interface is really simple [2]. But there's also this page on acpi_call [3], which suggests that bbswitch is old and unmaintained and that newer systems do something different. From a quick scan, it looks like the Arch wiki also mentions this approach.
As far as drivers go, I know everyone likes to dump on Nvidia for their closed source mess, but on every system I've used with Nvidia hardware (desktops and laptops), I've found that the Nvidia drivers have universally been more reliable than nouveau, so that's what I use.
[1] https://wiki.archlinux.org/title/hybrid_graphics (poke around in "Related Articles" too)
[2] https://github.com/Bumblebee-Project/bbswitch#turn-the-card-...
If you want good aftermarket batteries, KingSener has a solid reputation. Only go for aftermarket batteries that are upfront about being aftermarket and are open about the cells they use and well reviewed, or for sealed Lenovo batteries in original packaging.
I recently bought a brand new, sealed 72Wh original battery. It sat sealed for so long the batteries went down below 3.1V per cell and the pack locked itself. Looking at the self discharge curves I'd expect this to be the case for any actually new battery.
To make it work I had to open the battery and use a specialized charger to give it 0.1A of current until it got to 3.3V per cell, and I then programmed it to charge at 6A, after which the battery pack decided to start up.
On my X250 with a 72Wh external battery I can get 14h of battery life without sacrificing much of anything.