allow invoking 'eh' without multicall binaries
This commit is contained in:
parent
8547710b62
commit
3c8775355a
1 changed files with 52 additions and 13 deletions
|
@ -1,4 +1,4 @@
|
||||||
use clap::Parser;
|
use clap::{CommandFactory, Parser};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
@ -7,11 +7,32 @@ use std::path::Path;
|
||||||
use std::process::{Command as StdCommand, Stdio};
|
use std::process::{Command as StdCommand, Stdio};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
#[command(name = "nix-helper")]
|
#[command(name = "eh")]
|
||||||
#[command(about = "Smart Nix helper utility")]
|
#[command(about = "Ergonomic Nix helper", long_about = None)]
|
||||||
struct Cli {
|
struct Cli {
|
||||||
#[arg(trailing_var_arg = true)]
|
#[command(subcommand)]
|
||||||
args: Vec<String>,
|
command: Option<Command>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(clap::Subcommand)]
|
||||||
|
enum Command {
|
||||||
|
/// Run a Nix derivation
|
||||||
|
Run {
|
||||||
|
#[arg(trailing_var_arg = true)]
|
||||||
|
args: Vec<String>,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Enter a Nix shell
|
||||||
|
Shell {
|
||||||
|
#[arg(trailing_var_arg = true)]
|
||||||
|
args: Vec<String>,
|
||||||
|
},
|
||||||
|
|
||||||
|
/// Build a Nix derivation
|
||||||
|
Build {
|
||||||
|
#[arg(trailing_var_arg = true)]
|
||||||
|
args: Vec<String>,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -20,17 +41,35 @@ fn main() {
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.and_then(|p| Path::new(p).file_name())
|
.and_then(|p| Path::new(p).file_name())
|
||||||
.and_then(|name| name.to_str())
|
.and_then(|name| name.to_str())
|
||||||
.unwrap_or("nix-helper");
|
.unwrap_or("eh");
|
||||||
|
|
||||||
|
// Multicall logic
|
||||||
|
if app_name == "nr" {
|
||||||
|
let args: Vec<String> = env::args().skip(1).collect();
|
||||||
|
handle_nix_run(&args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if app_name == "ns" {
|
||||||
|
let args: Vec<String> = env::args().skip(1).collect();
|
||||||
|
handle_nix_shell(&args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if app_name == "nb" {
|
||||||
|
let args: Vec<String> = env::args().skip(1).collect();
|
||||||
|
handle_nix_build(&args);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
|
|
||||||
match app_name {
|
match cli.command {
|
||||||
"nr" => handle_nix_run(&cli.args),
|
Some(Command::Run { args }) => handle_nix_run(&args),
|
||||||
"ns" => handle_nix_shell(&cli.args),
|
Some(Command::Shell { args }) => handle_nix_shell(&args),
|
||||||
"nb" => handle_nix_build(&cli.args),
|
Some(Command::Build { args }) => handle_nix_build(&args),
|
||||||
_ => {
|
None => {
|
||||||
eprintln!("Unknown command: {app_name}");
|
Cli::command().print_help().unwrap();
|
||||||
std::process::exit(1);
|
println!();
|
||||||
|
std::process::exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue