Yeah it’s hard, but we can help it. Besides, qubes user docs aren’t as comprehensive as some other sources.
I recommend reading Qubes Salt Beginner's Guide. It’s quite long but will help you get a grasp on salt and will get you through creating personal state configuration directories. Even if you don’t read all of it.
Having said that, you don’t actually need salt. Everything can be done with just bash or python or whatever. Or ansible.
Absolutely! I tried to highlight the main pitfall behind the idea itself, not specific implementation. Indeed, method of storing configuration does not really matter, because there is no guarantee that the same configuration will do the same thing across two distribution versions.
Fonts, emoji support, packages teetering on the edge of inclusion into repository, and more complex stuff, when you need multiple packages to have a functionality (but there aren’t a meta-package or a package group) often change their names, disappear and reappear in the repository as well.
To clarify: Rather than doing what was described in the original post, my-pkgs.sls contains a list of packages that you want installed. When you migrate to a newer version, you can simply apply my-pkgs.sls to the new version by updating a single line in my-pkgs.top. The only caveat is instead of installing packages in the template you instead (or additionally) add it to my-pkgs.sls and run `sudo qubesctl --all state.highstate’