Skip to main content

zoi_cli/
lib.rs

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    )
86}
87
88pub fn uninstall_package(package_name: &str, scope_override: Option<Scope>) -> Result<()> {
89    zoi_uninstall::run(package_name, scope_override, false, false, false).map(|_| ())
90}