This commit is contained in:
2021-04-07 00:12:18 +02:00
parent ed79573d14
commit be993fcaf9
5 changed files with 244 additions and 84 deletions

View File

@ -6,21 +6,39 @@ mod linker;
use builder::build_tree;
use linker::link_tree;
use log::LevelFilter;
use std::env;
use std::path::PathBuf;
use structopt::StructOpt;
use tokio::io;
#[derive(StructOpt)]
pub struct Opt {
template_dir: PathBuf,
build_dir: PathBuf,
link_dir: PathBuf,
struct Opt {
#[structopt(short, long)]
template_dir: Option<PathBuf>,
#[structopt(short, long)]
build_dir: Option<PathBuf>,
#[structopt(short, long)]
link_dir: Option<PathBuf>,
#[structopt(subcommand)]
color: Option<ColorMode>,
#[structopt(short, parse(from_occurrences))]
verbosity: u8,
}
#[derive(StructOpt, PartialEq, Eq, Clone, Copy)]
#[derive(Debug)]
pub struct Config {
template_dir: PathBuf,
build_dir: PathBuf,
link_dir: PathBuf,
color: ColorMode,
}
#[derive(StructOpt, PartialEq, Eq, Clone, Copy, Debug)]
pub enum ColorMode {
Dark,
Light,
@ -28,15 +46,39 @@ pub enum ColorMode {
#[tokio::main]
async fn main() -> io::Result<()> {
pretty_env_logger::init();
let opt = Opt::from_args();
let filter_level = match opt.verbosity {
0 => LevelFilter::Warn,
1 => LevelFilter::Info,
2 => LevelFilter::Debug,
_ => LevelFilter::Trace,
};
pretty_env_logger::formatted_builder()
.filter_level(filter_level)
.init();
let xdg_dirs = xdg::BaseDirectories::with_prefix("dotfiles").unwrap();
let cfg = Config {
template_dir: opt
.template_dir
.unwrap_or_else(|| xdg_dirs.create_config_directory("tree").expect("xdg")),
build_dir: opt
.build_dir
.unwrap_or_else(|| xdg_dirs.create_cache_directory("").expect("xdg")),
link_dir: opt
.link_dir
.unwrap_or_else(|| env::var("HOME").expect("$HOME").into()),
color: opt.color.unwrap_or(ColorMode::Dark),
};
info!("building tree");
build_tree(&opt).await?;
build_tree(&cfg).await?;
info!("linking tree");
link_tree(&opt).await?;
link_tree(&cfg).await?;
Ok(())
}