aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs52
1 files changed, 13 insertions, 39 deletions
diff --git a/src/main.rs b/src/main.rs
index 8fc22c0..c2c103d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,30 +1,17 @@
-use std::env;
-use std::os::unix::fs::symlink;
-use std::path::PathBuf;
use std::process::exit;
-use dirs::{home_dir};
-use crate::config::{Config, ConfigLoadError, Dot};
+use clap::Parser;
+use crate::cli::{Cli, CliCommand};
+use crate::config::{Config, ConfigLoadError};
+use crate::dots::{deploy_dots, unlink_dots};
mod config;
+mod cli;
+mod dots;
fn main() {
- let args = env::args().skip(1).collect::<Vec<String>>();
-
- if args.len() > 1 {
- eprintln!("usage: {} [config]", args[0]);
- exit(1);
- }
-
- if args.len() == 1 && (args[0] == "-h" || args[0] == "--help") {
- println!("Usage: {} [config]", args[0]);
- println!("options:");
- println!(" -h, --help Print help information");
- println!("By default, dots will look for a bummsdots.toml file in the current directory");
- println!("This can be changed by passing the filename");
- exit(0);
- }
-
- let config = Config::load(args.get(0).map(|o| PathBuf::from(o))).map_err(|err|
+ let cli = Cli::parse();
+
+ let config = Config::load(cli.config).map_err(|err|
match err {
ConfigLoadError::IOError(err) => {
eprintln!("failed to load config file: {}", err);
@@ -36,22 +23,9 @@ fn main() {
}
}
).unwrap();
-
- let prepended_mappings = config.dots.iter().map(|m|
- Dot {
- source: config.dots_dir.join(&m.source),
- destination: prepend_user_dir(&m.destination)
- }
- );
-
- for dot in prepended_mappings {
- println!("linking from {} to {}", dot.source.display(), dot.destination.display());
- let _ = symlink(&dot.source, &dot.destination).map_err(|err|
- eprintln!("failed to symlink: {}", err.to_string())
- );
+
+ match cli.command {
+ CliCommand::Deploy => deploy_dots(config.dots, config.dots_dir),
+ CliCommand::Unlink => unlink_dots(config.dots, config.dots_dir),
}
-}
-
-fn prepend_user_dir(path: &PathBuf) -> PathBuf {
- home_dir().unwrap().join(path)
} \ No newline at end of file