PMM came about from a simple frustration. "Why is there so much cruft installed that I just don't
care about in my system?!" This is pretty simple to solve one would think. Just list all packages with something like
pacman -Qqe, go
through them all one by one, and remove what you don't want. After doing this many times, I remembered that Gentoo had solved this in a
much better way. A world file was the simple way to keep track of what you
explicitly installed, and not worry about dependencies. It only tracked what you actually wanted. I went on the hunt to see if other
package managers were able to keep track of things like orphans, dependencies, and explicitly installed packages, and it turns out that
most modern package managers can.
I knew on things like Arch based Linux distros, I could use things like
$ pacman -Qqe acpi acpid acpid-openrc alsa-firmware alsa-utils ...
This will get things explicitly installed. Simply pipe that into a file, and it's effectively a worldfile similar to what Gentoo had.
pacman -Qqe > worldfile
What became clear quickly was this file was very long, and hard to go through unless I knew what I was looking for, and sometimes things
would consist of more that one thing logically. Things like
pipewire, were actually installed on my systems as a set of
easyeffects lsp-plugins pipewire pipewire-alsa pipewire-jack pipewire-pulse
These packages all logically were "pipewire" for my system, and sets were created. I could have a world file, now known as a "set", that can be pulled in to world files in any order. This allows for things like quickly changing between Sway and XFCE, or PulseAudio and PipeWire.
While installing things is great for setting up a system, removing things is also important for cleaning up the cruft, which is why this was all started in the first place. I found that most package manages knew how to know the difference between a dependency and explicitly installed packages. With a world file, that is what we want to be set explicitly in the package manager by design, so pmm can list a diff to tell you what was added/removed, or tell the system to add/purge things to be in sync with the world file. This keeps the system lean, but able to change rapidly, while keeping track of things by ideas, and not just packages thanks to sets.
PMM doesn't actuallly remove packages when syncing. This allows running software to stay as it is, while the system transforms itself into the new "correct" state defined by the world file. It marks the things not explicitly installed as dependencies and trusts that the package manager knows how to clean up after itself. Known supported package managers are listed, and pmm offers a way to purge orphans as a wrapper, and uses the package manager itself to do all of the work.
Feel free to check my worldfiles here
Amy Lenovo Flex 5 laptop running Artix Linux
Planex Desktop SAN running Artix Linux
Farnsworth Mac Mini M1 (2020) Running OSX