diff --git a/commands/util/pacman.py b/commands/util/pacman.py new file mode 100644 index 0000000..5de2521 --- /dev/null +++ b/commands/util/pacman.py @@ -0,0 +1,48 @@ +import subprocess as sp +from typing import List + +pkg_manager = ["yay", "--noconfirm"] + + +def list_explicitly_installed() -> List[str]: + """List all packages explicitly installed + + Returns: + The package list + """ + return run_pkg_manager_cmd(["-Qeq"]).stdout.split() + + +def uninstall_package_list(pkgs: List[str]) -> bool: + """Uninstall all packages in the list + + Args: + pkgs: A list of packages to uninstall + + Returns: + True if successful, False otherwise + """ + # TODO: Add guard to protect against uninstalling archmgr + # pkgs.index("archmgr") + # TODO: Consider if we want to print out stdout and stderr on err + return run_pkg_manager_cmd(["-Rs", *pkgs], True).returncode == 0 + + +def install_package_list(pkgs: List[str]) -> bool: + """Install all packages in the list + + Args: + pkgs: A list of packages to install + """ + return run_pkg_manager_cmd(["-S", *pkgs], True).returncode == 0 + + +def run_pkg_manager_cmd( + args: List[str], use_sudo: bool = False +) -> sp.CompletedProcess[str]: + # TODO: Get password + pw = "" + if use_sudo: + return sp.run([*pkg_manager, *args], capture_output=True, text=True, input=pw) + else: + return sp.run([*pkg_manager, *args], capture_output=True, text=True)