I use most of the same strategies, and in some cases the exact same software.
One addition that may be useful to others is that my DNS-based ad blocking for mobile devices happens on my device itself instead of my LAN’s local DNS server. I do this so I can still block ads when not on my home wi-fi, like work wi-fi or the cellular network. For Android I use DNS66 (it’s free), which pretends to be a VPN client & server for the purpose of setting your DNS server to a local daemon, and uses the regular public block lists that other tools subscribe to. It doesn’t actually handle any traffic besides DNS, and doesn’t tunnel your requests anywhere, the implementation choice of a fake VPN client is really just the easiest way to set a DNS server all network interfaces in Android without using root to edit the hosts file.
This only matters to me for non-browser apps, since Firefox for Android has built-in support for extensions like uBlock Origin and HTTPS Everywhere, so this only makes a difference in other apps like Twitch and Weather Underground, which are hit-or-miss for DNS-based ad-blocking anyway. For all my other devices like desktops and laptops (workstations?), I just install uBlock Origin in the browser and call it a day, and use CloudFlare DNS.
I like the Pi-Hole idea and I think its approach is very advantageous for iOS users or users who want to use Chrome on Android, or who have a lot of HTTP clients on their network that don’t allow extensions to be installed.