diff --git a/crates/pacdef_core/src/backend/actual/flatpak.rs b/crates/pacdef_core/src/backend/actual/flatpak.rs index 100f595..e3dc6c3 100644 --- a/crates/pacdef_core/src/backend/actual/flatpak.rs +++ b/crates/pacdef_core/src/backend/actual/flatpak.rs @@ -27,12 +27,20 @@ const SUPPORTS_AS_DEPENDENCY: bool = false; impl Backend for Flatpak { impl_backend_constants!(); + fn get_switches_runtime(&self) -> Switches { + if self.systemwide { + &[] + } else { + &["--user"] + } + } + fn get_all_installed_packages(&self) -> Result> { - Flatpak::get_installed_packages(true) + self.get_installed_packages(true) } fn get_explicitly_installed_packages(&self) -> Result> { - Flatpak::get_installed_packages(false) + self.get_installed_packages(false) } fn make_dependency(&self, _: &[Package]) -> Result { @@ -48,12 +56,15 @@ impl Flatpak { } } - fn get_installed_packages(include_implicit: bool) -> Result> { + fn get_installed_packages(&self, include_implicit: bool) -> Result> { let mut cmd = Command::new(BINARY); cmd.args(&["list", "--columns=application"]); if !include_implicit { cmd.arg("--app"); } + if !self.systemwide { + cmd.arg("--user"); + } let output = String::from_utf8(cmd.output()?.stdout)?; Ok( diff --git a/crates/pacdef_core/src/backend/backend_trait.rs b/crates/pacdef_core/src/backend/backend_trait.rs index 8e6be52..9b84448 100644 --- a/crates/pacdef_core/src/backend/backend_trait.rs +++ b/crates/pacdef_core/src/backend/backend_trait.rs @@ -49,6 +49,11 @@ pub trait Backend: Debug { /// [`Backend::supports_as_dependency`]. fn get_switches_make_dependency(&self) -> Switches; + /// Get CLI switches evaluated at runtime + fn get_switches_runtime(&self) -> Switches { + &[] + } + /// Load all packages from a set of groups. The backend will visit all groups, /// find its own section, and clone all packages into its own struct. fn load(&mut self, groups: &HashSet); @@ -80,6 +85,7 @@ pub trait Backend: Debug { fn install_packages(&self, packages: &[Package], noconfirm: bool) -> Result { let mut cmd = Command::new(self.get_binary()); cmd.args(self.get_switches_install()); + cmd.args(self.get_switches_runtime()); if noconfirm { cmd.args(self.get_switches_noconfirm()); @@ -102,6 +108,7 @@ pub trait Backend: Debug { fn make_dependency(&self, packages: &[Package]) -> Result { let mut cmd = Command::new(self.get_binary()); cmd.args(self.get_switches_make_dependency()); + cmd.args(self.get_switches_runtime()); for p in packages { cmd.arg(format!("{p}")); @@ -115,6 +122,7 @@ pub trait Backend: Debug { fn remove_packages(&self, packages: &[Package], noconfirm: bool) -> Result { let mut cmd = Command::new(self.get_binary()); cmd.args(self.get_switches_remove()); + cmd.args(self.get_switches_runtime()); if noconfirm { cmd.args(self.get_switches_noconfirm()); @@ -143,6 +151,7 @@ pub trait Backend: Debug { fn show_package_info(&self, package: &Package) -> Result { let mut cmd = Command::new(self.get_binary()); cmd.args(self.get_switches_info()); + cmd.args(self.get_switches_runtime()); cmd.arg(format!("{package}")); cmd.status() .with_context(|| format!("running command {cmd:?}"))