Stuff!
This commit is contained in:
@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user