Conversation
| function isMullvadPeer(peer) { | ||
| var hostName = String((peer && peer.HostName) || "").toLowerCase() | ||
| var dnsName = cleanDnsName((peer && peer.DNSName) || "").toLowerCase() | ||
| return dnsName.indexOf(".mullvad.ts.net") !== -1 || hostName.indexOf(".mullvad.ts.net") !== -1 |
| function isMullvadPeer(peer) { | ||
| var hostName = String((peer && peer.HostName) || "").toLowerCase() | ||
| var dnsName = cleanDnsName((peer && peer.DNSName) || "").toLowerCase() | ||
| return dnsName.indexOf(".mullvad.ts.net") !== -1 || hostName.indexOf(".mullvad.ts.net") !== -1 |
| var country = sliceTableColumn(line, countryStart, cityStart) | ||
| var city = sliceTableColumn(line, cityStart, statusStart) | ||
| var status = sliceTableColumn(line, statusStart, -1) | ||
| if (host.indexOf(".mullvad.ts.net") === -1) continue |
|
Great work!!! SUPER + ALT + [ / ] Can we have a different key to / as in german / swiss keyboards, this is available via shift. So it would be SUPER+ALT+SHIFT+7. Usually having / and \ are not working keyboard shortcuts and need manual fixing. |
|
BTW: I can suggest alternatives and provide an MR if we're open to this change incl. past shortcuts... |
|
I just YOLO'd my 3.8... Workin like a boss. Nothing but what was expecting and a few pleasant surprises. Much appreciation to all of ya'll who made this happen! |
|
Running Quattro as my daily driver (upgraded an existing install, large 4K display (LG 48GQ900-B 48” OLED) at scale 1). The unified text-size knob is a great idea, but it hard-links three surfaces that don't always want to move together, and there's no way to express "just the shell" for example. Concrete case: I wanted the shell components (bar, menus, notifications) larger. Moving the display-panel slider did that, but it also:
There's also a small legibility trap in the mapping: because of the 12px→9pt anchor, the number you pick is never the number that lands in your terminal — e.g. the slider stop labeled "16" writes 12pt into terminal configs. The three legs are already independently settable underneath ([font] base-size in ~/.config/omarchy/shell.toml, gsettings, terminal configs), so I got what I wanted manually. But that means the knob is unusable for anyone tuning per-surface, one touch of the slider re-links everything. Proposal: scope flags on omarchy-display-text-size, something like --shell, --gtk, --terminals, defaulting to all three so the one-knob behavior is unchanged. The panel slider keeps calling it with no flags. Happy to submit this as a follow-up PR if there's interest. |
Quattro (Omarchy 4) breaks every hook this repo has into Omarchy: the git checkout at ~/.local/share/omarchy becomes a pacman-owned symlink, Hyprland config converts from .conf to Lua, Waybar is replaced by a Quickshell shell configured through shell.json, and generated theme state moves from ~/.config/omarchy/current to ~/.local/state/omarchy/current. This patch rewrites the overlays quattro-native. The theme-set and update-perform script overrides shrink to two hooks (zellij retint on theme-set, rustup/cargo on post-update) because user themed templates, helix restarts, cwd-aware terminal launches, mise updates, and persistent workspaces 1-5 are now stock. The hypr .conf files become Lua unbind/rebind overrides, waybar becomes a shell.json carrying only the clock format and Berkeley Mono, and the theme symlinks plus alacritty/ghostty imports re-point at the new state dir. My themed/*.tpl files survive untouched since upstream kept legacy colorN aliases. Do NOT merge or apply this on a machine still running Omarchy 3.x; it deletes the .conf and waybar files the live session reads. Upgrade day: run omarchy-upgrade-to-quattro, reboot, merge this bookmark, then chezmoi apply (accepting the .chezmoiremove deletions), re-run omarchy-theme-set, and reload Hyprland. Quattro is still alpha, so re-verify the hook names and shell.json schema against upstream first. Tested: chezmoi execute-template renders input/monitors for every dpi/mousedpi branch and luac -p passes on all of them plus bindings.lua and looknfeel.lua; shell.json validates; chezmoi status shows the expected adds/deletes. NOT TESTED on a real Quattro install. The monitor-relative floating window size in looknfeel.lua needs checking against hl.window_rule serialization on a live system. Ref: basecamp/omarchy#6231 Assisted-by: Claude:claude-fable-5
Quattro (Omarchy 4) breaks every hook this repo has into Omarchy: the git checkout at ~/.local/share/omarchy becomes a pacman-owned symlink, Hyprland config converts from .conf to Lua, Waybar is replaced by a Quickshell shell, and generated theme state moves from ~/.config/omarchy/current to ~/.local/state/omarchy/current. This patch rewrites the overlays quattro-native. The theme-set and update-perform script overrides shrink to two hooks (zellij retint on theme-set, rustup/cargo on post-update) because user themed templates, helix restarts, cwd-aware terminal launches, mise updates, and persistent workspaces 1-5 are now stock. The hypr .conf files become Lua unbind/rebind overrides, and the theme symlinks plus alacritty/ghostty imports re-point at the new state dir. My themed/*.tpl files survive untouched since upstream kept legacy colorN aliases. The Quickshell bar carries no user config. shell.json's clock keys are gone (upstream's stock layout and ISO-week clock are fine), and its fontFamily key never fed the bar anyway: the bar binds font.family to the "monospace" alias, so Berkeley Mono now lives in ~/.config/fontconfig/fonts.conf, the file `omarchy font set` owns and the shell, Qt apps, and everything resolving "monospace" read. Berkeley Mono has no Nerd glyphs, so fonts.conf adds a Nerd Font to the monospace fallback to keep bar and TUI icons rendering; upstream needs no such entry because its monospace alias is itself a Nerd Font. Do NOT merge or apply this on a machine still running Omarchy 3.x; it deletes the .conf and waybar files the live session reads. Upgrade day: run the quattro upgrade, reboot, merge this bookmark, then chezmoi apply (accepting the .chezmoiremove deletions), re-run omarchy-theme-set, and reload Hyprland. Quattro is still alpha, so re-verify the hook names against upstream first. Tested: chezmoi execute-template plus luac -p pass on bindings.lua, looknfeel.lua, and input.lua/monitors.lua rendered across every mousedpi (high/mid/low) and dpi (retina/mid/low) branch. xmllint validates fonts.conf, and fc-match against the rendered fonts.conf resolves monospace to Berkeley Mono Variable and falls back to an installed Nerd Font (JetBrainsMono/Caskaydia) for glyphs Berkeley lacks. chezmoi status shows the expected fontconfig modify plus the hypr .conf->.lua swaps. NOT TESTED on a real Quattro install. The monitor-relative floating window size in looknfeel.lua still needs checking against hl.window_rule serialization on a live system. Ref: basecamp/omarchy#6231 Assisted-by: Claude:claude-opus-4.8
Quattro (Omarchy 4) breaks every hook this repo has into Omarchy: the git checkout at ~/.local/share/omarchy becomes a pacman-owned symlink, Hyprland config converts from .conf to Lua, Waybar is replaced by a Quickshell shell, and generated theme state moves from ~/.config/omarchy/current to ~/.local/state/omarchy/current. This patch rewrites the overlays quattro-native. The theme-set and update-perform script overrides shrink to two hooks (zellij retint on theme-set, rustup/cargo on post-update) because user themed templates, helix restarts, cwd-aware terminal launches, mise updates, and persistent workspaces 1-5 are now stock. The hypr .conf files become Lua unbind/rebind overrides, and the theme symlinks plus alacritty/ghostty imports re-point at the new state dir. My themed/*.tpl files survive untouched since upstream kept legacy colorN aliases. The Quickshell bar carries no user config. shell.json's clock keys are gone (upstream's stock layout and ISO-week clock are fine), and its fontFamily key never fed the bar anyway: the bar binds font.family to the "monospace" fontconfig alias. Berkeley Mono is installed out of band (it's paid, so unlike my other fonts it isn't committed here), and the alias is set with `omarchy font set "Berkeley Mono Variable"`, which rewrites ~/.config/fontconfig/fonts.conf from the current package default. I don't manage that file in chezmoi for the same reason I dropped shell.json: omarchy owns and rewrites it, so a committed copy would both fork an upstream file that still gains fixes (the recent Arabic Naskh fallback) and fight the next `omarchy font set`. Do NOT merge or apply this on a machine still running Omarchy 3.x; it deletes the .conf and waybar files the live session reads. Upgrade day: run the quattro upgrade, reboot, merge this bookmark, then chezmoi apply (accepting the .chezmoiremove deletions), re-run omarchy-theme-set, run `omarchy font set "Berkeley Mono Variable"` to point the monospace alias (and thus the bar) at Berkeley Mono, and reload Hyprland. Quattro is still alpha, so re-verify the hook names against upstream first. Tested: chezmoi execute-template plus luac -p pass on bindings.lua, looknfeel.lua, and input.lua/monitors.lua rendered across every mousedpi (high/mid/low) and dpi (retina/mid/low) branch. Confirmed against upstream Style.qml that the bar's font.family binds to the "monospace" alias (so shell.json's fontFamily was dead) and that `omarchy font set` is what writes fonts.conf. chezmoi status shows only the expected hypr .conf->.lua swaps. NOT TESTED on a real Quattro install. The monitor-relative floating window size in looknfeel.lua still needs checking against hl.window_rule serialization on a live system. Ref: basecamp/omarchy#6231 Assisted-by: Claude:claude-opus-4.8
Quattro (Omarchy 4) breaks every hook this repo has into Omarchy: the git checkout at ~/.local/share/omarchy becomes a pacman-owned symlink, Hyprland config converts from .conf to Lua, Waybar is replaced by a Quickshell shell, and generated theme state moves from ~/.config/omarchy/current to ~/.local/state/omarchy/current. This patch rewrites the overlays quattro-native. The theme-set and update-perform script overrides shrink to two hooks (zellij retint on theme-set, rustup/cargo on post-update) because user themed templates, helix restarts, cwd-aware terminal launches, mise updates, and persistent workspaces 1-5 are now stock. The hypr .conf files become Lua unbind/rebind overrides, and the theme symlinks plus alacritty/ghostty imports re-point at the new state dir. My themed/*.tpl files survive untouched since upstream kept legacy colorN aliases. The Quickshell bar carries no user config. shell.json's clock keys are gone (upstream's stock layout and ISO-week clock are fine), and its fontFamily key never fed the bar anyway: the bar binds font.family to the "monospace" fontconfig alias. Berkeley Mono is installed out of band (it's paid, so unlike my other fonts it isn't committed here), and the alias is set with `omarchy font set "Berkeley Mono Variable"`, which rewrites ~/.config/fontconfig/fonts.conf from the current package default. I don't manage that file in chezmoi for the same reason I dropped shell.json: omarchy owns and rewrites it, so a committed copy would both fork an upstream file that still gains fixes (the recent Arabic Naskh fallback) and fight the next `omarchy font set`. Do NOT merge or apply this on a machine still running Omarchy 3.x; it deletes the .conf and waybar files the live session reads. Upgrade day: run the quattro upgrade, reboot, merge this bookmark, then chezmoi apply (accepting the .chezmoiremove deletions), re-run omarchy-theme-set, run `omarchy font set "Berkeley Mono Variable"` to point the monospace alias (and thus the bar) at Berkeley Mono, and reload Hyprland. Quattro is still alpha, so re-verify the hook names against upstream first. Tested: chezmoi execute-template plus luac -p pass on bindings.lua, looknfeel.lua, and input.lua/monitors.lua rendered across every mousedpi (high/mid/low) and dpi (retina/mid/low) branch. Confirmed against upstream Style.qml that the bar's font.family binds to the "monospace" alias (so shell.json's fontFamily was dead) and that `omarchy font set` is what writes fonts.conf. chezmoi status shows only the expected hypr .conf->.lua swaps. NOT TESTED on a real Quattro install. The monitor-relative floating window size in looknfeel.lua still needs checking against hl.window_rule serialization on a live system. Ref: basecamp/omarchy#6231 Assisted-by: Claude:claude-opus-4.8
Quattro (Omarchy 4) breaks every hook this repo has into Omarchy: the git checkout at ~/.local/share/omarchy becomes a pacman-owned symlink, Hyprland config converts from .conf to Lua, Waybar is replaced by a Quickshell shell, and generated theme state moves from ~/.config/omarchy/current to ~/.local/state/omarchy/current. This patch rewrites the overlays quattro-native. The theme-set and update-perform script overrides shrink to two hooks (zellij retint on theme-set, rustup/cargo on post-update) because user themed templates, helix restarts, cwd-aware terminal launches, mise updates, and persistent workspaces 1-5 are now stock. The hypr .conf files become Lua unbind/rebind overrides, and the theme symlinks plus alacritty/ghostty imports re-point at the new state dir. My themed/*.tpl files survive untouched since upstream kept legacy colorN aliases. The Quickshell bar carries no user config. shell.json's clock keys are gone (upstream's stock layout and ISO-week clock are fine), and its fontFamily key never fed the bar anyway: the bar binds font.family to the "monospace" fontconfig alias. Berkeley Mono is installed out of band (it's paid, so unlike my other fonts it isn't committed here), and the alias is set with `omarchy font set "Berkeley Mono Variable"`, which rewrites ~/.config/fontconfig/fonts.conf from the current package default. I don't manage that file in chezmoi for the same reason I dropped shell.json: omarchy owns and rewrites it, so a committed copy would both fork an upstream file that still gains fixes (the recent Arabic Naskh fallback) and fight the next `omarchy font set`. Do NOT merge or apply this on a machine still running Omarchy 3.x; it deletes the .conf and waybar files the live session reads. Upgrade day: run the quattro upgrade, reboot, merge this bookmark, then chezmoi apply (accepting the .chezmoiremove deletions), re-run omarchy-theme-set, run `omarchy font set "Berkeley Mono Variable"` to point the monospace alias (and thus the bar) at Berkeley Mono, and reload Hyprland. Quattro is still alpha, so re-verify the hook names against upstream first. Tested: chezmoi execute-template plus luac -p pass on bindings.lua, looknfeel.lua, and input.lua/monitors.lua rendered across every mousedpi (high/mid/low) and dpi (retina/mid/low) branch. Confirmed against upstream Style.qml that the bar's font.family binds to the "monospace" alias (so shell.json's fontFamily was dead) and that `omarchy font set` is what writes fonts.conf. chezmoi status shows only the expected hypr .conf->.lua swaps. NOT TESTED on a real Quattro install. The monitor-relative floating window size in looknfeel.lua still needs checking against hl.window_rule serialization on a live system. Re-checked the overlay against upstream quattro at f4e8470c3a1b: the theme-set and post-update hook dirs, the themed template renderer's legacy colorN aliases, the `o.bind` dispatcher tables, `o.window`, and the floating-window tag all still behave as this patch assumes, and the state dir the symlinks point at is unchanged. The uwsm/default override survives too: quattro moved the file into the package, but /usr/share/uwsm/env.d/10-omarchy still sources ~/.config/uwsm/default, and the upgrade keeps hash-mismatched user copies active, so EDITOR stays helix. Worth knowing for upgrade day: the upgrade's always-copy list rewrites all four hypr .lua files with quattro skeletons, which is why chezmoi apply has to run after the upgrade rather than before. Ref: basecamp/omarchy#6231 Assisted-by: Claude:claude-opus-4.8 Assisted-by: Claude:claude-opus-5
Quattro (Omarchy 4) breaks every hook this repo has into Omarchy: the git checkout at ~/.local/share/omarchy becomes a pacman-owned symlink, Hyprland config converts from .conf to Lua, Waybar is replaced by a Quickshell shell, and generated theme state moves from ~/.config/omarchy/current to ~/.local/state/omarchy/current. This patch rewrites the overlays quattro-native. The theme-set and update-perform script overrides shrink to two hooks (zellij retint on theme-set, rustup/cargo on post-update) because user themed templates, helix restarts, cwd-aware terminal launches, mise updates, and persistent workspaces 1-5 are now stock. The hypr .conf files become Lua unbind/rebind overrides, and the theme symlinks plus alacritty/ghostty imports re-point at the new state dir. My themed/*.tpl files survive untouched since upstream kept legacy colorN aliases. The Quickshell bar carries no user config. shell.json's clock keys are gone (upstream's stock layout and ISO-week clock are fine), and its fontFamily key never fed the bar anyway: the bar binds font.family to the "monospace" fontconfig alias. Berkeley Mono is installed out of band (it's paid, so unlike my other fonts it isn't committed here), and the alias is set with `omarchy font set "Berkeley Mono Variable"`, which rewrites ~/.config/fontconfig/fonts.conf from the current package default. I don't manage that file in chezmoi for the same reason I dropped shell.json: omarchy owns and rewrites it, so a committed copy would both fork an upstream file that still gains fixes (the recent Arabic Naskh fallback) and fight the next `omarchy font set`. Do NOT merge or apply this on a machine still running Omarchy 3.x; it deletes the .conf and waybar files the live session reads. Upgrade day: run the quattro upgrade, reboot, merge this bookmark, then chezmoi apply (accepting the .chezmoiremove deletions), re-run omarchy-theme-set, run `omarchy font set "Berkeley Mono Variable"` to point the monospace alias (and thus the bar) at Berkeley Mono, and reload Hyprland. Quattro is still alpha, so re-verify the hook names against upstream first. Tested: chezmoi execute-template plus luac -p pass on bindings.lua, looknfeel.lua, and input.lua/monitors.lua rendered across every mousedpi (high/mid/low) and dpi (retina/mid/low) branch. Confirmed against upstream Style.qml that the bar's font.family binds to the "monospace" alias (so shell.json's fontFamily was dead) and that `omarchy font set` is what writes fonts.conf. chezmoi status shows only the expected hypr .conf->.lua swaps. NOT TESTED on a real Quattro install. The monitor-relative floating size in looknfeel.lua is now verified on Hyprland 0.56.0: a probe window took 1654x1016 on a 3008x1692 logical monitor, so monitor_w/monitor_h resolve against logical and not physical pixels, which is what makes 55%/60% right on a retina display. The percentage form (size 55% 60%) is not a substitute: hyprctl accepts it and then silently ignores it, leaving the app's own default. What remains unproven is only the Lua table to rule-string serialization, and upstream ships that same shape in webcam-overlay.lua. Re-checked the overlay against upstream quattro at f4e8470c3a1b: the theme-set and post-update hook dirs, the themed template renderer's legacy colorN aliases, the `o.bind` dispatcher tables, `o.window`, and the floating-window tag all still behave as this patch assumes, and the state dir the symlinks point at is unchanged. The uwsm/default override survives too: quattro moved the file into the package, but /usr/share/uwsm/env.d/10-omarchy still sources ~/.config/uwsm/default, and the upgrade keeps hash-mismatched user copies active, so EDITOR stays helix. Worth knowing for upgrade day: the upgrade's always-copy list rewrites all four hypr .lua files with quattro skeletons, which is why chezmoi apply has to run after the upgrade rather than before. Ref: basecamp/omarchy#6231 Assisted-by: Claude:claude-opus-4.8 Assisted-by: Claude:claude-opus-5
Quattro (Omarchy 4) breaks every hook this repo has into Omarchy: the git checkout at ~/.local/share/omarchy becomes a pacman-owned symlink, Hyprland config converts from .conf to Lua, Waybar is replaced by a Quickshell shell, and generated theme state moves from ~/.config/omarchy/current to ~/.local/state/omarchy/current. This patch rewrites the overlays quattro-native. The theme-set and update-perform script overrides shrink to two hooks (zellij retint on theme-set, rustup/cargo on post-update) because user themed templates, helix restarts, cwd-aware terminal launches, mise updates, and persistent workspaces 1-5 are now stock. The hypr .conf files become Lua unbind/rebind overrides, and the theme symlinks plus alacritty/ghostty imports re-point at the new state dir. My themed/*.tpl files survive untouched since upstream kept legacy colorN aliases. The Quickshell bar carries no user config. shell.json's clock keys are gone (upstream's stock layout and ISO-week clock are fine), and its fontFamily key never fed the bar anyway: the bar binds font.family to the "monospace" fontconfig alias. Berkeley Mono is installed out of band (it's paid, so unlike my other fonts it isn't committed here), and the alias is set with `omarchy font set "Berkeley Mono Variable"`, which rewrites ~/.config/fontconfig/fonts.conf from the current package default. I don't manage that file in chezmoi for the same reason I dropped shell.json: omarchy owns and rewrites it, so a committed copy would both fork an upstream file that still gains fixes (the recent Arabic Naskh fallback) and fight the next `omarchy font set`. Do NOT merge or apply this on a machine still running Omarchy 3.x; it deletes the .conf and waybar files the live session reads. Upgrade day: run the quattro upgrade, reboot, merge this bookmark, then chezmoi apply (accepting the .chezmoiremove deletions), re-run omarchy-theme-set, run `omarchy font set "Berkeley Mono Variable"` to point the monospace alias (and thus the bar) at Berkeley Mono, and reload Hyprland. Quattro is still alpha, so re-verify the hook names against upstream first. Tested: chezmoi execute-template plus luac -p pass on bindings.lua, looknfeel.lua, and input.lua/monitors.lua rendered across every mousedpi (high/mid/low) and dpi (retina/mid/low) branch. Confirmed against upstream Style.qml that the bar's font.family binds to the "monospace" alias (so shell.json's fontFamily was dead) and that `omarchy font set` is what writes fonts.conf. chezmoi status shows only the expected hypr .conf->.lua swaps. NOT TESTED on a real Quattro install. The monitor-relative floating size in looknfeel.lua is now verified on Hyprland 0.56.0: a probe window took 1654x1016 on a 3008x1692 logical monitor, so monitor_w/monitor_h resolve against logical and not physical pixels, which is what makes 55%/60% right on a retina display. The percentage form (size 55% 60%) is not a substitute: hyprctl accepts it and then silently ignores it, leaving the app's own default. What remains unproven is only the Lua table to rule-string serialization, and upstream ships that same shape in webcam-overlay.lua. Re-checked the overlay against upstream quattro at f4e8470c3a1b: the theme-set and post-update hook dirs, the themed template renderer's legacy colorN aliases, the `o.bind` dispatcher tables, `o.window`, and the floating-window tag all still behave as this patch assumes, and the state dir the symlinks point at is unchanged. The uwsm/default override survives too: quattro moved the file into the package, but /usr/share/uwsm/env.d/10-omarchy still sources ~/.config/uwsm/default, and the upgrade keeps hash-mismatched user copies active, so EDITOR stays helix. Worth knowing for upgrade day: the upgrade's always-copy list rewrites all four hypr .lua files with quattro skeletons, which is why chezmoi apply has to run after the upgrade rather than before. Ref: basecamp/omarchy#6231 Assisted-by: Claude:claude-opus-5
GTK only honors whole-number GDK_SCALE values, so persisting 1.6 or 1.25 verbatim left GTK apps without a usable scale. Round to the nearest whole factor when writing monitors.lua. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hyprland leaves an already-mapped layer surface at its old global position when its monitor moves within the layout: undocking disables the internal panel, the external monitor shifts to x=0, and the bar and background keep rendering at the old offset until unmapped and remapped. Watch each screen's origin and briefly unmap the window when it moves so the compositor re-places the surface at the monitor's new origin. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s legible (#6529) * fix(network): pin overlay text to a fixed on-scrim palette SpeedTestPanel and WifiQrPanel both draw over a hardcoded near-black scrim, but their text/tick colors came from bar.foreground -- a color themed to contrast with the *bar's* own background, which flips dark/light per theme. On themes with a dark bar.foreground, digits and labels went invisible against the black scrim, leaving only the accent-colored arc/needle (Color.accent) visible. Add a fixed white-based on-scrim palette (onScrim/onScrimDim) to both overlays and route all text/tick colors through it, independent of theme. bar.urgent stays theme-driven since it's a semantic color already legible on near-black. * Trim the on-scrim palette comments to the constraint Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Pin overlay error text to a fixed on-scrim urgent color Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: David Heinemeier Hansson <david@hey.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
The first submenu move or search keystroke already froze the card's top edge; freeze the rows height at the same moment so drilling into a longer menu scrolls behind the fold instead of growing the card. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
An installed app whose .desktop Keywords contain a menu id captured the route: htop ships Keywords=system;..., so SUPER+ESCAPE opened an empty "Htop" menu instead of the System menu once the Apps menu had merged its rows. Exact ids now win, and app rows are no longer routable at all — their keywords remain search-only. Fixes #6554 Reported-by: Craig Derington (https://github.com/craigderington) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* Apply the terminal tag to Omarchy's own terminal windows Omarchy launches TUIs and its own terminal windows under dedicated app-ids (org.omarchy.btop, org.omarchy.terminal, TUI.float, ...), so the class never matched the terminal that drew the window and those windows went untagged. Also drop the tag's opacity rule, which stripped default-opacity only to re-apply the identical value. Themes still override through the tag. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Match terminals by tag for universal clipboard shortcuts The binding kept its own list of terminal classes, so SUPER + C in a TUI window sent CTRL + C instead of CTRL + Insert. Read the terminal tag instead of duplicating the definition. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Wait for the current Windows boot before connecting RDP docker logs retains output across stop/start, so grepping the whole log matched "Windows started successfully" from an earlier boot and returned immediately, firing xfreerdp3 while the guest was still booting. Anchor the scan to the container's current StartedAt, and run it even when the container was already running, since the image restarts the guest in place on reboot. * Skip Kerberos when connecting to the Windows VM FreeRDP 3 attempts Kerberos before NTLM for NLA, and Arch's stock /etc/krb5.conf declares default_realm = ATHENA.MIT.EDU, so every launch tries to reach MIT's KDC. Off the network each attempt blocks ~23s and xfreerdp3 sits in CLOSE-WAIT without drawing a window, which reads as the VM failing to start. Point FreeRDP at a realm-less krb5 config so it falls through to NTLM, which is what the local Windows account uses anyway. * Re-read the container start time on every readiness poll A failed docker inspect left STARTED_AT empty, and docker logs drops the --since filter when it is, putting the scan back on the whole retained log and its stale success line. Sampling per poll also keeps the window on the current boot if the container restarts mid-wait. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: David Heinemeier Hansson <david@hey.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Hyprland reaps its own children, so os.execute() gets ECHILD from waitpid and never sees an exit status. Every call reported failure, which meant the NVIDIA env detection in hypr/nvidia.lua never set NVD_BACKEND, LIBVA_DRIVER_NAME or __GLX_VENDOR_LIBRARY_NAME. Read a marker off stdout instead. Closes #6914 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Task procedure lives in agents/skills/ (migrations.md moves there), system-shape reference in docs/ (AUDIO-TUNING.md renamed to match), end-user documentation in manual/. AGENTS.md now states the split. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Providers never returned JSON rows: they are shell-defined row sources emitting tab-delimited lines, and extensions cannot declare new names. bar.shellQuote moved to Util.qml, and the UpperCamelCase widget id migration no longer exists. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every reference doc was audited claim-by-claim against the code. file-layout and omarchy-shell were the most decayed (renamed commands, the etc/ overrides source split, dead IPC entry points and example keys); update-process lagged the recent pipeline changes and gains a channels section; theming and audio-tuning were accurate but thin around their lifecycles. New reference docs for the subsystems that had none: the menu system, the CLI router, the notification daemon, and the non-acceptance test architecture. AGENTS.md links the two of those agents will need most. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A whitelisted bare git repo over $HOME driven only by constrained omarchy dots commands: local snapshot history at batch boundaries plus squash-published state sync across machines. Design survived adversarial review; rejected alternatives and rationale recorded in the plan. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A 3.8.3 migration appended the section header with one backslash too many, so sed wrote the literal characters instead of a newline plus the header. foot rejects the line and stops reading the rest of the file. The later text-binding migration matches the header with grep -qxF, misses the broken line, and appends a second section, leaving the config broken across the Quattro upgrade. Closes #6903 Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
mise use -g announces the resolved tool on stdout, so every wrapped command prepended a "tools:" line to its own output. That corrupts anything speaking a protocol over stdout, such as codex app-server. Pass --quiet, which keeps errors on stderr and preserves the exit status. The obsolete-wrapper check in the agent migration matched the generated command verbatim, so loosen it to match the package instead of the flags. Closes #6908 Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…#6943) Bar widgets propagate their composed press-and-hold down to the center gesture area without handing over the grab, so the gesture area started a bar move and then received neither a release nor a cancel to end it. The move ghost stayed on screen for the rest of the session. Ignore the gesture unless we hold the press. Closes #6881 Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
omarchy-plugin-clone only takes the source id as the first argument, but the menu passed --edit ahead of it, so the id fell through to the unknown-option branch and every clone from Setup > Plugins failed. Closes #6913 Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The calendar grid's header row and the week-start toggle label were the only text in the shell that followed the system locale, so a German desktop drew MO DI MI over an interface that is English everywhere else. Nothing chose that; they were the only two places reading day names off Qt.locale(). Take them from en_US instead. Where the week starts still follows the locale: that is a regional convention rather than a translation, and it stays overridable through weekStartDay. Dropping the trailing-period strip with it, since that existed only for the locales this no longer renders. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The dial already grouped its digits for the locale above 10, but below 10 it went through toFixed, which hardcodes a dot. A German desktop therefore read 9.5 and 1.235 off the same dial, switching decimal convention halfway up the scale. Send both branches through the locale. A reading is a measurement rather than interface text, so its separators follow the system's number conventions even though the interface itself stays English. English output is unchanged. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
#7001) * Launch claude and codex agents with auto-review instead of full bypass Claude's auto permission mode and codex's --approve-for-me both run unattended without prompting, but keep automatic review (and codex's workspace-write sandbox) instead of skipping approval entirely. Grok stays on bypassPermissions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Match the bash aliases to the agent launcher's auto-review modes Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Fix o.shell_succeeds() always returning false inside Hyprland
* Add --gh-keys so sshd setup can run without prompts Grabbing keys from GitHub was reachable only through the interactive menu: pick "Grab key from GitHub", then type the username into a second prompt. So the one path that needs no secret pasted around was also the one path a script could not take, and setting a machine up over ssh or from a provisioning run meant falling back to --key with a key copied by hand. --gh-keys <username> takes the same path the prompt did. The fetch and authorize logic is unchanged and now shared, with the prompt reduced to asking for the username and handing it over. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Reject a missing --gh-keys username before setting anything up The username was only checked for being absent entirely, and only after the server was installed and the firewall opened. So `--gh-keys=` with an unset variable behind it configured the machine and then dropped into the interactive menu, and `--gh-keys --help` took --help as the username and set the server up on its way to failing the fetch -- a help flag that changes the system. Check the value where it is parsed, and reject one that is empty or shaped like an option. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Document remapping the CapsLock compose key * Clarify restoring CapsLock behavior
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
* Switch to the mise-bin package mise-bin carries mise's own release artifacts from the Omarchy repo -- PGO+BOLT-optimized on x86_64, glibc-native on both arches -- instead of Arch's mise, and tracks jdx/mise releases directly. Existing installs need a migration because the two packages conflict, and omarchy-pkg-add cannot make the swap: pacman answers its own conflict question with No under --noconfirm and fails the transaction. --ask=4 answers that one question, so mise-bin replaces mise in a single transaction -- which is also what keeps omarchy-zsh and omarchy-fish, both of which depend on mise, satisfied through the swap by its provides. * Guard the swap with a conditional instead of an early exit Two-path control flow takes an if, per the style guide; the early exit only made the swap line unreachable from a distance.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Re-encode over-encoded theme backgrounds Several backgrounds shipped at quality 95-100, which buys nothing visible on a wallpaper but costs 20 MB. Re-encode those at quality 85, leaving resolution untouched -- every file keeps its original pixel dimensions. Only files stored above quality 90 are touched, and only when the result saves at least 15% and stays above 38 dB PSNR against the original. The 34 backgrounds already stored at quality 85 or below are left alone rather than pushed through another lossy generation for a few hundred KB. osaka-jade/2-shaded-entrance is skipped for that reason: nothing clears both bars. ristretto/2-coffee-beans is re-encoded at 90 instead of 85, where 85 fell below the PSNR floor. Theme backgrounds drop from 107 MB to 87 MB. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Store nord's night-hawks background as a palette PNG The file uses only 8 distinct colors but was saved as truecolor RGB, costing 1.8 MB for an image an indexed palette stores in half the space. Converting to a palette PNG is lossless: same dimensions, and zero pixels differ from the original. 1782 KB -> 909 KB. The other palette-eligible PNGs are already indexed, and re-compressing them with ImageMagick only makes them bigger, so they are left alone. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Recompress theme PNGs losslessly with oxipng Every background PNG was left at its authoring tool's default deflate settings. Running oxipng over them re-packs the same pixels: all 31 files decode bit-for-bit identically (AE=0) at unchanged resolution, for 981 KB. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Store photographic backgrounds as JPEG instead of PNG Four backgrounds were shipped as PNG despite being photographs and painterly illustrations, where lossless coding buys nothing the eye can see. Re-encoding them at the same q85 used by the other backgrounds keeps every pixel dimension and stays above 40 dB PSNR, for 3.3 MB. The remaining PNGs stay PNG: JPEG is larger for the dot patterns and the flat-shaded pieces, and 0-launch.png genuinely uses its alpha channel. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: David Heinemeier Hansson <david@hey.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* Give scratchpad a Quake-style presentation * Keep the Quake scratchpad from restyling every window The presentation was bought with global decoration defaults: rounding went 0 -> 5 and both shadow and blur were switched back on for every window on the system, undoing 935283c. Blur in particular is close to invisible here, since every window is already tagged 0.985/0.96 opacity and no layer rule asks for it, so it was GPU load on every frame for almost nothing. Put the globals back and scope the rounding to the scratchpad with a window rule, the same way popped windows already get theirs. The inset, dim_special and the slide carry the effect on their own. dim_special only applies while a special workspace is open, so it stays. Also drop the four workspace-rule booleans that only restated Hyprland's defaults, fold the stale scratchpad rows in the hotkey table into the new ones, and give the binding assertions their own fixture instead of borrowing the bar-panel one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Omabot <david@hey.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Open the scratchpad with the default agent already in it on_created_empty fires when the special workspace is created empty, so the agent starts the first time the console drops down instead of at boot, and comes back on the next open if you close it. The exec rule pins the workspace rather than trusting the spawn to inherit it: Hyprland only tags a process with its origin workspace while misc.initial_workspace_tracking is on, and we turn that off. Nothing to guard for a missing default agent. Omarchy picks none for you, and omarchy-agent exits without opening a window when none is set, so the scratchpad just opens empty until one is chosen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Move the console into its own file and size it to half the screen The scratchpad's presentation was scattered through looknfeel: a dim in the decoration block, a workspace rule below it, two animation leaves further down again. Gathered into qconsole.lua, where the whole console is one readable thing. Sized to half the screen while it moved. A window rule cannot do that: its size expressions resolve once, when the window maps, so rescaling the monitor afterwards leaves a console that is no longer half of anything. Gaps are re-applied by the layout, so the console is sized by the gap left underneath it, recomputed from the monitor whenever the layout changes. Monitor dimensions come back in physical pixels while gaps are logical, so the scale comes out before the reserved area comes off. That arithmetic is the whole trick, and the test pins it at 1x, 2x and 1.5x. The test runs lua with an explicit "-". Bare `lua <<EOF` reads stdin as a REPL and exits 0 even after an error, which would leave its assertions unable to fail. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Only rewrite the console rule when its size actually changes Refitting replaces the rule in place rather than stacking a new one, so there was no leak, but each write still schedules a monitor and window state refresh and monitor.focused fires on every hop between screens. Remember what was last written and skip the write when the number has not moved. Also say out loud that the scale guard is what keeps the arithmetic below it safe: a monitor handle that has outlived its output answers nil to every field, and a layout change is exactly when that happens. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Drop the active window border inside the console The gradient border marks which window has focus, which the console does not need: it is only ever focused while it is open, and the dimmed workspace behind it already sets it apart. On a single agent terminal the highlight just reads as a frame around the panel. no_border on the workspace rule pins the border to 0 at workspace-rule priority, so it applies to whatever ends up in there without touching the global border. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Omabot <david@hey.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Omarchy Quattro: Release Candidate
Omarchy 4 aka Quattro is the biggest release since the project started. The entire desktop shell has been reimagined in Quickshell: the bar, launcher, menus, notifications, on-screen displays, control panels, lock screen, and polkit agent now all live inside a single long-running shell process with a plugin architecture. That means Waybar, Walker, Mako, SwayOSD, hyprlock, hypridle, swaybg, and polkit-gnome are all gone, replaced by one coherent, fully-themed, IPC-scriptable shell.
You can upgrade an existing Omarchy installation to Quattro by first
Update > Omarchy, thenUpdate > Channel > RC, thenUpdate > Omarchy to Quattro. Just remember toUpdate > Channel > Stableafter the final release!Or install it fresh on a secondary machine using the ISO: https://iso.omarchy.org/omarchy-4.0.0.rc4-2.iso
Always take a backup of important data!
Headline Features
Setup > Reset Computer) from new Quattro installs for safe resale/gifting of your machine.Super + Space).The Shell
Setup > Menu Barin the Omarchy menu)omarchy plugin add <git-url>, and managed fromSetup > Plugins(add, clone, enable, disable, remove) by @ryanrhughes and @dhhSUPER + SPACEsearches apps and commands from one surfaceSUPER + ALT + SPACESUPER + SHIFT + ALT + ,brings back the last ten notifications exactly as they were shown, including the ones do-not-disturb silenced — and popups on screen survive shell restarts (like the one every update performs), so critical alerts always make it across by @ryanrhughes and @dhhSUPER + CTRL + V)SUPER + CTRL + E) replacing Walker pickerSUPER + CTRL + A), Bluetooth (SUPER + CTRL + B), Network (SUPER + CTRL + W), Display (SUPER + CTRL + D), and Power (SUPER + CTRL + P) replacing bluetui, impala by @dhh and @ryanrhughes~/.config/omarchy/extensions/omarchy-menu.jsonc) by @ryanrhughes and @dhhSUPER + CTRL + 1through9, counted left to right — rearranging the section or adding a widget renumbers them with no binding to rewrite by @dhhTheming & Aesthetics
SUPER + SHIFT + CTRL + SPACE) by @dhhSUPER + CTRL + SPACE) by @dhh~/.config/omarchy/shell.tomlas a machine-level override merged over the active theme, so a personal font, spacing, or bar tweak survives theme switching — and it's watched, so edits re-flow the shell liveomarchy display text size: one knob, 9–20px, that moves the shell font, GTK's text-scaling-factor, and the terminal point size in lockstep, with a notched slider in the display panelApps & Defaults
SUPER + SHIFT + W) by @dhhSUPER + CTRL + Q) by @dhhSetup > Defaults > Agent, then launch it withSUPER + SHIFT + CTRL + Aor theaterminal alias — lazy-installed on first use, opened as its ownorg.omarchy.agentapp, and started in~/Workwhen summoned from home so trust actually sticks by @dhhAlt + Shift + D) by @dhhInstall > AI, dropping the web app from the defaults so the launcher can't show two identical entries by @dhhfindof the whole home directory in a terminal by @dhhCapture
SUPER + ALT + [ / ]) by @dhh (on request from @jasonfried)RETURNcaptures the highlighted window,CTRL + RETURNthe whole display, andTABand the arrow keys move the selection through the workspace's windows by @jzimdars and @dhhotpauth://setup code on screen no longer needs a phone. The decoded value never touches disk and is marked sensitive, so clipboard history skips it by @dhh and @WondertanControls
o.bind("SUPER + SHIFT + W", "Omawrite", { launch = "omawrite" })) by @ryanrhughesSUPER + ALT + HOME/SUPER + HOMEby @dhhhdl/hds/hdlm/hsldevelopment-layout helpers by @dhhSUPER + ALT + K) and new-pane/split bindings for tmux, kitty, ghostty, and alacritty by @ryanrhughes, @vtmx, @heymaikol, and @dhhSUPER + CTRL + RETURNand its keybindings viewer withSUPER + CTRL + K, mirroring the tmux pair — plus tmux's tab moves, zoom flag, hostname in the window title, and hidden outer pane frame carried over by @dhhNetworking/Connections
System & Upgrade
/etc, so updates flow through pacman by @ryanrhughesomarchy update(bypassable viaOMARCHY_ALLOW_DIRECT_PACMAN=1) by @ryanrhughesomarchy updateon current releases instead of waiting out the release cooldown by @dhhpre-refresh-pacman.dhooks for custom repository support by @tyvsmithTrigger > Speed Test, sharing the live dial interface with the network test by @dhhSetup > Reset Computer: swap the running root for a fresh clone of the@factorysnapshot the ISO takes at install time, scrub machine identity, accounts, and fingerprint enrollments, and hand the machine back in that untouched first-boot state. A machine with no factory snapshot is turned away with an explanation rather than given a partial wipe by @dhhdiagnose-crashskill that covers symbolizing the backtrace and — only with your agreement, and after a duplicate search — reporting a confirmed Omarchy bug upstream by @dhhpaccache -rk2as the first step of an update, before the snapshot so the space is actually reclaimed, and keeping one spare version so the offline downgrade path survives by @dhhFixes
fipand friends misparsing under zsh by @pkwagnerpipefail, rerun the T2 defaults migration they skipped, and choose the gmux display backlight instead of the Touch Bar on T2 Macs/booton encrypted installs, fixing direct-boot setup and stale-UKI cleanupeflag, an unescaped VS Code theme name, unvalidated keyboard RGB), and drop the unconstrained tzupdate sudoers grant that let any wheel user write a root-owned symlink anywhere by @KazeTachinuu\uescapes instead of characters by @dhh~, which cost btop, Helix, and VS Code their theme while the migration reported success by @shrijit37--helpbeing ignored for commands that resolve with arguments left over, likeomarchy update aur --helpby @EFrMG and @dhhThanks also to @AksharP5, @artfwo, @dalmasluca, @DataDave-Dev, @DiegoMirner, @flavorjones, @franciscoaccabral, @GebaRoanoke, @glafeara, @grantwiley, @heyssh, @JustMrMendez, @kevinmcconnell, @lukehsiao, @lukewalker2010, @markbus-ai, @meirdick, @monorkin, @richardlences, @RushiChaganti, @s-gato, @setiapam, @Vtorrealba, and @vivek7405 for fixes and polish to the new Quattro features during the beta itself.
Feature presentations
The theme switcher
Switching themes is now a more visual affair: a filterable carousel of live previews for every installed theme, opened with
SUPER + SHIFT + CTRL + SPACEor via Style > Theme. You can see the new bar riding on top too.The background switcher
Backgrounds get the same treatment on
SUPER + CTRL + SPACE: flip through the current theme's backgrounds (plus any you've added) and see exactly what you're picking.The launcher and the menu, together
Walker is gone, and
SUPER + SPACEnow opens the Omarchy menu itself: a native, filterable command palette living inside the shell. Once the menu could search its own nested entries, there was no reason to keep two palettes with two shortcuts around — so one box now finds your apps and every Omarchy command, with instant response, and it's extensible through a JSONC file if you want to add your own entries.The app-launching side lost nothing in the merge: fuzzy and acronym matching, live icon indexing (freshly-installed apps show up with their icons immediately), and the ability to hide entries you never use. And when you want a launcher scoped to just your apps,
SUPER + ALT + SPACEopens exactly that.Control panels
The bar widgets now open real control panels. Audio (
SUPER + CTRL + A) has output/input device switching and volume control:Network (
SUPER + CTRL + W) shows live throughput, ping, packet loss, a one-click speed test, DNS provider selection, Wi-Fi QR sharing, and nearby networks:And weather now has a proper forecast panel, which can be pinned to a chosen location instead of following your IP around:
A bar you can grab
There's no settings panel for the bar — you just grab it. Click and hold any empty stretch of bar and drag it toward a screen edge, and a ghost slab previews where it will dock. Drop it on the left or right and it turns into a vertical bar. Double-click empty bar space to toggle transparency. Widgets are added, removed, and rearranged with
omarchy bar putandomarchy bar move, and third-party widgets install straight from git withomarchy plugin add.Privilege escalation with context
Omarchy now uses pkexec/polkit for privileged operations, with a themed prompt that tells you exactly what command you're authorizing before you type your password.
Pick your coding agent
Omarchy no longer picks a coding agent for you — it asks. Choose Claude Code, Codex, OpenCode, Pi, Oh My Pi, Gemini, Grok, Copilot, or Crush under Setup > Defaults > Agent, and it's lazy-installed the first time you use it. From then on,
SUPER + SHIFT + CTRL + A(or justain any terminal) summons your agent in its own window, started in~/Workso trust actually sticks. The model-usage bar widget keeps an eye on your Claude and Codex spend, and when a process crashes, one click on the toast briefs your agent on the core dump for a diagnosis.The new default apps
Typora is out, and Omawrite is in. A dead-simple Markdown writing app that opens in a blink, autosaves as you type, and stays out of the way. Bound to
SUPER + SHIFT + W. Free software.It's joined by Omacut, a dead-simple video trimmer. Drop in a clip — like the screen recordings Omarchy takes — drag the handles on the filmstrip, and export the cut with ffmpeg doing the heavy lifting.
Omacalc completes the trio: a dead-simple calculator replacing GNOME Calculator, on
SUPER + CTRL + Q.And the defaults have been refreshed elsewhere too: Foot is the new default terminal, Tensaku replaces Satty for image annotation, Moonlight ships for Sunshine game/desktop streaming, and dua handles disk usage.
Install it for someone else
An install can now finish with no user at all. Deferred first-boot provisioning means you can set up a machine — for a family member, a colleague, a whole classroom — and hand it over untouched. On the first boot, the owner picks their keyboard, account, hostname, and timezone behind the same logo, progress bar, and rotating tips the ISO installer uses. On an encrypted disk, the LUKS volume is re-keyed from the throwaway install passphrase to the owner's password, all-or-nothing.
And when the machine comes back,
Setup > Reset Computerhands it over again: the running root is swapped for a fresh clone of the@factorysnapshot the ISO takes at install time, with machine identity, accounts, and fingerprint enrollments scrubbed — back to that untouched first-boot state.This PR description is up to date as of
144f4d1e; next time, review commits after this one.