bread-screenshots is not on the v0.7.1 tag, so it is rev-pinned instead
of floating on branch=main. bread-theme v0.7.1 has no adw/chip helpers;
breadman keeps local shims. CLAUDE.md records the single-trunk workflow.
check.yml runs clippy -D warnings and cargo test for the first time in
this repo's history, surfacing pre-existing lint debt across all four
workspace crates plus one stale test assertion (breadpad-shared's
Palette default-background test still expected bread-theme's old
#1e1e2e; the upstream design system moved to #0c0c0c a while back and
nothing caught the drift since tests never ran in CI).
All fixes are mechanical: needless returns/closures/borrows, manual
Default impls replaceable by #[derive], map_or -> is_some_and, manual
range checks -> RangeInclusive::contains, a non-idiomatic sort_by ->
sort_by_key, an overly complex inline type given an alias, and moving
a function that ended up defined after its own test module. The one
exception is NoteType::from_str, which clippy flags for shadowing
std::str::FromStr's name — left as `#[allow(...)]` with a comment
rather than renamed, since it has 30+ call sites across every crate
in the workspace and returns Self directly rather than Result.
The libadwaita-based settings screen (previous commit) had two real bugs a
closer look (and a screenshot from the real running app) caught:
- AdwSpinRow's internal GtkSpinButton has no width constraint of its own,
so once the row was widened to 900px, the spin button stretched to fill
it - the digits and +/- buttons ended up stranded behind a huge empty
bordered box, the exact bug the design review flagged, just worse.
- bread-theme's shared `entry, spinbutton` rule outlines every field with
an always-visible @overlay border, which on a light-cream overlay colour
reads as a stark white outline against the dark theme.
Rather than keep fighting libadwaita's internal row/spin-button opinions
(there's no supported way to reach in and constrain them), settings.rs is
now plain GTK4 mirroring bos-settings' own Row.svelte/NumberField.svelte/
TextField.svelte design exactly: same tokens (12/16px row padding, ch-width
inputs, transparent-at-rest border, accent border only on focus), built on
a plain `list.boxed-list` for the native rounded-corner-run + divider
styling. Full control over sizing, no internal widget to hunt for.
Also fixed a real ordering bug in the editor AdwDialog conversion:
`open_editor` used to call `dialog.present()` internally before returning,
so callers that connected `dialog.connect_map` afterward (screenshot mode)
missed the signal entirely - it can fire synchronously inside `present`.
Presentation now happens at each call site, after wiring `connect_map`.
Also gave the dialog's content an explicit height/vexpand + min-content-
height, since the ScrolledWindow had none and the whole dialog was
collapsing to just its header bar.
breadpad-shared's bread-theme dependency also gets fixed here: it was
still pinned to an old GitHub-mirror tag (v0.2.8) while breadman pinned
the same crate to git.breadway.dev's dev branch - two different copies of
bread-theme compiled into the same binary, so breadman's actual runtime
CSS (built through breadpad_shared::theme) never saw any of the shared
stylesheet fixes above regardless of what breadman's own direct
dependency resolved to.
Reminder alert:
- Dismiss now matches Snooze's full-opacity text color instead of 0.6
alpha, which read as a disabled button.
- Button row inset brought to 20px to match the header/body zone above
it (was 16px, visible as a step across the divider).
Snooze popover:
- Options are left-aligned (each button's label now sets its own
xalign) and span the full row width instead of centering as a
ragged-left stack of labels.
- Added a hairline divider between options so the list reads as
distinct rows even in the popover's static/non-hover state.
- Added a "Custom…" option that reveals a free-form time entry,
reusing the same rule-based time parsing breadman's dialogs use,
instead of only offering the three fixed presets.
- Popover now matches the reminder card's flat-bordered elevation
(no arrow, 1px border, no shadow) instead of GTK's default
arrow+drop-shadow popover chrome.
Compose popup: dropped the bare accent-teal checkmark submit button
(same colour as the selected type pill, unlabeled) in favor of a
"Press Enter to add" hint, since the popup already grabs focus and is
keyboard-driven. Also made the entry's CSS padding uniform (14px on
all sides, was 12px/16px).
Settings screen:
- Widen the AdwClamp to 900px, left-aligned to the note-list gutter,
instead of PreferencesPage's own ~600px clamp that made the screen
read as a narrower, bolted-on app.
- Remove the floating Save button; every control now applies instantly
(switches/combo/spin on change, entry rows via show_apply_button),
matching what AdwSwitchRow's own design language already implies.
- Replace ActionRow+suffix-Entry with real AdwEntryRow/AdwPasswordEntryRow
so fields are row-width instead of sized by leftover label space.
- Default type now uses the same pill-row widget as the New Note dialog
and editor, instead of a fourth type-picker variant.
- Local Classifier group description notes the paths are shared with
breadpad.
Note list (All/Upcoming/Todo/Idea/Note/Question):
- Replaced the two-line card (huge dead gap between title and actions)
with Archive's tighter single-line row layout, shared via the new
views::row module. Unifies the edit affordance (pencil in both active
and archive rows) and drops the type badge in views already filtered
to one type.
- Type badges now tint per-type (matching the existing note-card-{type}
accent-bar colors) instead of one flat cream fill for every type.
- Empty states are centered with type-specific copy and a "+ New X"
action instead of top-anchored generic text.
- Search bar is now scoped to note-list views (was rendering uselessly
on Settings/Errors).
- Archive sort bug: it was sorting by `created` while displaying
`completed` ("done {date}"), which is why rows could appear out of
order. Now sorts by `completed`.
- Sidebar and row-action icons are now real GTK symbolic icons instead
of a mix of emoji, Unicode glyphs, and thin monochrome characters.
Editor: converted from a bare GtkPopover (no scrim, no title, anchored
wherever the triggering button happened to be) to an AdwDialog with
AdwEntryRow fields, a shared header bar, and copy/placeholders unified
with the New Note dialog. Delete uses destructive-action styling.
Also: destructive-action buttons (breadman's row/editor delete, and
breadpad-shared's .danger-btn) now use a hardcoded red instead of
pywal's @red - a blue-toned wallpaper's "red" palette slot can itself
render blue, which made delete indistinguishable from confirm/accent
buttons regardless of which CSS class was already applied.
Use bread-theme 0.2.7's luminance-picked ink (@on-*): type chips on @overlay and
selected sidebar rows / confirm buttons on @blue kept @fg or @bg, which vanished
when those slots came out light/dark. They now use @on-overlay / @on-accent.
Add breadpad_shared::theme::apply_live (wraps bread_theme::gtk::apply_app_css) so
breadpad and breadman recolour live on `bread-theme reload` and re-read the user's
style.css — replacing the build-once provider. bread-theme bumped to v0.2.7
(gtk feature).
build_css() now starts from bread_theme::stylesheet(palette) and appends only
breadpad/breadman-specific components. This unifies fonts, palette, and generic
widgets with the rest of the ecosystem and fixes the colour mapping (overlay is
now color7, matching every other app, not color0). Bump bread-theme to v0.2.6.
Eliminates the spurious ERROR log from ORT when ROCm isn't compiled in.
Checks is_available() before attempting registration so the session
correctly falls back to CPU without noise.
- breadpad-shared/Cargo.toml: depend on bread-theme (no gtk feature needed
in the shared crate)
- breadpad-shared/src/theme.rs: re-export Palette and load_palette from
bread-theme; retain all breadpad-specific CSS in build_css()
- bakery.toml: describes breadpad for bakery install
- release.yml: builds on hestia self-hosted runner, publishes binaries to
dl.breadway.dev and GitHub Releases on v* tags
- Add MIT LICENSE file
- Expand .gitignore with standard Rust/Linux entries
- Remove dangling symlinks (breadmancli, breadpadcli) and dev scratchpad (svgs.txt) from git tracking
- Replace unsafe unwrap() calls with expect() in breadman CLI (guarded by prior filter)