Read the file as the initial layout on start. After a successful
hyprctl apply (including applying a named profile), write pretty
JSON so Hyprland and bos-settings stay in sync. Profiles remain
named snapshots under ~/.config/breadmon/profiles/.
Pin bread-utils to bread-ecosystem v0.7.2.
After a successful hyprctl apply, publish bread.mon.applied
{ "profile": <string or null> }. BreadClient is fail-silent: if
breadd is down, apply behaves exactly as before.
Document the contract in EVENTS.md.
Same fix as breadpad: build inside the shared pinned Arch container
(bread-ecosystem/ci/, cloned at the sha in ci/bread-ecosystem.rev)
instead of building natively against whatever's on the runner host.
Adds check.yml (clippy + test on feature/**/fix/**) as a fast-fail gate
before anything reaches main.
Turning on clippy -D warnings for the first time surfaced 10 pre-existing
warnings (int_plus_one, ptr_arg on &mut Vec params, collapsible_if,
collapsible_match) across layout.rs, mirror.rs, profile.rs, and the
config/mirror TUI views — all fixed exactly per clippy's suggested diffs,
verified behavior-preserving (the mirror_view.rs collapse in particular:
confirmed the "do nothing" fallthrough when mirror.result is None is
unchanged, since that was already the fallthrough behavior of the
original nested if with no matching else on the outer condition).
Verified locally: build, clippy, and test all pass through the new
container path.
profiles_dir() had the same bug as breadclip-core::data_dir and
breadpad-shared's model_dir/config_path/style_css_path (found during
tonight's ecosystem-utils pass): `dirs::config_dir().unwrap_or_else(||
PathBuf::from("~/.config"))` — PathBuf/std::fs never expand `~`, so on a
box where `dirs` can't resolve a home directory this would silently
resolve to a directory literally named `~` under the current working
directory. Switched to bread_utils::xdg::config_dir.
hyprland_socket2_path() duplicated the same HYPRLAND_INSTANCE_SIGNATURE +
XDG_RUNTIME_DIR resolution breadbox and breadclip had for socket1 — now
shared via bread_utils::hypr::socket_path (path dependency for now, see
the TODO in Cargo.toml).
Builds and all 16 existing tests pass.
- apply_monitors() shells out to `hyprctl eval` with a `hl.monitor()`
Lua call, a BOS-only Hyprland extension. On vanilla Hyprland the
eval request itself isn't recognized and failed with a confusing
raw hyprctl response. Detect that case and fail with an explicit
'this feature requires BOS' message instead, with tests.
- README: documented the BOS dependency for the apply step under
Requirements; noted everything else in the TUI works without it.
- Cargo.toml: 0.1.0 -> 0.1.1, matching the latest tag (v0.1.1).