Repository navigation
Releases: AbdullahFanar/gigabytectl
Release list
v0.6.2
Full Changelog: v0.6.1...v0.6.2
v0.6.1: Fix ppd-sync Never Starting at Boot
Fixes the sync service never starting at boot — the ordering cycle from v0.4.1 came back when v0.6.0 added WantedBy=multi-user.target so alerts could run without power-profiles-daemon.
- Fix: the unit was enabled but its start job was silently deleted on every boot.
After=power-profiles-daemon.serviceplusWantedBy=multi-user.targetcloses a cycle — PPD's own unit isAfter=multi-user.target, andWantedBy=orders this unit before that target — and systemd breaks cycles by dropping a start job. Only ourAfter=edge is ours to cut, so it's gone;Wants=power-profiles-daemon.servicestays, and both install cases still work (alerts on machines with no PPD, sync on machines with it) - Without that ordering the two race at boot, so
gigabytectl syncnow waits up to 30 seconds for power-profiles-daemon to appear on the system bus instead of concluding it's absent and exiting.sync --once, run by hand, still reports a missing PPD immediately - Fix: a failed bus probe was cached for the life of the process, so a sync service that started before PPD would go on believing it was missing until restarted. Only a successful probe is remembered now
If the sync service is already installed, regenerate the unit to pick up the fix:
sudo gigabytectl install-service
Full Changelog: v0.6.0...v0.6.1
v0.6.0: Self-Update, Background Alerts & an Update Badge
Three commits, but each one closes a real gap: temperature alerts now work with nothing open, the tool can update and remove itself, and the TUI tells you when there's something to update to.
- New:
gigabytectl self update— checks the latest GitHub release, downloads the tarball for your architecture, verifies it reports the expected version, then swaps it in.--checkonly reports;--dry-runalso prints the download URL and install path. The sync service is restarted only when the unit runs the binary that was replaced. - New:
gigabytectl self uninstall— removes the systemd service,/etc/gigabytectl, every user's~/.config/gigabytectland~/.cache/gigabytectl, the documented shell completions, and the binary itself. Confirms first unless--yes, lists everything under--dry-runwithout root, and--keep-configleaves configuration in place. Refuses to touch a binary owned by pacman or dpkg, or any directory not literally namedgigabytectl. - Temperature alerts now run in the sync service, not just while the TUI or
monitoris open, so they keep firing with nothing running as long as[notifications] enabled = true. Sessions are found by scanning/run/usersince systemd doesn't set$SUDO_USER, and every logged-in session gets the alert. - The sync service no longer requires
power-profiles-daemon— alerts alone are reason enough to run it. It's now alsoWantedBy=multi-user.target, and a failing profile apply warns instead of stopping the service. - New: an update badge in the TUI — a background thread checks the latest GitHub release on launch, and when it's newer the header shows
↑ update 0.5.0 → 0.6.0with the command to run in the footer. The check never blocks the interface, the answer is cached under~/.cache/gigabytectlfor a day, andself updaterefreshes that cache so the badge clears as soon as the update lands. Turn it off withupdate_check = false. - New config key:
update_check(defaulttrue). - Docs: revised README instructions for syncing
profiles.tomland reinstalling the service.
Full Changelog: v0.5.0...v0.6.0
v0.5.0: TUI Profiles, doctor & Fan Curve Safety
Big release — profile management moves into the TUI, a new doctor command reports what your model actually supports, and gigabytectl now refuses fan curves the hardware doesn't expect and warns when a setting is being ignored.
- Profiles in the TUI: new Profiles view —
Enterapplies the profile (following through to its mapped power profile),ssaves the current settings under a new name,uupdates the selected profile,ddeletes it behind a confirmation - New:
profile --delete,--show,--ppd(with--save), and--sync-system. Saving or deleting a profile now updates/etc/gigabytectl/profiles.tomlautomatically when that copy exists and you're root, so the sync service stays in step without re-runninginstall-service - New:
gigabytectl doctor— model, driver version, per-attribute access, sensor channels, power-profiles-daemon state and config paths in one report. Read-only, no root needed, and the first thing to attach to a bug report - New:
gigabytectl config show|keys|get|set|pathfor editingconfig.toml, with--systemto write/etc/gigabytectl/config.toml. Settings now fall back to the system-wide file like profiles already did - New:
monitor --csv(unix timestamp, stable columns) and--count/-nto take a fixed number of samples instead of running until interrupted - New: optional temperature notifications, disabled by default, with per-sensor thresholds and a cooldown — see
[notifications]inconfig.toml. Undersudothey're delivered to the invoking user's session, not root's - Safety: fan curves must be non-decreasing in both temperature and speed, which is what the driver documents the hardware expects — a curve that dips can make the fans slow down as the machine heats up. Whole-curve writes are validated on profile apply, single-point edits are checked against their neighbours, and
fan-curve set --forceoverrides - Safety: settings that only apply in certain modes are now flagged as inert — a custom fan speed outside Auto/Fixed mode, a fan curve outside Custom mode, or a charge limit with Normal charging. Shown in the dashboard, in
status, and as a warning after a CLI set, so a value that saves but does nothing is no longer silent - Fans are named from the driver's channel map (CPU fan / GPU fan, plus extra channels when fitted), always listed so a stopped fan reads
0instead of disappearing, and each now reports its PWM duty light_sensoris decoded instead of printed raw — both the four-byte and 32-bit reporting formats, with0shown as "Not equipped"- Fix: fan curve table columns shifted out of alignment for rows 10-14
- Fix: the header's refresh clock and the whole footer were clipped and never actually rendered
- Fix:
Ctrl-Cnow quits the TUI — raw mode delivers it as a key event rather than a signal, and nothing was handling it - Fix: profiles saved on a machine where a node is unreadable stored
"n/a"and then failed to apply; unknown values are now left out - Fix: the live fan list could reorder itself between refreshes
- Performance:
nvidia-smiwas spawned on every single sample (hundreds of milliseconds each) and is now cached, hwmon paths are resolved once instead of rescanned, and the TUI no longer writesfan_curve_indexfifteen times a second to read a curve that isn't on screen.monitor -i 0.5went from 0.61s to 0.20s of CPU over ten seconds - Breaking: fan objects in
status --jsonandmonitor --jsongainedchannelandpwm, andnamenow reads"CPU fan"/"GPU fan"rather than"Fan 1"/"Fan 2".status --jsonalso gainedfan_speed_activeandcharge_limit_active - Internals:
main.rswas split from one 2,100-line file into focused modules, with a 55-test suite covering the pure logic and TUI rendering
Full Changelog: v0.4.1...v0.5.0
v0.4.1: Fix ppd-sync Systemd Ordering Cycle
Fixes the sync service silently failing to start at boot.
- Fix: the
gigabytectl-ppd-syncunit combinedWantedBy=multi-user.targetwithAfter=power-profiles-daemon.service, butpower-profiles-daemon.serviceitself hasAfter=multi-user.target— creating a dependency cycle. systemd broke the cycle by dropping the boot-time start job, so the service never actually launched unless started manually - Now uses
WantedBy=power-profiles-daemon.serviceinstead, pulling gigabytectl-ppd-sync in as a companion of that service and avoiding the cycle entirely - README notes updates
If you already have the sync service installed, regenerate the unit file to pick up the fix:
sudo gigabytectl install-service
Full Changelog: v0.4.0...v0.4.1
v0.4.0: gigabyte-laptop-wmi 0.2.0 Support
Updates gigabytectl for the new sysfs attributes exposed by gigabyte-laptop-wmi 0.2.0.
- New
light-sensorcommand / status field to read the ambient light sensor - New
fan-pwmcommand / status field to read the current CPU fan PWM value - Breaking:
fan-speedrange changed from 25-100 (step 5) to 0-255, matching the driver's new raw PWM scale - README updated for the new commands and range
Full Changelog: v0.3.2...v0.4.0
v0.3.2: Fix Sync Service Profile Lookup + install-service
Fixes the PPD sync systemd service and makes it easy to set up.
- Fix: the sync service runs as root with
HOME=/rootand noSUDO_USER, so it was looking for profiles in/root/.configand never finding the real user's profiles.load_profilesnow falls back to a system-wide/etc/gigabytectldirectory - New:
gigabytectl install-servicewrites the systemd unit (pointingExecStartat the actual installed binary), seeds/etc/gigabytectl/profiles.tomlfrom the current user's profiles, and enables/starts the service in one step
Full Changelog: v0.3.1...v0.3.2
v0.3.1: Two-Way power-profiles-daemon Sync
Adds two-way sync between gigabytectl profiles and power-profiles-daemon (PPD).
- New optional
ppd_profilefield links a gigabytectl profile to a PPD profile - gigabytectl -> PPD: applying a profile also sets the mapped PPD profile via
busctl - PPD -> gigabytectl:
gigabytectl syncwatches PPD'sActiveProfileChangedsignal (viagdbus monitor) and applies the matching hardware profile;--onceapplies the current mapping and exits without watching - Probes both
net.hadess.PowerProfilesand the UPower-namespaced service for compatibility across PPD versions - The PPD -> gigabytectl path only touches hardware and never re-sets PPD, avoiding sync feedback loops
- Degrades gracefully when PPD isn't installed
- Ships a systemd unit (
assets/gigabytectl-ppd-sync.service) with setup documented in the README
Full Changelog: v0.3.0...v0.3.1
v0.3.0: Temps, Profiles, Monitor & TUI History
Big feature release — live hardware readings, saved profiles, a scriptable monitor mode, and a graph view.
- Live temperatures: CPU/GPU temps via hwmon (coretemp/k10temp/amdgpu), with an
nvidia-smifallback, shown in both the TUI dashboard andstatusoutput - Profiles: save/apply named configs with
gigabytectl profile <name>(--save,--list), stored in~/.config/gigabytectl/profiles.toml monitormode: live temps + fan RPM from the CLI (text or JSON), no root required- History graph: new TUI view plotting temp and fan RPM over time
- Shell completions: bash/zsh/fish via
clap_complete - Config file: defaults (refresh interval, temperature units, history length) in
~/.config/gigabytectl/config.toml - Config paths resolve correctly to the invoking user's home when run under
sudo - Release binaries are now built and attached automatically via GitHub Actions on tag push
Full Changelog: v0.2.0...v0.3.0
v0.2.0: Headless Mode
- Added a headless/CLI mode for scripting and quick one-off changes, without opening the full TUI
- Fixed
cargo installinstructions in the README - Various bug fixes
Full Changelog: v0.1.4...v0.2.0