The changes introduce a robust `BatteryCommands::Limit` implementation that validates user‑provided percentages, writes charge‑control thresholds, and gracefully handles Lenovo Ideapad firmware via the `conservation_mode` fallback. The `lapctl status` command is also updated to display battery‑specific details such as capacity, status, and charge limits, replacing the previous generic placeholder. New Features - Added `BatteryCommands::Limit` handling with range validation (1‑100) and support for multiple `/sys/class/power_supply` entries. - Implemented Ideapad fallback using `conservation_mode` to provide custom charge limits or warnings when unsupported. - Extended `lapctl status` to show charge limit and Conservation Mode for each battery. Enhancements - Added root‑privilege check (`assert_root`) and improved error/debug logging throughout the command. - Restructured directory traversal logic for readability and added `debug!` traces on write failures. - Re‑used status logic to present battery‑specific information instead of a generic placeholder. Bug Fixes - Resolved placeholder status output and proper handling of missing `charge_control_end_threshold` files. - Ensured correct exit codes and clear error messages for invalid percentage inputs.
lapctl
lapctl is an upcoming command-line utility written in Rust for managing laptop hardware features on Linux.
It aims to provide a simple and unified interface for controlling hybrid GPU modes, battery charging limits, and other laptop power features directly from the terminal.
Planned Features
-
Switch GPU modes on hybrid graphics laptops
- Integrated GPU
- Hybrid mode
- NVIDIA GPU
-
Set and manage battery charging limits
-
View laptop hardware and power status
-
Lightweight and fast CLI interface
-
Designed for Linux systems with hybrid GPUs (Optimus)
Project Status
Work in progress
This project is currently in early development. Features, commands may change as development progresses.
Goals
- Provide a simple CLI interface for laptop hardware management
- Support hybrid GPU laptops (Intel + NVIDIA / AMD + NVIDIA)
- Offer battery health features like charge limit control
- Be lightweight, fast, and easy to use
Example CLI (Planned)
lapctl gpu integrated
lapctl gpu hybrid
lapctl gpu nvidia
lapctl battery limit 80
lapctl battery status
lapctl status
Built With
- Rust
- Modern Linux system interfaces
Project Structure
lapctl
│
├── Cargo.toml
├── README.md
├── LICENSE
├── .gitignore
│
├── src/
│ ├── main.rs
│ ├── cli.rs
│ │
│ ├── commands/
│ │ ├── mod.rs
│ │ ├── gpu.rs
│ │ ├── battery.rs
│ │ ├── power.rs
│ │ └── status.rs
│ │
│ ├── hardware/
│ │ ├── mod.rs
│ │ ├── gpu.rs
│ │ └── battery.rs
│ │
│ └── utils/
│ └── system.rs
Roadmap
- CLI structure
- GPU mode switching
- Battery charge limit management
- Hardware status command
- Configuration support
Contributing
Contributions, ideas, and feature suggestions are welcome. More contribution guidelines will be added once the project reaches its first stable milestone.
License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
You are free to use, modify, and distribute this software under the terms of the license. For full details, see the LICENSE file in this repository.
⭐ If you find this project interesting, consider starring the repository to follow its progress.