Skip to content

feat(bluetooth): persist adapter state across sessions - #191

Open
xdvi wants to merge 2 commits into
snowarch:mainfrom
xdvi:feat/bluetooth-persistence
Open

feat(bluetooth): persist adapter state across sessions#191
xdvi wants to merge 2 commits into
snowarch:mainfrom
xdvi:feat/bluetooth-persistence

Conversation

@xdvi

@xdvi xdvi commented Jun 27, 2026

Copy link
Copy Markdown

Summary

This PR adds support for persisting the Bluetooth adapter state (on/off) across system restarts, shutdowns, logouts, and shell reloads.
It introduces configuration keys:

  • bluetooth.persistState: determines if the state should be saved/restored (defaults to true).
  • bluetooth.lastState: stores the last state of the default Bluetooth adapter.
  • bluetooth.lastBootId: tracks the system boot (/proc/sys/kernel/random/boot_id) the state was last restored on.

It dynamically monitors the default adapter status and updates the configuration in real-time, restoring the last saved state when the Bluetooth service starts up.

Fix: only restore once per boot

Initial version re-forced lastState onto the adapter on every shell reload (inir restart), not just on an actual reboot — so if you'd manually toggled Bluetooth after a shell reload happened to be in flight, or just ran inir restart for unrelated reasons, it could get flipped back to whatever was last saved. That's what looked like Bluetooth "turning on by itself."

Fix compares the current boot id against the one stored at last restore:

  • Same boot id (regular inir restart) → state is left alone.
  • Different boot id (real reboot) → saved state is restored, then the new boot id is recorded.

Testing

  • inir restart && inir logs — no errors
  • Toggled Bluetooth, verified config update, and confirmed state persistence on reload
  • Same-boot inir restart after manually toggling Bluetooth off — adapter stayed off, state not re-forced
  • Simulated a different boot id with a stale saved lastState: true — adapter was correctly force-restored to on, lastBootId updated to the real boot id

@xdvi xdvi changed the title feat(bluetooth): persist adapter state across reboots feat(bluetooth): persist adapter state across sessions Jun 27, 2026
…hell restart

Previously, every shell reload (inir restart) recreated the BluetoothStatus
singleton and re-forced the last saved adapter state, even if the current
state was intentional and unrelated to a reboot. Now the saved state is
only re-applied when the system boot id (/proc/sys/kernel/random/boot_id)
differs from the last one recorded, i.e. on an actual reboot.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant