allow invoking 'eh' without multicall binaries

This commit is contained in:
raf 2025-07-22 00:16:18 +03:00
commit 3c8775355a
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF

View file

@ -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 {
#[command(subcommand)]
command: Option<Command>,
}
#[derive(clap::Subcommand)]
enum Command {
/// Run a Nix derivation
Run {
#[arg(trailing_var_arg = true)] #[arg(trailing_var_arg = true)]
args: Vec<String>, 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);
} }
} }
} }