kiviktnm / decman

Declarative package & configuration manager for Arch Linux.
GNU General Public License v3.0
66 stars 3 forks source link

Dependencies uninstall/install process #2

Closed cadr10 closed 5 months ago

cadr10 commented 5 months ago

Hi. First of all, thanks for making decman. The way it works and the modules feature makes it similar to a .nix file.

Issue: Decman will try to remove dependencies of packages that will be installed later. Example: it will try to remove the package licenses package required by base. Another one: it will try to remove lsb-release required by steam. These packages are under decman.packages in my config.

IMO, putting the dependencies manually under decman.packages makes it prone to error, installing unnecessary packages and not installing future added dependencies, as features may be added to an application. Uninstalling a package to later install it seems wrong too.

It's counter intuitive needing to list all packages, including the very ones the makes a Arch Linux system, such as base and its dependencies.

Earlier I've come with the solution of looping through decman.packages and add the required dependencies to it. But, I don't think this is ideal, as decman is trying to remove system required packages. Wouldn't be better to uninstall packages that won't break the system then remove orphaned packages, after decman installs from decman.packages?

I don't know if I am using decman the right way. What I am trying to achieve is get my system running and do system updates with it.

kiviktnm commented 5 months ago

You shouldn't need to add dependencies to decman.packages, only the packages you need explicitly installed. So you would add the base package which would cause licenses to be installed as a dependency.

I suspect the reason decman is trying to remove the packages licences or lsb-release is because they are marked as explicitly installed, but you haven't added them to decman packages. Can you verify if this is the case by running the command pacman -Qi licenses lsb-release and checking the install reasons? You can change the install reason to a dependency by running pacman -D --asdeps licenses lsb-release as root.

Decman tries to remove all explicitly installed packages not listed in decman.packages (or decman.ignored_packages). I thought it would be the best since that way your system should always equal to your configuration.

cadr10 commented 5 months ago

Sorry for the delayed response, I live in one of the areas most affected by the floods in Brazil.

I see what is wrong and it's not decmans fault, but rather how packages were installed. I boot up a clean Cachy OS (which IMO is a reasonable arch based distro) and right away installed decman, without doing anything on the VM. I don't know if I am mistaken, but for example, I have git under decman.packages, but perl, a dependency of git, is installed explicitly, by the fresh install. This is something that will happen and it's not on decman's fault. The user or distro will have packages installed explicitly that will break others when removed.

What I will eventually do for my config is check installed dependencies of decman.packages and add to ignored.packages.

kiviktnm commented 5 months ago

Cachy OS might be doing something that is marking packages as explicitly installed.

Very understandable. I hope you are doing well.

I wouldn't recommend putting dependencies to ignored package. Instead I would try marking them as dependencies. Otherwise the packages may remain on your system even if you remove the package that requires them.

But if thats not an option for Cachy OS, then your solution is fine, but it may require more manual operations.

Regardless, since this is not an issue with decman, I will close this issue.