diff --git a/crates/muvm/src/bin/muvm.rs b/crates/muvm/src/bin/muvm.rs index d865abe..bd00a83 100644 --- a/crates/muvm/src/bin/muvm.rs +++ b/crates/muvm/src/bin/muvm.rs @@ -103,12 +103,16 @@ fn pulse_path_from_pulse_server() -> Result { fn main() -> Result { env_logger::init(); + let options = options().fallback_to_usage().run(); + if getuid().as_raw() == 0 || geteuid().as_raw() == 0 { println!("Running as root is not supported as it may break your system"); return Err(anyhow!("real user ID or effective user ID is 0")); } - let options = options().fallback_to_usage().run(); + let command = options + .command + .ok_or_else(|| anyhow!("expected `COMMAND`, pass `--help` for usage information"))?; let config = Configuration::parse_config_file()?; let mut init_commands = options.init_commands; @@ -117,7 +121,7 @@ fn main() -> Result { } let (_lock_file, command, command_args, env) = match launch_or_lock( - options.command, + command, options.command_args, options.env, options.interactive, diff --git a/crates/muvm/src/cli_options.rs b/crates/muvm/src/cli_options.rs index fc3ccf7..4322d6f 100644 --- a/crates/muvm/src/cli_options.rs +++ b/crates/muvm/src/cli_options.rs @@ -48,7 +48,7 @@ pub struct Options { pub emulator: Option, pub init_commands: Vec, pub user_init_commands: Vec, - pub command: PathBuf, + pub command: Option, pub command_args: Vec, } @@ -189,9 +189,11 @@ pub fn options() -> OptionParser { ) .argument("COMMAND") .many(); - let command = positional("COMMAND").help("the command you want to execute in the vm"); + let command = positional("COMMAND") + .help("the command you want to execute in the vm") + .optional(); let command_args = any::("COMMAND_ARGS", |arg| { - (!["--help", "-h"].contains(&&*arg)).then_some(arg) + (!["--help", "-h", "--version", "-V"].contains(&&*arg)).then_some(arg) }) .help("arguments of COMMAND") .many(); @@ -218,6 +220,7 @@ pub fn options() -> OptionParser { command_args, }) .to_options() + .version(env!("CARGO_PKG_VERSION")) } #[cfg(test)]