Sync config from arch
- hypr/apps.lua - hypr/autostart.lua - hypr/envs.lua - hypr/hyprland.lua - hypr/hyprsunset.conf - hypr/input.lua - hypr/looknfeel.lua - hypr/omasettings.lua - hypr/xdph.conf - omarchy/branding/about.txt - omarchy/branding/screensaver.txt - omarchy/extensions/omarchy-menu.jsonc - omarchy/hooks/battery-low.d/play-warning-sound.sample - omarchy/hooks/font-set.d/show-font-notification.sample - omarchy/hooks/post-boot.d/weather.sample - omarchy/hooks/post-update.d/install-voxtype.hook - omarchy/hooks/post-update.d/setup-agent.hook - omarchy/hooks/post-update.d/setup-fingerprint.hook - omarchy/hooks/post-update.d/show-update-notification.sample - omarchy/hooks/pre-refresh-pacman.d/add-custom-repo.sample - omarchy/hooks/theme-set.d/show-theme-notification.sample - omarchy/shell.json - omarchy/shell.toml - omarchy/theme.name - omarchy/themes/azure-glow/README.md - omarchy/themes/azure-glow/alacritty.toml - omarchy/themes/azure-glow/btop.theme - omarchy/themes/azure-glow/hyprland.conf - omarchy/themes/azure-glow/hyprlock.conf - omarchy/themes/azure-glow/icons.theme - … 269 more
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# Colorized Menu-Bar Icon
|
||||
|
||||
Status: refined design proposal, implementation approved
|
||||
|
||||
## Problem Statement
|
||||
|
||||
How might we let users who run a colorized desktop theme make the Bitwarden
|
||||
menu-bar icon feel native to that theme without introducing arbitrary color
|
||||
configuration or weakening the icon's status indicators?
|
||||
|
||||
## Recommended Direction
|
||||
|
||||
Add a single **Colorize menu-bar icon** toggle to the existing General settings
|
||||
screen. The setting is off by default, preserving the current appearance. When
|
||||
enabled, the primary shield glyph uses Omarchy's live `Color.accent` value;
|
||||
the preference stores only the boolean choice, so changing the desktop theme
|
||||
automatically changes the icon color.
|
||||
|
||||
Only the primary shield is colorized. The locked-state padlock, missing-tool
|
||||
badge, and error/setup indicators retain their existing foreground and urgent
|
||||
colors. This keeps the accent color as personalization while preserving the
|
||||
meaning of exceptional states.
|
||||
|
||||
The feature fits the existing settings path: schema and manifest metadata,
|
||||
`omarchy bar set` persistence, live shell reload, and the current settings-row
|
||||
keyboard interaction. No custom RGB picker or new dependency is needed.
|
||||
|
||||
## Key Assumptions to Validate
|
||||
|
||||
- [ ] Users want the active theme accent specifically, rather than an
|
||||
independently chosen RGB value — validate with the first implementation and
|
||||
feedback from users who requested colorization.
|
||||
- [ ] Keeping urgent/error badges independent is sufficient to preserve state
|
||||
recognition — verify visually in locked, setup-required, and error states.
|
||||
- [ ] A boolean toggle is discoverable enough in the existing General section
|
||||
— confirm the label and description are clear in the settings screenshot or
|
||||
runtime review.
|
||||
|
||||
## MVP Scope
|
||||
|
||||
- Add `colorizeIcon` as a boolean setting, defaulting to `false`.
|
||||
- Add a General settings row labeled **Colorize menu-bar icon** with a
|
||||
description explaining that it follows the active theme accent.
|
||||
- Bind the primary menu-bar shield color to `Color.accent` when enabled and to
|
||||
the existing bar foreground when disabled.
|
||||
- Leave status badges and urgent/error colors unchanged.
|
||||
- Add model, manifest, persistence, malformed-value, and QML wiring tests.
|
||||
- Verify that theme changes are reflected after the shell reloads the panel.
|
||||
|
||||
## Not Doing (and Why)
|
||||
|
||||
- Arbitrary color picker or hex input — conflicts with the theme-derived goal
|
||||
and adds validation and contrast problems.
|
||||
- Multiple palette choices — the accent is the one semantic theme color users
|
||||
are most likely asking for; broader palettes can follow if demand appears.
|
||||
- Per-state color customization — risks making locked and error states harder
|
||||
to recognize.
|
||||
- Changing the panel's internal icon, controls, or status badges — the request
|
||||
is specifically about the menu-bar icon's primary glyph.
|
||||
|
||||
## Open Questions
|
||||
|
||||
- Should the setting be called **Colorize menu-bar icon** or **Use theme accent
|
||||
for icon**? The former is more approachable; the latter is more explicit.
|
||||
- Does the active accent maintain adequate contrast across the supported Omarchy
|
||||
themes, especially in light themes?
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
# Spec: Centered SSH Approval Popup
|
||||
|
||||
Status: implementation approved by the feature request
|
||||
|
||||
## Objective
|
||||
|
||||
Add an opt-in SSH authorization surface that appears in the center of the
|
||||
active bar output instead of opening the Bitwarden panel. A locked vault first
|
||||
shows a clear unlock-required state and the configured unlock controls; after
|
||||
unlocking, the same transient surface changes to the existing SSH signing
|
||||
approval. The surface disappears as soon as the request is answered,
|
||||
cancelled, or expires.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- QML/Qt 6 with Quickshell 0.3.1 and Omarchy 4.0.2.
|
||||
- The existing `Panel` root remains the owner of vault, SSH-helper, request,
|
||||
deadline, cooldown, and unlock state.
|
||||
- A Quickshell `PanelWindow` on the Wayland overlay layer presents the centered
|
||||
surface on the bar widget's output.
|
||||
- No new dependency or helper protocol message is introduced.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
node tests/ssh-agent-setup.test.js
|
||||
node tests/ssh-agent-ui.test.js
|
||||
for test_file in tests/*.test.js; do node "$test_file" || exit 1; done
|
||||
env -u DISPLAY -u WAYLAND_DISPLAY -u QT_QPA_PLATFORMTHEME \
|
||||
QT_QPA_PLATFORM=offscreen /usr/lib/qt6/bin/qmltestrunner -input tests/qml
|
||||
mkdir -p /tmp/qs-imports
|
||||
ln -sfn /usr/share/omarchy/shell /tmp/qs-imports/qs
|
||||
/usr/lib/qt6/bin/qmllint -I /tmp/qs-imports Panel.qml SshApprovalPopup.qml SshApprovalScreen.qml SshUnlockScreen.qml
|
||||
omarchy plugin validate .
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
||||
- `Panel.qml`: owns request routing, vault state, unlock actions, and setting
|
||||
values.
|
||||
- `SshApprovalPopup.qml`: owns only the centered window, focus, and dismissal.
|
||||
- `SshApprovalScreen.qml`: reusable authorization content for panel and popup.
|
||||
- `SshUnlockScreen.qml`: popup unlock-required status and unlock controls.
|
||||
- `BitwardenModel.js` / `manifest.json`: setting contract and safe default.
|
||||
- `tests/`: static integration and pure model tests; `tests/qml/`: QML tests.
|
||||
|
||||
## Code Style
|
||||
|
||||
Keep presentation declarative and authorization imperative in `Panel.qml`:
|
||||
|
||||
```qml
|
||||
SshApprovalPopup {
|
||||
panel: root
|
||||
anchorItem: button
|
||||
}
|
||||
```
|
||||
|
||||
All request-derived text uses `Text.PlainText`. Use Omarchy spacing, color,
|
||||
border, typography, input, and button components rather than custom values.
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
- Add failing contract tests for the new setting in both manifest and model.
|
||||
- Add failing wiring tests proving popup mode does not call `root.open()`, the
|
||||
legacy mode still does, and unlock transitions reuse the same pending
|
||||
request.
|
||||
- Lint every new QML component against the installed Omarchy imports.
|
||||
- Run the full JavaScript and QML suites before handoff.
|
||||
- Runtime acceptance requires an enabled development plugin, a locked vault,
|
||||
and a real SSH signing request; no real credentials belong in tests or logs.
|
||||
|
||||
## Boundaries
|
||||
|
||||
- Always: keep the setting false by default; deny on Escape, outside click,
|
||||
cancellation, and timeout; render request metadata as plain text; clear
|
||||
transient unlock input when the popup closes.
|
||||
- Ask first: changing helper authorization, request deadlines, cooldown rules,
|
||||
credential storage, or the SSH control protocol.
|
||||
- Never: put session tokens, passwords, private keys, payloads, or signatures
|
||||
in popup-local persistent state, command arguments, logs, or fixtures.
|
||||
|
||||
## Threat Model
|
||||
|
||||
- Request key/process labels cross from a same-UID client through the helper
|
||||
and are untrusted display data. Plain-text rendering prevents markup from
|
||||
becoming UI.
|
||||
- The overlay is presentation, not an authorization boundary. Existing helper
|
||||
request IDs, epochs, deadlines, peer checks, and final authorization checks
|
||||
remain authoritative.
|
||||
- The desktop lock-state gate remains ahead of both panel and popup prompts.
|
||||
- The master password and recovered PIN/fingerprint password continue through
|
||||
the existing bounded private-FIFO path and are scrubbed by existing process
|
||||
cleanup.
|
||||
- A popup must never approve from a bare Enter key; denial is the default
|
||||
focused action.
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- `sshAgentApprovalPopup` is a boolean setting, disabled by default.
|
||||
- With it disabled, SSH unlock and approval requests behave exactly as before.
|
||||
- With it enabled, an SSH request does not open or navigate the anchored panel.
|
||||
- A locked vault shows why it must be unlocked and offers configured PIN,
|
||||
fingerprint, and master-password paths without duplicating auth logic.
|
||||
- A successful unlock changes the same centered surface to the signing prompt,
|
||||
including key, fingerprint, requesting program, deadline, and grant option.
|
||||
- Deny, approve, cancellation, timeout, and outside click remove the surface;
|
||||
a panel the user already opened remains where it was.
|
||||
- The centered window uses the bar widget's output, stays within the output at
|
||||
narrow sizes, follows the Omarchy theme, and is fully keyboard operable.
|
||||
|
||||
## Open Questions
|
||||
|
||||
None for implementation. Full account login remains a panel workflow; the
|
||||
popup is intentionally limited to a signed-in but locked vault and SSH signing
|
||||
authorization.
|
||||
Reference in New Issue
Block a user