mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 10:10:45 -06:00
add support for zsh completions
This commit is contained in:
parent
933f7e1ae0
commit
779c1cc710
4 changed files with 54 additions and 11 deletions
10
pkgs/oizys/oizys-rs/Cargo.lock
generated
10
pkgs/oizys/oizys-rs/Cargo.lock
generated
|
@ -130,6 +130,15 @@ dependencies = [
|
|||
"strsim",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_complete"
|
||||
version = "4.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "885e4d7d5af40bfb99ae6f9433e292feac98d452dcb3ec3d25dfe7552b77da8c"
|
||||
dependencies = [
|
||||
"clap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "4.5.4"
|
||||
|
@ -372,6 +381,7 @@ name = "oizys"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"clap_complete",
|
||||
"homedir",
|
||||
"hostname",
|
||||
]
|
||||
|
|
|
@ -7,5 +7,6 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
clap = { version = "4.5.4", features = ["derive"] }
|
||||
clap_complete = "4.5.1"
|
||||
homedir = "0.2.1"
|
||||
hostname = "0.3.1"
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
{rustPlatform}:
|
||||
{
|
||||
installShellFiles,
|
||||
rustPlatform,
|
||||
}:
|
||||
rustPlatform.buildRustPackage {
|
||||
pname = "oizys";
|
||||
version = "unstable";
|
||||
|
@ -6,4 +9,11 @@ rustPlatform.buildRustPackage {
|
|||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [installShellFiles];
|
||||
|
||||
postInstall = ''
|
||||
installShellCompletion --cmd oizys \
|
||||
--zsh <($out/bin/oizys --completions zsh)
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use clap::{Parser, Subcommand};
|
||||
use std::{env, path::PathBuf, process::Command};
|
||||
use clap::{CommandFactory, Parser, Subcommand};
|
||||
use clap_complete::{generate, Generator, Shell};
|
||||
use std::{env, io, path::PathBuf, process::Command};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(version, about, long_about = None)]
|
||||
|
@ -20,8 +21,12 @@ struct Cli {
|
|||
#[arg(long, global=true, action = clap::ArgAction::SetTrue)]
|
||||
no_pinix: bool,
|
||||
|
||||
/// generate shell completion
|
||||
#[arg(long, value_enum)]
|
||||
completions: Option<Shell>,
|
||||
|
||||
#[command(subcommand)]
|
||||
command: Commands,
|
||||
command: Option<Commands>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Subcommand)]
|
||||
|
@ -49,6 +54,10 @@ enum Commands {
|
|||
Path {},
|
||||
}
|
||||
|
||||
fn print_completions<G: Generator>(gen: G, cmd: &mut clap::Command) {
|
||||
generate(gen, cmd, cmd.get_name().to_string(), &mut io::stdout());
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Oizys {
|
||||
host: String,
|
||||
|
@ -148,6 +157,13 @@ fn main() {
|
|||
let cli = Cli::parse();
|
||||
let oizys = Oizys::new(cli.host, cli.flake, cli.no_pinix, cli.verbose);
|
||||
|
||||
if let Some(completions) = cli.completions {
|
||||
let mut cmd = Cli::command();
|
||||
eprintln!("Generating completion for {completions:?}");
|
||||
print_completions(completions, &mut cmd);
|
||||
std::process::exit(0);
|
||||
}
|
||||
|
||||
if oizys.verbose > 2 {
|
||||
println!("-vv is max verbosity")
|
||||
}
|
||||
|
@ -155,12 +171,18 @@ fn main() {
|
|||
println!("{:?}", oizys)
|
||||
}
|
||||
|
||||
match &cli.command {
|
||||
Commands::Dry {} => oizys.build(true),
|
||||
Commands::Build {} => oizys.build(false),
|
||||
Commands::Path {} => println!("{}", oizys.output()),
|
||||
Commands::Boot {} => oizys.nixos_rebuild("boot"),
|
||||
Commands::Switch {} => oizys.nixos_rebuild("switch"),
|
||||
Commands::Cache { name } => oizys.cache(name),
|
||||
if let Some(command) = &cli.command {
|
||||
match command {
|
||||
Commands::Dry {} => oizys.build(true),
|
||||
Commands::Build {} => oizys.build(false),
|
||||
Commands::Path {} => println!("{}", oizys.output()),
|
||||
Commands::Boot {} => oizys.nixos_rebuild("boot"),
|
||||
Commands::Switch {} => oizys.nixos_rebuild("switch"),
|
||||
Commands::Cache { name } => oizys.cache(name),
|
||||
}
|
||||
} else {
|
||||
eprintln!("No subcommand provided..");
|
||||
let mut cmd = Cli::command();
|
||||
cmd.print_help().unwrap();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue