1use eyre::Result;
2use lux_lib::{
3 config::{Config, LuaVersion},
4 lockfile::PinnedState,
5 operations,
6 package::PackageReq,
7 progress::MultiProgress,
8};
9
10use crate::utils::install::apply_build_behaviour;
11
12#[derive(clap::Args)]
13pub struct Install {
14 package_req: Vec<PackageReq>,
16
17 #[arg(long)]
19 pin: bool,
20
21 #[arg(long)]
23 force: bool,
24}
25
26pub async fn install(data: Install, config: Config) -> Result<()> {
28 let pin = PinnedState::from(data.pin);
29
30 let lua_version = LuaVersion::from(&config)?.clone();
31 let tree = config.user_tree(lua_version)?;
32
33 let packages = apply_build_behaviour(data.package_req, pin, data.force, &tree)?;
34
35 operations::Install::new(&config)
37 .packages(packages)
38 .tree(tree)
39 .progress(MultiProgress::new_arc())
40 .install()
41 .await?;
42
43 Ok(())
44}