kernel-builder 0.7.6

Select, build and install kernel version from local sources.
Documentation
use clap::Parser;
use config::{Config, Environment, File};
use kernel_builder::{BuilderErr, KBConfig, KernelBuilder, init_logging};
use std::path::PathBuf;
use tracing::debug;

use kernel_builder::Args;

fn main() -> Result<(), BuilderErr> {
    let cli_args = Args::parse();

    init_logging(cli_args.verbose);

    let mut settings_path = if let Ok(xdg_env) = std::env::var("XDG_CONFIG_HOME") {
        PathBuf::from(xdg_env)
    } else {
        PathBuf::from(std::env::var("HOME").unwrap_or_default()).join(".config")
    };
    settings_path.push("kernel-builder/config");

    let settings = Config::builder()
        .add_source(File::with_name(settings_path.to_string_lossy().as_ref()).required(false))
        .add_source(Environment::with_prefix("KB"))
        .build()?;

    debug!("settings loaded.");

    let config = settings.try_deserialize::<KBConfig>()?;
    debug!("deserialized config.");
    let kernel_builder = KernelBuilder::new(config)?;
    debug!("setup kernel builder.");

    sudo::with_env(&["XDG_", "KB_", "HOME"]).map_err(|_| BuilderErr::NoPrivileges)?;
    debug!("got root permissions.");
    kernel_builder.build(&cli_args)?;
    debug!("finished");

    Ok(())
}