shine-cli 2.0.3

Give personal automation a reviewable lifecycle
Documentation
use clap::Subcommand;

#[derive(Subcommand, Debug)]
pub enum ShellCommands {
    /// List available shell preset categories and their scripts
    List,
    /// Show detailed information about a shell preset category or command
    Info {
        /// Category, command, or category/command to inspect
        #[arg(value_name = "TARGET")]
        target: String,
    },
    /// Review and recover an interrupted shell launcher creation
    Recover {
        /// Approve the displayed recovery Plan without prompting
        #[arg(long)]
        yes: bool,
    },
    /// Install shell presets and create bin symlinks.
    /// Run 'shine shell list' to see available categories.
    Install {
        /// Category or category/command to install (e.g. "proxy" or "utils/shine-env-export"). Installs all if omitted.
        /// Run 'shine shell list' to see available categories.
        #[arg(value_name = "TARGET")]
        target: Option<String>,
        /// Print what would be linked without making any changes
        #[arg(long)]
        dry_run: bool,
        /// Replace user-modified managed files, links, and profile integration
        #[arg(long)]
        replace_managed: bool,
        /// Approve the displayed lifecycle Plan without prompting
        #[arg(long, conflicts_with = "dry_run")]
        yes: bool,
    },
    /// Uninstall shell presets and remove bin symlinks.
    /// Run 'shine shell list' to see installed categories.
    Uninstall {
        /// Category or category/command to uninstall. Uninstalls all if omitted.
        /// Run 'shine shell list' to see installed categories.
        #[arg(value_name = "TARGET")]
        target: Option<String>,
        /// Also remove empty managed directories after uninstall
        #[arg(long)]
        purge: bool,
        /// Print what would be removed without making any changes
        #[arg(long)]
        dry_run: bool,
        /// Approve the displayed lifecycle Plan without prompting
        #[arg(long, conflicts_with = "dry_run")]
        yes: bool,
    },
}