diff --git a/yazi-cli/src/args.rs b/yazi-cli/src/args.rs index bf6cc6b4..c583da24 100644 --- a/yazi-cli/src/args.rs +++ b/yazi-cli/src/args.rs @@ -91,6 +91,9 @@ pub(super) struct CommandPack { /// Install all packages. #[arg(short = 'i', long)] pub(super) install: bool, + /// List all packages. + #[arg(short = 'l', long)] + pub(super) list: bool, /// Upgrade all packages. #[arg(short = 'u', long)] pub(super) upgrade: bool, diff --git a/yazi-cli/src/main.rs b/yazi-cli/src/main.rs index 98ea094b..d4597af0 100644 --- a/yazi-cli/src/main.rs +++ b/yazi-cli/src/main.rs @@ -36,6 +36,9 @@ async fn main() -> anyhow::Result<()> { if cmd.install { package::Package::install_from_config("plugin", false).await?; package::Package::install_from_config("flavor", false).await?; + } else if cmd.list { + package::Package::list_from_config("plugin").await?; + package::Package::list_from_config("flavor").await?; } else if cmd.upgrade { package::Package::install_from_config("plugin", true).await?; package::Package::install_from_config("flavor", true).await?; diff --git a/yazi-cli/src/package/parser.rs b/yazi-cli/src/package/parser.rs index 28c63981..15b80b54 100644 --- a/yazi-cli/src/package/parser.rs +++ b/yazi-cli/src/package/parser.rs @@ -66,6 +66,28 @@ impl Package { fs::write(path, doc.to_string()).await.context("Failed to write package.toml") } + pub(crate) async fn list_from_config(section: &str) -> Result<()> { + let path = Xdg::config_dir().join("package.toml"); + let Ok(s) = fs::read_to_string(&path).await else { + return Ok(()); + }; + + let doc = s.parse::().context("Failed to parse package.toml")?; + let Some(deps) = doc.get(section).and_then(|d| d.get("deps")) else { + return Ok(()); + }; + + let deps = deps.as_array().context("`deps` must be an array")?; + println!("{section}s:"); + + for dep in deps { + if let Some(Value::String(use_)) = dep.as_inline_table().and_then(|t| t.get("use")) { + println!("\t{}", use_.value()); + } + } + Ok(()) + } + fn ensure_config(s: &str) -> Result { let mut doc = s.parse::().context("Failed to parse package.toml")?;