breadgreet: bring the login UI up to the lock screen's polish #4

Open
Breadway wants to merge 2 commits from feature/breadgreet-polish into main
Owner

breadgreet's stylesheet was a crude subset of design/sketch.html's .greetoverlay spec — you flagged it looks bad next to breadlock. Ported the sketch faithfully.

  • Card: box-shadow: 0 6px 28px, hairline alpha(@overlay,.09) border, 10px radius, 300px min-width.
  • Entry: recessed shade(@surface,1.5) fill + accent focus ring (@accent border + 0 0 0 2px alpha(@accent,.28)).
  • Clock/date: soft text-shadow for legibility over any wallpaper; sketch sizes (46/14).
  • Session picker: styled surface pill (button + popover), not a bare GtkDropDown.
  • Spinner: CSS-animated ring while a greetd request is in flight (sync_busy, one drive point).
  • Shake on a failed attempt (flash_error) — from AppInput::Error and PAM AuthPrompt::Error.

Uses the shared @define-color palette so it recolours with the theme (same as breadbar).

cargo test --workspace --all-targets (157) / clippy --all-targets -D warnings / fmt --check clean.

Visual pass still wanted — this is a direct translation of the mockup, not screenshot-verified (couldn't get a headless render to cooperate). Eyeball it in the VM's greeter or a nested compositor before merge.

breadgreet's stylesheet was a crude subset of `design/sketch.html`'s `.greetoverlay` spec — you flagged it looks bad next to breadlock. Ported the sketch faithfully. - **Card**: `box-shadow: 0 6px 28px`, hairline `alpha(@overlay,.09)` border, 10px radius, 300px min-width. - **Entry**: recessed `shade(@surface,1.5)` fill + accent focus ring (`@accent` border + `0 0 0 2px alpha(@accent,.28)`). - **Clock/date**: soft text-shadow for legibility over any wallpaper; sketch sizes (46/14). - **Session picker**: styled surface pill (button + popover), not a bare GtkDropDown. - **Spinner**: CSS-animated ring while a greetd request is in flight (`sync_busy`, one drive point). - **Shake** on a failed attempt (`flash_error`) — from `AppInput::Error` and PAM `AuthPrompt::Error`. Uses the shared `@define-color` palette so it recolours with the theme (same as breadbar). `cargo test --workspace --all-targets` (157) / `clippy --all-targets -D warnings` / `fmt --check` clean. **Visual pass still wanted** — this is a direct translation of the mockup, not screenshot-verified (couldn't get a headless render to cooperate). Eyeball it in the VM's greeter or a nested compositor before merge.
Breadway added 1 commit 2026-08-31 20:29:53 +08:00
breadgreet: bring the login UI up to the lock screen's polish
Some checks failed
CI / check (pull_request) Failing after 3s
7ac3fdfc85
breadgreet's stylesheet was a crude subset of what `design/sketch.html`
specifies for `.greetoverlay`. Ported it faithfully so the greeter and
the lock screen read as one visual identity:

- Card: proper elevation (`box-shadow: 0 6px 28px`), a hairline
  `alpha(@overlay, 0.09)` border, 10px radius, 300px min-width.
- Entry: recessed `shade(@surface, 1.5)` fill, and an accent focus ring
  (`border-color: @accent` + `box-shadow: 0 0 0 2px alpha(@accent, .28)`)
  matching the sketch's `.gentry:focus`.
- Clock/date over the wallpaper get a soft text-shadow for legibility on
  any background; sizes match the sketch (46 / 14).
- Session picker styled as a surface pill (button + popover), not a bare
  GtkDropDown.
- A CSS-animated ring shown while a greetd request is in flight
  (`sync_busy`, driven from the single `update` exit point).
- Shake on a failed attempt (`flash_error`), matching the lock screen's
  wrong-password motion — fired from both `AppInput::Error` and a PAM
  `AuthPrompt::Error`.

Uses the shared `@define-color` palette (`@surface`, `@overlay`,
`@accent`, `@red`) so it recolours with the theme, same as breadbar.

`cargo test --workspace --all-targets` (157) / `clippy --all-targets -D
warnings` / `fmt --check` all clean. Visual pass still wanted — the CSS
is a direct translation of the mockup, not screenshot-verified.
Breadway added 1 commit 2026-08-31 21:23:14 +08:00
breadgreet: skip the username step, fix clobbered typography
Some checks failed
CI / check (pull_request) Failing after 5s
8232f1b72b
Login UX
- Enumerate human accounts from /etc/passwd (UID_MIN..UID_MAX per
  /etc/login.defs, real login shell, minus nobody) and skip the
  username field: one account goes straight to the password prompt
  with the name shown, several get a picker. Zero found falls back to
  typing. New [user] config: `name` pins one account, `prompt = true`
  restores the type-it flow.
- The greeter opens the greetd conversation at startup in auto mode so
  it lands directly on the password prompt (AutoStart).
- reset_to_username -> reset_auth: auto mode re-opens the password
  prompt for the same account on error/Escape rather than showing a
  username field it never had.

Typography fix
- bind_window_auto re-broadcasts the shared component sheet (incl. its
  `* { font-size }` base rule) at USER-10, which outranks the
  APPLICATION-priority provider apply_app_css uses regardless of
  selector specificity -- so the hero clock and every other type
  override silently collapsed to base size. Ride breadgreet's sheet
  through bind_window_auto_with_app_css instead (USER-9), matching
  breadbar.

Polish
- Accent rule between the clock and card, drawn in via scaleX with a
  glow halo; card gradient + top highlight + deep shadow, bg-pop
  overshoot entrance, slow bg-breathe idle pulse; layered accent focus
  glow on the entry; gradient session/user pills. Entrance/idle motion
  is CSS @keyframes now (setup_entrance removed).
- Errors pinned to a legible red -- BOS's default @red slot is a warm
  ochre, unreadable as a warning.
- Drop the duplicate prompt text (placeholder + status line both said
  "Password:").

Preview harness
- scripts/preview.sh + scripts/mock-greetd.py run the real greeter in a
  nested Weston window against a stand-in greetd, so the whole flow
  (spinner, wrong-password shake, success) is drivable without a
  reboot. $BREADGREET_CONFIG overrides the config search path so a
  preview never touches /etc/greetd/breadgreet.toml.
Some checks failed
CI / check (pull_request) Failing after 5s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feature/breadgreet-polish:feature/breadgreet-polish
git checkout feature/breadgreet-polish

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git checkout main
git merge --no-ff feature/breadgreet-polish
git checkout feature/breadgreet-polish
git rebase main
git checkout main
git merge --ff-only feature/breadgreet-polish
git checkout feature/breadgreet-polish
git rebase main
git checkout main
git merge --no-ff feature/breadgreet-polish
git checkout main
git merge --squash feature/breadgreet-polish
git checkout main
git merge --ff-only feature/breadgreet-polish
git checkout main
git merge feature/breadgreet-polish
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Breadway/breadlock#4
No description provided.