Skip to content

Releases: AbdullahFanar/gigabytectl

v0.6.2

Choose a tag to compare

@github-actions github-actions released this 14 Sep 19:28

Full Changelog: v0.6.1...v0.6.2

v0.6.1: Fix ppd-sync Never Starting at Boot

Choose a tag to compare

@github-actions github-actions released this 18 Aug 16:38

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.service plus WantedBy=multi-user.target closes a cycle — PPD's own unit is After=multi-user.target, and WantedBy= orders this unit before that target — and systemd breaks cycles by dropping a start job. Only our After= edge is ours to cut, so it's gone; Wants=power-profiles-daemon.service stays, 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 sync now 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

Choose a tag to compare

@github-actions github-actions released this 13 Aug 16:35

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. --check only reports; --dry-run also 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/gigabytectl and ~/.cache/gigabytectl, the documented shell completions, and the binary itself. Confirms first unless --yes, lists everything under --dry-run without root, and --keep-config leaves configuration in place. Refuses to touch a binary owned by pacman or dpkg, or any directory not literally named gigabytectl.
  • Temperature alerts now run in the sync service, not just while the TUI or monitor is open, so they keep firing with nothing running as long as [notifications] enabled = true. Sessions are found by scanning /run/user since 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 also WantedBy=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.0 with the command to run in the footer. The check never blocks the interface, the answer is cached under ~/.cache/gigabytectl for a day, and self update refreshes that cache so the badge clears as soon as the update lands. Turn it off with update_check = false.
  • New config key: update_check (default true).
  • Docs: revised README instructions for syncing profiles.toml and reinstalling the service.

Full Changelog: v0.5.0...v0.6.0

v0.5.0: TUI Profiles, doctor & Fan Curve Safety

Choose a tag to compare

@github-actions github-actions released this 03 Aug 21:13

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 — Enter applies the profile (following through to its mapped power profile), s saves the current settings under a new name, u updates the selected profile, d deletes it behind a confirmation
  • New: profile --delete, --show, --ppd (with --save), and --sync-system. Saving or deleting a profile now updates /etc/gigabytectl/profiles.toml automatically when that copy exists and you're root, so the sync service stays in step without re-running install-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|path for editing config.toml, with --system to 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/-n to 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] in config.toml. Under sudo they'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 --force overrides
  • 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 0 instead of disappearing, and each now reports its PWM duty
  • light_sensor is decoded instead of printed raw — both the four-byte and 32-bit reporting formats, with 0 shown 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-C now 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-smi was 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 writes fan_curve_index fifteen times a second to read a curve that isn't on screen. monitor -i 0.5 went from 0.61s to 0.20s of CPU over ten seconds
  • Breaking: fan objects in status --json and monitor --json gained channel and pwm, and name now reads "CPU fan"/"GPU fan" rather than "Fan 1"/"Fan 2". status --json also gained fan_speed_active and charge_limit_active
  • Internals: main.rs was 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

Choose a tag to compare

@github-actions github-actions released this 31 Jul 12:49

Fixes the sync service silently failing to start at boot.

  • Fix: the gigabytectl-ppd-sync unit combined WantedBy=multi-user.target with After=power-profiles-daemon.service, but power-profiles-daemon.service itself has After=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.service instead, 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

Choose a tag to compare

@github-actions github-actions released this 18 Jul 07:41

Updates gigabytectl for the new sysfs attributes exposed by gigabyte-laptop-wmi 0.2.0.

  • New light-sensor command / status field to read the ambient light sensor
  • New fan-pwm command / status field to read the current CPU fan PWM value
  • Breaking: fan-speed range 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

Choose a tag to compare

@github-actions github-actions released this 09 Jul 13:40

Fixes the PPD sync systemd service and makes it easy to set up.

  • Fix: the sync service runs as root with HOME=/root and no SUDO_USER, so it was looking for profiles in /root/.config and never finding the real user's profiles. load_profiles now falls back to a system-wide /etc/gigabytectl directory
  • New: gigabytectl install-service writes the systemd unit (pointing ExecStart at the actual installed binary), seeds /etc/gigabytectl/profiles.toml from 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

Choose a tag to compare

@github-actions github-actions released this 08 Jul 21:25

Adds two-way sync between gigabytectl profiles and power-profiles-daemon (PPD).

  • New optional ppd_profile field links a gigabytectl profile to a PPD profile
  • gigabytectl -> PPD: applying a profile also sets the mapped PPD profile via busctl
  • PPD -> gigabytectl: gigabytectl sync watches PPD's ActiveProfileChanged signal (via gdbus monitor) and applies the matching hardware profile; --once applies the current mapping and exits without watching
  • Probes both net.hadess.PowerProfiles and 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

Choose a tag to compare

@github-actions github-actions released this 08 Jul 20:58

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-smi fallback, shown in both the TUI dashboard and status output
  • Profiles: save/apply named configs with gigabytectl profile <name> (--save, --list), stored in ~/.config/gigabytectl/profiles.toml
  • monitor mode: 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

Choose a tag to compare

@AbdullahFanar AbdullahFanar released this 25 Jun 12:29
  • Added a headless/CLI mode for scripting and quick one-off changes, without opening the full TUI
  • Fixed cargo install instructions in the README
  • Various bug fixes

Full Changelog: v0.1.4...v0.2.0