About a year ago (as of writing this) I decided to embark on the process of learning how to define my system using Salt states. Let's talk about why.
Salt?
Firstly, if you haven't heard of Qubes, it's is an operating system that employs the Xen hypervisor to enable you to run virtual machines very easily, and tooling to make this a sane experience on desktop. Its tooling is good, but it leaves a lot to be desired.
One common frustration is that the templates system it uses doesn't allow any form of composability. What this means is that if you have a handful of VMs based on Fedora (for example), and you want to add a package to all your Fedora-based VMs, you would have to open each one, run dnf install in each, shut them down, then restart any VMs based on them.
Next: if you haven't heard of Salt, it's a configuration-as-code software that allows you to provision and configure various kinds of systems. It's like Ansible.
Salt makes the frustration mentioned earlier easier by letting you write states in a commonly accessible location, then including them as needed to any virtual machines you'd want to apply that for.
State of the Union
Currently, there are many varying guides and documents about how to run Salt on Qubes, and to be honest none of them really tell you everything you need to know if you haven't used Salt. To make matters worse, the documentation on Salt itself is pretty obtuse.
This is a very common complaint among users.
Qubes introduces several changes to how Salt operates, and I don't think I've found any literature that goes into detail about those unique differences. At some point in the near future, I intend to write a guide or a few of them to talk about those differences.
It did mean, though, that I had to bang my head against the wall for a long time to get most of it working.
How it started vs how it's going
Opposite of the meme, things were extremely rough when I started but are much smoother for me now. I feel pretty confident about how to use Salt and especially on Qubes OS.
One benefit of having nearly everything configured like this means I only have to back up a few AppVMs when I need to do backups, everything else can be re-provisioned from the repo.
While learning Salt is probably worthless on today's job market, I'm still glad I picked it up.
You can view my repo at https://codeberg.org/xyhhx/qubes-mgmt-salt-user