use clap::Parser;
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(
name = "gpur",
version,
about = "btop-style GPU monitor — NVIDIA, AMD, Apple Silicon",
before_help = include_str!("art.txt")
)]
pub struct Cli {
#[arg(long, num_args = 0..=1, default_missing_value = "2", value_name = "N")]
pub mock: Option<usize>,
#[arg(long, short)]
pub config: Option<PathBuf>,
#[arg(long, short)]
pub theme: Option<PathBuf>,
#[arg(long)]
pub tick_ms: Option<u64>,
#[arg(long)]
pub no_splash: bool,
#[arg(long)]
pub once: bool,
#[arg(long)]
pub json: bool,
#[arg(long, value_enum)]
pub graphs: Option<crate::app::GraphStyle>,
#[arg(long, value_name = "FILE")]
pub log: Option<PathBuf>,
#[arg(long, value_name = "FILE", conflicts_with = "mock")]
pub replay: Option<PathBuf>,
#[arg(long, value_enum, value_name = "SHELL", hide = true)]
pub completions: Option<CompletionShell>,
#[arg(long, hide = true)]
pub man: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, clap::ValueEnum)]
pub enum CompletionShell {
Bash,
Zsh,
Fish,
Powershell,
Elvish,
Nushell,
}
impl CompletionShell {
pub fn generate(self, cmd: &mut clap::Command) {
use clap_complete::Shell;
let out = &mut std::io::stdout();
match self {
CompletionShell::Bash => clap_complete::generate(Shell::Bash, cmd, "gpur", out),
CompletionShell::Zsh => clap_complete::generate(Shell::Zsh, cmd, "gpur", out),
CompletionShell::Fish => clap_complete::generate(Shell::Fish, cmd, "gpur", out),
CompletionShell::Powershell => {
clap_complete::generate(Shell::PowerShell, cmd, "gpur", out)
}
CompletionShell::Elvish => clap_complete::generate(Shell::Elvish, cmd, "gpur", out),
CompletionShell::Nushell => {
clap_complete::generate(clap_complete_nushell::Nushell, cmd, "gpur", out)
}
}
}
}