I've had the same Arch installation between four laptops over 12 years. Boot from a USB Linux distro and enter command line. Partition the new laptop, setup disk encryption, rsync the file system via USB external enclosure, modify the ftab, crypttab, and refind.conf, reboot. Don't have to re-install any software or re-setup and sync any accounts.
Same, but with Debian for almost 20 years.
Don't remember how I did it before, but the last few migrations were just `dd if=/dev/sda.old of=/dev/sda.new` and then gparted to enlarge the root partition to fill out the new disk.
This is how I do it also. Sometimes if I feel like changing the partition layout for some reason, I partition the new drive first and use dd offsets to copy the partitions one at a time. And of course you may need to resize the filesystem(s) as well. Works with Windows, too, although I usually change the storage driver to some generic ATA or something first to prevent it from blue screening on the first boot. And sometimes with newer versions of Windows you have to fiddle around with bootrec and whatnot.
How do you know you're not propagating bitrot over time? Feels like a binary here and there may accumulate mismatching checksums over the years from bad hardware or some filesystem error... Not to speak of malware. All it takes is once...
Feels a lot safer to do the system- and package installation from scratch and then rsync/dd only /home and /etc.
The base system and packages are usually smaller than home, so the possibility of a bitrot is actually lower. Package files' integrity can also be automatically checked by some tools. In addition, they are much easier to reproduce, as you said, one can always just reinstall the system and download all packages again.
Personally, I just gave root "enough" and set up a separate user partition. Although admittedly it gets more complex if using lvm, so realistically I end up setting up sd-encrypt on the new drive, manually partitioning, then rsyncing everything over reserving permissions
Last time I did it I threw away my root install too because I figured it had been around long enough that either my drunken younger self messed up the install or otherwise something "dirtied up" the install.
I also figure it's nice to clean the slate just in case someone put a gnarly rootkit on my box.
Over the last two years I've migrated to fedora/Ubuntu and trying to do everything really secure, but I finally broke down and re enabled community a month or two ago. Just too much user space desktop quality of life stuff which only lives in community....
Debian too, but for some reason I just feel good about doing a fresh install whenever I get a new laptop. I do rsync over my home directory and a few other things, but it just feels nice to have a fresh machine with a minimal amount of packages on it, where I can install stuff as I need it, and leave out anything I haven't used in a long time and have forgotten I'd even installed.