Commit graph

8 commits

Author SHA1 Message Date
Breadway
b786060517 Stop injecting phantom core profiles into a customized profile set
All checks were successful
Mirror to GitHub / mirror (push) Successful in 2s
release / build (push) Successful in 38s
Build and publish package / package (push) Successful in 45s
ensure_core_profiles() was unconditionally backfilling home/work/away
into the in-memory config on every load, even when the user had
already defined their own profiles (e.g. Home/Away/School). This
showed up as duplicate/phantom lowercase entries in `breadcrumbs
profile list`, and downstream in breadbar and bos-settings.

Now the self-heal only fires when the profile set is completely
empty (a genuinely fresh or corrupted config), never padding an
existing customized set.
2026-07-10 13:37:41 +08:00
Breadway
941742c5b6 2.1.4: fix blank exit-node rendering, relabel for clarity
Some checks failed
Mirror to GitHub / mirror (push) Successful in 4s
Build and publish package / package (push) Successful in 1m19s
release / build (push) Failing after 52s
"(exit: , optional)" printed with nothing after the colon whenever no
Tailscale exit node was configured (the default). Now renders "none",
and relabels "exit:" to "exit node:" -- the abbreviated form read as an
exit *code* at a glance, which is what led to this being misdiagnosed
as a process-exit-code formatting bug in the first place.
2026-07-05 09:14:46 +08:00
Breadway
b8121ae00f Fix breadcrumbs.service: default.target not graphical-session.target
All checks were successful
Mirror to GitHub / mirror (push) Successful in 1s
release / build (push) Successful in 35s
Build and publish package / package (push) Successful in 44s
graphical-session.target ships RefuseManualStart=yes and BOS has no
session manager to activate it properly (the same issue worked around
for breadclipd) - breadcrumbs doesn't need a Wayland session anyway,
so default.target avoids the problem entirely.
2026-07-03 17:59:38 +08:00
Breadway
2418cb900c Add systemd --user service for the watch daemon
All checks were successful
Mirror to GitHub / mirror (push) Successful in 1s
release / build (push) Successful in 37s
Build and publish package / package (push) Successful in 1m0s
breadcrumbs had a watch subcommand meant to run continuously but no
systemd unit anywhere, so bakery installs never actually started it -
Wi-Fi profile config in bos-settings had no daemon consuming it.
2026-07-03 17:56:06 +08:00
Breadway
0fdac8e07c Add join, networks, and scan-list commands; bump to v2.1.1
All checks were successful
Mirror to GitHub / mirror (push) Successful in 3s
2026-06-24 07:04:31 +08:00
Breadway
d3c1e19ba3 Release v2.1.0: backend test seam, captive-portal detection, JSON status, robustness
Features:
- Introduce a Backend trait + System impl so flow/status/watch can be unit
  tested against a fake; add 11 connect-state-machine tests.
- Captive-portal detection: status::connectivity returns Online/Portal/Offline;
  surfaced in status, JSON, connect notes, and a dedicated watch state.
- `status --json` for bars/scripts; `profile add`/`profile remove`; detect now
  scores by number of in-range markers.

Robustness:
- Pin LC_ALL=C/LANG=C on child processes for locale-independent parsing.
- Atomic config/state writes (temp + rename); 0600 config never world-readable.
- Transient PSK file written to $XDG_RUNTIME_DIR when available.

Fixes (from prior audit):
- Feed Wi-Fi PSK to nmcli via stdin/passwd-file, never argv.
- mask() no longer panics on multi-byte passwords.
- Connectivity check requires HTTP 204 (no captive-portal false positives).
- nmcli NAME,TYPE parsing handles escaped colons.
- Strip CIDR suffix from displayed IP; PKGBUILD/Cargo version aligned (2.1.0).
2026-06-23 12:13:34 +08:00
Breadway
9c963424bd chore: update Cargo.lock for v2.0.1
Some checks failed
release / build (push) Failing after 8s
2026-06-11 14:28:06 +08:00
Breadway
3422c12379 Initial commit: breadcrumbs — profile-driven Wi-Fi + Tailscale state machine 2026-05-19 11:52:46 +08:00