feat(src): Introduce full CLI interface for laptop hardware management

Add clap‑based CLI with subcommands (gpu, battery, power, status), verbose flag, and detailed options such as rtd3, use_nvidia_current, etc.
- New Features
  - New CLI entry point with complete subcommand hierarchy
  - Verbose logging support
  - Granular command options for GPU, Battery, Power, Status
- Enhancements
  - Replace placeholder hello world with proper logging initialization
  - Modularize command implementations into dedicated modules
This commit is contained in:
sankalp committed 2026-03-11 23:32:15 +05:45
1 parent 9965e5716c
commit eab21bb2b1
2 files changed
+131 -1

No files matched your search

+102
View File
@@ -0,0 +1,102 @@
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(
name = "lapctl",
version,
about = "CLI utility for managing laptop hardware features on Linux."
)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
/// Enable verbose logging
#[arg(short, long, global = true)]
pub verbose: bool,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
/// GPU management commands
Gpu {
#[command(subcommand)]
command: GpuCommands,
},
/// Battery management commands
Battery {
#[command(subcommand)]
command: BatteryCommands,
},
/// Power management commands
Power {
#[command(subcommand)]
command: PowerCommands,
},
/// Hardware status
Status,
}
#[derive(Subcommand, Debug)]
pub enum GpuCommands {
/// Query the current graphics mode
Query,
/// Switch to integrated graphics
Integrated,
/// Switch to hybrid graphics
Hybrid {
/// Setup PCI-Express Runtime D3 (RTD3) Power Management on Hybrid mode (0, 1, 2, 3)
#[arg(long)]
rtd3: Option<u8>,
/// Use nvidia-current instead of nvidia for kernel modules
#[arg(long)]
use_nvidia_current: bool,
},
/// Switch to NVIDIA graphics
Nvidia {
/// Manually specify your Display Manager (gdm, sddm, lightdm)
#[arg(long)]
dm: Option<String>,
/// Enable ForceCompositionPipeline on Nvidia mode
#[arg(long)]
force_comp: bool,
/// Enable Coolbits on Nvidia mode
#[arg(long)]
coolbits: Option<u32>,
/// Use nvidia-current instead of nvidia for kernel modules
#[arg(long)]
use_nvidia_current: bool,
/// Set up Nvidia mode for Wayland (skips Xorg configuration)
#[arg(long)]
wayland: bool,
},
/// Revert changes made by lapctl
Reset,
/// Restore default sddm Xsetup file
ResetSddm,
/// Create cache used by lapctl (hybrid mode only)
CacheCreate,
/// Delete cache created by lapctl
CacheDelete,
/// Show cache created by lapctl
CacheQuery,
}
#[derive(Subcommand, Debug)]
pub enum PowerCommands {
/// Set power profile to performance
Performance,
/// Set power profile to balanced
Balanced,
/// Set power profile to battery saver
BatterySave,
}
#[derive(Subcommand, Debug)]
pub enum BatteryCommands {
/// Set the battery charging limit (e.g., 80)
Limit {
percent: u8,
},
/// Show current battery status
Status,
}