aboutsummaryrefslogtreecommitdiff
path: root/src/cli/spec
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli/spec')
-rw-r--r--src/cli/spec/completion.rs14
-rw-r--r--src/cli/spec/machine.rs49
2 files changed, 63 insertions, 0 deletions
diff --git a/src/cli/spec/completion.rs b/src/cli/spec/completion.rs
new file mode 100644
index 00000000..8cc27d7b
--- /dev/null
+++ b/src/cli/spec/completion.rs
@@ -0,0 +1,14 @@
+use clap::{Arg, Command};
+
+pub(super) fn command() -> Command {
+ Command::new("completion")
+ .visible_alias("completions")
+ .about("Generate shell completion scripts")
+ .arg(
+ Arg::new("shell")
+ .value_name("SHELL")
+ .required(true)
+ .value_parser(super::super::completion::SUPPORTED_SHELLS)
+ .help("Shell to generate completions for"),
+ )
+}
diff --git a/src/cli/spec/machine.rs b/src/cli/spec/machine.rs
new file mode 100644
index 00000000..188e27b9
--- /dev/null
+++ b/src/cli/spec/machine.rs
@@ -0,0 +1,49 @@
+use clap::{Arg, Command};
+
+use super::{json_flag, option};
+
+pub(super) fn command() -> Command {
+ Command::new("machine")
+ .about("Manage saved SSH machines")
+ .subcommand(
+ Command::new("list")
+ .about("List saved SSH machines")
+ .arg(json_flag()),
+ )
+ .subcommand(
+ Command::new("add")
+ .about("Prepare the remote Herdr server and save an SSH machine")
+ .arg(
+ Arg::new("ssh-target")
+ .value_name("SSH_TARGET")
+ .required(true),
+ )
+ .arg(
+ option("label", "LABEL")
+ .required(true)
+ .help("Set the machine label shown in the sidebar"),
+ )
+ .arg(
+ option("remote-session", "NAME")
+ .help("Set the explicit Herdr session on the remote machine"),
+ ),
+ )
+ .subcommand(
+ profile_command("rename", "Rename a saved SSH machine").arg(
+ option("label", "LABEL")
+ .required(true)
+ .help("Set the machine label shown in the sidebar"),
+ ),
+ )
+ .subcommand(profile_command("remove", "Remove a saved SSH machine"))
+ .subcommand(profile_command("enable", "Enable a saved SSH machine"))
+ .subcommand(profile_command("disable", "Disable a saved SSH machine"))
+}
+
+fn profile_command(name: &'static str, about: &'static str) -> Command {
+ Command::new(name).about(about).arg(
+ Arg::new("profile-id")
+ .value_name("PROFILE_ID")
+ .required(true),
+ )
+}