1pub mod cli;
2pub mod cmd;
3pub mod pkg;
4pub use zoi_project as project;
5pub mod utils;
6
7use anyhow::Result;
8
9pub use zoi_core::cache;
10pub use zoi_core::config;
11pub use zoi_core::hash;
12pub use zoi_core::lock;
13pub use zoi_core::offline;
14pub use zoi_core::pgp;
15pub use zoi_core::pin;
16pub use zoi_core::pkgdir;
17pub use zoi_core::recorder;
18pub use zoi_core::sysroot;
19pub use zoi_core::types::{self, Scope};
20pub use zoi_core::upgrade;
21pub use zoi_hooks as hooks;
22pub use zoi_lua as lua;
23pub use zoi_purl as purl;
24pub use zoi_resolver as resolve;
25#[cfg(target_os = "linux")]
26pub use zoi_sandbox as sandbox;
27pub use zoi_telemetry as telemetry;
28
29pub use pkg::local;
30pub use pkg::mini_resolve;
31
32#[derive(Debug, Clone, Default)]
33pub struct SourceInstallOptions {
34 pub repo: Option<String>,
35 pub force: bool,
36 pub all_optional: bool,
37 pub yes: bool,
38 pub scope_override: Option<Scope>,
39 pub save: bool,
40 pub build_type: Option<String>,
41 pub dry_run: bool,
42 pub build: bool,
43 pub frozen: bool,
44}
45
46fn to_install_scope(scope: Scope) -> cli::InstallScope {
47 match scope {
48 Scope::User => cli::InstallScope::User,
49 Scope::System => cli::InstallScope::System,
50 Scope::Project => cli::InstallScope::Project,
51 }
52}
53
54pub fn install_sources(sources: &[String], options: &SourceInstallOptions) -> Result<()> {
55 let plugin_manager = if crate::pkg::utils::is_mini_mode() {
56 None
57 } else {
58 let pm = pkg::plugin::PluginManager::new()?;
59 let _ = pm.load_all(options.yes);
60 Some(pm)
61 };
62
63 let pm_ptr = plugin_manager.as_ref();
64
65 cmd::install::run(
66 sources,
67 options.repo.clone(),
68 options.force,
69 options.all_optional,
70 options.yes,
71 options.scope_override.map(to_install_scope),
72 false,
73 false,
74 options.save,
75 options.build_type.clone(),
76 options.dry_run,
77 pm_ptr,
78 options.build,
79 options.frozen,
80 false,
81 false,
82 3,
83 false,
84 false,
85 None,
86 )
87}
88
89pub fn uninstall_package(package_name: &str, scope_override: Option<Scope>) -> Result<()> {
90 zoi_uninstall::run(package_name, scope_override, false, false, false).map(|_| ())
91}