The command enables launching Steam directly on the dGPU while in hybrid mode, improving performance for gaming workloads.
New Features
- Introduces `lapctl gpu run steam` to run Steam on dGPU directly in hybrid mode.
Enhancements
- Updated README with documentation for the new GPU command.
Bug Fixes
- None.
Running applications on the dGPU now requires proper environment variable setup and runtime mode checking. The implementation includes warnings when the system is not in hybrid mode and logs the launched command and its exit status.
- New Feature: Implemented `run_on_dgpu` function to execute commands with NVIDIA offload environment variables.
- Enhancement: Added runtime mode verification and warning for non‑hybrid configurations.
- Enhancement: Added informational logging for launched command and process exit status.
- New Features
- Introduce `Run` command with trailing var argument support for executing commands on the discrete GPU (requires Hybrid Mode)
- Enhancements
- Update CLI parsing to accept a vector of command strings
- Bug Fixes
- None
Add native Wayland refresh rate control using zwlr_output_manager_v1, remove reliance on xrandr, and document limitations for GNOME/KDE. This enables on‑the‑fly Hz changes without external tools.
- New Feature: Native Wayland refresh rate management
- Enhancement: Updated requirements and limitations sections
- Enhancement: Improved documentation for refresh rate control
Add function to retrieve and display active monitor information, and expose it via status command.
New Features:
- Implement get_active_display_info returning formatted display strings.
- Extend status command to list active displays using the new function.
Enhancements:
- Improve console output for display information.
- Update dependency usage for cleaner code.
Bug Fixes:
- None
New Features
- Create `src/commands/display.rs` providing `execute` handling for `Rates` and `SetRate` commands, querying refresh rates and applying configuration via Wayland output manager
- Implement mode enumeration, deduplication, and marker labeling (current/preferred) for displayed modes
- Enable fuzzy matching of target refresh‑rate when setting a new rateEnhancements
- Register the `display` module in `src/commands/mod.rs`
- Extend `AppState` with manager, heads, and modes maps plus configuration state tracking
- Add dedicated error handling for unsupported compositorsBug Fixes
- None
Implement display command to query and set refresh rates.
New Features
- Add DisplayCommands with Rates and SetRate subcommands
- Register display command in CLI dispatcher
Enhancements
- Extend command dispatch to handle Display subcommand
Bug Fixes
- None
- **New Features**
- Introduce `lapctl display rates` to list available refresh rates.
- Add `lapctl display set-rate <HZ>` to change the active display’s refresh rate.
- Support runtime detection on Hyprland, Sway, KDE Plasma, GNOME, and X11 back‑ends.
- **Enhancements**
- Include `wayland-client` and `wayland-protocols-wlr` crates with the `client` feature.
- Update `Cargo.toml` to declare the new Wayland-related dependencies.
- Expand README with usage examples for refresh‑rate management.
- **Bug Fixes**
- No bug fixes introduced in this change.
Implemented touchpad control to allow enabling and disabling the touchpad via lapctl.
- New Features
- Add `touchpad` command with `enable` and `disable` subcommands.
- Enhancements
- Extend CLI parsing and command routing to support touchpad operations.
- Bug Fixes
- (none)
Add integration tests that verify the inhibit command parses arguments correctly, covering normal execution, daemon flag usage, and default values for why and who. This provides regression protection for CLI parsing behavior.
- New Feature: Integration tests for inhibit subcommand parsing
The refactor extracts argument construction into a reusable build_args function and adds unit tests, improving modularity and test coverage.
New Features
- Introduce build_args helper to construct inhibit command arguments.
- Add comprehensive unit tests for both empty and non‑empty argument scenarios.
Enhancements
- Refactor existing argument handling to use build_args, eliminating duplicated logic.
- Improve readability and maintainability of the inhibit command implementation.
Bug Fixes
- None
New Features
- Added installation guide using `just` (recommended) and `cargo`.
Enhancements
- Documented systemd and X11/NVIDIA tool requirements.
Bug Fixes
- None.
Switch to more descriptive headings and embed badges for quick visual cues. Provide explicit command usage examples and clarify under‑the‑hood layout.
New Features
- Added clear command examples for graphics, battery, power, cooling, and inhibit operations.
- Highlighted benefits such as charge‑limit tuning and TDP limits.
Enhancements
- Reorganized content with badges, dividers, and a project layout diagram.
- Improved readability and navigation of key features.
Bug Fixes
- None.
Introduce inhibit subcommand to prevent system sleep while tasks run, offering flexible daemon and why options.
- New Features
- Added inhibit.rs module with `lapctl inhibit`, `lapctl inhibit --daemon`, and `lapctl inhibit --why "..."`.
- Updated README.md with detailed Sleep Inhibitor description and usage examples.
- Enhancements
- Added Sleep inhibitor entry to the project checklist under Tool configuration saving.
- Included inhibit.rs in the project structure listing.
- Improved CLI help context for power and cooling sections.
- Bug Fixes
- No bug fixes included in this change.
The new inhibit subcommand lets users block suspend/sleep while optionally running a command, specifying why and who, and running in daemon mode.
- New Features
- Introduce Inhibit subcommand with command, why, who, and daemon options
- Enhancements
- Extend CLI parsing to support additional arguments
- Enable background inhibition via daemon flag for continuous prevention
This command prevents system sleep while optionally executing a user‑provided command, offering both foreground and background inhibition modes.
- New Features
- Implemented inhibit.rs with logic to invoke systemd-inhibit.
- Exposed inhibit functionality by adding pub mod inhibit; to src/commands/mod.rs.
- Enhancements
- (none)
- Bug Fixes
- (none)
Add a Justfile defining tasks for formatting, linting, testing, building, cleaning, and installing lapctl.
- New Features: introduce default target to list recipes and provide cargo-like commands
- Enhancements: streamline common development workflows
- Bug Fixes: none
Implemented clearer cooling profile output by mapping mode codes to
human‑readable names and prefixing with "(ASUS)". Refactored thermal
detection loops for better readability and moved debug logging into the
correct block for GPU cache creation.
New Features
- Map mode strings "0","1","2" to readable cooling profile names
(Performance, Balanced, Quiet / Battery Saving) and print them with
"(ASUS)" label.
- Provide explicit cooling profile description in command output.
Enhancements
- Simplify Intel RAPL and AMD hwmon detection loops for clearer flow.
- Adjust brace placement in GPU cache creation to ensure debug log is
emitted only on successful cache write.
- Minor formatting and style clean‑ups across battery, GPU, and power
commands.
Bug Fixes
- Fix missing/incorrect closing braces in battery and power command
parsers that previously caused compilation warnings.
- Ensure thermal detection logic only accesses sysfs entries after
successful directory read.
- New Features
- None
- Enhancements
- Simplified percent range validation for battery mode.
- Combined existence and read checks for sysfs entries, removing redundant branches.
- Streamlined systemctl command arguments and removed unnecessary references.
- Removed superfluous braces and simplified cooling profile detection logic.
- Improved robustness of sysfs parsing for Intel RAPL and AMD hwmon temperature limits.
- Bug Fixes
- Fixed battery percent validation to use inclusive range (1..=100) instead of incorrect reference comparison.
Refactor internal CLI module layout to streamline imports and separate concerns.
- Enhancements
- Consolidated CLI modules into `lapctl::cli` and `lapctl::commands`.
- Updated imports in `main.rs` to use absolute paths.
- Removed redundant module declarations from `main.rs`.
- Added badges for license, language, and OS
- Expanded description highlighting graphics control, battery health, power saving, and cooling control
- Introduced new sections: What It Can Do, how to use it, and project layout
- Added Installation Rules file and organized CLI examples
- Updated contribution and licensing language
- Organized project structure with new lib.rs, commands, and test modules
- New Features
- Cooling Control for fan profiles on Lenovo/ASUS laptops
- Enhancements
- Detailed README with badges and clearer feature explanations
- New sections explaining usage and project layout
- Added install_rules.rs and reorganized CLI docs
- Bug Fixes
- None
- Made the three helper functions public to allow external usage
- Facilitates reuse of GPU configuration helpers
- No functional changes beyond visibility
Add tests for CLI argument parsing and GPU command generation to increase coverage and ensure future changes don't break functionality.
New Features
- Add unit test `verify_cli` to ensure Clap command is built correctly.
- Add unit tests for `xorg_intel`, `xorg_amd`, and `generate_xrandr_script` functions.
- Validate that generated Xrandr scripts contain expected provider settings.
Enhancements
- none
Bug Fixes
- none
Add CI pipeline for Rust project to enforce formatting, clippy, and tests:
New Features
- Introduce Rust CI workflow triggered on push and pull_request to main/master
- Execute cargo fmt check, cargo clippy with deny warnings, cargo build, and cargo test
Enhancements
- No enhancements
Bug Fixes
- No bug fixes
Add `info!` logging when a NVIDIA GPU is discovered via `lspci`, enhancing debug visibility. Refactor the `lspci` and `xrandr` command constructions into multi‑line style for consistency and prepare a regex for future AMD GPU name detection.
- New Features: Log GPU detection with `info!` macro.
- Enhancements: Refactor command calls for readability; introduce regex preparation for AMD detection.
- Bug Fixes: None.
New Features
- Introduced `InstallRules` subcommand to install udev rules for rootless operation.
Enhancements
- Streamlined `LimitTdp` and `Limit` enum variants by removing unnecessary wrapper structs.
- Updated command dispatch in `main` to handle the new `InstallRules` variant.
Why: Ensure correct detection of EndeavourOS and provide clearer command building for initramfs.
- New Features: Added explicit multi‑condition detection with proper braces for EndeavourOS handling.
- Enhancements: Improved readability of systemd‑inhibit command construction.
- Bug Fixes: Resolved syntax issue that could cause command generation failure.
Restructure loops, add explicit error handling, improve multi‑line messages, and fix formatting issues.
- Enhancements
- Use explicit braces for error branches to prevent silent failures
- Wrap warning and informational messages in multi‑line `println!` with consistent spacing
- Refactor directory reads for Ideapad fallback to avoid nested `let` bindings
- Improve parsing and formatting of AMD TDP limit output with clear parentheses
- Provide clearer debug logging when writing to threshold files
- Bug Fixes
- Added missing braces around error handling to ensure proper execution flow
- Fixed variable binding scope for `ideapad_entries` to prevent shadowing
- Ensured consistent handling of missing `charge_control_end_threshold` across all entries
no changes.
Add acknowledgment of EnvyControl and change license from AGPL-3.0 to MIT.
New Features
-
Enhancements
- Added credits to EnvyControl.
- Updated license to MIT.
Bug Fixes
-
New Features
- Add per‑CPU power limit commands using Intel RAPL (PL1/PL2) and AMD hwmon constraints
- Expose current TDP limits in status output, distinguishing RAPL, AMD hwmon, or hardware‑managed
- Gracefully handle absence of required sysfs entries
Enhancements
- Extend the power command set with a `LimitTdp` sub‑command
- Add debug logging for limit application attempts
Bug Fixes
- Ensure the command degrades gracefully when hardware does not support dynamic power caps
- New Features
- Implement fan_mode control for Ideapad laptops
- Implement thermal policy control for ASUS laptops via WMI
- Provide cooling command supporting performance, balanced, and quiet profiles
- Enhancements
- Display current cooling profile in `lapctl status` output
- Bug Fixes
- None
Adds a new Cooling command group with selectable fan profiles (Performance, Balanced, Quiet) and updates the CLI and logging accordingly.
- New Features
- Introduce Cooling subcommands for setting thermal management modes
- Implement runtime logic to apply selected fan profiles
- Enhancements
- Extend CLI enum `Commands` to include `Cooling` and dispatch handling
- Refine env_logger formatting to output only `[LEVEL] message`
- Integrate cooling execution into the main command dispatch flow
- Bug Fixes
- No bug fixes introduced in this change
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.
The `status` command now displays the current power profile by reading `/sys/firmware/acpi/platform_profile`, giving users insight into power usage.
New Features
- Output power profile status to the console.
Enhancements
- Enriches status command with additional hardware information.
The removed file contained outdated GPU power‑management integration now handled elsewhere; updating the README marks the associated tasks as completed.
Enhancements:
- Marked CLI structure, GPU mode switching, and hardware status command as completed.