Commit Graph
5463 Commits
Author SHA1 Message Date
498fa284f5 looknfeel: open new windows on the active workspace (fix portal file dialogs) (#6317)
Set misc:initial_workspace_tracking = 0 so new windows appear on the currently
active workspace rather than the one their process was first launched on.

Without this, file-picker dialogs drawn by xdg-desktop-portal-gtk (browser
Open/Save, GTK app choosers, etc.) always open on the workspace where the portal
process started at login (typically workspace 1) instead of following the app
that requested them. So a Save dialog triggered from a browser on workspace 2
pops up on workspace 1, out of view.

Trade-off: an app launched on one workspace that switches away before its window
maps will now open on the new active workspace. In practice the dialog-follows-app
behavior is the more intuitive default.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 17:27:36 -07:00
David Heinemeier HanssonandClaude Fable 5 12dc7ae558 Shrink lock screen password dots to fit the field
Long passwords used to overflow the input field and clip with no
feedback that typing was still registering. Scale the dot size and
letter spacing down as the password grows, like macOS, so every
keystroke stays visible.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 11:03:00 -07:00
David Heinemeier HanssonandJon Kinney ec9f8241c1 Fix power action terminal scope race
Co-authored-by: Jon Kinney <jonkinney@gmail.com>
2026-07-19 10:31:27 -07:00
1feb0250b4 Update Omarchy skill for Quattro's Lua configuration
The skill still described pre-Quattro .conf files and workflows, sending
agents to inactive config files and stale commands. Now covers the Lua
config layout, o.bind/hl.unbind/hl.monitor forms, .d hook directories
with omarchy hook install, plugin cloning, and corrected command routes.

Distilled from #6310.

Co-Authored-By: ssupt <149246609+ssupt@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 10:20:52 -07:00
David Heinemeier HanssonandClaude Fable 5 17c8af3f14 Simplify shell restart around quickshell instance management
omarchy-restart-shell now kills by config dir via quickshell kill and
relaunches with --no-duplicate, polling kill until every instance is
gone since kill returns without waiting and -n silently exits if one
remains. The locked-session refusal reads Hyprland monitor state alone,
which covers a hung shell holding the lock; the redundant shell IPC
probe, availability guards, and omarchy-shell path indirection are gone.

Shell IPC calls now time out (2s default, OMARCHY_SHELL_IPC_TIMEOUT to
override) so probing an unresponsive shell fails fast instead of
hanging the caller.

omarchy-hyprland-launch checks dispatch output for "ok" rather than the
exit code, which is 0 even on Lua errors, so a failed dispatch falls
through to the bash -lc fallback instead of silently launching nothing.

The Quattro upgrade cutover delegates to omarchy-restart-shell instead
of carrying its own copy of the lock check, pkill, and readiness loop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 10:09:54 -07:00
David Heinemeier HanssonandClaude Fable 5 3edf254a12 Translate tmux key notation back into readable hotkeys
Restore the key translation the awk parser used to do (C-M-S-Left →
CTRL + ALT + SHIFT + LEFT, PPage → PAGE UP, etc) as a display pass over
the tmux list-keys output, along with the PREFIX header line and the
COPY MODE table label.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 10:00:46 -07:00
David Heinemeier Hansson 008f3a2212 Fix Kitty terminal cwd detection 2026-07-19 09:59:13 -07:00
3754c2c031 Use tmux to list keybindings (#6308)
* Use tmux to list keybindings

* Annotate tmux keybindings

* List unannotated bindings too and let the isolated server exit on its own

list-keys -aN falls back to the raw command when a binding has no note,
so user-added bindings in an existing tmux.conf still show up. Dropping
exit-empty off means the throwaway server exits when the client
disconnects instead of relying solely on the trap.

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>
2026-07-19 09:50:32 -07:00
David Heinemeier HanssonandClaude Fable 5 0f2f3f11cb Remember power profile choices per power source across reboots
Explicit profile selections from the power panel or menu are now saved
under an ac/battery key in ~/.local/state/omarchy/powerprofiles and
reapplied on boot and on plug/unplug. Only successful, user-made
selections are persisted, so the performance/balanced defaults still
apply when nothing has been chosen.

All entry points key off the same power signal, UPower's OnBattery:
the shell reads it natively and omarchy-powerprofiles-set autodetect
queries it via busctl. This replaces the sysfs online checks, which
disagreed with the shell on desktops without power_supply entries and
lagged behind plug events on some USB-C laptops.

Plug/unplug switching moves from the udev rule into the shell's battery
service, which already receives UPower's debounced state changes, so
the udev rule and its settle-sleep workaround are gone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 09:33:23 -07:00
David Heinemeier Hansson 6ba0e9c234 Fix monitor scaling down getting stuck at 3x due to floating point drift
Hyprland can report a scale set to 3 as something like 3.0000000000000004.
The previous directional comparison treated that as above the 3 preset, so
Super+Alt+Slash (scale down) would stay at 3 instead of reaching 2.

Snap the reported scale to the nearest preset first, then step up/down.
Add a regression test for the floating-point case.
2026-07-19 09:10:14 -07:00
David Heinemeier HanssonandClaude Fable 5 c030337cb6 Only bundle vconsole.conf in the initramfs for Latin keyboard layouts
Bundling vconsole.conf makes Plymouth apply the user's layout at the LUKS
prompt, but for layouts whose letter keys aren't Latin (Hebrew, Greek,
Cyrillic, Arabic, ...) that makes the necessarily-Latin passphrase
untypeable and locks the user out of their machine.

mkinitcpio sources its conf.d drop-ins as shell, so omarchy_hooks.conf now
checks XKBLAYOUT at every rebuild and only bundles the file for Latin
layouts; non-Latin layouts keep the US fallback the passphrase was set
under. A migration strips the unconditional line and rebuilds the UKI on
affected installs.

Closes #6229.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 09:04:09 -07:00
David Heinemeier HanssonandGitHub 7bfb8cf954 Not where we keep doc links 2026-07-19 08:12:43 -07:00
Stephen TaylorandDavid Heinemeier Hansson 9030ba870c Force software cursors on nouveau
Adapt the fix from PR #6161 to Quattro's per-user hardware setup and add coverage for detection, idempotency, and proprietary-driver handling.
2026-07-18 21:49:47 -07:00
David Heinemeier Hansson 73efa7d926 Remove stale nofile config during Quattro upgrade 2026-07-18 21:42:00 -07:00
David Heinemeier Hansson be4a9ed6dd Move Tmux keybindings to menu end 2026-07-18 21:33:10 -07:00
David Heinemeier Hansson 7b5c915c8c Clear bar move outline on release 2026-07-18 21:23:09 -07:00
David Heinemeier Hansson 6742adce3d Focus weather city input on return 2026-07-18 21:19:14 -07:00
David Heinemeier Hansson be1aab859d Prevent weather icon flicker 2026-07-18 21:19:10 -07:00
David Heinemeier Hansson c7952c980f Synchronize weather hero icon 2026-07-18 21:11:52 -07:00
ef1db32774 Prevent migration notifier from rate-limiting itself off (#6174)
omarchy-update-user-notify.path watches /usr/share/omarchy/migrations
with PathModified. A single update commonly drops several migration
files at once, so the oneshot service is re-triggered in a burst and
exceeds the default start-rate limit (StartLimitBurst=5 / 10s):

  omarchy-update-user-notify.service: Start request repeated too quickly.
  omarchy-update-user-notify.path: Failed with result 'unit-start-limit-hit'.

When the limit trips, the watching .path unit itself fails and stops
watching, so migrations that land later in the session are never
surfaced until the next login.

Set StartLimitIntervalSec=0 on the service. omarchy-migrate-notify is
idempotent, so there is no downside to letting it run on every trigger.

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-18 18:40:12 -07:00
cb989615f0 Align MAX_SNAPSHOT_ENTRIES with Snapper retention (off-by-one) (#6175)
* Align MAX_SNAPSHOT_ENTRIES with Snapper retention

Snapper is configured with NUMBER_LIMIT="5", but limine-snapper-sync
also counts the freshly-created / currently-booted snapshot, so five
retained snapshots are reported as six entries and it warns on every
snapshot and update:

  Snapshot limit mismatch: 6 Snapper snapshots exceed configured
  MAX_SNAPSHOT_ENTRIES=5

Raise MAX_SNAPSHOT_ENTRIES to 6 (NUMBER_LIMIT + 1) so the boot-menu cap
and Snapper's retention agree and the off-by-one warning stops. (An
alternative is MAX_SNAPSHOT_ENTRIES=auto, which derives the cap from
Snapper directly; kept an explicit value here to preserve the existing
boot-menu limit.)

Co-Authored-By: Claude <noreply@anthropic.com>

* Clarify Limine snapshot limit

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-07-18 18:40:11 -07:00
58e13cd079 Prevent empty drive encryption passwords (#6306)
* Prevent empty drive encryption passwords

* Use sudo, quote the confirmation compare, and cover mismatches in test

The unquoted [[ $new_password == $confirmation ]] made the confirmation
a glob pattern, so a confirmation like * matched any password. And pkexec
brought nothing over the repo-standard sudo here while failing outright
in sessions without a polkit agent.

Verified against a loopback LUKS device: new key lands from stdin without
a trailing newline while the current passphrase is prompted on the tty.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: mplaczek99 <mplaczek99@gmail.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 18:21:39 -07:00
David Heinemeier HanssonandClaude Fable 5 afa2839a5a Rename bg/fg palette keys to background/foreground
The canonical colors.toml keys are now background/foreground, including
all permutations (dark_background, darker_background, lighter_background,
dark_foreground, light_foreground, bright_foreground). The old short
names are gone entirely, not kept as aliases; legacy alacritty-generated
themes still resolve through the ANSI color0/color7 fallback.

Theme files are also regrouped: accent/selection/muted first, then the
backgrounds, then the foregrounds, then the named colors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 16:24:51 -07:00
David Heinemeier HanssonandClaude Fable 5 72d7646c64 Add SSHD setup and removal under Setup/Remove > Security
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 16:09:03 -07:00
David Heinemeier HanssonandClaude Fable 5 fa2b997513 Keep software-composited cursors out of screenshots
Hyprland falls back to compositing the cursor into the frame on GPUs
without working hardware cursors, so grim would capture it. Force
hardware cursors for the duration of the capture and restore after.

Closes #6142

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 15:42:01 -07:00
David Heinemeier HanssonandClaude Fable 5 96bb617a9c Match Mullvad hosts by suffix
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:56:46 -07:00
David Heinemeier Hansson 1620b3467b Refresh applications during Quattro upgrade 2026-07-18 12:56:46 -07:00
1024bf5e7a Backfill pre-quattro hardware support and tmux fixes for existing installs
Existing quattro installs get sof-firmware, the Mesa Vulkan drivers,
the tmux terminal-features and pane-binding fixes, and the XPS 13 text
scaling via migration, while Omarchy 4 upgraders get the same hardware
support and scaling through omarchy-upgrade-to-quattro.

The Vulkan driver backfill adapts da46ad85 from master.

Co-authored-by: Sai Sridhar <tarrasridhar1154@gmail.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:31:34 -07:00
David Heinemeier HanssonandClaude Fable 5 46df0cf495 Nudge XPS 13 text scaling down just ever so slightly
The 2560x1600 panel on the 2026 XPS 13 (DX13260) renders the default
scaling a touch large. Ports f1fa7f69 from master.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:31:25 -07:00
David Heinemeier HanssonandClaude Fable 5 804d138909 Widen sof-firmware install to all Intel SOF audio platforms
The sof-audio-pci-intel-* driver family needs sof-firmware to boot the
DSP, but mainline linux only optdeps it, so affected installs came up
with a Dummy Output sink only. Replace the Panther Lake check with
omarchy-hw-intel-sof, which detects any Intel PCI audio controller.

Ports ffa81021 from master, which adapts basecamp/omarchy#6200.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:31:25 -07:00
6a4ba9df7c Bundle vconsole.conf in the initramfs so Plymouth uses the right keymap at the LUKS prompt
Ports e891e5c2 from master.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:31:13 -07:00
f322f0332b Drop fixed unit name from power-profile udev rule to prevent wakeup failures
With a fixed --unit name, the rule fails to start when a unit from a
previous power event still exists, leaving the power profile stale.
Letting systemd-run generate unique unit names keeps every trigger
working; --collect still garbage-collects each unit on exit.

Ports 749a8c04 from master.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:31:13 -07:00
David Heinemeier HanssonandClaude Fable 5 2f081f57b2 Append the kitty extkeys terminal feature instead of overwriting slot 3
Ports efcd7805 from master.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:31:03 -07:00
David Heinemeier HanssonandClaude Fable 5 a4c13bdefb Make package removal match exact installed names only
pacman -Q resolves provider names, so dropping a virtual package could
remove whichever package provides it. Read pacman -Qq once and match
requested names exactly, ignoring providers and duplicate arguments.
Ports the provider-ignoring semantics of 9791b227 from master with a
single pacman query instead of one per package.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:31:03 -07:00
David Heinemeier HanssonandClaude Fable 5 f7152cac17 Remove dropped bsnes2014 and mame2016 RetroArch cores
libretro-bsnes2014 and libretro-mame2016 no longer exist in the repos,
which made the whole retroarch install fail. Ports fe30a07d from master.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:30:54 -07:00
David Heinemeier HanssonandGitHub d39c791e68 Merge pull request #6236 from basecamp/fix-clamshell-dpms-wake
Fix internal laptop screen re-lighting itself 2sec after locking
2026-07-18 12:09:04 -07:00
David Heinemeier HanssonandClaude Fable 5 9aa1dcd664 Drag the bar to move it, drop the config panel
Position the bar by dragging (or click-and-holding) empty bar space
toward a screen edge, with a ghost slab previewing the target edge.
With drag for position and double-click for transparency, the bar
config panel, its inline gear button, and the omarchy-launch-bar-settings
CLI are no longer needed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 11:44:35 -07:00
David Heinemeier Hansson 66cdec78c2 Align bar settings control spacing 2026-07-18 10:56:19 -07:00
David Heinemeier Hansson 52ecb4eaf7 Equalize bar status icon spacing 2026-07-18 10:51:14 -07:00
David Heinemeier Hansson b39313abcf Simpler finish 2026-07-18 10:45:47 -07:00
David Heinemeier Hansson d0cc4b9674 More explicit clear 2026-07-18 10:40:43 -07:00
David Heinemeier Hansson 79e408b323 Clear before the logo 2026-07-18 10:33:02 -07:00
David Heinemeier Hansson 4d3165d8c1 Keep new browser windows on current workspace 2026-07-18 10:29:38 -07:00
David Heinemeier Hansson 4db7a03235 Let's try a logo 2026-07-18 10:26:55 -07:00
David Heinemeier Hansson 3f87af5ef4 Quote Omarchy paths in commands 2026-07-18 10:08:43 -07:00
David Heinemeier Hansson 8862fb22bd Use Omarchy command helpers consistently 2026-07-18 10:08:43 -07:00
David Heinemeier Hansson bd34704f7b Clarify privilege escalation guidance 2026-07-18 10:08:43 -07:00
David Heinemeier Hansson 77353e9670 Slim down celebration text 2026-07-18 10:03:15 -07:00
Stanko K.R. bfefcc7e11 Wake internal display only when leaving clamshell
The clamshell watcher polls omarchy-hyprland-monitor-clamshell every two
seconds and calls enable_internal unconditionally which re-enabled DPMS
on the internal panel each time. When the lock screen blanks the displays,
the next poll of  omarchy-hyprland-monitor-clamshell re-lights the laptop
screen, leaving it showing the lock screen indefinitely while external
monitors stayed off.

Only issue the DPMS wake when the clamshell flag was actually consumed,
i.e. on the lid-open transition the wake was meant for.

If the lid-open even fails to turn on the screen for whatever reason,
then pressing a key or moving the mouse will re-light the screen. This
is configured in `input.lua` via `key_press_enables_dpms = true` and
`mouse_move_enables_dpms = true`
2026-07-18 15:18:05 +02:00
David Heinemeier Hansson 784996c378 Scale webcam overlay to monitor resolution 2026-07-17 18:28:44 -07:00