shitbox/src/cmd/bootstrap/mod.rs

70 lines
2.5 KiB
Rust

use clap::{value_parser, Arg, ArgAction, ArgMatches, Command};
pub fn cli() -> Command {
Command::new("bootstrap")
.version(env!("CARGO_PKG_VERSION"))
.author("Nathan Fisher")
.about("Install shitbox into the filesystem")
.long_about("Install symlinks, manpages and shell completions")
.args([
Arg::new("prefix")
.help("The directory path under which to install")
.short('p')
.long("prefix")
.num_args(1)
.default_value("/")
.required(false),
Arg::new("usr")
.help("Use /usr")
.long_help(
"Split the installation so that some applets go into /bin | /sbin\n\
while others are placed into /usr/bin | /usr/sbin",
)
.short('u')
.long("usr")
.default_value("true")
.value_parser(value_parser!(bool)),
])
.subcommands([
Command::new("all").about("Install everything"),
Command::new("links")
.about("Install links for each applet")
.arg(
Arg::new("soft")
.help("Install soft links instead of hardlinks")
.short('s')
.long("soft"),
),
Command::new("manpages")
.about("Install Unix man pages")
.alias("man"),
Command::new("completions")
.about("Install shell completions")
.alias("comp")
.args([
Arg::new("all")
.help("Install completions for all supported shells")
.short('a')
.long("all"),
Arg::new("bash")
.help("Bash shell completions")
.short('b')
.long("bash"),
Arg::new("fish")
.help("Fish shell completions")
.short('f')
.long("fish"),
Arg::new("nu")
.help("Nushell completions")
.short('n')
.long("nu"),
Arg::new("pwsh")
.help("PowerShell completions")
.short('p')
.long("pwsh"),
]),
])
}
pub fn run(matches: &ArgMatches) {}