Fix boot-critical, session, and UX bugs found in round-3 UX audit
All checks were successful
Mirror to GitHub / mirror (push) Successful in 2s
Build and publish package / package (push) Successful in 2m2s
Build and release ISO / release-iso (push) Successful in 14m20s

Snapshots panel was non-functional (wrong snapper flag); breadgreet picked
the wrong session .desktop and skipped bos-session's PATH fixup; Calamares
aborted offline installs over an unnecessary packages module; snapshot
rollback silently no-op'd on BOS's pinned-subvolume layout (now points at
grub-btrfs instead); breadcrumbs was configurable but had no daemon to run
it. Also: SUPER+I double-bind, breadpaper/packages panels blocking the GTK
main thread, dead polkit rule, and a sweep of smaller drift (default
sidebar view, stale wording, missing .desktop launchers, wallpaper daemon
not recording its own default).
This commit is contained in:
Breadway 2026-07-03 22:04:26 +08:00
parent a8f1592e75
commit d78a2343f4
32 changed files with 553 additions and 209 deletions

View file

@ -0,0 +1,26 @@
# breadgreet commonly runs as the dedicated `greeter` system user (per
# greetd's own convention), so it checks /etc/greetd/breadgreet.toml first;
# copy this there for a real install. For local dev/testing under a normal
# user session it falls back to ~/.config/breadgreet/breadgreet.toml.
#
# Every field is optional and defaults to the value shown here.
[background]
mode = "color"
path = ""
blur = false
[clock]
format = "%H:%M"
[font]
family = "Varela Round"
[sessions]
# Directories scanned for .desktop session entries, in order.
wayland_dirs = ["/usr/share/wayland-sessions"]
xsessions_dirs = ["/usr/share/xsessions"]
# .desktop file stem (without extension) to auto-select. Falls back to the
# first entry found if this isn't present. v1 has no session picker UI —
# BOS only ships one session (Hyprland) today.
default = "hyprland"

View file

@ -0,0 +1,15 @@
# BOS's real breadgreet config — see breadgreet.example.toml in this same
# directory for the full set of options with explanations.
#
# The one setting that actually matters here: `sessions.default` MUST be
# "bos", not breadgreet's compiled-in default of "hyprland". The `hyprland`
# pacman package installs its own /usr/share/wayland-sessions/hyprland.desktop
# alongside BOS's own bos.desktop, and breadgreet's session picker matches by
# .desktop file stem — with no override it picks "hyprland.desktop" over
# "bos.desktop", which skips bos-session's PATH fixup (adds ~/.local/bin for
# the bakery bread apps; greetd starts no login shell, so /etc/profile.d is
# never sourced any other way). Confirmed via breadgreet's own test suite
# (sessions.rs: discover_prefers_configured_default_over_first_entry).
[sessions]
default = "bos"

View file

@ -2,11 +2,15 @@
# squashfs and enabled by post-install.sh; the live ISO instead autologins
# liveuser on tty1 (see getty@tty1 drop-in) so the installer comes straight up.
#
# tuigreet shows a minimal greeter, then launches the BOS Hyprland session via
# bos-session (which fixes up PATH for the bakery bread apps).
# breadgreet (bread-ecosystem's own greeter) is hosted under cage — a single-
# client kiosk Wayland compositor, since greetd itself has no display of its
# own — and speaks greetd's IPC directly. It resolves the session to launch
# from /usr/share/wayland-sessions/bos.desktop, which points at bos-session
# (fixes up PATH for the bakery bread apps; greetd starts no login shell, so
# /etc/profile.d is never sourced otherwise).
[terminal]
vt = 1
[default_session]
command = "tuigreet --remember --time --cmd /usr/local/bin/bos-session"
command = "cage -s -- breadgreet"
user = "greeter"