Everything should get its IPv6 configuration via SLAAC. DHCPv6 is only useful when you plan to provide prefix delegation for extra routers or network boot information.
[...] To be honest because of this hot mess if you want to reliably support any possible client you'll need to do both DHCPv6 and RDNSS for DNS information. [...]
SLAAC can configure DNS automatically (via RDNSS).
Or you can run DHCPv6 just to hand out DNS settings (or anything else you want more control over), even if it's not handling addressing. But this isn't necessary for small deployments.
Personally, I've never had any problems with pure SLAAC (no DHCPv6) on my home network.
Sending DNS info is one of the options in SLAAC (just like how it is an option for DHCPv4).
You just configure your router to advertise DNS servers via SLAAC Router Advertisements (RAs) the same way you would via DHCP.
One of the benefits is that any configuration changes propagate almost immediately—you don’t have to wait for DHCP clients to renew their lease to get new DNS servers.
Also, you can (if you want) have the DNS server advertise itself using the same mechanism.
The only common clients that can’t use SLAAC-based DNS configuration are older (unsupported) versions of windows. Even then, setting up DHCPv6 (in unmanaged mode) to send DNS servers is easy.
The SLAAC should not change after the host has generated it during installation / first connection, as long as you don't reinstall the OS etc.
It's basically no problem.
Even better: I can set my own ::/64 so personal servers at home can be ::d3ad:b33f and accessible from outside without NAT. It's beautiful. Firewall configuration is not hard either these days is it?
SLAAC does DNS, with the RDNSS extension enabled. (RDNSS is a feature that was added to SLAAC.)
Some older devices [1] do not support RDNSS. I haven't run into them, but if you're at all worried about it, you can run DHCPv6 in parallel just to hand out DNS settings.
Personally, I just use SLAAC (with RDNSS) and it just works.
I run dual stack at home and every device I have connected to my home network runs ipv6 with no manual configuration whatsoever. It’s easier than ipv4 when you consider providing inbound access to resources (no nat configuration)
Why do you think this? What led you to assuming these things?
You would only need to configure any of this if you want to allow external connections, which isn't much different than setting up port forwarding with IPv4 + NAT, except with IPv6 it's less complicated.
Fact: SLAAC does not do DNS. So, my question then is: how do you do DNS?
Answer: "The SLAAC should not change after the host has generated it during installation / first connection, as long as you don't reinstall the OS etc."
Since SLAAC does not do DNS that answer implies that you'd enter it during connection/installation to complete the config.
SLAAC installations can use RDNSS to configure DNS.
Windows, according to Wikipedia, doesn't support it, but if you want to please Microsoft there's stateless DHCPv6 (which does not maintain leases, configure addresses, or do anything else that SLAAC doesn't do already; it can be simple piece of software in comparison).
On the other hand, Android and ChromeOS don't support DHCPv6 for DNS server provisioning because of Google's opinion about all matters related to DHCPv6. A pain, but not impossible to overcome either.
As for unchanging addresses, SLAAC is bound to the device MAC address so a reinstall should give you the same IP. However, you are/should be running privacy extensions, which means your outgoing IP will rotate to prevent tracking (as your IP is based on your MAC address and using that would make tracking way too easy). You'll still have the same primary IP, though, unless you add a second device to the network with the same MAC address.