Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit d864199

Browse files
Add Pamac support (#953)
1 parent 4e6f48c commit d864199

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

config.example.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@
6666
#greedy_cask = true
6767

6868
[linux]
69-
# Arch Package Manager to use. Allowed values: autodetect, trizen, paru, yay, pikaur, pacman.
69+
# Arch Package Manager to use. Allowed values: autodetect, trizen, paru, yay, pikaur, pacman, pamac.
7070
#arch_package_manager = "pacman"
7171
# Arguments to pass yay (or paru) when updating packages
7272
#yay_arguments = "--nodevel"
7373
#show_arch_news = true
7474
#trizen_arguments = "--devel"
7575
#pikaur_arguments = ""
76+
#pamac_arguments = "--no-devel"
7677
#enable_tlmgr = true
7778
#emerge_sync_flags = "-q"
7879
#emerge_update_flags = "-uDNa --with-bdeps=y world"

src/config.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ pub enum ArchPackageManager {
202202
Yay,
203203
Pacman,
204204
Pikaur,
205+
Pamac,
205206
}
206207

207208
#[derive(Deserialize, Default, Debug)]
@@ -212,6 +213,7 @@ pub struct Linux {
212213
show_arch_news: Option<bool>,
213214
trizen_arguments: Option<String>,
214215
pikaur_arguments: Option<String>,
216+
pamac_arguments: Option<String>,
215217
dnf_arguments: Option<String>,
216218
apt_arguments: Option<String>,
217219
enable_tlmgr: Option<bool>,
@@ -696,6 +698,15 @@ impl Config {
696698
.unwrap_or("")
697699
}
698700

701+
/// Extra Pamac arguments
702+
pub fn pamac_arguments(&self) -> &str {
703+
self.config_file
704+
.linux
705+
.as_ref()
706+
.and_then(|s| s.pamac_arguments.as_deref())
707+
.unwrap_or("")
708+
}
709+
699710
/// Show news on Arch Linux
700711
pub fn show_arch_news(&self) -> bool {
701712
self.config_file

src/steps/os/archlinux.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,45 @@ impl ArchPackageManager for Pikaur {
190190
}
191191
}
192192

193+
pub struct Pamac {
194+
executable: PathBuf,
195+
}
196+
197+
impl Pamac {
198+
fn get() -> Option<Self> {
199+
Some(Self {
200+
executable: which("pamac")?,
201+
})
202+
}
203+
}
204+
impl ArchPackageManager for Pamac {
205+
fn upgrade(&self, ctx: &ExecutionContext) -> Result<()> {
206+
let mut command = ctx.run_type().execute(&self.executable);
207+
208+
command
209+
.arg("upgrade")
210+
.args(ctx.config().pamac_arguments().split_whitespace())
211+
.env("PATH", get_execution_path());
212+
213+
if ctx.config().yes(Step::System) {
214+
command.arg("--no-confirm");
215+
}
216+
217+
command.check_run()?;
218+
219+
if ctx.config().cleanup() {
220+
let mut command = ctx.run_type().execute(&self.executable);
221+
command.arg("clean");
222+
if ctx.config().yes(Step::System) {
223+
command.arg("--no-confirm");
224+
}
225+
command.check_run()?;
226+
}
227+
228+
Ok(())
229+
}
230+
}
231+
193232
fn box_package_manager<P: 'static + ArchPackageManager>(package_manager: P) -> Box<dyn ArchPackageManager> {
194233
Box::new(package_manager) as Box<dyn ArchPackageManager>
195234
}
@@ -203,12 +242,14 @@ pub fn get_arch_package_manager(ctx: &ExecutionContext) -> Option<Box<dyn ArchPa
203242
.or_else(|| YayParu::get("yay", &pacman).map(box_package_manager))
204243
.or_else(|| Trizen::get().map(box_package_manager))
205244
.or_else(|| Pikaur::get().map(box_package_manager))
245+
.or_else(|| Pamac::get().map(box_package_manager))
206246
.or_else(|| Pacman::get(ctx).map(box_package_manager)),
207247
config::ArchPackageManager::Trizen => Trizen::get().map(box_package_manager),
208248
config::ArchPackageManager::Paru => YayParu::get("paru", &pacman).map(box_package_manager),
209249
config::ArchPackageManager::Yay => YayParu::get("yay", &pacman).map(box_package_manager),
210250
config::ArchPackageManager::Pacman => Pacman::get(ctx).map(box_package_manager),
211251
config::ArchPackageManager::Pikaur => Pikaur::get().map(box_package_manager),
252+
config::ArchPackageManager::Pamac => Pamac::get().map(box_package_manager),
212253
}
213254
}
214255

0 commit comments

Comments
 (0)