I have been meaning to do IPv6 at home properly for about three years, which tells you roughly how urgent the problem felt. The push this time was that more of the things I run actually want it, and dual-stacking after the fact is always worse than just having it from the start.
My ISP hands out a /56 by DHCPv6 prefix delegation. That is sixteen bits of subnet to play with, which is absurdly generous compared to the single IPv4 address sat behind a layer of NAT. The first lesson was that the prefix is not guaranteed stable. It usually is, but "usually" is not "always", so anything I pin to a specific address needs to cope with the prefix changing under it. I leaned on a unique local address range for the bits that must stay put and let the routable prefix float on top.
The part that bit me was firewalling. With IPv4 NAT, the default-deny-inbound behaviour is a side effect of the NAT itself, and you get lazy about it. With IPv6 every host has a globally routable address and nothing is hiding behind translation. So the firewall is now the only thing standing between the internet and that printer with the questionable firmware. I spent a evening making sure inbound was default-deny on the v6 side and that I had not accidentally exposed anything I would regret.
Router advertisements were the other fiddly piece. Getting radvd to announce the delegated prefix to the LAN, with sensible lifetimes, and not fight with the DHCPv6 client on the WAN side, took a couple of restarts and some staring at tcpdump. Once it settled it has been fine, and clients pick up addresses by SLAAC without me managing leases, which is genuinely nicer than the v4 way.
Is everything reachable over v6 now? No. Plenty of the wider internet still is not, and a few of my own services quietly preferred v4 until I told them otherwise. But the house is dual-stacked, the firewall is honest about it, and I no longer have a nagging item on a list. Eventually arrived, as it tends to.