Commit Graph
33 Commits
Author SHA1 Message Date
David Heinemeier HanssonandClaude Opus 5 4dcbed7728 Tune swap on zram instead of leaving it at kernel defaults
Omarchy installed zram-generator but never shipped a config for it, so the
only zram tuning any machine had was whatever the ISO wrote once, and the VM
sysctls were untouched kernel defaults aimed at spinning disks.

The generator's own default caps the device at 4G, which on a large machine
sends reclaim to the hibernation swapfile far earlier than it needs to go.
Ship min(ram / 2, 8192) instead, matching what Fedora settles on, and state
the priority explicitly since it has to sit above the pri=0 that
omarchy-hibernation-setup gives the disk swapfile.

The four sysctls follow from swap being RAM rather than a disk. swappiness
above 100 says evicting an anonymous page beats dropping a page-cache page
that would have to be read back, which is true once swap is compressed
memory. page-cluster drops to one page per fault because the default of 8
buys readahead for a seek zram doesn't have and pays a decompression for
each page. Zeroing watermark_boost_factor stops fragmentation from producing
reclaim bursts while memory is still free, and raising watermark_scale_factor
gives kswapd room to reclaim in the background instead of letting allocations
stall in direct reclaim. The last two are what actually addresses the stutter
people notice and misread as swap being used too eagerly: proactive swapping
to zram is the cure, and synchronous direct reclaim is the disease.

Every ISO-installed machine already has an unowned zram-generator.conf, which
pacman would refuse to overwrite, so both upgrade paths need it listed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-24 19:48:00 -07:00
Kyunghyun Park e5924ef7d1 Fix XDG browser defaults when BROWSER is set 2026-07-24 03:26:49 +09:00
David Heinemeier HanssonandClaude Fable 5 ff1d1c325e Suppress Hyprland reload errors for the whole quattro upgrade
Suppression was enabled only after cleanup_legacy_user_paths had already
moved ~/.local/share/omarchy aside, so the live session could auto-reload
during the swap window and pop "source= globbing error: found no match"
for every legacy hyprland.conf source line. Enable suppression as the
first step of the upgrade sequence instead; the EXIT trap still restores
it if the upgrade dies early.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 11:45:23 -07:00
David Heinemeier HanssonandClaude Fable 5 f96827c909 Simplify the quattro upgrade script
- Extract run_as_user_omarchy and run_as_user_wayland_session helpers to
  replace ten hand-rolled run_as_user env blocks
- Declare the retired user-unit list once instead of three times
- Use git ls-files --others to find user-added theme backgrounds instead
  of diffing against the tracked list by hand
- Stop rewriting the SDDM 10-theme/10-wayland confs the omarchy package
  already installs, and drop the duplicate [Theme] section from
  99-omarchy-login.conf
- Drop the legacy-path rewrite in the theme hyprland.conf shim; the user
  transition already rewrote those references
- Remove dead code: the unreachable channel re-validation, the declare -F
  guard in cleanup_on_exit, and the unset block at the end of the
  user-transition script

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 11:44:50 -07:00
David Heinemeier HanssonandClaude Fable 5 88d60e1468 Point gum prompts at the terminal in the quattro upgrade
The user-transition script is fed to bash on stdin, so the browser-close
gum confirm read the script itself: it auto-declined and swallowed the
remaining script text, leaving bash to fail on a mid-construct syntax
error. The outer confirm and reboot prompts had the same exposure when
the script runs via curl | bash. Read all three from /dev/tty.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 11:39:50 -07:00
David Heinemeier HanssonandClaude Fable 5 4f1b1fceb8 Pass the --yes flag into the quattro user transition
The Copy URL shortcut repair checked the outer script's yes variable,
which never reached the user-transition heredoc's bash process, so the
upgrade died with "yes: unbound variable" under set -u whenever a
browser was running with the old extension id in its Preferences.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 11:26:33 -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 Hansson 73efa7d926 Remove stale nofile config during Quattro upgrade 2026-07-18 21:42:00 -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 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 4db7a03235 Let's try a logo 2026-07-18 10:26:55 -07:00
David Heinemeier Hansson 77353e9670 Slim down celebration text 2026-07-18 10:03:15 -07:00
David Heinemeier Hansson 0b7c440009 Use gum to prompt for consent 2026-07-17 18:27:32 -07:00
David Heinemeier Hansson 28d853402e Make the Copy URL extension reliable across install and upgrade
The Copy URL extension was intermittently failing to copy anything, and
its notification looked oversized with no icon. Several distinct problems:

- The MV3 service worker was pinned to stale cached code. Chromium caches
  the worker script for a --load-extension command-line extension and does
  NOT re-register it when the file changes in place — not on restart, not on
  a manifest version bump, not even after a clean shutdown. So updated code
  never took effect: the old worker kept calling chrome.scripting.executeScript,
  which throws once the scripting permission is gone, and the copy silently
  failed. Renaming the worker to a versioned filename (background-2.js) is a
  new script URL, which forces a fresh registration for everyone — new
  installs and existing installs alike. Rename it again on any future worker
  change (see the note at the top of background-2.js).

- Clipboard writes now go through an offscreen document (MV3's sanctioned
  path) using a textarea + execCommand('copy'), replacing executeScript +
  navigator.clipboard. This works on chrome:// pages and needs no scripting
  permission. execCommand is used deliberately: navigator.clipboard.writeText
  rejects in an unfocused offscreen document.

- Add a toolbar action (chrome.action.onClicked) so the extension is
  clickable, not keyboard-only — it was greyed out in the extensions menu
  with nothing to invoke.

- Slim the "URL copied" notification: lead the summary with a glyph so the
  omarchy notification shell collapses it to a single-line toast with an
  icon, instead of an oversized card with a blank icon slot.

- Guard the Quattro shortcut-repair migration: it edits Chromium Preferences
  to move the Alt+Shift+L binding to the new extension id, but a running
  browser rewrites Preferences on exit and reverts the edit. Prompt (via gum)
  to close the browser first, only when a browser is running and there is
  actually a stale binding to repair.
2026-07-17 16:28:18 -07:00
David Heinemeier Hansson 09aac40eae Gate first-run setup as one lifecycle 2026-07-17 07:59:16 -07:00
David Heinemeier Hansson e82df1d4d0 Track one-time setup with completion markers 2026-07-16 21:53:15 -07:00
David Heinemeier Hansson 93181b6a22 Restore service widgets with bar defaults 2026-07-16 21:15:00 -07:00
David Heinemeier Hansson af601381ca Ensure lock is setup on migration 2026-07-16 20:46:41 -07:00
David Heinemeier Hansson c58d00f203 Repair Copy URL shortcut during Quattro upgrade 2026-07-16 16:50:29 -07:00
David Heinemeier Hansson 298e14071b Take a system snapshot before upgrading to quattro 2026-07-15 17:08:24 -07:00
David Heinemeier HanssonandClaude Fable 5 7ff91d9d5c Only carry over user-added theme backgrounds during the quattro upgrade
The trailing slash from the themes/*/ glob put a double slash in the
path comparison, so stock backgrounds never matched git ls-files output
and were all moved into ~/.config/omarchy/backgrounds.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 18:16:16 -07:00
David Heinemeier HanssonandClaude Fable 5 4abd084f7f Don't glob dotfiles twice when building the live omarchy overlay
With dotglob set, * already matches dotfiles, so the extra dot patterns
made the second ln -s fail and silently skip the legacy hypr shim.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 18:16:16 -07:00
David Heinemeier HanssonandClaude Fable 5 f1bc8dad08 Purge stale omarchy package cache before the first quattro transaction
Legacy repos cached omarchy packages under the same name and version as
quattro rebuilds with different bytes, so pacman aborted --noconfirm
transactions with checksum errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 18:16:16 -07:00
David Heinemeier Hansson e49c74eee8 Keep rc on its own mirror but use the edge package repo 2026-06-29 11:28:32 -05:00
David Heinemeier Hansson d824c1bd33 Remove Figma as a default install 2026-06-29 11:04:51 -05:00
David Heinemeier Hansson f67ed326df Let's save this for a direct install 2026-06-29 10:19:28 -05:00
David Heinemeier Hansson 3fd36802ac Simplify the system-update check
No need for a panel, just focus on the main omarchy package
2026-06-23 15:59:27 +02:00
David Heinemeier Hansson 95888e69ff Replace Typora with Omawrite 2026-06-22 17:38:50 +02:00
David Heinemeier Hansson 36c1bc7dc5 Refer to Quattro 2026-06-21 14:59:18 +02:00
David Heinemeier Hansson 428b9c7b29 Use omarchy-upgrade-to-quattro 2026-06-21 12:31:06 +02:00