Compare commits

...
Author SHA1 Message Date
David Heinemeier Hansson b0ab9782d6 Completion should not include --help 2026-05-01 18:03:12 +02:00
David Heinemeier Hansson f02305ecd8 This was actually correct using an alias 2026-05-01 18:01:41 +02:00
David Heinemeier Hansson 4a12b41893 Hide individual omarchy-* binaries from initial-word command completion
The unified `omarchy` dispatcher is the user-facing entry point
2026-05-01 17:59:17 +02:00
David Heinemeier Hansson c9ff10b4fd Update to use the new single command cli 2026-05-01 17:47:10 +02:00
David Heinemeier Hansson 0f8eb3a6e6 Fix tests 2026-05-01 17:39:59 +02:00
David Heinemeier Hansson f2c1339641 Correct to what's now right 2026-05-01 17:38:20 +02:00
David Heinemeier Hansson a2e83a784e Add missing docs 2026-05-01 17:33:36 +02:00
David Heinemeier Hansson 0d4a076a10 Add omarchy command documentation 2026-05-01 17:31:25 +02:00
David Heinemeier Hansson ee6fbda428 Add bash completions for command 2026-05-01 17:25:23 +02:00
David Heinemeier Hansson d84d2fe11d Remove outdated or internal 2026-05-01 17:23:58 +02:00
David Heinemeier Hansson bc512b437f Merge remote-tracking branch 'origin/dev' into omarchy-cli
# Conflicts:
#	bin/omarchy-hyprland-monitor-watch
#	bin/omarchy-plymouth-reset
#	bin/omarchy-sudo-passwordless
2026-05-01 17:07:09 +02:00
cdb9694360 Add a toggle for touchscreen on supported devices (#5510)
* Add minimum brightness cap to prevent OLED displays turning off

* Revert "Add minimum brightness cap to prevent OLED displays turning off"

This reverts commit fe855ecf9aeacfa1b9ffcff3d43adb10908435e5.

* Add touchscreen toggle support

* Use finger glyph

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-05-01 16:47:11 +02:00
c078d7ad05 Implement non-uniform brightness step adjustments (#5525)
* Implement non-uniform brightness step adjustments

Add logic for non-uniform step size adjustments based on current brightness level.

* Ensure percentages are moved in a consistent manner so we don't get rounding errors

* Ensure we don't go below 1%

To prevent screen from turning off entirely on some models

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-05-01 16:43:32 +02:00
69ddcfdf2e Updated interface color configuration to RRGGBB format (#5471)
Migrated branding and help text color definitions to the new hexadecimal RRGGBB format in accordance with the latest Limine specifications. This update also introduces the interface_help_colour_bright parameter to ensure consistent visual aesthetics during the auto-boot sequence.

For the time being, a green palette has been implemented to maintain the traditional visual identity of Omarchy.

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-05-01 16:37:34 +02:00
Nicolas DorierandGitHub 61848c1910 Fix hibernation on new NVidia drivers (#5519)
New drivers don't seem to expose the necessary suspend interface to use `NVreg_PreserveVideoMemoryAllocations`.

I explained the issues I experienced on:
https://github.com/basecamp/omarchy/discussions/5500

While https://github.com/omacom-io/omarchy-pkgs/pull/84 fixed part of
the issue, the default value of `NVreg_PreserveVideoMemoryAllocations`
is `2`, which doesn't work.
2026-05-01 16:32:09 +02:00
Tushar ChauhanandGitHub 21f712c325 Fix: read files from symlink directory in background selector menu (#5524)
* Fix: read files from symlink directory in background selector menu

* safely parse the path to avoid option injection

* Simply use -L flag with find to resolve symlinks
2026-05-01 16:31:02 +02:00
Nicolas DorierandGitHub bb0adde652 Restore jetbrains no_follow_mouse (#5239)
This reverts partially commit e5783569489818724d221f4400cb952f300d29ad.
2026-05-01 16:12:40 +02:00
David Heinemeier Hansson 26741bf4e3 Correct spelling 2026-05-01 14:15:03 +02:00
David Heinemeier Hansson bf9be2ea1b Fix casing 2026-05-01 11:27:15 +02:00
David Heinemeier Hansson 18275dcaca Preinstall cliamp 2026-05-01 09:45:25 +02:00
David Heinemeier Hansson 3c780c19ce Ensure Brave Origin is supported for live themeing just like regular Brave 2026-05-01 09:26:19 +02:00
David Heinemeier Hansson 317eb44fb2 Add ghui is a lazy-installed TUI 2026-05-01 08:47:26 +02:00
David Heinemeier Hansson c06bbe40bb Allow for lazy-install of bun runtime 2026-05-01 08:46:12 +02:00
David Heinemeier Hansson 0555c34416 Allow for bun to be the executor and bring back the spinner 2026-05-01 08:31:38 +02:00
David Heinemeier Hansson ec69817e74 Fix spelling 2026-04-30 22:23:43 +02:00
cfultonandGitHub 6fac70d1a1 Replace deprecated sainnhe.everforest VSCode extension with reesew.everforest-theme (#5498) 2026-04-30 21:19:52 +02:00
guidovicinoandGitHub c6e55ca4ba Move Obsidian launch flags to user config (#5488)
* Move Obsidian flags to user config

* Preserve Obsidian flags during migration

* Keep existing Obsidian launch flags

* Copy default Obsidian flags in migration
2026-04-30 21:17:53 +02:00
David Heinemeier Hansson d5aa4b7b4b Only XPS now needs the custom ptl kernel 2026-04-30 21:09:22 +02:00
Andrii FurmanetsandGitHub 0b1607786d Restart Walker after removing web apps (#5513) 2026-04-30 20:14:29 +02:00
Danila DanilinandGitHub 710356e900 fix: to check encrypted drives amount (#5515) 2026-04-30 20:14:01 +02:00
David Heinemeier Hansson 6ab4196985 Quiet this during install 2026-04-30 20:09:01 +02:00
David Heinemeier Hansson 24b32da1a1 Ensure policy directories are available before we try writing to them 2026-04-30 20:07:43 +02:00
David Heinemeier Hansson a43df3963a Correct the order to prevent error message during install 2026-04-30 20:04:54 +02:00
David Heinemeier Hansson 91608ea3d3 Update interface_branding_color for limine 12 2026-04-30 19:38:04 +02:00
David Heinemeier Hansson 6fc7f90e43 Revert "Try debugging F13P issue by not turning on fred there"
This reverts commit f15094c9ef.
2026-04-30 19:30:06 +02:00
David Heinemeier Hansson f15094c9ef Try debugging F13P issue by not turning on fred there 2026-04-30 18:42:37 +02:00
David Heinemeier Hansson 25b114fa7a Also not used 2026-04-30 18:40:58 +02:00
David Heinemeier Hansson 6b8c2a0a04 Not installed any more either 2026-04-30 18:34:26 +02:00
David Heinemeier Hansson 340c8ceeef We already have this listed on base 2026-04-30 18:30:10 +02:00
David Heinemeier Hansson c86ebe0cc3 Nothing is actually using dart 2026-04-30 18:18:13 +02:00
AlexandreandGitHub 5683b1bdbd Fix internal monitor disable for non-eDP-1 systems (#5511)
Detect the internal monitor name dynamically at runtime instead of
hardcoding eDP-1 in a static toggle conf file. Uses the same pattern
as omarchy-hyprland-monitor-internal-mirror.

Fixes #5443
2026-04-30 17:51:29 +02:00
David Heinemeier Hansson cbefe54238 Refresh the configs 2026-04-30 17:31:32 +02:00
David Heinemeier Hansson 36026d78ed Reapply "Simplify the migration"
This reverts commit 0a57fae591.
2026-04-30 17:30:44 +02:00
David Heinemeier Hansson 6ef510cc54 Reapply "Ensure we don't lose walker and elephant when we swap around"
This reverts commit e5536f3c4d.
2026-04-30 17:30:42 +02:00
David Heinemeier Hansson eca926b5a4 Reapply "Replace coterie of individual Elephant packages with the single elephant-all package"
This reverts commit 8ff1208bdd.
2026-04-30 17:30:40 +02:00
David Heinemeier Hansson 175a22a048 Reapply "Just use the direct packages now that there's a single bundle for elephant-all"
This reverts commit 14f155eecb.
2026-04-30 17:30:38 +02:00
David Heinemeier Hansson 14f155eecb Revert "Just use the direct packages now that there's a single bundle for elephant-all"
This reverts commit b8a4d0b2ef.
2026-04-30 17:28:44 +02:00
David Heinemeier Hansson 8ff1208bdd Revert "Replace coterie of individual Elephant packages with the single elephant-all package"
This reverts commit c5784432e0.
2026-04-30 17:28:31 +02:00
David Heinemeier Hansson e5536f3c4d Revert "Ensure we don't lose walker and elephant when we swap around"
This reverts commit 6ce6f94647.
2026-04-30 17:28:20 +02:00
David Heinemeier Hansson 0a57fae591 Revert "Simplify the migration"
This reverts commit 37b60e5505.
2026-04-30 17:28:15 +02:00
David Heinemeier Hansson 91af40fd7c Enable fred=on on intel ptl machines 2026-04-30 17:26:14 +02:00
David Heinemeier Hansson 37b60e5505 Simplify the migration 2026-04-30 17:23:02 +02:00
David Heinemeier Hansson 6ce6f94647 Ensure we don't lose walker and elephant when we swap around 2026-04-30 17:20:45 +02:00
David Heinemeier Hansson c5784432e0 Replace coterie of individual Elephant packages with the single elephant-all package
Closes https://github.com/omacom-io/omarchy-pkgs/issues/12
2026-04-30 12:51:40 +02:00
David Heinemeier Hansson b8a4d0b2ef Just use the direct packages now that there's a single bundle for elephant-all 2026-04-30 11:47:18 +02:00
David Heinemeier Hansson 0aafd647e7 Better ordering 2026-04-30 10:25:45 +02:00
Michał BorejszoandGitHub d8a0deb400 Color man pages with bat (#5491) 2026-04-30 10:25:28 +02:00
Ben SmithandGitHub 768eabaaba Refactor ThinkPad mic mute to use omarchy-swayosd-client (#5493) 2026-04-30 10:24:05 +02:00
17ac8453b2 Fix refresh-config when target directory is missing (#5497)
* Don't use the names here since they break the all-themes setup in omarchy-nvim

* Fix refresh-config when target directory is missing

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-30 10:22:48 +02:00
David Heinemeier Hansson a677d6b7a3 We don't need to set PATH here any more
Closes #5472
2026-04-30 10:04:17 +02:00
David Heinemeier Hansson 7f9e1628d9 Ensure we cleanup stale snapshots 2026-04-30 09:40:08 +02:00
35789cc102 Add laptop display mirror toggle + hotkey (#5462)
* Add check for active external monitors before disabling internal display

Co-authored-by: Copilot <copilot@github.com>

* Revert "Add check for active external monitors before disabling internal display"

This reverts commit e20b3da87e3df0f084c0bca232a61ba58fab4cdc.

* feat(hyprland): add toggle for internal monitor mirroring

- Implement `omarchy-hyprland-monitor-internal-mirror` to dynamically mirror the internal eDP display to external monitor.
- Update `omarchy-hyprland-monitor-internal` to prevent disabling the laptop screen if mirroring is currently active.
- Add "Mirror Display" toggle to omarchy hardware Menu

* Ensure there is also a laptop monitor available to mirror before we do it

* Fix toggle use

* Recover from mirror mode gracefully

* Add hotkey to mirroring

---------

Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-29 20:19:32 +02:00
2f257e167c alacritty.toml fallback for legacy themes without colors.toml (#5404)
* add generation of colors.toml via alacritty.toml

* Shorter command name

* Fix perms

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-29 15:46:18 +02:00
N1R4andGitHub 66da3644fc feat: add dosfstools for /boot recovery (#5448)
Adds dosfstools to default installs and migrates existing systems so fsck.fat and mkfs.fat are available for Omarchy’s FAT32 /boot partition. This also helps with recovery from dirty or corrupt FAT filesystems after unclean shutdowns or power loss.
2026-04-29 15:32:08 +02:00
David Heinemeier Hansson ac40c0dbad Audio has input and output, easier to understand this way 2026-04-29 15:17:53 +02:00
David Heinemeier Hansson ed62fa81ec Move omarchy-cmd-share to omarchy-menu-share 2026-04-29 15:15:39 +02:00
David Heinemeier Hansson 4cc4144074 Move omarchy-cmd-first-run out of the cmd namespace too 2026-04-29 15:14:18 +02:00
David Heinemeier Hansson 39a289412d Move omarchy-cmd-screensaver to just omarchy-screensaver
We should just have omarchy-cmd-* for cmd checks
2026-04-29 15:11:37 +02:00
David Heinemeier Hansson 74a3797cf0 Move omarchy-lock-screen to omarchy-system-lock to fit with the others 2026-04-29 15:08:20 +02:00
David Heinemeier Hansson a7593ade7a Move audio commands under the same namespace 2026-04-29 15:00:59 +02:00
David Heinemeier Hansson c647edbc04 Allow passwordless sudo to be toggled from the toggle menu 2026-04-29 14:58:34 +02:00
David Heinemeier Hansson 12d8e001ab Simpler command structure 2026-04-29 14:54:03 +02:00
David Heinemeier Hansson e76d7544d3 Move omarchy-cmd-screen* to omarchy-capture-screen*
Will match upcoming cli grouping too
2026-04-29 14:50:15 +02:00
David ZuckerandGitHub 858916783f Allow Docker DNS from 192.168 networks (#5465)
* Allow Docker DNS from 192.168 networks

* Only add Docker DNS rule when UFW is active
2026-04-29 14:10:02 +02:00
bontalorandGitHub 4cc6ea3d9f Fix: Use accel_profile=flat instead of force_no_accel for proper pointer behavior (#5479)
* Replace force_no_accel with accel_profile

* Correct comment
2026-04-29 13:55:52 +02:00
David Heinemeier Hansson 114633f0e8 Hide needless noisy on startup and shutdown 2026-04-29 10:41:00 +02:00
David Heinemeier Hansson 6e04ff776b Add additional Tokyo Night backgrounds 2026-04-29 10:21:09 +02:00
David Heinemeier Hansson 008bdf0ff7 Revert "Retain the splash"
This reverts commit 951d6dfc49.
2026-04-29 08:54:40 +02:00
David Heinemeier Hansson 951d6dfc49 Retain the splash 2026-04-29 08:51:14 +02:00
David Heinemeier Hansson ca9cefe718 Speedup login sequence by about 3s 2026-04-29 08:09:10 +02:00
David Heinemeier Hansson 4e341fea3e Add omarchy bg option to all themes 2026-04-28 19:17:46 +02:00
David Heinemeier Hansson 93141bd578 Set SDDM login screen to the same theme as boot unlock 2026-04-28 18:08:34 +02:00
Ryan Hughes 4375782b7a Add omarchy CLI 2026-04-28 12:03:46 -04:00
David Heinemeier Hansson eb3da87992 We are going for another minor 2026-04-28 17:56:22 +02:00
David Heinemeier HanssonandGitHub 2716a3207c Provide unlock themeing (#5476) 2026-04-28 17:55:59 +02:00
David Heinemeier Hansson 8e30b2442c Add subtle highlight for better readability
Closes #5402
Co-authored-by: @pipetogrep
2026-04-28 15:58:35 +02:00
David Heinemeier Hansson 069f0c35c7 Add oma.png alternative plymouth logo 2026-04-28 11:51:47 +02:00
David Heinemeier Hansson 72ac23610f Try with split out i aliases 2026-04-28 11:51:47 +02:00
11e549a8ba Isolate npx wrapper runtime from project PATH (#5341)
* Don't use the names here since they break the all-themes setup in omarchy-nvim

* Pin Omarchy npx wrappers to matching node+npx binaries

* Fix npx wrappers when mise node is missing

* Pin npx wrappers to matching mise node runtime

* Isolate npx wrapper runtime from project PATH

* Clarify npx wrapper bin resolution

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-27 16:06:55 +02:00
David Heinemeier Hansson 7b79360ea1 Bump version 2026-04-27 15:56:03 +02:00
Justin BiardandGitHub 985a8010e6 chore: update hyprland wiki links (#5466) 2026-04-27 14:59:16 +02:00
a6bb239919 omarchy-setup-fingerprint: pre-remove libfprint to avoid noninteractive abort (#5463)
libfprint-git provides+conflicts libfprint, so pacman -S --noconfirm
defaults the conflict prompt to N and the install aborts. Pre-remove
libfprint with -Rdd; libfprint-git's provides=libfprint re-satisfies
fprintd's dep immediately after install.

replaces=(libfprint) on the OPR PKGBUILD was considered and rejected:
it does not affect direct -S installs (only -Syu repo scans), and on a
published package it would silently swap libfprint for libfprint-git
on every -Syu including machines with no FocalTech sensor.

Verified on B9406CAA non-interactively; fprintd-list and fprintd-verify
continue to work against existing enrollments.

Follow-up to #5454.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 14:58:27 +02:00
542ae346a0 Add ASUS ExpertBook B9406 fingerprint reader (FocalTech FT9349) support (#5454)
The B9406CAA ships with a Focal Tech FT9349 ESS sensor on USB 2808:a97a.
Mainline libfprint at 1.94.x lacks the open-source focaltech_moc driver
entirely; the driver is in libfprint master under LGPL but no upstream
release has shipped with PID 0xa97a in id_table[]. OPR carries
libfprint-git with both the driver and the PID patch.

Inline detection in omarchy-setup-fingerprint via /sys/bus/usb so we
don't introduce a one-off hardware-match script just for this case.
The check is cheap and runs only when the user opts into fingerprint
setup (lazy install pattern). Once upstream libfprint catches up, the
extra branch becomes harmless because libfprint-git provides=libfprint.

Tested end-to-end on B9406CAA: fprintd-enroll completes, fprintd-verify
matches enrolled fingers and rejects others, survives suspend/resume.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 11:39:31 +02:00
David Heinemeier Hansson 09411c4581 Make the "your kernel has been updated" check more resilient 2026-04-27 11:00:06 +02:00
Mathias EekandGitHub 88da163768 Fix jumping cursor / disable-while-typing on ASUS ROG Flow Z13 detachable keyboard (#5452)
* Fix disable-while-typing on ASUS ROG Flow Z13 detachable keyboard

* Replace lsusb with DMI detection for Z13 keyboard

* Use omarchy-hw-match instead of custom z13_present function
2026-04-27 08:49:48 +02:00
David Heinemeier Hansson 44d8d9b00f Use helper for this test 2026-04-27 08:42:44 +02:00
David Heinemeier Hansson 99f4cfbb1e Configure user directories with just modern relevancy 2026-04-27 08:38:54 +02:00
b164549b51 Add ASUS ExpertBook B9406 display and touchpad fixes for Panther Lake (#5435)
* Add ASUS ExpertBook B9406 display and touchpad fixes for Panther Lake

* Drop B9406 migration

Per DHH's review: the migration's audience is essentially nobody.
Anyone running Omarchy on B9406 today is doing so via nomodeset
manually at every boot, not via a working unmodified install. Fresh
installs after this PR ships will pick up the fixes through the
hardware-match install hook; no migration needed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 18:31:43 +02:00
David Heinemeier Hansson 5f184e5099 Make it clearer 2026-04-26 08:45:52 +02:00
David Heinemeier Hansson 89162a4be1 Add way to customize the plymouth theme more easily 2026-04-26 08:45:02 +02:00
David Heinemeier Hansson 4b7fe16029 Offer direct boot as a toggle option 2026-04-25 21:33:46 +02:00
David Heinemeier Hansson e01741afab Hide useless lstopo.desktop 2026-04-25 21:17:18 +02:00
Ryan Hughes 2b4d89a9ea Keep hyprpicker alive until capture is complete to prevent mid-transition screenshots 2026-04-24 19:23:07 -04:00
David Heinemeier Hansson 0041950d46 Only reencode if we detect garbage frames 2026-04-24 10:47:04 +02:00
David Heinemeier Hansson 1d4c859c71 Proper fix for using device dark mode in Chrome 2026-04-24 10:39:40 +02:00
David Heinemeier Hansson 0be4648773 Better guard against scrambled frames in screenrecording on slower systems 2026-04-24 10:39:31 +02:00
David Heinemeier Hansson 1cf28a9fda Show detailed battery notification on right-click on Waybar battery icon 2026-04-24 10:00:41 +02:00
David Heinemeier Hansson 40f41a5299 Fix hw check for hybrid gpu 2026-04-24 09:56:08 +02:00
David Heinemeier Hansson 5f7a577283 Fix starting tailscale in installer
Closes #5400
2026-04-23 14:39:22 +02:00
David Heinemeier Hansson 274a72c77a Fix the offer to restart when the linux kernel changes 2026-04-23 13:03:26 +02:00
David Heinemeier Hansson 09f93b5a92 Make vantablack fully black for OLED glory 2026-04-23 12:47:16 +02:00
David Heinemeier Hansson 1782e76d20 Also refresh the monitor config 2026-04-23 12:26:12 +02:00
David Heinemeier Hansson f40a3fd1b7 Fix brightness icons 2026-04-23 12:22:45 +02:00
David Heinemeier Hansson a74afeb4e5 Switch to an earlier recovery for the internal monitor on reboot 2026-04-23 11:54:11 +02:00
David Heinemeier Hansson 3c8d7bb5ce Revert "There is no rc-mirror, only stable-mirror and mirror"
This reverts commit 2682cc2853.
2026-04-23 11:14:46 +02:00
David Heinemeier Hansson 96afc68461 Move to a hardware check for external monitors instead to deal with recover timing 2026-04-23 11:14:14 +02:00
David Heinemeier Hansson 6953ea9af8 The mirror needs to be edge here too 2026-04-23 10:59:04 +02:00
David Heinemeier Hansson 2682cc2853 There is no rc-mirror, only stable-mirror and mirror 2026-04-23 10:58:00 +02:00
David Heinemeier Hansson cac03a5b64 Add i alias for ide with opencode and claude 2026-04-23 10:54:34 +02:00
David Heinemeier Hansson 2982ac4725 Ensure headless monitors aren't counted 2026-04-23 10:49:24 +02:00
David Heinemeier Hansson 3618eebdaa Make recover always a silent operation 2026-04-23 10:18:38 +02:00
David Heinemeier Hansson 24ad7c7aba Drop home snapshots, limit root shots to just 5, no btrfs quotas
cc @ryanrhughes
2026-04-23 09:55:59 +02:00
David Heinemeier Hansson 86a9d3e04c Allow the timelimit to be extending by passing in an explicit set of minutes 2026-04-23 09:55:59 +02:00
de2824edde Quote OMARCHY_PATH in migration source command
Agent-Logs-Url: https://github.com/basecamp/omarchy/sessions/36fb96d5-70fd-4365-9550-e7ff5f8735d1

Co-authored-by: dhh <2741+dhh@users.noreply.github.com>
2026-04-23 09:16:12 +02:00
David Heinemeier Hansson bc53a0a7c5 Does not look like we needed that change after all 2026-04-22 22:18:34 +02:00
James MainaandGitHub f9f08580df Lowercase theme name in omarchy-theme-install to match omarchy-theme-set (#5392) 2026-04-22 22:06:54 +02:00
Pierre Olivier MartelandGitHub 826d9f4e2f Use the code instead so this mapping works with non US English keyboards too (#5391) 2026-04-22 22:04:27 +02:00
David Heinemeier Hansson 27779668f3 Just use the official package directly 2026-04-22 21:27:56 +02:00
David Heinemeier Hansson ced028f87a Don't fail if headers haven't been installed 2026-04-22 19:51:16 +02:00
MarcoandGitHub 590f2e25e6 Add ThinkPad mic mute LED sync following XPS hardware handler pattern (#4938)
Omarchy 3.5.1 shipped hardware-specific mic mute handling for Dell XPS
(bin/omarchy-cmd-mic-mute-xps) which made the original PR #4938 approach
obsolete — that PR added a global omarchy-cmd-mic-mute that handled the
toggle inline, but upstream now owns that dispatcher.

This follows the same pattern to add ThinkPad support by extending
omarchy-hw-match to also check product_family (ThinkPad systems report
"ThinkPad T14s Gen 2a" there, not in product_name) and adding
omarchy-cmd-mic-mute-thinkpad which uses brightnessctl to sync the
platform::micmute LED, simpler than the ALSA approach needed for XPS.

Note: as more vendors are added this per-vendor dispatcher will get
unwieldy. A future refactor could move hardware LED sync into
install/config/hardware/ scripts that drop a hook or config file,
keeping omarchy-cmd-mic-mute thin and vendor-agnostic.
2026-04-22 19:49:15 +02:00
David Heinemeier Hansson 01d1984093 Fix perms 2026-04-22 19:44:54 +02:00
David Heinemeier Hansson a1d5e0c40c Use new correct catppuccin-nvim colorscheme 2026-04-22 17:16:00 +02:00
David Heinemeier Hansson 35650a633d Fix broken hide button on screensharing overlay 2026-04-22 17:15:32 +02:00
David Heinemeier Hansson a31751ad95 Bump version 2026-04-22 16:33:44 +02:00
David Heinemeier Hansson 0e335a1791 Add 1.25 as a scaling option too and rewrite the matching 2026-04-22 16:20:26 +02:00
David Heinemeier Hansson 0d5b680c2a Make it possible to travel backwards on the resolution scaling 2026-04-22 16:15:30 +02:00
fc258fa8b2 Elephant menu fix when using customized default themes (#4953)
* Adds a check to see if the default theme has a preview if the user customized default theme lacks one.

* Update default/elephant/omarchy_themes.lua

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Reduce duplication

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-22 15:52:49 +02:00
Pierre Olivier MartelandGitHub 4223cd9922 Use OMARCHY_PATH in omarchy-migrate (#4937) 2026-04-22 15:40:30 +02:00
David Heinemeier Hansson 8953ee822a Only show hybrid gpu toggle if hardware is available 2026-04-22 15:05:26 +02:00
David Heinemeier Hansson 57b779e249 Extract hardware toggles into their own menu and hotkey 2026-04-22 15:00:09 +02:00
innerviewerandGitHub b275ec50be (Bash) Add lazy initialization of try command. (#5179)
* (Bash) Add lazy initialization of `try` and `mise` commands.

* (Bash) Removed lazy-loading for `mise`
2026-04-22 14:02:53 +02:00
bde1537f6e Use wpctl instead of pactl to switch default audio sink (#5236)
pactl set-default-sink only updates PipeWire's default.audio.sink
metadata, but WirePlumber immediately overrides it back because
default.configured.audio.sink remains unchanged. wpctl set-default
updates both, making the switch actually persist.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-22 13:56:15 +02:00
Stefan GründelandGitHub 1c65d1db0f Add migration script to enable GPU in voxtype if Vulkan is available (#5203) 2026-04-22 13:53:52 +02:00
Nicolas DorierandGitHub d4f4592dd2 Make Typora's print dialog float (#5208) 2026-04-22 13:52:39 +02:00
pontinoandGitHub 4e7c51b3bc Update cx alias to use new --permission-mode flag (#5233)
The `--allow-dangerously-skip-permissions` flag has been replaced
by `--permission-mode bypassPermissions` in Claude Code.
2026-04-22 13:50:47 +02:00
14a599ab9d Normalize screen recording audio levels (#5244)
* Normalize screen recording audio

Screen recordings capture audio at whatever the system level is set to,
which often results in very quiet audio. Add a post-processing step that
normalizes audio to -14 LUFS using ffmpeg loudnorm after the first-frame
trim. Video is copied without re-encoding. Silently skipped for
recordings with no audio track.

* Do both trimming and normalizing in a single step so we don't have to process the video twice

* Simplify conditional

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-22 13:50:05 +02:00
Waleed HassanandGitHub e757ae98ea Lumon color.toml updated for better visibility of selected text (#5269) 2026-04-22 13:40:10 +02:00
David Heinemeier Hansson 73641f721d Match order from elsewhere 2026-04-22 13:36:29 +02:00
David Heinemeier Hansson cd3e683fef Combine into one script with options 2026-04-22 13:35:20 +02:00
Pete JacksonandGitHub 1ca9c7ea0d Skip browser policy refresh when browser is not running (#5321)
chromium/brave --refresh-platform-policy blocks forever when the
browser is not already running, hanging omarchy-update entirely.
Guard both calls with pgrep so the policy file is still written
(picked up on next launch) but the blocking refresh is skipped.

Closes #4772
2026-04-22 13:26:26 +02:00
Pete JacksonandGitHub 0a4490a1f1 Restore keyboard layout after hyprland config refresh (#5319)
omarchy-refresh-hyprland overwrites input.conf with the default
template, which has kb_layout and kb_variant commented out. Non-US
users lose their keyboard layout with no obvious recovery path.

Re-run detect-keyboard-layout.sh after the refresh so the system
layout from /etc/vconsole.conf is re-applied, matching what the
initial install does.

Closes #2507
2026-04-22 13:24:59 +02:00
David Heinemeier Hansson edf7067797 Extract omarchy-swayosd-client
So we don't have to manually compose it every time
2026-04-22 13:04:30 +02:00
David Heinemeier Hansson ed9ecccb21 Better notification message 2026-04-22 13:04:01 +02:00
David Heinemeier Hansson 843ee8ff49 Extract omarchy-hw-touchpad and simplify conditionals 2026-04-22 12:59:57 +02:00
DrunkLeenandGitHub d00b3ea24b feat: Add Touchpad toggle/on/off support (#5353)
* feat: add touchpad toggle keybinding and script

Binds XF86TouchpadToggle/On/Off to a new leenium-toggle-touchpad script
that enables/disables the touchpad via hyprctl and shows OSD feedback.

* fix: make XF86TouchpadOn/Off enforce state instead of toggling

Add on/off/toggle argument support to omarchy-toggle-touchpad.
XF86TouchpadOn now always enables and XF86TouchpadOff always disables,
so firmware that emits separate On/Off keysyms behaves correctly regardless
of current state. XF86TouchpadToggle retains the invert behavior.

* feat: add touchpad toggle to menu and persist state as hyprland config

- Show touchpad option in toggle menu only when a touchpad/trackpad device is detected
- Replace /tmp state file with a persistent hyprland device config at
~/.local/state/omarchy/toggles/hypr/touchpad-disabled.conf

* fix: avoid unsafe && || toggle logic for Touchpad state

Replace `[[ -f $STATE_CONF ]] && enable || disable` with an explicit if/else.
The previous logic was not a true ternary: if `enable` failed (e.g. OSD command error),
`disable` would run unintentionally, causing unreliable toggle behavior.
2026-04-22 12:59:43 +02:00
37189368fb Clean up orphaned voxtype status processes on exit (#5345)
* Clean up orphaned voxtype status processes on exit

Waybar's custom/voxtype module runs omarchy-voxtype-status, which spawns
a long-lived `voxtype status --follow` child. When Waybar reloads (config
change, display hotplug, Hyprland reload), it kills the wrapper but the
child survives as an orphan. Over time dozens accumulate.

`trap 'kill 0' EXIT` signals the entire process group when the wrapper
exits, ensuring the voxtype child is cleaned up.

* Explain purpose of trap

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-22 12:56:37 +02:00
ac3c60228e Add keybindings to cycle through monitors (#5359)
* Add keybindings to cycle through monitors

* Unified language around focus

* Group focus keybindings

* More natural sounding

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-22 12:38:45 +02:00
David Heinemeier HanssonandGitHub bff5e843e0 Revert "Add battery identifier to Waybar config" (#5386)
* Revert "Add battery identifier to Waybar config"

* Remove the migration too
2026-04-22 07:52:40 +02:00
David Heinemeier Hansson a3b7c41b9b Make iA writer theme fully back to work better on OLEDs 2026-04-21 22:28:02 +02:00
David Heinemeier Hansson ac08aaf834 Resume boosting didn't actually solve the real underlying problem
But a bios update to the XPS should.
2026-04-21 17:19:34 +02:00
David Heinemeier Hansson 5d2cdb5317 Remove xe cmdline args from limine conf too 2026-04-21 17:01:03 +02:00
David Heinemeier Hansson 58443c82c0 Remove default vrr on 2026-04-21 16:43:53 +02:00
David Heinemeier Hansson a70b05e8f3 New kernel patches mean we don't need to turn off the display features 2026-04-21 16:41:07 +02:00
David Heinemeier Hansson 9306f5ef29 Install video encoding processors for modern Intel CPU/GPU combos by default
Allows the use of Quick Sync Intel H264/265 exports in Kdenlive without
crashing!
2026-04-21 11:43:36 +02:00
Pete JacksonandGitHub b317bd5358 Enable pause_media for voxtype by default (#5364)
Pauses MPRIS media players when recording starts so music
doesn't bleed into dictation. Adds the setting to the default
config for new installs and a migration for existing users.
2026-04-20 13:53:22 +02:00
Lewis BuckleyandGitHub a9baa8f45f Migrate existing waybar configs to pin battery to BAT0 (#5369)
* Migrate existing waybar configs to pin battery to BAT0

Follow-up to #4918: that PR updated the default template, but
existing users keep their copy at ~/.config/waybar/config.jsonc
and won't pick up the fix without running omarchy-refresh-waybar
(which wipes local customizations). Patch the existing file in
place and restart waybar.

* Make battery-pin migration tolerant of whitespace variants

Per Copilot review: grep/sed patterns now match "battery" : {,
"battery":{, and "bat" : "..." variants that hand-edited configs
may use. Also only restart waybar when a battery block actually
exists to edit.
2026-04-20 13:52:04 +02:00
David Heinemeier HanssonandGitHub 7c9442f8d0 Merge pull request #4918 from danflood94/dev
Add battery identifier to Waybar config
2026-04-20 10:31:12 +02:00
David Heinemeier Hansson a71916794c Speed up the special workspace a little too 2026-04-19 18:26:16 +02:00
David Heinemeier Hansson c74c0ccf97 Speed up the window movements ever so slightly 2026-04-19 18:24:10 +02:00
David Heinemeier Hansson 0344348ff0 Better naming 2026-04-19 17:45:50 +02:00
David Heinemeier Hansson 7f9f0c25ed Reveal which flag wasn't working 2026-04-19 17:44:32 +02:00
David Heinemeier Hansson aa35454dda Fix ordering 2026-04-19 17:44:24 +02:00
David Heinemeier Hansson 2b323459df Closing/opening lid will toggle internal monitor on/off 2026-04-19 17:34:34 +02:00
David Heinemeier Hansson fa48d2398b Better description 2026-04-19 17:13:28 +02:00
David Heinemeier Hansson 96a08f91a5 Start the monitor watch so the feature is active right away 2026-04-19 17:12:53 +02:00
David Heinemeier Hansson d6aaf30e43 Ensure internal display is turned back on if the external one is disconnected 2026-04-19 17:11:48 +02:00
David Heinemeier Hansson bdead4a3d1 Don't need any notifications for this when the consequences are visible 2026-04-18 20:13:27 +02:00
David Heinemeier Hansson e852895e5c Use preexisting toggles setup 2026-04-17 16:03:06 +02:00
David Heinemeier Hansson adb8d01d57 Hint for disabling the ghost monitor on the 6K XDR 2026-04-17 15:47:54 +02:00
David Heinemeier Hansson db52ba346c Extract omarchy-toggle-enabled and use this with the waybar to persist 2026-04-17 15:45:44 +02:00
David Heinemeier Hansson 71bbcc8adc Use new shared omarchy-toggle 2026-04-17 15:37:36 +02:00
David Heinemeier Hansson 7db0ee9314 Use shared toggle feaeture 2026-04-17 15:35:36 +02:00
David Heinemeier Hansson 1b898b862c Make the window no-gaps flag permanent 2026-04-17 14:22:59 +02:00
David Heinemeier Hansson 79d3b8cec6 Move flags to persistent setup so hyprctl reload doesn't reset them 2026-04-17 14:16:47 +02:00
David Heinemeier Hansson 8912bcb81c Add mako restart to Update > Process 2026-04-17 09:37:58 +02:00
David Heinemeier Hansson 8f441acbef Use more resilient restore 2026-04-16 15:35:52 +02:00
David Heinemeier Hansson a4c544b8f6 Bump version 2026-04-16 15:34:20 +02:00
90bf106a70 Disable PSR1 on XPS IPS and OLED. XPS IPS uses PSR2 (#5315)
* Disable PSR1 on XPS IPS and OLED. IPS uses PSR2

* Improve conditional flow

* Simplify the migration logic

* We don't actually need this

We are using += everywhere

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-16 12:10:52 +02:00
David Heinemeier Hansson a76757335a Ensure we set performance profile on boot when on AC 2026-04-15 18:14:07 +02:00
David Heinemeier Hansson ce29e45ccd Use /run/omarchy instead of just /tmp 2026-04-15 16:19:49 +02:00
David Heinemeier Hansson 7bfd848c93 Only apply enable_psr=0 to xps oled machines 2026-04-15 16:17:14 +02:00
David Heinemeier Hansson bf802df8bd Present copilot key->omarchy menu better 2026-04-15 15:55:47 +02:00
David Heinemeier Hansson 753885a659 Broaden the CPU boost after sleep fix to all Intel machines 2026-04-15 15:48:35 +02:00
David Heinemeier Hansson bebed70a7c Ensure cursor is on the new screen 2026-04-15 14:42:44 +02:00
David Heinemeier Hansson 521c94bfca Add display toggle but protect against disabling the only active display 2026-04-15 14:35:32 +02:00
David Heinemeier Hansson f094c3acc0 Move powerprofile setting to userland script 2026-04-15 13:50:36 +02:00
David Heinemeier Hansson 4a2511ad5d Fix perms 2026-04-15 13:31:16 +02:00
David Heinemeier Hansson 9f6df52d8d Restore previouse power profile after the boost 2026-04-15 12:34:17 +02:00
David Heinemeier Hansson 30ddfeda4a Just apply the GSK_RENDERER fix for walker 2026-04-15 12:10:26 +02:00
David Heinemeier Hansson c34adea2f0 No longer needed 2026-04-15 11:58:45 +02:00
David Heinemeier Hansson 3f28cd46d6 Use cairo renderer to workaround sluggish GTK4 renderer
Closes #5260
2026-04-15 11:55:18 +02:00
David Heinemeier Hansson 0017f2eab0 Make hibernation offset safer 2026-04-15 11:49:03 +02:00
David Heinemeier Hansson f7dc63ca72 Work around the return-from-sleep sluggishness on panther lake
This is due to slow ramp after s2idle
2026-04-15 02:26:37 -07:00
David Heinemeier Hansson 9389c1f57a Fix path 2026-04-15 10:39:21 +02:00
David Heinemeier Hansson 1f697ecc6d No longer need first-run to set these powerprofilectl rules 2026-04-15 10:36:45 +02:00
a49b8d255c Fix AC power udev rules failing silently at boot (#5275)
* Don't use the names here since they break the all-themes setup in omarchy-nvim

* Fix AC power udev rules to use systemd-run

* Migrate AC power udev rules to systemd-run

* Add --collect and stable unit names to systemd-run udev rules

* Add unit name, replace, and After ordering to power profile udev rules

* Remove invalid --replace flag from systemd-run power profile rules

* We don't need --replace becuase it's not needed

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-15 10:28:42 +02:00
Felipe GonzalezandGitHub 18ab342119 fix: suppress Chromium/Brave stderr noise during theme switch (#5285)
Redirect stderr to /dev/null alongside stdout when refreshing
browser platform policy, preventing shared_memory_switch errors
from cluttering the terminal.
2026-04-15 10:14:07 +02:00
Stefan GründelandGitHub a43915f91d update btop.conf for v1.4.6 (#5286) 2026-04-15 10:13:37 +02:00
Liam MitchellandGitHub 0204db0578 Fix intel video acceleration migration scripts (#5288) 2026-04-15 10:07:39 +02:00
092b16489d Add Logitech MX Keys key bindings (#5301)
* Add Logitech MX Keys key bindings

* Update config/hypr/bindings.conf

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update config/hypr/bindings.conf

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-15 10:03:15 +02:00
David Heinemeier Hansson a7893c8af4 Catch brave-origin too
Closes #5304
Co-authored-by: @Cleptomania
2026-04-15 10:00:49 +02:00
David Heinemeier Hansson bbe0d34968 Enable correct xe 2026-04-13 16:00:06 -07:00
David Heinemeier Hansson 3eee73c0de Ensure enable_psr=0 is set for all xps ptl systems 2026-04-13 15:59:16 -07:00
Ryan HughesandGitHub 1df2b16f2f Merge pull request #5293 from jondkinney/update-key-repeat-delay-to-lowest-possible
Update default repeat_delay to improve holding delete and vim motions
2026-04-13 12:54:50 -04:00
Jon Kinney 8a7c77291e Update default repeat_delay to improve holding delete and vim motions
In my testing, this is the lowest you can go without causing any issues
with double key presses.
2026-04-12 20:09:08 -05:00
David Heinemeier Hansson 1732551873 Switch from makima to a straight copilot to omarchy menu mapping 2026-04-11 20:41:42 -04:00
David Heinemeier Hansson 691b11901c Set device appearance as the default for chromium
So we will be switching correctly from light/dark mode depending on the
theme.
2026-04-11 20:09:51 -04:00
David Heinemeier Hansson 4fcc58de2a Expose omarchy-restart-trackpad
Until we have a permanent fix for the haptic trackpad in the XPS. Cc
@spencerbull
2026-04-11 18:08:31 -04:00
David Heinemeier Hansson 429b99dc50 PSR1 is introducing lag/stutters
CC @spencerbull
2026-04-11 18:01:45 -04:00
Robert StringerandGitHub b2b2903e22 Skip starship init for dumb bash sessions (#5255) 2026-04-10 06:57:22 -04:00
David Heinemeier Hansson c9cc4be4f9 Need to grab this before the loop 2026-04-10 06:37:49 -04:00
1746a86a7b Enable Dell XPS Mute Mic Key (#5252)
* If on XPS, enable XPS mute mic key with LED and fallback to original mic mute flow

* fix hardcode of alsa card 0 to resolved id

* Extract omarchy-hyprland-monitor-focused

* Extract dedicated xps mute script

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-10 06:35:41 -04:00
Pierre Olivier MartelandGitHub 5ca74821d4 Fix Fcitx5 icon showing up in the waybar (again!) (#5263)
* Update Fcitx5 autostart handling

* Restart xcompose to apply the changes
2026-04-10 06:24:30 -04:00
David Heinemeier Hansson 111307fba3 Address the new haptic touchpad in the shipping xps 2026-04-10 06:10:38 -04:00
David Heinemeier Hansson 5fb06d2d77 Better glyph 2026-04-09 09:53:54 +02:00
David Heinemeier Hansson 8ad61cadcb Add way to toggle on/off internal display on laptops 2026-04-09 09:53:12 +02:00
David Heinemeier Hansson 6171d0ee8f Setup power profile defaults on first run since that's when the daemon is available 2026-04-08 14:35:52 +02:00
Timo HuboisandGitHub 3bfed7da37 Merge pull request #5247 from timohubois/feat-mise-node-latest-npx-wrapper
Run Omarchy's npx wrappers through mise-managed Node
2026-04-07 12:21:39 +02:00
David Heinemeier Hansson cc3880b99e Enable lmpd if installed but not running 2026-04-07 09:15:08 +02:00
David Heinemeier Hansson 29a0663cc1 Ensure we enable the LPMD service after installing 2026-04-07 09:14:13 +02:00
David Heinemeier Hansson abace0cbd5 Prevent the need for double sudo 2026-04-06 09:36:35 +02:00
David Heinemeier Hansson 7bef44a4be Prevent spurious hyprland errors during git update 2026-04-06 09:05:02 +02:00
David Heinemeier Hansson eb3bd95fca We don't actually ever need this notification 2026-04-05 09:37:36 +02:00
David Heinemeier Hansson 84bee808e7 Conditional and a restart 2026-04-03 11:36:07 +02:00
David Heinemeier Hansson 316ecc85cb Drop the misleading network speed hover tips
Closes #4884
2026-04-03 11:31:01 +02:00
David Heinemeier Hansson 55b0323a94 Only install LPMD for supported Intel CPUs on battery 2026-04-03 11:17:25 +02:00
MárcioandGitHub 05344eb660 Add LocalSend send action in Nautilus (#4946)
* Add LocalSend send action in Nautilus

* Reuse Nautilus install script in migration

* Detect LocalSend via PATH

* Verify Flatpak LocalSend is installed

* Check Flatpak LocalSend with flatpak info
2026-04-03 11:00:09 +02:00
David Heinemeier Hansson ba4b661e1e Remove unnecessary disown 2026-04-03 10:58:59 +02:00
David Heinemeier Hansson 6329062f24 Turn on VRR by default
Lowers idle load on a Dell XPS 14 w/ IPS from 5w to 1.1w. And it just
doesn't do anything on monitors that don't support VRR.
2026-04-03 10:57:13 +02:00
David Heinemeier Hansson a7fb8ba43a Don't use the names here since they break the all-themes setup in omarchy-nvim 2026-04-02 18:05:04 +02:00
MarcoandGitHub fd7aa3dce1 Fix firmware updates failing with Limine bootloader (#5077)
Install fwupdx64.efi into /boot/EFI/arch/ before running fwupdmgr update
so UEFI capsule updates work on systems using Limine.
2026-04-02 17:38:54 +02:00
David Heinemeier Hansson fcf8baea8e Rearrange 2026-04-02 16:41:20 +02:00
Rob ZolkosandGitHub fde637ec21 Preserve package download progress during updates (#5188) 2026-04-02 16:37:51 +02:00
Kevin McConnellandGitHub 585a909401 Add ONCE to Install->Service menu (#5186) 2026-04-02 16:24:02 +02:00
David Heinemeier Hansson b140a48ec7 Actually create the output dir!
Closes #5189
2026-04-02 16:07:17 +02:00
08b317901b Create pictures dir if non existent (#5181)
* Create pictures dir if non existent

* Simplify

Don't need to guard against mkdir failing

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-02 12:32:12 +02:00
Nicolas DorierandGitHub 9896c1e988 Remove jetbrains specific hyprland config (#5183)
IDE based on IntelliJ [2026.1](https://blog.jetbrains.com/platform/2026/02/wayland-by-default-in-2026-1-eap/) are now supporting wayland natively
properly.

I have personally updated Rider while removing the configuration file,
and didn't noticed any issue.
2026-04-02 11:14:35 +02:00
a5dc10960f Add migration for T2 fan curve config (#5176)
* Add migration for tuned fan curve on existing T2 installs

* Make sure it's clear to all what migration is being run (even if it doesn't apply to them)

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-04-02 11:06:57 +02:00
Federico SapuppoandGitHub 031ba01c83 Add tuned fan curve for T2 MacBooks (#5132) 2026-04-01 18:08:30 +02:00
Federico SapuppoandGitHub 729c590236 Use percentage-based step for keyboard backlight brightness (#5135) 2026-04-01 18:04:38 +02:00
Federico SapuppoandGitHub e0fed4a9f7 Fix battery time showing hours instead of minutes (#5137)
When upower reported time in minutes, the value was incorrectly
passed through the hours conversion path, displaying e.g. "25h"
instead of "25m".
2026-04-01 18:00:58 +02:00
Federico SapuppoandGitHub 7c13bd5801 Fix Bluetooth on T2 Macs by loading hci_bcm4377 module (#5145) 2026-04-01 17:58:07 +02:00
David Heinemeier Hansson 54679f647a Reduce power saving feature turn-off to just PSR2 2026-04-01 17:25:10 +02:00
64ef804433 Enable GPU in voxtype if Vulkan is available (#5005)
* Enable GPU support in Voxtype installation if Vulkan is available

* Restart Voxtype and Waybar after enabling GPU support in setup

* fix: revert changing existing migration

* fix: add new migration

* Refactor Vulkan availability check in voxtype installation and migration scripts

* Extract vulkan availability check

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-03-27 21:18:19 +01:00
David Heinemeier Hansson 54bd72f10a Better naming 2026-03-27 21:05:06 +01:00
David Heinemeier Hansson f8a789b885 Extract bin for toggling window transparency 2026-03-27 21:03:59 +01:00
David Heinemeier Hansson f9b52a007e Remove any npx stubs too 2026-03-27 17:06:54 +01:00
David Heinemeier Hansson 54b0517c65 Fix dark/light mode switching 2026-03-27 16:59:41 +01:00
David Heinemeier Hansson 9dde3a9f0c Better datetime display matching battery 2026-03-27 14:32:38 +01:00
David Heinemeier Hansson ae5da6f805 Update all theme previews to consistent size and style 2026-03-27 13:14:14 +01:00
David Heinemeier Hansson 3db5a8e361 Use the same grey/nonexisting theme as vantablack 2026-03-27 12:55:34 +01:00
David Heinemeier Hansson 361cda9fa4 Use miasma theme 2026-03-26 17:23:36 +01:00
David Heinemeier HanssonandGitHub a68f2ae045 Add Retro 82 theme (#5110)
* Add Retro 82 theme

* Start with the groove

* Rename
2026-03-26 16:55:00 +01:00
David Heinemeier Hansson b25d47288a Add another Lumon background 2026-03-26 16:51:13 +01:00
David Heinemeier Hansson ece103319c Add vscode theme for Lumon 2026-03-26 16:35:45 +01:00
David Heinemeier Hansson fdfca055cc Use optimized theme 2026-03-26 16:32:04 +01:00
David Heinemeier Hansson 92e3357f05 Add a trackpad restarter for new hw 2026-03-26 14:30:45 +01:00
David Heiemeier Hansson 15538c4f5a New solution to haptic touchpad 2026-03-26 11:08:44 +01:00
David Heiemeier Hansson e7f8826dea Ignore that there are dependencies on the headers, since we're adding new ones 2026-03-26 10:53:22 +01:00
David Heiemeier Hansson 80e019ff7c Fix check for the LG panel 2026-03-26 10:52:58 +01:00
David Heinemeier Hansson 9642599d15 Fix permissions 2026-03-26 09:46:59 +01:00
David Heinemeier Hansson 35b2330c2d Make the ptl kernel exclusive when it's needed 2026-03-26 09:27:44 +01:00
David Heinemeier Hansson 93fc7fb053 Group related configs together 2026-03-26 09:26:10 +01:00
David Heinemeier Hansson 2b63748c9b Correct references 2026-03-26 09:24:54 +01:00
David Heinemeier Hansson 435613ab32 Use new omarchy-hw-match 2026-03-26 09:24:50 +01:00
David Heinemeier Hansson af724a3843 Only apply this display fix to the dell XPS OLED panel 2026-03-26 09:24:43 +01:00
David Heinemeier Hansson 2a81068d8a Extract omarchy-hw-match 2026-03-26 09:23:59 +01:00
David Heinemeier Hansson 99bba33dfe Next release will be 3.5.0 2026-03-26 08:46:42 +01:00
David Heinemeier Hansson 6c5f417521 Move into intel bundle of fixes 2026-03-26 08:37:31 +01:00
f55c7e9ab5 Add hardware fix for Intel WiFi 7 EHT on Panther Lake (#5106)
Detect Intel BE200/BE211 WiFi cards and disable WiFi 7 (EHT) via
modprobe config. The iwlwifi driver has broken EHT RX adaptation
causing APs to drop to MCS 0, making WiFi unusable.
Falling back to WiFi 6 (HE) restores full performance.

Temporary fix: remove when Intel fixes the firmware/driver.

Signed-off-by: Spencer Bull <Spencer.Bull@Dell.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-03-26 08:36:41 +01:00
David Heinemeier Hansson 5d4e1032ca Fix runner reference 2026-03-26 08:33:51 +01:00
8c6fcbf2f0 Rename local path variable in ga() to avoid clobbering zsh PATH (#5115)
Co-authored-by: John Allen <git@porcnick.com>
2026-03-26 07:47:49 +01:00
Nicolas DorierandGitHub 22e84776a8 Fix missing limine-mkinitcpio in migration script (#5117)
Follow up to #5114, I forgot to regenerate the `/boot/limine.conf` file during the migration.
2026-03-26 07:47:15 +01:00
Ty SmithandGitHub 176194a76f Add VSCode insiders theme support (#5119)
VSCode Insiders uses a different directory than VScode. This commit adds compatibility.
2026-03-26 07:46:02 +01:00
Milan PetrovićandGitHub 49c7b45572 Fix: typo in migration 1774366575 (#5116)
* Fix typo in migration 1774366575: lmp.sh -> lpmd.sh

* Fix additional lmp.sh -> lpmd.sh reference in all.sh
2026-03-25 20:29:41 +01:00
David Heinemeier Hansson 6c1d9cc92e Fix file path 2026-03-25 20:27:18 +01:00
David Heinemeier Hansson e921ea3cee Additional Gruvbox backgrounds by @OldJobobo 2026-03-25 16:26:25 +01:00
David Heinemeier Hansson 7eabd26d3e Add pi as a install-on-first-use agent
Closes #5091
2026-03-25 14:43:38 +01:00
Nicolas DorierandGitHub f26df5adf5 Fix: Limine drop-in config are overridden by default limine conf (#5114)
Limine drop-in config are overridden by `/etc/default/limine`
2026-03-25 14:41:19 +01:00
David Heinemeier Hansson a91fde6a3b Add 6K too 2026-03-25 14:25:01 +01:00
David Heinemeier Hansson 5726f22471 85 is probably the sweetspot 2026-03-25 14:22:31 +01:00
David Heinemeier Hansson e288092084 Adjust sizes and quality 2026-03-25 14:20:25 +01:00
David Heinemeier Hansson fdc370ec4c Ensure auto-boot still happens when we have two kernels 2026-03-25 13:52:52 +01:00
David Heinemeier Hansson 906ad82627 Bring back claude code as a regular package install
Not sure why, but Claude Code now complains if it's installed via npx!
2026-03-25 13:37:37 +01:00
David Heinemeier Hansson 280ed7c3c8 Switch to the new custom kernel that also has wifi fixes 2026-03-25 13:31:04 +01:00
David Heinemeier Hansson f54623ba56 Correct package name 2026-03-25 13:05:04 +01:00
David Heinemeier Hansson 43de5df392 Framework too 2026-03-24 20:43:56 +01:00
David Heinemeier Hansson a6ea7f50e4 Give asus it's own subdirectory too 2026-03-24 20:42:04 +01:00
David Heinemeier Hansson e8623fbbf6 Move apple fixes into their own subdirectory too 2026-03-24 20:40:43 +01:00
David Heinemeier Hansson c4c55b5c33 Group all intel specifics in subdirectory 2026-03-24 20:39:01 +01:00
David Heinemeier Hansson e2c8bb67cc Group intel hardware tweaks together 2026-03-24 20:35:16 +01:00
David Heinemeier Hansson 4d6221c890 Make custom ptl kernel the default on intel ptl systems
Then we don't need to turn off audio any longer
2026-03-24 20:31:58 +01:00
David Heinemeier Hansson fce6df52aa Ensure intel-lmp is installed on Intel machines for better core prioritization 2026-03-24 16:37:01 +01:00
Patrick BochenekandGitHub 58a16dfebc Set low urgency for immediate-feedback notifications (#5056)
Some users may choose to disable notification timeout for normal-level
notifications to ensure no notifications are missed when the user is
away from the screen. However, there are several Omarchy notifications
that only serve as an immediate feedback for a user action, such as
"Screensaver enabled" or "Editing config file foo.conf", for which
disabling the timeout is not desirable. This commit drops the urgency
level for such notification to low, allowing configuring a different
timeout value for them.

Notifications with an explicitly set timeout are excluded from this
commit.
2026-03-24 14:56:12 +01:00
David Heinemeier Hansson 886320acee Simplify the haptic trackpad fix 2026-03-19 23:09:41 -04:00
David Heinemeier Hansson e02186551a Use extracted colorscheme 2026-03-19 15:06:24 -04:00
David Heinemeier Hansson 4d46334d62 Fix the haptic trackpad restore on first boot 2026-03-19 13:48:44 -04:00
David Heinemeier Hansson 3fdd0e5d42 Ensure haptic feedback trackpad doesn't disappear after sleep/reboot 2026-03-19 08:28:54 -04:00
David Heinemeier Hansson e24a9f2249 Add paired-back Lumon Industries theme
Still needs tweaking for the neovim theme
2026-03-18 14:34:40 -04:00
David Heinemeier Hansson 8a543be9a8 Fix perms 2026-03-17 18:00:19 +01:00
David Heinemeier Hansson a0baa81fa9 No longer forcing this 2026-03-16 21:50:34 +01:00
David Heinemeier Hansson d200fdee3b Make it a human-sized frame, vertical for the webcam overlay 2026-03-16 11:34:57 +01:00
David Heinemeier Hansson 5561f534f1 No need to start this before the reboot 2026-03-15 21:18:48 +01:00
David Heinemeier Hansson 0a5d66ca5e Fix sudo for enabling thermald unit 2026-03-15 21:17:14 +01:00
David Heinemeier Hansson e39a45b1ed Fix the tuxedo backlighting 2026-03-15 21:02:57 +01:00
David Heinemeier Hansson e21b22decf Ensure .local/bin exists 2026-03-15 20:20:40 +01:00
David Heinemeier Hansson 5545cbf2ef Add migration for COPY mode indicator 2026-03-15 19:40:00 +01:00
Vitor MeloandGitHub 24afb3e669 Add in tmux status COPY mode when activated (#5028) 2026-03-15 19:38:07 +01:00
David Heinemeier Hansson f7d739483f Note about restarting early 2026-03-15 19:24:11 +01:00
David Heinemeier Hansson 948bac9f6c Fix install of playwright 2026-03-15 19:19:03 +01:00
David Heinemeier Hansson e294394b8a Add npx wrapper installer for packages moving too fast for normal repos
They're lazy loaded too. So we don't need manual install from a menu.
2026-03-15 19:11:43 +01:00
David Heinemeier Hansson 506348ef4b Clean up file if no timer is present 2026-03-15 18:48:39 +01:00
David Heinemeier Hansson 3154290769 Install MIPI support for IPU7 Intel camera 2026-03-15 18:43:31 +01:00
David Heinemeier Hansson 0495ac2363 Try just to give it 15 mins at a time 2026-03-15 16:18:58 +01:00
David Heinemeier Hansson 2bd0e23a5f Fix the check proper 2026-03-15 16:10:59 +01:00
David Heinemeier Hansson d37d93caee Detect current sudoless correctly 2026-03-15 16:05:03 +01:00
David Heinemeier Hansson 4b75fbbfd5 Add danger mode for sudoless agent work on system administration 2026-03-15 16:01:49 +01:00
David Heinemeier Hansson ec25cde033 Bring all sudo commands together 2026-03-15 16:00:54 +01:00
David Heinemeier Hansson fa17b5b69f Use sudo keepalive to ensure that we don't get a sudo timeout on a long-running install 2026-03-15 15:19:29 +01:00
David Heinemeier Hansson dc820652c1 Use the proper system reboot command
Closes #5025
2026-03-15 14:45:15 +01:00
David Heinemeier HanssonandGitHub 2d35b98bbb Thermald helps manage thermal load on Intel laptops with Sandy Bridge or newer (#5022)
Thanks to the team at Intel for pointing this out 👌
2026-03-15 12:13:26 +01:00
David Heinemeier HanssonandGitHub f372b03411 Merge pull request #5009 from Alex23rodriguez/patch-1
Update omarchy-reinstall-git to make shallow clone
2026-03-14 17:24:07 +01:00
Alex RodandGitHub 609345f22f Update omarchy-reinstall-git to make shallow clone
The whole git history of the omarchy repository is not required to, for example, run omarchy-reinstall.
If needed, additional history can be fetched manually
2026-03-14 16:30:23 +01:00
David Heinemeier Hansson dc2380026e Match bash envs for ssh access 2026-03-12 16:48:59 +01:00
David Heinemeier Hansson 26f2106b29 Add keyboard backlighting drivers for tuxedo/slimbook machines 2026-03-11 21:55:14 +01:00
David Heinemeier Hansson 3ce7ef7570 Fix lack of dropins on post-install setup 2026-03-11 21:50:50 +01:00
David Heinemeier Hansson 4c5e6569c4 Need sudo to get offset 2026-03-11 21:17:19 +01:00
David Heinemeier Hansson daf738725e Fix Dell XPS audio until we have an upstream fix 2026-03-11 14:20:49 +01:00
David Heinemeier Hansson 12bdf01e5e Fullscreen and idle inhibit on moonlight 2026-03-11 13:59:32 +01:00
David Heinemeier Hansson 1fd26fddc0 Fix that mise settings wouldn't be applied before installing Ruby
So we'd be manually compiling.
2026-03-11 08:38:44 +01:00
David Heinemeier Hansson 2acc2ebfea Fix time to full/empty when there are only minutes left 2026-03-10 22:00:56 +01:00
David Heinemeier HanssonandGitHub 86bac09343 Merge pull request #4954 from justindotdevv/feature/tmux-source-config-message
feat: show message when config is sourced
2026-03-10 13:19:16 +01:00
David Heinemeier HanssonandGitHub 26a0d446a0 Update tmux.conf 2026-03-10 13:19:02 +01:00
David Heinemeier HanssonandGitHub d508d84ea2 Merge pull request #4940 from alansikora/unmount-fuse-before-sleep
Unmount FUSE filesystems before suspend/hibernate
2026-03-10 13:12:26 +01:00
David Heinemeier Hansson 5f6b10368a Make makima remapping an opt-in feature under Setup > Key Remapping 2026-03-10 12:29:15 +01:00
David Heinemeier Hansson 93e243eba5 Add sff for using ff together with scp for easily sending files to remote servers 2026-03-10 11:58:41 +01:00
David Heinemeier Hansson c880e8fbcb Allow kitty to preview images when using ff 2026-03-10 10:50:10 +01:00
justindotdevv 016efa3b30 feat: show message when config is sourced 2026-03-10 05:27:48 +02:00
Alan Sikora dd86a893cb Move FUSE unmount hook to its own installer
The hook prevents gvfsd-fuse from blocking suspend, not just
hibernation. Install it during the config phase so every system
gets it, not only those that run hibernation setup.
2026-03-09 16:36:14 -03:00
David Heinemeier Hansson a3839551e3 Restrict FUSE unmount to gvfsd-fuse
Unmounting all FUSE filesystems breaks xdg-document-portal and AppImages
that rely on FUSE to stay mounted. It also doesn't restart them.
2026-03-09 15:28:30 +01:00
David Heinemeier HanssonandGitHub e5b69c52f8 Merge pull request #4945 from Lo0rd3/battery-low-sound-hook
Add opt-in low battery sound hook
2026-03-09 08:16:58 +01:00
Alan Sikora cce8d878ec Decode octal-escaped mountpoints and disown backgrounded restart
/proc/mounts uses octal escaping for special characters (e.g. \040 for
spaces). Decode with printf before passing to fusermount so paths with
spaces are handled correctly.

Add disown after backgrounding the gvfs restart so it survives
systemd-sleep's cgroup cleanup when the hook script exits.
2026-03-08 23:42:01 -03:00
Alan SikoraandClaude Opus 4.6 e490ca7d78 Background gvfs restart to avoid blocking user.slice thaw
The post-sleep hook runs before systemd thaws user.slice, so a
synchronous systemctl --user restart hangs for ~90 seconds waiting
for the frozen user manager to respond — blocking the entire resume.

Background the restart with a short delay so it executes after
user.slice is thawed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 23:14:40 -03:00
lo0orde 49c3ea2703 Add opt-in low battery sound hook 2026-03-09 02:00:57 +00:00
Alan Sikora a89c4f849d Use install instead of cp -p to ensure root ownership of sleep hook
cp -p preserves the original user ownership from ~/.local/share/omarchy,
which would allow an unprivileged user to modify a script that runs as
root during suspend/hibernate.
2026-03-08 22:30:56 -03:00
Alan Sikora 24ca8e2bff Restart gvfs after wake to restore FUSE mount
gvfsd-fuse is spawned by gvfsd during init and not respawned if it
dies. After lazy-unmounting in pre-sleep, restart gvfs-daemon.service
in post-sleep so the FUSE mount at /run/user/*/gvfs is restored.
2026-03-08 20:58:56 -03:00
Alan Sikora 505c15e624 Fix field parsing in unmount-fuse hook
The read command had an extra _ placeholder that was swallowing the
fstype field, causing the fuse.* pattern to never match.
2026-03-08 20:46:11 -03:00
Alan Sikora f92712541d Unmount FUSE filesystems before suspend/hibernate to prevent silent failures 2026-03-08 20:39:33 -03:00
David Heinemeier Hansson b4cb5e287b Need intel-media-driver available as an option during install 2026-03-08 18:28:55 +01:00
David Heinemeier Hansson 524b4415fb Need intel-media-driver available as an option during install 2026-03-08 18:28:39 +01:00
David Heinemeier Hansson e02b88c9d4 Merge branch 'master' into dev 2026-03-08 17:54:08 +01:00
David Heinemeier Hansson be43e1193f Add Shift+Return keyboard binding for multi-line as used by Claude Code to Alacritty 2026-03-08 17:52:20 +01:00
David Heinemeier HanssonandGitHub d757dc3a89 Merge pull request #4924 from basecamp/rc
Omarchy 3.4.2
2026-03-08 17:04:51 +01:00
David Heinemeier Hansson bb26e9113c Merge branch 'dev' into rc 2026-03-08 17:04:28 +01:00
David Heinemeier Hansson ef93f6356c Move to git update to ensure it's not lost 2026-03-08 17:04:12 +01:00
David Heinemeier Hansson e0bd449c71 Presentation 2026-03-08 17:03:06 +01:00
David Heinemeier Hansson 07f4e53701 Better output 2026-03-08 17:02:31 +01:00
David Heinemeier Hansson 169ef6ec9e Time has to be updated before git repo is pulled
Or SSL certificate will complain
2026-03-08 17:01:33 +01:00
David Heinemeier Hansson e1107ed165 Merge branch 'dev' into rc 2026-03-08 16:35:53 +01:00
David Heinemeier Hansson 5663fae835 Explain how to have changes take affect 2026-03-08 16:35:49 +01:00
David Heinemeier Hansson 5e6ea17f5d Merge branch 'dev' into rc 2026-03-08 16:34:46 +01:00
David Heinemeier Hansson bc56a8bbad Add omarchy-restart-makima
For when you change keymappings
2026-03-08 16:30:50 +01:00
David Heinemeier Hansson fdd13b52ab Merge branch 'dev' into rc 2026-03-08 15:56:29 +01:00
David Heinemeier Hansson dfc270f79a Install Intel GPU hardware acceleration drivers if missing 2026-03-08 15:56:24 +01:00
David Heinemeier Hansson 595f5f668f Merge branch 'dev' into rc 2026-03-08 15:53:47 +01:00
David Heinemeier Hansson 9746370b62 Default to full screen capture for hyprland preview picker 2026-03-08 15:53:42 +01:00
David Heinemeier Hansson 549cd59e48 Style 2026-03-08 15:52:35 +01:00
David Heinemeier Hansson c4f57beba2 Show better with a preview notification that'll open recording on invocation 2026-03-08 15:52:31 +01:00
David Heinemeier Hansson 8e7a4ce61d Merge branch 'dev' into rc 2026-03-08 15:42:12 +01:00
David Heinemeier Hansson b982e1c986 Ensure we also catch the uhd graphics on the Framework 12 2026-03-08 15:41:00 +01:00
David Heinemeier Hansson e4acb3e8a9 Merge branch 'dev' into rc 2026-03-08 15:16:29 +01:00
David Heinemeier Hansson 462575c880 Fix worktree removal 2026-03-08 13:25:46 +01:00
David Heinemeier Hansson 631bdec159 Prevent extra CR 2026-03-08 13:25:46 +01:00
David Heinemeier Hansson 681540490e Fix regexp 2026-03-08 13:25:46 +01:00
David Heinemeier Hansson 3306c428dd Spelling 2026-03-08 13:25:46 +01:00
David Heinemeier Hansson e58ac44a0d Don't leak local var into global space 2026-03-08 13:25:46 +01:00
Alex BudkarandGitHub 5f2d12f9e7 Update jetbrains.conf to capture find windows with singular space title (#4909)
Some find windows like "find everywhere" has initial title that consists of a singular space. Update title matching expression to capture that case as well.
2026-03-08 13:12:54 +01:00
David Heinemeier Hansson c900478aba Merge branch 'dev' into rc 2026-03-08 11:12:21 +01:00
David Heinemeier Hansson 3aff0017a1 Only update plocate db on power to prevent hangs after sleep 2026-03-08 11:09:57 +01:00
71be883338 Update default/bash/fns/worktrees
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-07 22:32:37 +01:00
David Heinemeier Hansson fd03d57110 Fix the makima installation 2026-03-07 22:01:21 +01:00
David Heinemeier Hansson c9592e15fd Version bump coming 2026-03-07 20:00:44 +01:00
5a7008c01b Install intel-media-driver for Arc 130T/140T (intel 255H) (#4922)
* Install intel-media-driver for 130T/140T (intel 255H)

* Apply suggestion from @Copilot

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-07 19:53:35 +01:00
Jorge ManrubiaandGitHub 3da14f892f Fix nvim transparency to preserve foreground colors (#4844)
* Fix nvim transparency to preserve foreground colors

The old approach used `vim.api.nvim_set_hl(0, name, { bg = "none" })`
which replaces the entire highlight definition, wiping out foreground
and other attributes. This breaks snacks.nvim's GitHub integration
(gh_pr/gh_issue pickers) which reads the foreground color from Normal
and NormalFloat at module load time, gets nil, and crashes in
Snacks.util.blend().

The fix uses nvim_get_hl to fetch existing attributes first, removes
only bg, then sets the highlight back — preserving all other attributes.

* Drop fallback that reintroduces the highlight-wiping bug

If nvim_get_hl fails for a group, skip it rather than falling back to
the old { bg = "none" } approach that clears all attributes.
2026-03-07 19:46:17 +01:00
Miguel PandGitHub 2d859e25b5 add animation to the scratchpad (#4900) 2026-03-07 19:28:39 +01:00
justinandGitHub 04054c9569 fix: small localsend window (#4923)
* feat(hypr): add window size rule for LocalSend

* chore(hypr): remove Share class from localsend window rule
2026-03-07 19:21:05 +01:00
David Heinemeier Hansson 8f804bcba4 Add automatic-rename settings to tmux configuration 2026-03-07 19:16:34 +01:00
a261819a9b Use tmux native method of renaming windows (#4910)
* Use tmux native method of renaming windows

This uses tmux's built in method of renaming windows, and it even works
with pane switching rather than relying on cd to change the window name

* Update config/tmux/tmux.conf

I agree with the copilot suggestion

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Jadon Brutcher <jadon.brutcher@deltamobile.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-07 19:13:18 +01:00
Timo HuboisandGitHub df0109369c Prevent LM Studio install from downgrading to legacy package (#4915)
Use lmstudio-bin in the AI install menu so installs and reinstalls stay on the current LM Studio package stream instead of reverting to legacy lmstudio.
2026-03-07 19:11:26 +01:00
danflood94andGitHub 2f36270369 Add battery identifier to Waybar config
fix(waybar): pin battery to BAT0 to prevent crash on HID disconnect
2026-03-06 21:10:47 +00:00
David Heinemeier Hansson 2a2e9086e1 We weren't running this for some reason! 2026-03-06 21:58:04 +01:00
David Heinemeier Hansson fc79da14bb Fix panther lake adjustments 2026-03-06 20:51:58 +01:00
David Heinemeier Hansson 6ad5d225f8 Remap Copilot key to Omarchy Menu key 2026-03-05 18:25:48 -04:00
David Heinemeier Hansson b50ec21442 Toggle existing omarchy menu if already open 2026-03-05 14:16:50 -04:00
David Heinemeier Hansson d3285f6b00 Can't do shim activation here without overwriting the ./bin path addition
But not necessary since uwsm/env handles the underlying problem
2026-03-05 13:42:55 -04:00
David Heinemeier Hansson 725054a478 Make it clear when you've zoomed in on a pane 2026-03-05 11:57:36 -04:00
David Heinemeier Hansson 2efc43762a Make tmux window named after cwd 2026-03-05 11:50:32 -04:00
David Heinemeier Hansson 7e69c87f75 Ensure mise activates the shims
To make sure mise shims are right for the tmux layout commands
2026-03-05 11:44:55 -04:00
David Heinemeier Hansson 7fbbc66cac Merge branch 'master' into dev 2026-03-04 09:49:04 -04:00
David Heinemeier Hansson 20b2be248e Ensure wayfreeze-git is also removed if it's still there
Closes #4859
2026-03-04 09:46:30 -04:00
9b8eee7372 add aur notice for nordvpn (#4888)
Co-authored-by: Mrid22 <mridulaga@outlook.com>
2026-03-03 20:28:38 -05:00
Arcangelo MassariandGitHub 14765466fb Fix White theme name mismatch for VS Code/Codium (#4858)
The White theme's vscode.json specified "White Omarchy" as the theme
name, but the Bjarne.white-theme extension registers the theme as
"White". This mismatch caused omarchy-theme-set-vscode to set
workbench.colorTheme to a non-existent theme name.
2026-03-03 20:28:09 -05:00
e648902683 Fix try interactive selector appearing on bashrc re-source (#4877)
`try init` defines a shell function named `try`. On subsequent
`source ~/.bashrc`, `try init` calls the function (interactive
selector) instead of the binary. Adding `command` bypasses the
function and always calls the binary.

Fixes #4876

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:24:43 -05:00
David Heinemeier Hansson e1ee8e8561 Fix smushing 2026-03-03 15:12:20 -05:00
David Heinemeier Hansson 546290e3de Fix Panther Lake GPU display issues by turning off power saving features until they're fixed 2026-03-03 15:12:10 -05:00
David Heinemeier Hansson 5e516be544 Even better 2026-03-02 14:15:46 +01:00
David Heinemeier Hansson 758e9d442f Fuller battery stats 2026-03-02 14:02:42 +01:00
David Heinemeier Hansson d9e3993d0c Match the t alias 2026-03-02 13:21:57 +01:00
David Heinemeier Hansson 1c8d7a7487 Add worktrees functions 2026-03-01 17:39:12 +01:00
David Heinemeier Hansson 149bf44763 Add Alt+Shift+Arrow keybindings for swapping tmux windows 2026-03-01 16:33:04 +01:00
David Heinemeier HanssonandGitHub 80224cb954 Merge pull request #4825 from Cammisuli/cammisuli/respect-refresh-rate
Apply already configured resolution and refresh rate when toggling scale
2026-03-01 09:18:23 +01:00
Jonathan Cammisuli 39f1ca77d8 Apply already configured resolution and refresh rate when toggling scale
Closes #4824
2026-02-28 17:22:53 -05:00
David Heinemeier Hansson a6bf23a592 Suggest scrolling layout swiping 2026-02-28 21:14:34 +01:00
David Heinemeier Hansson 8805586247 Hide omarchy themes menu from elephant provider list
Closes #4820
2026-02-28 21:05:15 +01:00
David Heinemeier Hansson da990e0c9f Include Shift + Return as default for browser 2026-02-28 20:45:08 +01:00
David Heinemeier Hansson a8f3251e9b Include Shift + Return as default for browser 2026-02-28 20:44:54 +01:00
David Heinemeier HanssonandGitHub c44dcdfacb Merge pull request #4806 from basecamp/dev
Omarchy 3.4.1
2026-02-28 18:34:49 +01:00
David Heinemeier Hansson bce8263675 Update toggle split window binding
Fixes #4809
2026-02-28 18:33:21 +01:00
David Heinemeier Hansson eb4f9bd5c8 Better description 2026-02-28 18:17:25 +01:00
David Heinemeier Hansson 42e20870d3 Use slide in animation for screensaver
Co-authored-by: @ieocin
Fixes #4815
2026-02-28 18:14:41 +01:00
David Heinemeier Hansson eb7457d227 Force color output even as we're capturing the update log 2026-02-28 18:14:14 +01:00
David Heinemeier Hansson 82e779fc5f B not b 2026-02-28 18:09:49 +01:00
David Heinemeier Hansson b3c6a095f9 Consistent naming 2026-02-28 18:07:59 +01:00
748fbed3bd Update default/hypr/bindings/tiling-v2.conf
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-28 18:07:22 +01:00
David Heinemeier HanssonandGitHub 7c1670b474 Merge pull request #4808 from rez1coder/migration-typo
migration(1772211023): fix overflow typo
2026-02-28 18:04:47 +01:00
David Heinemeier Hansson a4303e1782 Use fixed framework for easier importing into kdenlive 2026-02-28 17:56:35 +01:00
David Heinemeier Hansson 7d95dcdfc7 In order of apperance 2026-02-28 17:51:59 +01:00
David Heinemeier Hansson aabaef83ea Cap recordings to 4K and do start/stop correctly and no indicator until recording 2026-02-28 17:46:57 +01:00
David Heinemeier Hansson 7934b0d51b Add tmux alt+arrow bindings if missing 2026-02-28 17:01:11 +01:00
David Heinemeier Hansson aa3ea5b04a Just recommend scrolling as alternative
The others really aren't useful imo
2026-02-28 16:52:13 +01:00
David Heinemeier Hansson a8a1e3acf1 Move the single-window square aspect toggle to Super + Ctrl + Backspace 2026-02-28 16:51:23 +01:00
David Heinemeier Hansson 5f9b108afd Migrate the single_window_aspect_ratio setting to layout per Hyprland 0.54 2026-02-28 16:51:03 +01:00
David Heinemeier Hansson 6ac243ec3c Merge branch 'master' into dev 2026-02-28 15:07:55 +01:00
David Heinemeier Hansson 1bbb20695e Proper spacing 2026-02-28 15:06:16 +01:00
rez1coderandGitHub 0bc9629e8a migration(1772211023): fix overflow typo 2026-02-28 20:04:13 +06:00
David Heinemeier Hansson debeea0bf7 Offer to reboot if Hyprland has been updated 2026-02-28 15:03:51 +01:00
David Heinemeier Hansson 47f396cfc6 Bump version 2026-02-28 14:56:39 +01:00
David Heinemeier Hansson 8f5c1ee55e Promote monitor scaling to Super + / 2026-02-28 14:34:27 +01:00
David Heinemeier Hansson 39761b93b3 Fix spelling 2026-02-28 14:24:17 +01:00
David Heinemeier Hansson 42a437ad48 Add toggle for switching between dwindle/scrolling layout per workspace on Super + L 2026-02-28 14:23:42 +01:00
David Heinemeier Hansson b746958823 Allow esc to close capture menu when accessed directly 2026-02-28 10:05:36 +01:00
David Heinemeier Hansson 103cb728e6 Add Super + Ctrl + O to access toggle menu and add more toggles 2026-02-28 10:04:43 +01:00
David Heinemeier Hansson 30c6d431f7 Match existing naming styles 2026-02-28 10:04:18 +01:00
David Heinemeier HanssonandGitHub b42183e692 Merge pull request #4789 from Trippie-Redd/update-outdated-keybind-description
Update outdated keybind description for opening the background selection menu
2026-02-28 03:32:01 -05:00
Andrej Maxhem 191cbb165c Update outdated keybind description for opening the background selection menu 2026-02-27 20:28:17 +01:00
David Heinemeier Hansson d7b0ab1a23 Ensure password field doesn't overlow on SDDM login screen
Closes #4774
2026-02-27 18:02:40 +01:00
David Heinemeier Hansson 34f0d64d77 Try with alt+arrows for windows/sessions navigation for a while 2026-02-27 17:50:23 +01:00
David Heinemeier Hansson c585fec9cf Stop erasing output without a newline
Closes #4783
References #4269
2026-02-27 17:44:56 +01:00
David Heinemeier Hansson 8ac7cd9e23 Stop erasing output without a newline
Closes #4783
References #4269
2026-02-27 17:44:46 +01:00
David Heinemeier HanssonandGitHub c3af1fef01 Merge pull request #4771 from KrisKind75/fix-asus-rog-mic-unmute
Unmute ALSA capture switch in ASUS ROG mic fix
2026-02-27 11:40:12 -05:00
David Heinemeier Hansson 39792246d2 Merge pull request #4782 from alexpgates/dev
Update bash rc source order
2026-02-27 17:31:57 +01:00
David Heinemeier HanssonandGitHub a548c3b528 Merge pull request #4782 from alexpgates/dev
Update bash rc source order
2026-02-27 11:31:11 -05:00
Alex P. GatesandGitHub 302d041d8e Update bash rc source order 2026-02-27 10:13:12 -06:00
David Heinemeier Hansson b97ea79090 Include .local/bin in path by default 2026-02-27 09:32:31 +01:00
Christoph KindlerandClaude Opus 4.6 46770774b5 Unmute ALSA capture switch in ASUS ROG mic fix
The Realtek ALC285 defaults to capture switch off. With
api.alsa.soft-mixer enabled, PipeWire no longer manages the hardware
mixer, so the switch stays off and the internal mic records silence.

Adding `unmute` to the amixer set command ensures the hardware capture
path is enabled.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 08:51:59 +01:00
David Heinemeier Hansson d0084ff10d Ensure OMARCHY_PATH + bin PATH are set for SSH access
Closes #4757
2026-02-27 08:21:19 +01:00
David Heinemeier Hansson db03ae6cb6 Merge pull request #4766 from garethson/fix-omarchy-launch-or-focus
Fix recently broken jq reference to "$p" value in omarchy-launch-or-focus
2026-02-27 08:17:06 +01:00
David Heinemeier HanssonandGitHub f88bd13936 Merge pull request #4766 from garethson/fix-omarchy-launch-or-focus
Fix recently broken jq reference to "$p" value in omarchy-launch-or-focus
2026-02-27 02:16:38 -05:00
Gareth du Plooy 10b8a6a514 Fix jq reference to value in omarchy-launch-or-focus 2026-02-26 23:18:26 -06:00
David Heinemeier Hansson 6757b7068a Ensure OMARCHY_PATH + bin PATH are set for SSH access
Closes #4757
2026-02-26 22:40:57 +01:00
David Heinemeier HanssonandGitHub 42b409a17f Merge pull request #4751 from Kasui92/patch-1
Remove example alias for claude command
2026-02-26 15:19:26 -05:00
David Heinemeier HanssonandGitHub a613f4c63c Merge pull request #4752 from pomartel/fcitx5-autostart
Remove Fcitx5 autostart desktop entry
2026-02-26 15:19:08 -05:00
David Heinemeier HanssonandGitHub 31247484dc Merge pull request #4525 from basecamp/dev
Omarchy 3.4.0
2026-02-26 13:21:40 -05:00
Pierre Olivier Martel 744d6c3349 Remove Fcitx5 XDG autostart desktop entry 2026-02-26 11:08:06 -05:00
Luca PattocchioandGitHub e84795e4d7 Remove example alias for claude command 2026-02-26 16:36:32 +01:00
David Heinemeier Hansson c3f7575474 Allow for a second AI 2026-02-26 14:48:42 +01:00
David Heinemeier Hansson 91855a56b4 Just go straight to build 2026-02-26 13:15:46 +01:00
David Heinemeier Hansson b1960fe870 Fix for many panes 2026-02-26 13:15:36 +01:00
David Heinemeier Hansson 74c9703ea3 Add usage docs 2026-02-26 13:12:17 +01:00
David Heinemeier Hansson 3408445880 Use consistent style 2026-02-26 12:13:05 +01:00
David Heinemeier Hansson ab615092ab Fix comment 2026-02-26 12:10:53 +01:00
David Heinemeier Hansson 57f07cc9c8 Follow style guide 2026-02-26 12:08:20 +01:00
David Heinemeier Hansson b1fabda701 Make sure toe escape directory and names 2026-02-26 12:03:17 +01:00
David Heinemeier Hansson cc3d8e4abe Fix quoting for file inputs in transcoding functions 2026-02-26 12:00:08 +01:00
David Heinemeier HanssonandGitHub 35862eb907 Merge pull request #4708 from sgruendel/remove_legacy_gpu_terminal
Remove legacy GPU terminal script and its invocation
2026-02-26 05:57:33 -05:00
David Heinemeier Hansson 3ab91b663a Fix bad font reference 2026-02-26 11:51:18 +01:00
David Heinemeier Hansson 7593511600 Remove debug info that wasn't useful 2026-02-26 11:49:23 +01:00
David Heinemeier Hansson 47829841f3 Fix quoting 2026-02-26 11:47:19 +01:00
David Heinemeier Hansson f6c7b96e01 Use const path 2026-02-26 11:45:07 +01:00
David Heinemeier Hansson 05f1ba9fd8 Excess CR 2026-02-26 11:44:12 +01:00
David Heinemeier Hansson 81522701f2 Can't have any migrations before the update that doesn't do this 2026-02-26 11:17:49 +01:00
David Heinemeier Hansson b3867f1294 Even earlier 2026-02-26 10:44:07 +01:00
David Heinemeier Hansson 244bb03877 Need this even earlier too 2026-02-26 10:41:50 +01:00
David Heinemeier Hansson 9ae56e30a2 Needed for older updates 2026-02-26 10:39:51 +01:00
David Heinemeier Hansson 7642cb9cc9 No longer using wayfreeze 2026-02-26 10:36:07 +01:00
David Heinemeier Hansson a491a414d5 Use correct package 2026-02-26 10:24:40 +01:00
David Heinemeier Hansson 119534038a Nothing recursive needed 2026-02-26 10:22:30 +01:00
David Heinemeier Hansson 24e7afefc5 Backup login.keyring instead of just deleting it 2026-02-26 10:20:32 +01:00
David Heinemeier Hansson 8d3d4e797e Make it clear that we're starting a new session 2026-02-26 10:18:38 +01:00
David Heinemeier Hansson b0aa10abb3 Fix conditional 2026-02-26 10:13:36 +01:00
David Heinemeier HanssonandGitHub f3f1468914 Merge pull request #4742 from pomartel/hide-fcitx5-icon
Hide fcitx5 icon from waybar
2026-02-26 04:01:48 -05:00
Pierre Olivier Martel 8bc2a7cf22 Revert "Hide fcitx5 tray icon from waybar"
This reverts commit b5dbb23c9f.
2026-02-25 21:52:12 -05:00
Pierre Olivier Martel 7ae27d4253 hide fcitx5 tray icon 2026-02-25 21:44:08 -05:00
David Heinemeier Hansson 8e88b780d3 Rearrange and proper branding 2026-02-25 21:47:17 +01:00
David Heinemeier Hansson 3775d93099 Disable Ruby compilation in mise (if mise and ruby are installed) 2026-02-25 21:41:46 +01:00
David Heinemeier Hansson 95e5a5a754 Better naming 2026-02-25 21:40:39 +01:00
David Heinemeier Hansson a7f83a576a Usage 2026-02-25 21:37:44 +01:00
David Heinemeier Hansson 0bb3973a8c Reduce this to generic functions 2026-02-25 21:32:51 +01:00
David Heinemeier Hansson 1785fb6185 Add tpl for creating multi-pane layouts for the same command
All the agents, all at once!
2026-02-25 21:21:45 +01:00
David Heinemeier Hansson 53f026292d Do global toggles and include border_size 2026-02-25 20:33:43 +01:00
David Heinemeier Hansson 1609fd74ed Add Tmux keybinding on Super + Alt + Return 2026-02-24 07:46:15 -05:00
David Heinemeier Hansson fe21bb1fad Split out functions and add multi mode for tml 2026-02-23 06:59:21 -05:00
David Heinemeier Hansson 8e9bd2484e Add claude code by default
Now that we have aliases depending on it. But also include it and
opencode in the removal of preinstalls.
2026-02-23 06:27:28 -05:00
David Heinemeier Hansson 74ce6c9943 Try a way to start multiple tmls 2026-02-23 12:06:17 +01:00
David Heinemeier Hansson a612d71bc7 Ensure we're inside tmux 2026-02-23 12:01:58 +01:00
David Heinemeier Hansson 0d50a01a41 Name the current window after the base directory name 2026-02-23 12:00:53 +01:00
David Heinemeier HanssonandGitHub 3e952ca745 Merge pull request #4718 from RyanLatimer/fix-voxtype-notification
fix: update voxtype dictation notification phrasing
2026-02-23 02:15:42 +01:00
Ryan Latimer 6ec3fa3acc fix: update voxtype dictation notification phrasing 2026-02-21 17:08:19 -05:00
David Heinemeier HanssonandGitHub 6cb036d769 Merge pull request #4711 from bjarneo/add-theme-white
Add theme white
2026-02-21 22:18:28 +01:00
David Heinemeier Hansson 71b553a9aa Only source the file if tmux is running 2026-02-21 21:57:33 +01:00
Bjarne Øverli 1ea2abb602 Make the accent brighter 2026-02-21 19:16:37 +01:00
Bjarne Øverli 5067cf5430 Load from repo 2026-02-21 18:57:50 +01:00
Bjarne Øverli ed228e7042 Rename file extenstion 2026-02-21 18:55:31 +01:00
Bjarne Øverli 94d668bcc3 Add theme white 2026-02-21 18:53:58 +01:00
David Heinemeier Hansson 72d575c679 Add linux-firmware-marvell for Surface laptops 2026-02-21 18:18:45 +01:00
David Heinemeier Hansson 3936378ca5 Try harder to ensure that even online installs have the intended packages for their channel 2026-02-21 18:11:04 +01:00
David Heinemeier Hansson ac3a5ca32e Exit mildly so we can continue even if we can't do a setup 2026-02-21 18:01:39 +01:00
David Heinemeier Hansson 5c70555308 Setup hibernation as part of post-install
So limine will be ready
2026-02-21 17:52:15 +01:00
David Heinemeier Hansson 3223e33de3 Ensure this wasn't the problem 2026-02-21 17:42:25 +01:00
Ryan Hughes c45b46cfbb Fix upload command 2026-02-21 11:37:01 -05:00
David Heinemeier Hansson d0a39976b2 Merge branch 'rc' into dev 2026-02-21 17:31:40 +01:00
David Heinemeier Hansson 23604fbaec Fail loudly if we haven't added any boot entries 2026-02-21 17:31:35 +01:00
David Heinemeier Hansson add6ca6292 Merge branch 'dev' into rc 2026-02-21 17:13:55 +01:00
David Heinemeier Hansson f1cd65ca7a Ensure that Alacritty is set to take xterm variables out of the box 2026-02-21 17:13:51 +01:00
Stefan Gründel e6f7c94fcf Remove legacy GPU terminal script and its invocation 2026-02-21 16:51:25 +01:00
David Heinemeier Hansson 105c5e20ea Merge branch 'dev' into rc 2026-02-21 16:37:01 +01:00
David Heinemeier Hansson 311fbe8576 Group system menu bins together 2026-02-21 16:36:56 +01:00
David Heinemeier Hansson d889fd52e4 Merge branch 'dev' into rc 2026-02-21 16:31:38 +01:00
David Heinemeier Hansson 1c527e0cd7 Fix perms 2026-02-21 16:31:29 +01:00
David Heinemeier Hansson 5a2ec94a93 Trim the first 100ms of the video to avoid the noise problem 2026-02-21 16:22:37 +01:00
David Heinemeier Hansson adca719e33 Use h264 for better compatibility when sharing videos with mac 2026-02-21 16:22:18 +01:00
David Heinemeier Hansson 07988bff05 Merge branch 'dev' into rc 2026-02-21 16:11:33 +01:00
David Heinemeier Hansson 6298fdf788 Style 2026-02-21 16:10:07 +01:00
David Heinemeier Hansson 3cab707016 Fix font match 2026-02-21 16:09:57 +01:00
David Heinemeier Hansson aa3b60e0a7 Move Caskaydia Mono to install fonts
Now that we've doubled down on JetBrains as the default
2026-02-21 16:04:51 +01:00
David Heinemeier Hansson 1418e33a0d We don't need this 300MB package by default 2026-02-21 16:01:43 +01:00
David Heinemeier Hansson 11316e7d22 Let ghostty install when it's selected via Install > Terminal like Kitty 2026-02-21 15:56:34 +01:00
David Heinemeier Hansson ba381e28bf Merge branch 'dev' into rc 2026-02-21 15:47:45 +01:00
David Heinemeier Hansson 262fadd531 Revert "Ensure /home is indexed on Btrfs"
This reverts commit 9f561e0123.
2026-02-21 15:32:15 +01:00
David Heinemeier Hansson cc2e7edca4 Merge branch 'dev' into rc 2026-02-21 15:29:42 +01:00
David Heinemeier Hansson 1a564500ac Switch back to Alacritty for the default terminal
It's more broadly compatible with older hardware which is otherwise left
in a bad/confusing situation where nothing works. And it's easy to
switch to Ghostty for those where it works.
2026-02-21 15:29:35 +01:00
David Heinemeier Hansson 0a77df56a5 Merge branch 'dev' into rc 2026-02-21 15:20:11 +01:00
David Heinemeier Hansson 43cebbeb00 More natural order 2026-02-21 15:19:52 +01:00
David Heinemeier Hansson e140badbb2 Make suspend opt-out rather than opt-in 2026-02-21 15:16:15 +01:00
David Heinemeier Hansson 8a36536bf2 Merge branch 'dev' into rc 2026-02-21 15:13:42 +01:00
David Heinemeier Hansson d52ae29e66 Fix User Manager hanging on shutdown 2026-02-21 15:13:32 +01:00
David Heinemeier Hansson 09c421021d Login to the right session 2026-02-21 15:03:26 +01:00
David Heinemeier Hansson 1a743d3467 Prevent password-based SDDM logins from creating an encrypted login keyring 2026-02-21 15:03:16 +01:00
David Heinemeier Hansson 3b2db4b98b Use omarchy-refresh-sddm 2026-02-21 14:18:35 +01:00
David Heinemeier Hansson 21e33b5cd7 Fix sizing 2026-02-21 14:16:27 +01:00
David Heinemeier Hansson 20be495889 Allow updating the script 2026-02-21 14:14:30 +01:00
David Heinemeier Hansson 2a38dc7d2e Add Logout to system menu and style the SDDM login screen 2026-02-21 14:09:14 +01:00
David Heinemeier HanssonandGitHub c24c184d8f Merge pull request #4676 from CryptoCain/dev
Comment out mouse acceleration setting
2026-02-21 11:30:39 +01:00
David Heinemeier Hansson 78742792b8 It just drifts, GH releases are the truth 2026-02-21 11:20:30 +01:00
David Heinemeier Hansson 29cf5e3ee4 Cleanup 2026-02-21 11:14:08 +01:00
David Heinemeier Hansson de76ea3448 Separate the note about restart from the include 2026-02-21 11:10:06 +01:00
David Heinemeier Hansson 24a5de2f99 Add option to configure direct boot 2026-02-21 11:08:52 +01:00
David Heinemeier Hansson c8b1431c8f Update skill to focus on end-user customizations
We have AGENTS.md inside for developers of Omarchy
2026-02-21 11:01:08 +01:00
David Heinemeier HanssonandGitHub 7a5b55c3df Merge pull request #4705 from foucist/patch-1
Keep the mouse cursor in sync with the last focused window when switching workspaces.
2026-02-21 10:53:50 +01:00
David Heinemeier Hansson f7cd7a94b4 Merge branch 'dev' into rc 2026-02-21 10:51:55 +01:00
David Heinemeier Hansson a69f332869 Fix colored gutter in nvim by making line numbers transparent 2026-02-21 10:51:50 +01:00
David Heinemeier Hansson 8dfd36fb2a Excess space 2026-02-21 10:44:25 +01:00
David Heinemeier Hansson a2f99b771e A few more examples 2026-02-21 10:44:02 +01:00
David Heinemeier Hansson 825a12c0b6 Suggest a few more possible tweaks 2026-02-21 10:41:09 +01:00
David Heinemeier Hansson 84359dbd0d Merge branch 'dev' into rc 2026-02-21 10:34:56 +01:00
David Heinemeier Hansson b5dbb23c9f Hide fcitx5 tray icon from waybar 2026-02-21 10:34:52 +01:00
David Heinemeier Hansson 497a755927 Clearer to use the same name 2026-02-21 10:27:19 +01:00
David Heinemeier Hansson 29c3355e3f Group hyprland toggles correctly 2026-02-21 10:24:49 +01:00
David Heinemeier Hansson 49890ec068 Merge branch 'dev' into rc 2026-02-21 10:19:00 +01:00
David Heinemeier Hansson 7514ae7dcf Use consistent bash5 style for conditionals and quoting 2026-02-21 10:18:47 +01:00
David Heinemeier Hansson d2acf3b6ba Use our pkg helpers consistently 2026-02-21 09:52:17 +01:00
David Heinemeier Hansson c6ac6de366 Correct checks 2026-02-21 09:48:11 +01:00
David Heinemeier Hansson d557c016f2 No longer used 2026-02-21 09:46:43 +01:00
James RobeyandGitHub 047e48885c Add cursor warp_on_change_workspace setting
enables "Move the cursor to the last focused window after changing the workspace." setting
2026-02-21 15:36:29 +07:00
David Heinemeier Hansson bac5ceef57 Assume https if no protocol is entered 2026-02-21 09:24:43 +01:00
David Heinemeier Hansson 1f074308b7 Merge branch 'dev' into rc 2026-02-21 09:22:23 +01:00
David Heinemeier Hansson ffd8509da6 Fix Hibernation resume on nvidia computers 2026-02-21 09:22:17 +01:00
David Heinemeier Hansson 76ab172334 Scala needs java to be installed 2026-02-21 09:17:26 +01:00
David Heinemeier Hansson 47c12a6888 Only ask for icon URL if we can't get a favicon 2026-02-21 09:14:50 +01:00
David Heinemeier Hansson 778c203209 Ensure we are using compiled binaries for Ruby 2026-02-21 09:14:50 +01:00
Ryan HughesandGitHub 2a4e4080a7 Merge pull request #2953 from riozee/fix/screenshot-portrait-transform
Fix: omarchy-cmd-screenshot geometry for transformed monitors
2026-02-21 03:02:52 -05:00
David Heinemeier Hansson ac075d1b00 Add Google as a DNS provider option 2026-02-21 09:02:09 +01:00
David Heinemeier Hansson 8e38f70832 Cleanup duplication 2026-02-21 08:52:02 +01:00
David Heinemeier Hansson d1757b25f3 No lazydocker either 2026-02-21 08:43:53 +01:00
David Heinemeier Hansson d32b94f369 Merge branch 'dev' into rc 2026-02-21 08:32:32 +01:00
David Heinemeier Hansson 4c1594572b Need to reload for the keybindings to disappear from Super + K 2026-02-21 08:32:27 +01:00
David Heinemeier Hansson 3bfe42ffad Merge branch 'dev' into rc 2026-02-21 08:29:42 +01:00
David Heinemeier Hansson 49c7b63677 Group these 2026-02-21 08:29:37 +01:00
David Heinemeier Hansson 5e63cf9d1d Ensure we only have plain bindings after doing Remove > Preinstalls 2026-02-21 08:26:46 +01:00
David Heinemeier Hansson aaeafa441e Merge branch 'dev' into rc 2026-02-21 07:55:26 +01:00
David Heinemeier Hansson 06494e99a8 Merge branch 'master' into dev 2026-02-21 07:44:22 +01:00
David Heinemeier HanssonandClaude Opus 4.6 6a2b0f1963 Fix Bluetooth device showing bluez ID instead of friendly name (#4260)
Look up device.id first for Bluetooth friendly names, falling back to
object.id for non-Bluetooth devices. Also fix conditionals to use [[ ]].

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 07:43:46 +01:00
David Heinemeier Hansson 7c0adf7d40 Revert "Merge pull request #4260 from shawnyeager/fix-bluetooth-device-name-display"
This reverts commit 517bc8920f, reversing
changes made to cd01b3cedf.
2026-02-21 07:43:14 +01:00
David Heinemeier HanssonandGitHub 517bc8920f Merge pull request #4260 from shawnyeager/fix-bluetooth-device-name-display
Fix Bluetooth device showing bluez ID instead of friendly name
2026-02-21 07:42:12 +01:00
David Heinemeier HanssonandGitHub 9c7f260f3b Merge pull request #3755 from zachfleeman/nvidia_rtx_pro_support
Nvidia RTX Pro Support
2026-02-21 07:39:31 +01:00
David Heinemeier Hansson 031ea32614 Merge branch 'dev' into rc 2026-02-21 07:34:59 +01:00
David Heinemeier Hansson 6927e77f51 Fix permissions 2026-02-21 07:34:55 +01:00
David Heinemeier Hansson 618b957e23 Fix missing extension 2026-02-21 07:34:24 +01:00
David Heinemeier Hansson f25584949c Remove duplicate or no longer relevant migrations 2026-02-21 07:06:30 +01:00
David Heinemeier Hansson 3df37f999c Hide wiremix and limine-snapper-restore from app launcher
Never meant to be exposed
2026-02-21 06:54:29 +01:00
David Heinemeier Hansson d1b00daf53 Decided not to use this after all
Stuck with more prefix-based keys
2026-02-21 06:32:11 +01:00
David Heinemeier Hansson ea6c92d569 Merge branch 'dev' into rc 2026-02-21 06:29:00 +01:00
CryptoCainandGitHub fcf8d96e10 Comment out mouse acceleration setting
Comment out mouse acceleration setting in input.conf
2026-02-20 23:39:41 -03:30
Zach Fleeman 2e3500cbd5 Nvidia RTX Pro Support
Support detection of Nvidia RTX Pro GPU during install
2026-02-20 18:05:00 -05:00
Ryan Hughes 929b09c4fb Remove. Doesn't work right. 2026-02-20 17:57:26 -05:00
Ryan Hughes 5711f42ac3 Don't delete snapshot on error 2026-02-20 17:48:24 -05:00
David Heinemeier Hansson 9b02df37c2 Merge branch 'dev' into rc 2026-02-20 22:42:50 +01:00
David Heinemeier HanssonandGitHub d6e8983a8c Merge pull request #4646 from dipeshbabu/fix/upload-log-system-info-alias
Fix upload-log usage and support system-info alias
2026-02-20 22:42:35 +01:00
Dipesh BabuandGitHub 413ddd2ea7 docs: correct omarchy-debug journalctl section label (#4654) 2026-02-20 22:41:00 +01:00
Luca PattocchioandGitHub e5b58a3e68 Add remove scala option (#4675) 2026-02-20 22:39:51 +01:00
David Heinemeier HanssonandGitHub 1b2f08e8d9 Merge pull request #4665 from dipeshbabu/fix/migration-hyprland-flag-newline
Fix Hyprland Chromium flags migration newline handling
2026-02-20 22:38:34 +01:00
Ryan HughesandGitHub 747a0f2698 Merge pull request #3107 from jtaw5649/fix/omarchy-cmd-screenshot
Fix HDR omarchy-cmd-screenshot
2026-02-20 16:34:03 -05:00
David Heinemeier Hansson 381c8a9664 Merge branch 'dev' into rc 2026-02-20 22:31:55 +01:00
David Heinemeier Hansson 7d4cc63d20 Clean up and offer reboot 2026-02-20 22:28:14 +01:00
David Heinemeier Hansson 79fb802e34 The nordvpn gui is just too heavy with too many dependencies 2026-02-20 22:25:58 +01:00
David Heinemeier HanssonandGitHub c644408b51 Merge pull request #4468 from jamerrq/feat/nordvpn-service
feat: add NordVPN to installable services with optional GUI
2026-02-20 22:22:23 +01:00
David Heinemeier Hansson 9a7bf34fcc Order 2026-02-20 22:22:02 +01:00
David Heinemeier Hansson c3f3628185 Slim down and use existing services 2026-02-20 22:21:05 +01:00
David Heinemeier Hansson 9f561e0123 Ensure /home is indexed on Btrfs
Closes #4292
Co-authored-by: @jorge-campo
2026-02-20 22:19:22 +01:00
David Heinemeier HanssonandGitHub b7544ecf3c Merge pull request #4290 from prepin/fix-format-drive-compatibility
Fix format-drive compatibility with macOS
2026-02-20 22:15:14 +01:00
David Heinemeier Hansson 91470cb31f Switch from push-to-talk to toggle
Works around the fact that push to talk is just inconsistent regarding
the precise timing of letting go of buttons.

Closes #4178
2026-02-20 22:08:49 +01:00
jtaw5649andRyan Hughes f93c9307ba Fix HDR omarchy-cmd-screenshot 2026-02-20 16:00:51 -05:00
David Heinemeier Hansson 864df215bb Improve description 2026-02-20 21:58:00 +01:00
David Heinemeier HanssonandGitHub 8fed694305 Merge pull request #3596 from defer/defer/kernel-modules-hook
kernel: Keep modules functional after a kernel upgrade
2026-02-20 21:56:55 +01:00
David Heinemeier HanssonandGitHub 949a892052 Merge branch 'dev' into defer/kernel-modules-hook 2026-02-20 21:56:41 +01:00
David Heinemeier Hansson 1c0f735e96 Merge branch 'dev' into rc 2026-02-20 21:49:01 +01:00
David Heinemeier Hansson cea45c4e8b Include vendor for drives where it's not part of the model string
Closes #3681
Co-authored-by: @KR9SIS
2026-02-20 21:48:51 +01:00
David Heinemeier Hansson 640ca725bb More clues for agents 2026-02-20 21:47:43 +01:00
David Heinemeier Hansson fc36b5ef7a Merge branch 'dev' into rc 2026-02-20 21:45:00 +01:00
David Heinemeier Hansson 5f1eca3b79 Show partitions to help decide on drive via omarchy-drive-select
Closes #3731
Co-authored-by: @johnbarney
2026-02-20 21:30:11 +01:00
David Heinemeier HanssonandGitHub c8a3796d36 Merge pull request #3730 from hattapauzi/master
Added a reminder to run omarchy-restart-xcompose for applying changes
2026-02-20 21:25:42 +01:00
David Heinemeier HanssonandGitHub c6df7ee199 More direct
Updated comment to clarify the command for applying changes.
2026-02-20 21:25:29 +01:00
David Heinemeier Hansson 0cc91ce71c Simplify the kernel change check and make it work with any kernel
Closes #3785
2026-02-20 21:22:59 +01:00
David Heinemeier Hansson 9b4140abc9 Turn off keyboard backlighting when idle
Closes #3319
Co-authored-by: @pukljak
2026-02-20 21:13:02 +01:00
David Heinemeier HanssonandGitHub bc05c1c849 Merge pull request #4673 from guidovicino/fix-obsidian-muted-contrast
Fix low contrast for muted/faint text in Obsidian theme template
2026-02-20 20:52:51 +01:00
David Heinemeier HanssonandGitHub 84c57d97bd Merge pull request #2868 from timohubois/feat-config-docker-with-on-demand-startup
Feat config docker with on demand startup
2026-02-20 20:51:42 +01:00
David Heinemeier Hansson fae8f6e2ce Fix emoji rendering in Alacritty
Closes #2698
Co-authored-by: @glauberdmo
2026-02-20 20:35:12 +01:00
David Heinemeier Hansson 44d9d17d21 Merge branch 'dev' into rc 2026-02-20 20:23:48 +01:00
David Heinemeier Hansson d3ab84bb05 Merge branch 'master' into dev 2026-02-20 20:23:43 +01:00
David Heinemeier Hansson cd01b3cedf Fix list 2026-02-20 20:23:31 +01:00
David Heinemeier Hansson 4db9620cb5 Merge branch 'master' into dev 2026-02-20 20:21:43 +01:00
David Heinemeier HanssonandGitHub 316bffa73d Merge pull request #2602 from saftacatalinmihai/scala-dev-env
Added Scala to the Deveopment Omarchy Menu and implementation
2026-02-20 20:20:45 +01:00
David Heinemeier Hansson 1babb32c05 Merge branch 'dev' into rc 2026-02-20 20:20:22 +01:00
Guido Vicino b50a388726 Fix low contrast for muted/faint text in Obsidian theme 2026-02-20 19:59:39 +01:00
guidovicinoandGitHub 5ef4426577 Add Tmux to the config refresh menu (#4671) 2026-02-20 19:39:34 +01:00
db3ba3501a Support single-key keyboard backlight cycling (#4672)
* Support single-key keyboard backlight cycling (like Asus F4) and add keyboard specific OSD icon

* We don't need an alias

---------

Co-authored-by: Ryan Latimer <ryan@example.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-02-20 19:37:55 +01:00
David Heinemeier Hansson f3f36e2525 Fix perms 2026-02-20 18:37:26 +01:00
Michael D LambertandGitHub e99afc98f8 Simplified battery percentage retrieval command (#2922)
* Simplified battery percentage retrieval command

Simplified the battery percentage extraction command.

* Used int instead of adding 0, put exit back in

Changed to use int.
Put exit back in to only return first battery in case of systems with multiple batteries.
2026-02-20 18:29:45 +01:00
David Heinemeier Hansson b14b9fb1e7 Merge branch 'dev' into rc 2026-02-20 18:13:24 +01:00
David Heinemeier Hansson 694eb8c698 Install vulkan drivers by default
Closes #2926
Co-authored-by: @ElBrodino
2026-02-20 18:12:54 +01:00
David Heinemeier Hansson 4cf3a6191b Add Super + Ctrl + Z to zoom in (repeat for more) and Super + Ctrl + Alt + Z to zoom out
Closes #2940
Co-authored-by: @pelephant2
2026-02-20 18:02:25 +01:00
David Heinemeier Hansson 667820fdd3 Merge branch 'dev' into rc 2026-02-20 17:53:16 +01:00
David Heinemeier Hansson 518349e490 Use new hyprland rules for changing the scrolltouchpad
Closes #4670
2026-02-20 17:53:02 +01:00
David Heinemeier Hansson e231697430 Raise inotify file watchers 2026-02-20 17:52:19 +01:00
David Heinemeier Hansson 645118830e Restart follows in second migration 2026-02-20 17:33:40 +01:00
88c8695ee5 Add full OSC 52 support to Alacritty configuration (#4603)
* Add full OSC 52 support to Alacritty configuration

* Simplify OSC 52 support addition in Alacritty config

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-02-20 17:32:37 +01:00
David Heinemeier Hansson f8aff270db Merge branch 'dev' into rc 2026-02-20 17:06:25 +01:00
David Heinemeier Hansson a493fc8b96 Humans would think vertical = vertical split, horizontal = horizontal split
Gotta love Linux nerds
2026-02-20 17:06:20 +01:00
David Heinemeier Hansson 5788da54af Use proper notification icons 2026-02-20 16:54:08 +01:00
David Heinemeier Hansson fcf883e827 Add notification silencing indicator to waybar 2026-02-20 16:52:09 +01:00
David Heinemeier Hansson bf962f0042 Add idle lock indicator 2026-02-20 16:48:36 +01:00
David Heinemeier Hansson 1303fa92fa Merge branch 'dev' into rc 2026-02-20 15:58:20 +01:00
David Heinemeier Hansson 87600497da Delay after sleep for PAM readiness before turning on display 2026-02-20 15:58:15 +01:00
David Heinemeier Hansson b98ff9a044 Merge branch 'dev' into rc 2026-02-20 15:55:53 +01:00
David Heinemeier Hansson 718ac2236c Attempt to fix PAM timing issue 2026-02-20 15:55:43 +01:00
David Heinemeier Hansson 0672cc4647 Merge branch 'dev' into rc 2026-02-20 15:53:22 +01:00
David Heinemeier Hansson ccc88a0111 Ensure config is available so starting the service immediately will work 2026-02-20 15:53:15 +01:00
David Heinemeier Hansson 0f4c64665e Merge branch 'dev' into rc 2026-02-20 15:06:49 +01:00
Dipesh BabuandGitHub 1fa33ce670 Fix typo (#4664)
* fix typo

* fix typo
2026-02-20 14:58:13 +01:00
Dipesh Babu 093a53b2a0 fix: add system-info alias for upload-log 2026-02-20 08:37:04 -05:00
David Heinemeier Hansson d7423c646d Merge branch 'dev' into rc 2026-02-20 08:28:24 +01:00
David Heinemeier Hansson a449e4f108 Fix wake 2026-02-20 07:52:49 +01:00
Dipesh Babu d04599a769 fix: append hyprland chromium flag as separate line 2026-02-19 23:15:38 -05:00
Dipesh BabuandGitHub f8df232902 docs: list deno and zig in install-dev-env usage (#4657) 2026-02-19 21:57:44 +01:00
Dipesh BabuandGitHub 5914d12c21 fix typo (#4658) 2026-02-19 21:44:12 +01:00
David Heinemeier Hansson 3b6174763c Merge branch 'dev' into rc 2026-02-19 21:33:16 +01:00
David Heinemeier Hansson 6d2e99f1c0 Restore opening present folder 2026-02-19 21:33:08 +01:00
David Heinemeier Hansson 5068e32044 Merge branch 'dev' into rc 2026-02-19 21:04:07 +01:00
David Heinemeier Hansson ae8b9b748b Have to start it right away 2026-02-19 21:03:55 +01:00
David Heinemeier Hansson c266a4d7f4 Correct offset to icon 2026-02-19 20:50:48 +01:00
David Heinemeier Hansson d27bc60be7 Correct offset to icon 2026-02-19 20:50:39 +01:00
David Heinemeier Hansson 88e86fa697 Match the new name 2026-02-19 20:44:00 +01:00
David Heinemeier Hansson 2a207f9e72 We don't need to restart walker 2026-02-19 20:42:07 +01:00
David Heinemeier Hansson 1f19ede7e3 Match art naming 2026-02-19 20:27:01 +01:00
David Heinemeier Hansson 0729f25905 Typo 2026-02-19 19:15:39 +01:00
David Heinemeier Hansson ea6311b80a Merge 2026-02-19 19:14:33 +01:00
Pierre Olivier MartelandGitHub 51cab758d0 Provide default icon URL if none given in omarchy-webapp-install (#4650) 2026-02-19 19:10:17 +01:00
David Heinemeier Hansson b17a22d47e Protect against nvim alias override
Closes #4558, #4559
Co-authored-by: @grumpydumpty
2026-02-19 19:03:44 +01:00
David Heinemeier Hansson 8a2e65e5d4 Silence the scaling notifications 2026-02-19 16:07:12 +01:00
David Heinemeier Hansson 83aa9aeb86 Ask before we close chromium and swap to mainline 2026-02-19 15:48:01 +01:00
David Heinemeier Hansson da0122c85a Allow proper downgrades of packages 2026-02-19 15:35:15 +01:00
David Heinemeier Hansson 2548395f8a Here too 2026-02-19 14:53:14 +01:00
David Heinemeier Hansson 9843f0a07e Allow for rc here too 2026-02-19 14:52:11 +01:00
5002279e3c Improve windows vm (#4512)
Co-authored-by: developer <developer@localhost>
2026-02-19 12:38:21 +01:00
Nate StottandGitHub ea14de4c37 Fix try init in bash when launched from fish shell (#4640)
The try command detects shell type from $SHELL variable. When bash is
launched from fish, $SHELL is still set to /usr/bin/fish, causing try
to output fish syntax which fails in bash with syntax errors.

Explicitly set SHELL=/bin/bash for the try init call to ensure correct
shell detection.
2026-02-19 12:36:04 +01:00
David Heinemeier Hansson 88f18727ae Too cumbersome to use on a laptop keyboard 2026-02-19 09:31:25 +01:00
zachfleemanandGitHub 4aeb4ab79e Fix firefox detection command in omarchy-launch-browser (#4641) 2026-02-19 07:58:07 +01:00
Pierre Olivier MartelandGitHub 055d9285b1 Unbind ctrl+shift+page_up/down in Ghostty config so it doesn't interfere with tmux keybindings (#4645)
* Unbind ctrl+shift+page_up/down in Ghostty config

* Add guard clause
2026-02-19 07:53:03 +01:00
David Heinemeier Hansson 0feb35a436 Use consistent width like theme selector 2026-02-18 22:45:41 +01:00
David Heinemeier Hansson c254f890aa Named for direct selection 2026-02-18 22:42:43 +01:00
6b4109faba Background selector (#4519)
* UPDATE: select background method

* ADD: migration file for background selector

* Add symlink for background selector in walker-elephant.sh

Forgot about this file. Should be added to make sure the background selector feature available in the fresh install

* clean up the code a bit

Updated omarchy background selector to hide from provider list and removed subtext from entries.

* Make the background selector the default

* Fix migration

* FIX: typo on background symlink target

* UPDATE: add ~/.config/omarchy/backgrounds/theme.name

* UPDATE: Cache = false

* Fix escaping for all extensions

* Extract omarchy-theme-bg-set

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-02-18 22:24:43 +01:00
Tommy MartinandGitHub eec15803fc Allow user themes to override individual files from official themes (#4547)
Instead of choosing exclusively between the official or user theme
directory, copy the official theme first, then overlay any user
customizations on top. This allows users to override specific files
(e.g. colors, backgrounds, keyboard backlight) without having to
duplicate the entire theme.
2026-02-18 22:07:49 +01:00
73dc11286b make omarchy-launch-browser check for firefox exclusive flag to detect base (#4572)
Co-authored-by: Mrid22 <mridulaga@outlook.com>
2026-02-18 21:59:05 +01:00
David Heinemeier Hansson 3657b1bc84 Quiet the output and give it a header 2026-02-18 21:40:38 +01:00
David Heinemeier Hansson c47bb34c25 Don't halt, just update 2026-02-18 21:34:12 +01:00
David Heinemeier Hansson b2d09849bd Actually was missing! 2026-02-18 21:33:58 +01:00
Diogo FerreiraandGitHub a3cdd187c9 update: Update archlinux-keyring before updating packages (#4639)
Maintainer keys might have been added/revoked, let's ensure that we have
the latest before updating the packages, otherwise users might have to
do this manually.

Fixes https://github.com/basecamp/omarchy/issues/4608
2026-02-18 21:33:32 +01:00
James BarsonandGitHub 15a847474b Adds completion cycle to inputrc (#4634) 2026-02-18 21:26:41 +01:00
Steve GodlewskiandGitHub 43ae186a80 Add Framework 16 RGB keyboard theme syncing (#4524)
* Add framwork 16 RGB syncing

* fixed install script, fixed color changing when style changes

* added framework scripts to the main install scripts

* renamed theme-set scripts, added migration

* use omarchy-pkg-add, shared keyboard template, tracked udev rule

* call the install file from the migration file
2026-02-18 21:19:30 +01:00
David Heinemeier Hansson 5f978a9ea9 Excess CR 2026-02-18 21:10:27 +01:00
David Heinemeier Hansson 7d011c0249 Match 2026-02-18 21:10:07 +01:00
David Heinemeier Hansson ab52d79ef2 Excess 2026-02-18 21:09:54 +01:00
David Heinemeier Hansson 082e870f06 Need a way to kill the pane 2026-02-18 21:09:28 +01:00
David Heinemeier Hansson 940914cffc Similar groupings 2026-02-18 20:50:33 +01:00
David Heinemeier Hansson 3757955b4b Yank this until we can find a compatible way to bring it back
I ain't giving up ctrl+l to clear the scrollback!
2026-02-18 18:39:25 +01:00
David Heinemeier Hansson 7a19cee727 Take out for now
Was starting tmux inside tmux for some reason
2026-02-18 18:04:13 +01:00
David Heinemeier Hansson b68afc10b5 Fix perms 2026-02-18 17:58:46 +01:00
David Heinemeier Hansson 3484b85439 Version 3.4.0 2026-02-18 17:56:29 +01:00
David Heinemeier Hansson d96ff4e556 Just rely on Hyprland finding the right nearest valid scale 2026-02-18 15:51:14 +01:00
David Heinemeier Hansson 965778b8ea Work with any resolution monitor 2026-02-18 15:32:46 +01:00
David Heinemeier Hansson aebc554efe Tweak language 2026-02-18 15:29:24 +01:00
David Heinemeier Hansson 43fffc4474 Excess CR 2026-02-18 12:52:51 +01:00
David Heinemeier Hansson e1d2b996b0 Too loud/scary for no actionable benefit right at the end 2026-02-18 12:51:48 +01:00
David Heinemeier Hansson 4079c57fc7 Make this the nord default 2026-02-18 10:40:29 +01:00
David Heinemeier Hansson d36c9d0a77 Merge branch 'master' into dev 2026-02-18 09:33:24 +01:00
David Heinemeier Hansson ff217012fc Cure Chromium crash bug caused by mixing 145 and 144 sync logs 2026-02-18 09:30:04 +01:00
David Heinemeier Hansson 0c5cb0480f Cure Chromium crash bug caused by mixing 145 and 144 sync logs 2026-02-18 09:28:58 +01:00
David Heinemeier Hansson 4119824b31 Merge branch 'master' into dev 2026-02-18 09:25:19 +01:00
David Heinemeier Hansson 0c50bd893f So the migration doesn't appear anonymous even when lmstudio isn't installed 2026-02-18 09:25:14 +01:00
David Heinemeier Hansson 7305152414 Add third background to Nord 2026-02-18 08:27:20 +01:00
Ryan Hughes 35f527f643 Add vim-tmux-navigator for seamless pane navigation 2026-02-17 23:27:16 -05:00
Ryan HughesandGitHub f0c5b97546 Merge pull request #4286 from robzolkos/add-no-audio-screenrecord
Add "Without audio" option to screenrecord menu
2026-02-17 16:28:53 -05:00
Ryan Hughes 5df1cd6523 Add cx alias 2026-02-17 16:12:22 -05:00
Ryan Hughes 55cb2498b3 Hotfix: Swap lmstudio -> lmstudio-bin 2026-02-17 16:07:39 -05:00
Ryan Hughes 69617397f5 Allow tmux layout to work outside of tmux 2026-02-17 16:02:09 -05:00
dhimasandGitHub 7bb35f82ae UPDATE: omarchy-aur-install add sudo -v (#4631) 2026-02-17 21:24:44 +01:00
David Heinemeier Hansson 34f0a4215d Four-way 2026-02-17 17:59:16 +01:00
David Heinemeier Hansson 47863b2408 Add 1.6x as option too 2026-02-17 17:59:03 +01:00
David Heinemeier Hansson de4d866754 Two new ones 2026-02-17 17:57:02 +01:00
David Heinemeier Hansson ec76c2acdb Add Super + Ctrl + Alt + Backspace to toggle single-window square aspect ratio 2026-02-17 17:55:43 +01:00
David Heinemeier Hansson f6719b1784 Add Super + Ctrl + Backspace to toggle resolution between 1-2-3x 2026-02-17 17:55:19 +01:00
David Heinemeier Hansson 6ef727ab0b Merge branch 'master' into dev 2026-02-17 17:32:48 +01:00
David Heinemeier Hansson 106d664573 Just the changes 2026-02-17 17:31:10 +01:00
David Heinemeier Hansson 70a188a5cd Start tracking changes in md files inside 2026-02-17 17:30:58 +01:00
Rob ZolkosandGitHub dce2f62071 Merge branch 'basecamp:dev' into add-no-audio-screenrecord 2026-02-17 10:40:00 -05:00
David Heinemeier Hansson d346f5d522 Style 2026-02-17 12:12:30 +01:00
David Heinemeier Hansson f152ff68ea Tweak screenshot notification 2026-02-17 12:11:48 +01:00
David Heinemeier Hansson 01d7296616 We no longer need early exit since default is not to edit
Closes #4569
2026-02-17 12:07:47 +01:00
David Heinemeier Hansson b573a37e33 Ensure packages available on both AUR and other repos are installed from AUR
Closes #4578, #4577, #4581
2026-02-17 12:03:04 +01:00
David Heinemeier HanssonandGitHub 68b4939993 Revert "fix(aur): add -a flag to yay command to assume AUR packages (#4581)" (#4627)
This reverts commit b3dd14a038.
2026-02-17 11:55:28 +01:00
Andrej BenzandGitHub b3dd14a038 fix(aur): add -a flag to yay command to assume AUR packages (#4581) 2026-02-17 11:53:39 +01:00
7dc638358b disable opencode auto-update feature as we rely on pacman (#4582)
* disable opencode auto-update feature as we rely on pacman

* Refreshing already produces a .bak, so that's enough

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-02-17 11:42:54 +01:00
David Heinemeier Hansson 3e07255fbc Better split 2026-02-17 11:26:41 +01:00
David Heinemeier Hansson 02fd1961b9 Interactive drive picker if a drive is not selected
Co-authored-by: @Mrid22
Closes #4596
2026-02-17 11:25:09 +01:00
Shreyansh MalviyaandGitHub 40bff09c84 Remove Wayland color manager disabling flag from Chromium configs (#4610) (#4615)
Signed-off-by: Shreyansh Malviya <shreyanshmalviya0012@gmail.com>
2026-02-17 10:51:24 +01:00
David Heinemeier Hansson 6ff13fc071 These are window keys, not pane keys 2026-02-16 21:52:19 +01:00
David Heinemeier Hansson a33cf4f287 Reload the config live when we refresh 2026-02-16 21:48:21 +01:00
David Heinemeier Hansson 2e2d78088a Direct access to windows 2026-02-16 21:47:08 +01:00
David Heinemeier Hansson b1af966819 Go straight to the new unified screenshot flow 2026-02-16 14:27:29 +01:00
David Heinemeier Hansson e055358721 Add eff to open the result of the fuzzy find directly in your editor 2026-02-16 14:08:14 +01:00
David Heinemeier Hansson 8b6e2466a3 Add the tmux dev layout 2026-02-16 10:33:56 +01:00
David Heinemeier Hansson 560500d8ec Allow passthrough 2026-02-16 10:26:31 +01:00
[1;13DDavid Heinemeier Hansson 9aff0d4b3b Note about consequences 2026-02-15 23:06:07 +01:00
Horace KoandGitHub 463417a281 Use a thin space to increase spacing between Omarchy glyph and its label. (#4586) 2026-02-13 18:43:23 +01:00
David Heinemeier Hansson bcd52fa289 Switch back to mainline chromium
We no longer need the fork, as the themeing is now fully natively
supported
2026-02-13 18:08:42 +01:00
Ryan Hughes bbb57e98c1 Update screenshot behavior
- Unifies screenshot to a single shortcut
- Provides easy override for screenshot editor of choice via env var or
flag
- Edit screenshots via clicking the notification
- Screenshots are copied to clipboard + saved by default
2026-02-12 17:04:48 -05:00
David Heinemeier Hansson e38dd063a6 Latest version 2026-02-12 11:20:47 +01:00
David Heinemeier Hansson a4d6e3ab03 More natural this way 2026-02-11 22:53:12 +01:00
David Heinemeier Hansson fc529b368d Match direction from the sessino list 2026-02-11 16:46:05 +01:00
David Heinemeier Hansson ce01b6e0d6 Improve navigation ease 2026-02-11 14:17:32 +01:00
David Heinemeier Hansson 450d4dd82b No wifi power saving when connected to power 2026-02-11 14:06:52 +01:00
David Heinemeier Hansson 8895384b0e This is producing double pastes everywhere else 2026-02-11 12:22:58 +01:00
David Heinemeier Hansson e4b7372666 Cannot get suspend to hibernate to work consistently across different laptops
Too many failures where it's stuck in a suspend-wake-up loop
2026-02-10 14:07:40 +01:00
David Heinemeier Hansson a30448ceec Allow the ssh forwarding functions to take multiple ports 2026-02-10 13:39:48 +01:00
David Heinemeier Hanssonand@naxels 4fadf666e6 Add nautilus compatibility with the unified clipboard commands
Co-authored-by: @naxels
2026-02-10 12:32:56 +01:00
David Heinemeier Hansson 07ede07193 Add port forwarding functions for web dev
So we can forward a port on localhost to an Omaterm
2026-02-10 12:00:04 +01:00
David Heinemeier Hansson 527819b750 Rely on alt-arrow doing 5s, then shift-arrow does 1s 2026-02-10 11:30:03 +01:00
David Heinemeier Hansson 98bfe20839 Add example of using alacritty with ssh
Since ghostty requires the TERM setting thing which is a bit odd
2026-02-10 10:20:21 +01:00
David Heinemeier Hansson 4d48409926 Just rely on terminal for coloring
We don't need a full theme
2026-02-10 08:31:15 +01:00
David Heinemeier HanssonandGitHub ffafe1727e Add Tmux (#4562)
* Add Tmux

Being able to use a unified terminal setup between local and remote
hosts has some real advantages.

* Renaming is more important than reloading

* Self-explanatory, really

* Add alias for it

* Attach to last used session or start a new if we have none

* Just stick to n/p

* Make it a clean 10x

* We don't need this

* Keep similar fixes together

* Keep bindings together

* Hate looking at that 0

* Add way to refresh theme from its templates (when they've changed)

* Fix
2026-02-09 23:01:46 +01:00
SerpentandGitHub f2f306269a Avoid error if opencode isn't running. (#4566) 2026-02-09 22:58:34 +01:00
David Heinemeier Hansson e4913ca2db Update boot entry 2026-02-09 22:34:43 +01:00
David Heinemeier HanssonandGitHub ff234bba1f Ensure Walker can't just die and stay dead (#4555) 2026-02-09 13:08:13 +01:00
David Heinemeier Hansson ecf48a3b4c Use ACPI alarm for RTC wakeup on s2idle systems for hibernation 2026-02-08 11:27:49 +01:00
David Heinemeier Hansson 74eea9e716 The AC Power detection is buggy on several laptops
Just commit to always going from suspend to hibernate on the specified
delay
2026-02-08 10:22:39 +01:00
David Heinemeier Hansson 66cb888a2e Don't try to hibernate based on battery level checks
We just rely on the fixed hibernate delay
2026-02-08 09:09:16 +01:00
David Heinemeier Hansson 0a5755e51f Pick something that doesn't conflict with existing command 2026-02-08 08:42:14 +01:00
bjarneoandGitHub 7bd5bf25cd Remove the aether.nvim dependency (#4543)
* Remove the aether.nvim dependency

* Fix a blooper
2026-02-07 22:16:21 +01:00
bjarneoandGitHub 0c9b38e507 Set the aether dependency using v2 directly (#4537)
* Set the aether dependency using v2 directly

* Format the object properly
2026-02-07 15:53:05 +01:00
David Heinemeier Hansson 0e2ed5439e Suggestion for claude 2026-02-07 15:32:12 +01:00
David Heinemeier Hansson 75a0ee6149 Follow existing naming convention 2026-02-07 14:09:16 +01:00
Sameer PaudelandGitHub 2c9c0f883a Enable Synaptics InterTouch for confirmed touchpads if not already loaded (#4499)
* Enable Synaptics InterTouch for confirmed touchpads if not already loaded

* fix echo message

* remove shebang and echo messages

* check for synaptics intertouch and enable it only if available
2026-02-07 14:07:01 +01:00
8a58b8153c delete snapshot if update fails since it takes up space, esspecially when redoing the update as it makes another snapshot (#4531)
Co-authored-by: Mrid22 <mridulaga@outlook.com>
2026-02-07 12:37:58 +01:00
David Heinemeier Hansson badd1f8495 Reorder backgrounds for default 2026-02-07 12:35:27 +01:00
David Heinemeier Hansson 67ee1450f0 Add aether to the preinstalls removal list 2026-02-07 12:33:18 +01:00
bjarneoandGitHub c289cd0730 Add vantablack theme (#4533) 2026-02-07 11:23:27 +01:00
David Heinemeier Hansson cbcd0e49be Not used/needed 2026-02-07 11:22:28 +01:00
David Heinemeier Hansson ae45f06847 Fix gum confirm color for no 2026-02-07 11:06:35 +01:00
David Heinemeier Hansson 1070a87a47 Add option to remove all preinstalls
To get a bare-bones Omarchy
2026-02-07 11:05:56 +01:00
David Heinemeier Hansson 9741b29a7c Describe the rest of the bins 2026-02-07 10:50:48 +01:00
David Heinemeier Hansson ea24b0dc68 Setup hibernation by default on new installs 2026-02-07 10:45:24 +01:00
David Heinemeier Hansson 3bbb57b54d Use real config files as much as possible 2026-02-07 10:37:39 +01:00
David Heinemeier Hansson ebfb7f16e8 Raise sleep-to-hibernate to survive a long lunch 2026-02-07 10:18:01 +01:00
Ryan HughesandGitHub 347afae8c0 Merge pull request #4491 from johnzfitch/fix/pascal-maxwell-nvidia-backend
Expanded Legacy NVIDIA GPU support with correct backend selection
2026-02-07 01:24:30 -05:00
Ryan Hughes ebfcefa553 Consolidate migration sed cleanup and quote heredoc paths 2026-02-07 00:34:13 -05:00
David Heinemeier Hansson 2087d96ad8 Fix perms 2026-02-06 22:08:23 +01:00
David Heinemeier Hansson b638cbc57a Revert "Fix Realtek RTL8111/8168 ethernet adapter support for ASUS TUF Gaming laptops (#4497)"
This reverts commit cf72c02ea5.
2026-02-06 18:22:14 +01:00
David Heinemeier Hansson 636a7cefda Actually run the yt6801 fix 2026-02-06 17:41:44 +01:00
David Heinemeier Hansson f7e22fcfd8 Fix IO pressure on some machines with Ghostty 2026-02-06 17:19:47 +01:00
Nicolas DorierandGitHub b0e8a4dcea Fix: High IO pressure caused by ghostty (#4507) 2026-02-06 16:51:18 +01:00
amrxtghandGitHub f57234b991 fix: simple typo in omarchy-launch-walker (#4514) 2026-02-06 16:48:21 +01:00
David Heinemeier Hansson be7f316371 Add Super + Shift + Return for browser binding to existing installs 2026-02-06 12:03:37 +01:00
David Heinemeier Hansson b1553d3b31 Add Super + Shift + Return as an alternative for launching the browser 2026-02-06 12:00:55 +01:00
David Heinemeier Hansson 055e969a56 Let's help our agent friends a little to understand the Omarchy code base 2026-02-06 11:32:03 +01:00
David Heinemeier Hansson 050899e5b3 Echo the migration description 2026-02-06 11:25:05 +01:00
David Heinemeier Hansson bd8b12b23b Ensure hyprlock only looks for a fingerprint auth when that's configured
This should eradicate the first failed auth attempt after
sleep/hibernation
2026-02-06 11:24:12 +01:00
David Heinemeier Hansson c268fb6c9b Turn off backlighting before sleep
So it cant keep the computer awake
2026-02-06 11:16:18 +01:00
David Heinemeier Hansson 248a7a611b Fix perms 2026-02-05 14:48:21 +01:00
David Heinemeier Hansson e487dace43 Install asusctl on ROG machines to get out-of-the-box keyboard light sync 2026-02-05 09:23:00 +01:00
David Heinemeier Hansson ba14cd36dd Sync keyboard colors with theme if asusctl is installed 2026-02-05 09:05:30 +01:00
David Heinemeier Hansson 34b22a23f6 Revert "Fix correct suspend-then-hibernate options"
This reverts commit f0d5c35271.
2026-02-04 21:56:34 +01:00
David Heinemeier Hansson f0d5c35271 Fix correct suspend-then-hibernate options
So we don't try to hibernate when sleeping while on power
2026-02-04 21:54:26 +01:00
David Heinemeier Hansson 63fc96a541 Timeout isn't actually nice in reality 2026-02-04 21:43:41 +01:00
Nathan NutterandGitHub 4ba39ba73c Prevent premature exit of omarchy-update-firmware (#4503)
This adds the `--force` option to `fwupdmgr refresh` so that this script will not exit, due to `set -e`, when `fwupdmgr refresh` exits non-zero due to the metadata being up-to-date, i.e.,

```
Metadata is up to date; use --force to refresh again.
```

Another option would be to use `|| true` but that might hide a legitimate error.

This was motivated when I cancelled a run of this script and then later invoked it again, via Update > Firmware, and it would not run `sudo fwupdmgr update` because `fwupdmgr refresh` was exiting non-zero with the above metadata up-to-date "error".
2026-02-04 21:41:14 +01:00
LewisandGitHub 1a14938382 Update style path in swayosd config (#4502) 2026-02-04 21:35:44 +01:00
Pierre Olivier MartelandGitHub 9581cce1af Fix Windows VM timezone and add a confirmation prompt before removing the VM (#4489)
* Add confirmation prompt before removing Windows VM

* Fix Windows VM timezone defaults to UTC
2026-02-04 10:46:15 +01:00
JamoladdinandGitHub cf72c02ea5 Fix Realtek RTL8111/8168 ethernet adapter support for ASUS TUF Gaming laptops (#4497) 2026-02-04 10:18:56 +01:00
johnzfitch a8ce084460 Fix NVIDIA environment variables for Maxwell/Pascal/Volta GPUs
Maxwell, Pascal, and Volta GPUs lack GSP (GPU System Processor) firmware
required by NVD_BACKEND=direct. Applying direct backend unconditionally
causes Aquamarine v3.3.0+ to fail with "Unknown-1" displays and blank screens.

Changes:
- Add GPU generation detection (Turing+ vs Maxwell/Pascal/Volta)
- Turing+ (RTX 20xx+, GTX 16xx): NVD_BACKEND=direct + LIBVA_DRIVER_NAME=nvidia
- Maxwell/Pascal/Volta: NVD_BACKEND=egl only (no GSP support)
- Both generations: __GLX_VENDOR_LIBRARY_NAME=nvidia (universal)

Regex improvements:
- Fix Turing+ detection (was using Maxwell/Pascal pattern)
- GT series: GT 1030 now properly detected (was missed)
- Quadro: P/M series only (exclude Kepler K-series)
- Volta: Titan V, Tesla V100, Quadro GV100
- Modern datacenter: A100, H100, T4, L-series
- MX series: Fixed to match MX150/250/450 (was only MX1-9)

Migration script (1770159912.sh) fixes existing broken installations by:
- Detecting legacy NVIDIA GPUs on existing systems
- Rewriting incompatible NVD_BACKEND=direct entries to egl
- Creating automatic backups before modification

Testing:
Validated against GT 1030, GTX 960/1080, Quadro P620 (legacy egl backend)
and GTX 1650, RTX 3080 (modern direct backend).

Preserves existing Turing+ behavior exactly. No impact on non-NVIDIA systems.

Fixes hyprwm/Hyprland#7001
Fixes hyprwm/Hyprland#8519
Fixes hyprwm/Hyprland#6343
Fixes hyprwm/Hyprland#7812
2026-02-03 17:33:48 -08:00
Pierre Olivier MartelandGitHub 4b3e21445b Don't apply power profile source switching if only one profile is available (#4485) 2026-02-03 16:18:24 +01:00
David Heinemeier Hansson 8878478103 Prevent broken AUR updates from interrupted git sessions
Co-authored-by: @scale03
Closes #3995, #3917
2026-02-02 21:16:23 +01:00
David Heinemeier Hansson 74ff475693 Didn't end up being all that useful 2026-02-02 20:45:01 +01:00
David Heinemeier Hansson 22f64160f5 Fix branch setter 2026-02-02 17:04:36 +01:00
David Heinemeier Hansson ea76f8196c Add Motorcomm YT6801 ethernet adapter driver for Slimbook + Tuxedo ethernet adapters 2026-02-02 17:03:53 +01:00
Jamer Rebolledo d8660fd2c8 feat: add NordVPN to installable services with optional GUI
- Add omarchy-install-nordvpn script that:
  - Installs nordvpn-bin from AUR
  - Enables nordvpnd daemon
  - Adds user to nordvpn group
  - Optionally installs NordVPN GUI with TUI entry
  - Detects existing GUI installation to avoid conflicts

- Add NordVPN option to Install > Service menu with 󱇱 icon
2026-02-01 23:59:00 -05:00
James RobeyandGitHub 49a2941e2b Sanitize prompt before starship init (#4269)
Add prompt sanitization to clear stale terminal line state after abnormal exits, preventing prompt artifacts.
2026-02-01 17:49:59 +01:00
David Heinemeier Hansson 6a5b64b4bc Add the new wiremix icon if there isn't already a wiremix config 2026-02-01 17:47:57 +01:00
l1ghtyandGitHub c484b66bcb wiremix: less confusing audio default device character (#4404) 2026-02-01 17:46:07 +01:00
David Heinemeier Hansson 87da28a965 Fix the video PWAs 2026-02-01 17:39:26 +01:00
David Heinemeier Hansson 23b74c6212 Fix opacity issues by using a tag to apply the default opacity that can be removed
Fixes #4168
2026-02-01 16:30:27 +01:00
David Heinemeier Hansson 69dbee75cd Match existing term 2026-01-31 21:59:32 +01:00
David Heinemeier Hansson d9c5df29d1 DRY 2026-01-31 21:58:29 +01:00
David Heinemeier Hansson 7c9708d647 Respect rc too 2026-01-31 21:52:09 +01:00
David Heinemeier Hansson 5a9f0318e8 Respect rc 2026-01-31 21:51:18 +01:00
David Heinemeier Hansson ab4694e3f5 Introduce rc channel 2026-01-31 21:49:07 +01:00
David Heinemeier Hansson bebf14a18c In order of appearance 2026-01-31 18:14:47 +01:00
ff2a47c67e feat: allow overloading for the about menu action via the ~/.config/omarchy/extensions/menu.sh file. Example included (#4311)
Co-authored-by: Bhavesh Sooka <bhavesh@synthesis.co.za>
2026-01-31 18:14:25 +01:00
schwepmoandGitHub d9bd4a8db3 Open Nautilus in cwd of terminal (#4331)
* feat: Open Nautilus (files) in cwd of terminal using omarchy-cmd-termina-cwd

* feat: Add SUPER+ALT+SHIFT+F shortcut to open nautilus in cwd

* added migration script for nautilus keybind
2026-01-31 18:12:29 +01:00
Pierre Olivier MartelandGitHub 8fc5b6e346 Add nautilus-python package for 'Open in Ghostty' shortcut in Nautilus (#4345) 2026-01-31 18:11:32 +01:00
nptrandGitHub 7265c22728 Update opacity rule for Steam window class (#4386)
The steam class for opacity is missing the `.*` regular expression. Just `steam` does not match launched steam apps. Therefore, currently, steam apps have the default opacity of `0.97` of omarchy. This is usually not noticable, but very distracting on an OLED Screen and Games with dark/black scenes / menues and a brigher / any app opend 'behind' the game.
2026-01-31 18:06:11 +01:00
Stefan GründelandGitHub 32d187eab0 Add window rules for Bitwarden Chrome Extension (#4389) 2026-01-31 18:02:17 +01:00
David Heinemeier Hansson c19fc1593a Just make a separate browser ready for the authentication
Seems like the entire problem was just that GFN didn't want to
authenticate against a browser process it had started itself.
2026-01-31 15:36:27 +01:00
David Heinemeier Hansson 7ffdfdbda9 Only idleinhibit
Fullscreen does not work well with authentication
2026-01-31 15:35:46 +01:00
David Heinemeier Hansson 161fa3f313 Fix up the installer 2026-01-31 14:37:16 +01:00
David Heinemeier Hansson d6c28f317d Force fullscreen
Floating just makes it crash
2026-01-31 13:27:57 +01:00
David Heinemeier Hansson 4348ab6ef1 Let the done screen time out in 7 seconds 2026-01-31 12:43:34 +01:00
David Heinemeier Hansson 9d07cc884c Add installer and windowrule configuration for NVIDIA GeForce Now 2026-01-31 12:35:35 +01:00
David Heinemeier Hansson ba31e3073c Ensure master volume isn't muted either 2026-01-30 19:02:51 +01:00
Ryan Hughes 2df5f231cb Add x11 fallback to SDL_VIDEODRIVER for compatibility 2026-01-30 12:46:13 -05:00
Pierre Olivier MartelandGitHub 26afde34ff fix echo comment in powerprofile migration (#4388) 2026-01-30 12:25:39 +01:00
Nicolas DorierandGitHub 3b94207ba7 Fix: Jetbrains rules were not working properly anymore (#4150) 2026-01-30 11:51:33 +01:00
David Heinemeier Hansson e567020e1b Use the new helper 2026-01-29 17:38:50 +01:00
Pierre Olivier MartelandGitHub f78f5b2c2c Automatically switch power profile when plugged in (balanced) and unplugged (power saver) (#4375)
* Set Power Profiles Rules when plugged in (balanced) and unplugged (power-saver)"

* Check for battery presence before installing power profile rules

* Add battery presence check script and update powerprofilesctl rules

* fix indentation

* Simplify power profile rule creation logic
2026-01-29 17:37:18 +01:00
Ryan Hughes ec305459f8 Prevent Telegram from stealing focus on every message receipt 2026-01-29 10:24:25 -05:00
David Heinemeier Hansson 55231e9726 Add new Miasma theme
Original by OldJobobo
2026-01-29 11:42:07 +01:00
David Heinemeier Hansson a8e0762fbe Open directories in file manager 2026-01-29 10:29:56 +01:00
David Heinemeier Hansson bb91f90839 Merge branch 'master' into dev 2026-01-28 18:03:43 +01:00
David Heinemeier Hansson a7995efac2 Ensure master is used instead of dev as a default 2026-01-28 17:14:17 +01:00
David Heinemeier Hansson 5b534de6a0 Rebooting is needed for hibernation to be available 2026-01-28 13:59:11 +01:00
David Heinemeier Hansson 4fe357972e We didn't get this working 2026-01-28 13:42:55 +01:00
David Heinemeier Hansson 7015601d77 No need to start on the first install 2026-01-28 13:24:39 +01:00
David Heinemeier Hansson 532f4310d0 Fix audio mixing on ROG in migration as well 2026-01-28 12:20:20 +01:00
David Heinemeier Hansson 56b02f62b5 Switch back to mainline chromium
We no longer need the fork, as the themeing is now fully natively
supported
2026-01-28 09:49:42 +01:00
Ryan HughesandGitHub 83628ab3bd Merge pull request #4314 from jmargeta/fix-legacy-mobile-nvidia-cards
Fix driver for older NVIDIA MXxxx mobile GPUs
2026-01-27 09:41:05 -05:00
mitanjanandGitHub d89614248b auto toggle scratchpad on switching workspace (#4250) 2026-01-27 11:47:27 +01:00
ManuelandGitHub 77a57aa838 Add kb_variant to input.conf (#4330)
* add kb_variant to input.conf

* documentation + separation
2026-01-27 11:43:59 +01:00
e455d1bd68 Enable auto-pasting for the emoji picker (#4344)
* Enable auto-pasting for the emoji picker

* Excess CR

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-01-27 11:42:42 +01:00
James RobeyandGitHub adfe182984 Use subshell for open() to avoid job control output (#4366)
If it is not run as a sub-shell, using open and then subsequently closing the app will pollute the existing terminal with messages like:
  [1] 287915
  [1]+  Done  xdg-open "$@" > /dev/null 2>&1

Making it a subshell removes this noise and keeps it more like the open command in macOS.
2026-01-27 11:34:16 +01:00
DominikandDavid Heinemeier Hansson febd18ce84 Replace yq with pure bash for TOML parsing (#4171)
* Replace yq with pure bash for TOML parsing

The yq-based parsing only worked with jq/yq v3 and broke with go-yq v4.
This change removes the yq and uses bash for parsing. Some additional improvments:
- Handles single and double quoted values
- Strips inline comments (e.g. "#hex" #comment)

* Remove the no-longer-needed yq packages

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-01-27 11:32:37 +01:00
Rob Zolkos 4bbf3be8f0 Add without audio option to screenrecord menu 2026-01-23 13:51:45 -05:00
MarcoGitHubincpo <nixusnekit>Ryan Hughes
768c553c4c Add missing icons to Development remove menus (#4339)
* Add missing icons to Development remove menus

The Install > Development menu shows icons for each language, but the
Remove > Development menu was missing them (only Ruby on Rails had its
icon). This adds the matching icons to:

- show_remove_development_menu
- show_remove_javascript_menu
- show_remove_php_menu
- show_remove_elixir_menu

---------

Co-authored-by: incpo <nixusnekit>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
2026-01-23 08:26:30 -05:00
David Heinemeier Hansson bf99a2ddc0 Merge branch 'master' into dev 2026-01-23 08:25:43 -05:00
David Heinemeier Hansson 0930583526 Fix sourcing 2026-01-20 16:12:51 -04:00
David Heinemeier Hansson 4a6baafd05 Move all fixes for Asus ROGs to install time 2026-01-20 12:11:49 -04:00
David Heinemeier Hansson c1bf6c4694 Fix the mic on Asus ROG laptops 2026-01-20 11:59:12 -04:00
David Heinemeier Hansson 66daacb30d Now available on OPR 2026-01-20 09:45:35 -04:00
Jan Margeta 5b2c0dafbf Fix drivers for older NVIDIA MXxxx mobile GPUs
Installs legacy drivers for older Pascal and Maxwell GPUs MXxx, MX2xx, MX3xx
2026-01-20 13:45:32 +01:00
David Heinemeier Hansson 988418aea1 Make purpose clearer 2026-01-20 08:16:03 -04:00
David Heinemeier Hansson 25451f4a03 Compensate for swayosd not liking a 0.00 progress meter 2026-01-19 17:55:38 -04:00
David Heinemeier Hansson d884265d46 Add keyboard brightness controls 2026-01-19 17:53:19 -04:00
David Heinemeier Hansson 5e1ce16358 Centralize all brightness commands 2026-01-19 17:49:53 -04:00
David Heinemeier Hansson 713b6e3a36 Expose audio soft mixer as a tweak 2026-01-19 17:20:18 -04:00
David Heinemeier HanssonandGitHub 2c7b283aef Toggle hybrid GPU mode via supergfxctl (#4277)
* Toggle hybrid GPU mode via supergfxctl

Very useful for Asus G14 and other laptops with NVIDIA + AMD iGPU
combos.

* Use correct exit

* Simplify

* Wording

* Revise switching process

* Spacing

* These are sudo actions

* Make it exe

* No need for extensions

Matches existing style

* Relying on the new config should be enough since we are restarting anyway

* Prevent race condition

* Reminder to add to OPR
2026-01-19 17:11:23 -04:00
Paul Repin 2915572bca Sets partition type to msftdata 2026-01-17 16:23:27 +03:00
Shawn YeagerandClaude Opus 4.5 ac3c161fb5 Fix Bluetooth device showing bluez ID instead of friendly name
For Bluetooth audio devices, the friendly name (e.g., "Shawn's AirPods Max")
is stored on the Device entry in wpctl, not the Sink entry. The previous fix
looked up object.id (the sink), which shows the raw bluez ID like
"bluez_output.90:9C:4A:EE:01:1C".

This fix looks up device.id first to get the friendly name from the Device
entry, falling back to object.id for non-Bluetooth devices.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 10:37:57 -06:00
Ryan HughesandGitHub ed9a4a45ba Merge pull request #4247 from incpo/feat/webcam-source-selection
Add webcam source selection for screen recording
2026-01-13 18:31:44 -05:00
incpo 697d09022a Add webcam source selection for screen recording
- Add --webcam-device argument to omarchy-cmd-screenrecord
- Auto-detect first available webcam if none specified
- Add webcam selection UI in omarchy-menu when multiple cameras available
- Skip selection UI when only one webcam is detected
2026-01-13 12:48:00 +03:00
Diogo Ferreira bee9c892fb kernel: Keep modules functional after a kernel upgrade
When a kernel upgrade is taken in, we replace current modules with new
ones and they are not available until we reboot. This can cause the
system to appear broken, especially when plugging new hardwaare like a
pen drive or odd input device.

This patch adds kernel-modules-hook which keeps the current modules even
if the package is replaced. A one-off clean-up service runs on startup
  to remove older modules.
2026-01-12 16:53:12 +00:00
Hatta Pauzi b5a5b54be5 Added a reminder to run omarchy-restart-xcompose to apply changes 2025-12-02 12:32:25 +08:00
riozee 95f1f312b4 Fix: omarchy-cmd-screenshot geometry for transformed monitors 2025-10-29 12:16:57 +09:00
Timo HuboisandGitHub 80c63f4167 feat(docker): use socket activation instead of autostart 2025-10-26 12:00:31 +01:00
Safta Catalin MihaiandGitHub 795873d3a3 Added Scala dev env 2025-10-20 12:21:40 +03:00
760 changed files with 8639 additions and 1820 deletions
+68
View File
@@ -0,0 +1,68 @@
# Style
- Two spaces for indentation, no tabs
- Use bash 5 conditionals: use `[[ ]]` for string/file tests and `(( ))` for numeric tests
- In `[[ ]]`, don't quote variables, but do quote string literals when comparing values (e.g., `[[ $branch == "dev" ]]`)
- Prefer `(( ))` over numeric operators inside `[[ ]]` (e.g., `(( count < 50 ))`, not `[[ $count -lt 50 ]]`)
- For strings/paths with spaces, quote them instead of escaping spaces with `\ ` (e.g., `"$APP_DIR/Disk Usage.desktop"`, not `$APP_DIR/Disk\ Usage.desktop`)
- Shebangs must use `#!/bin/bash` consistently (never `#!/usr/bin/env bash`)
# Command Naming
All commands start with `omarchy-`. Prefixes indicate purpose:
- `cmd-` - check if commands exist, misc utility commands
- `capture-` - screenshots, screen recordings, and other capture tools
- `pkg-` - package management helpers
- `hw-` - hardware detection (return exit codes for use in conditionals)
- `refresh-` - copy default config to user's `~/.config/`
- `restart-` - restart a component
- `launch-` - open applications
- `install-` - install optional software
- `setup-` - interactive setup wizards
- `toggle-` - toggle features on/off
- `theme-` - theme management
- `update-` - update components
# Helper Commands
Use these instead of raw shell commands:
- `omarchy-cmd-missing` / `omarchy-cmd-present` - check for commands
- `omarchy-pkg-missing` / `omarchy-pkg-present` - check for packages
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
# Config Structure
- `config/` - default configs copied to `~/.config/`
- `default/themed/*.tpl` - templates with `{{ variable }}` placeholders for theme colors
- `themes/*/colors.toml` - theme color definitions (accent, background, foreground, color0-15)
# Refresh Pattern
To copy a default config to user config with automatic backup:
```bash
omarchy-refresh-config hypr/hyprlock.conf
```
This copies `~/.local/share/omarchy/config/hypr/hyprlock.conf` to `~/.config/hypr/hyprlock.conf`.
# Migrations
To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit.
Migration format:
- No shebang line
- Start with an `echo` describing what the migration does
- Use `$OMARCHY_PATH` to reference the omarchy directory
Example:
```bash
echo "Disable fingerprint in hyprlock if fingerprint auth is not configured"
if omarchy-cmd-missing fprintd-list || ! fprintd-list "$USER" 2>/dev/null | grep -q "finger"; then
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
fi
```
+21
View File
@@ -0,0 +1,21 @@
[Desktop Entry]
Type=Application
TryExec=alacritty
Exec=alacritty
Icon=Alacritty
Terminal=false
Categories=System;TerminalEmulator;
Name=Alacritty
GenericName=Terminal
Comment=A fast, cross-platform, OpenGL terminal emulator
StartupNotify=true
StartupWMClass=Alacritty
Actions=New;
X-TerminalArgExec=-e
X-TerminalArgAppId=--class=
X-TerminalArgTitle=--title=
X-TerminalArgDir=--working-directory=
[Desktop Action New]
Name=New Terminal
Exec=alacritty
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
+2
View File
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
+2
View File
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Executable
+1032
View File
File diff suppressed because it is too large Load Diff
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# omarchy:summary=Returns true if AC power is connected.
for ac in /sys/class/power_supply/AC* /sys/class/power_supply/ADP*; do
[[ -r $ac/online && $(cat "$ac/online") == "1" ]] && exit 0
done
exit 1
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
# omarchy:summary=Toggle microphone mute. Dell XPS and ThinkPad systems get special handling for the hardware LED.
if omarchy-hw-match "XPS"; then
omarchy-audio-input-mute-xps
elif omarchy-hw-match "ThinkPad"; then
omarchy-audio-input-mute-thinkpad
else
omarchy-swayosd-client --input-volume mute-toggle
fi
+21
View File
@@ -0,0 +1,21 @@
#!/bin/bash
# omarchy:summary=Toggle microphone mute on ThinkPad systems. Uses wpctl for reliable toggling
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
if pactl get-source-mute @DEFAULT_SOURCE@ | grep -q 'yes'; then
osd_message='Microphone muted'
osd_icon='microphone-sensitivity-muted-symbolic'
led_value=1
else
osd_message='Microphone on'
osd_icon='audio-input-microphone-symbolic'
led_value=0
fi
brightnessctl --device="platform::micmute" set "$led_value" >/dev/null 2>&1 || true
omarchy-swayosd-client \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+42
View File
@@ -0,0 +1,42 @@
#!/bin/bash
# omarchy:summary=Toggle microphone mute on Dell XPS systems. Uses wpctl for reliable toggling
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
if pactl get-source-mute @DEFAULT_SOURCE@ | rg -q 'yes'; then
alsa_value='off,off'
osd_message='Microphone muted'
osd_icon='microphone-sensitivity-muted-symbolic'
else
alsa_value='on,on'
osd_message='Microphone on'
osd_icon='audio-input-microphone-symbolic'
fi
if [[ -e /sys/class/leds/platform::micmute/brightness ]]; then
default_source=$(pactl get-default-source)
alsa_card=$(pactl -f json list sources | jq -r --arg source "$default_source" '
.[] | select(.name == $source) |
.properties["alsa.card"] // .properties["api.alsa.card"] // .properties["api.alsa.pcm.card"] // empty
' | head -1)
if [[ -n $alsa_card ]]; then
cards=("$alsa_card")
else
mapfile -t cards < <(compgen -G '/proc/asound/card*' | rg -o 'card[0-9]+' | sed 's/card//' | sort -u)
fi
for card in "${cards[@]}"; do
while IFS= read -r control; do
if [[ $control != *"Jack Microphone"* ]]; then
amixer -c "$card" cset "$control" "$alsa_value" >/dev/null 2>&1 || true
break 2
fi
done < <(amixer -c "$card" controls 2>/dev/null | rg -o "name='[^']*Microphone Capture Switch'")
done
fi
omarchy-swayosd-client \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+62
View File
@@ -0,0 +1,62 @@
#!/bin/bash
# omarchy:summary=Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute.
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
sinks_count=$(echo "$sinks" | jq '. | length')
if (( sinks_count == 0 )); then
omarchy-swayosd-client --custom-message "No audio devices found"
exit 1
fi
current_sink_name=$(pactl get-default-sink)
current_sink_index=$(echo "$sinks" | jq -r --arg name "$current_sink_name" 'map(.name) | index($name)')
if [[ $current_sink_index != "null" ]]; then
next_sink_index=$(((current_sink_index + 1) % sinks_count))
else
next_sink_index=0
fi
next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
next_sink_name=$(echo "$next_sink" | jq -r '.name')
next_sink_description=$(echo "$next_sink" | jq -r '.description')
if [[ $next_sink_description == "(null)" ]] || [[ $next_sink_description == "null" ]] || [[ -z $next_sink_description ]]; then
# For Bluetooth devices, the friendly name is on the Device entry (device.id), not the Sink entry (object.id)
device_id=$(echo "$next_sink" | jq -r '.properties."device.id"')
if [[ $device_id != "null" ]] && [[ -n $device_id ]]; then
next_sink_description=$(wpctl status | grep -E "^\s*│?\s+${device_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
fi
# Fall back to object.id lookup if device.id didn't yield a result
if [[ -z $next_sink_description ]]; then
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
fi
fi
next_sink_volume=$(echo "$next_sink" | jq -r \
'.volume | to_entries[0].value.value_percent | sub("%"; "")')
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')
if [[ $next_sink_is_muted = "true" ]] || (( next_sink_volume == 0 )); then
icon_state="muted"
elif (( next_sink_volume <= 33 )); then
icon_state="low"
elif (( next_sink_volume <= 66 )); then
icon_state="medium"
else
icon_state="high"
fi
next_sink_volume_icon="sink-volume-${icon_state}-symbolic"
if [[ $next_sink_name != $current_sink_name ]]; then
next_sink_wpid=$(echo "$next_sink" | jq -r '.properties."object.id"')
wpctl set-default "$next_sink_wpid"
fi
omarchy-swayosd-client \
--custom-message "$next_sink_description" \
--custom-icon "$next_sink_volume_icon"
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
# omarchy:summary=Returns the battery full capacity in Wh (rounded to whole number).
battery_info=$(upower -i $(upower -e | grep BAT))
echo "$battery_info" | awk '/energy-full:/ {
printf "%d", $2
exit
}'
+4 -3
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Designed to be run by systemd timer every 30 seconds and alerts if battery is low
# omarchy:summary=Designed to be run by systemd timer every 30 seconds and alerts if battery is low
BATTERY_THRESHOLD=10
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
@@ -9,10 +9,11 @@ BATTERY_STATE=$(upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{pr
send_notification() {
notify-send -u critical "󱐋 Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
omarchy-hook battery-low "$1"
}
if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
if [[ -n $BATTERY_LEVEL && $BATTERY_LEVEL =~ ^[0-9]+$ ]]; then
if [[ $BATTERY_STATE == "discharging" ]] && (( BATTERY_LEVEL <= BATTERY_THRESHOLD )); then
if [[ ! -f $NOTIFICATION_FLAG ]]; then
send_notification $BATTERY_LEVEL
touch $NOTIFICATION_FLAG
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
# omarchy:summary=Returns true if a battery is present on the system.
for bat in /sys/class/power_supply/BAT*; do
[[ -r $bat/present ]] &&
[[ $(cat $bat/present) == "1" ]] &&
[[ $(cat $bat/type) == "Battery" ]] &&
exit 0
done
exit 1
+4 -8
View File
@@ -1,12 +1,8 @@
#!/bin/bash
# Returns the battery percentage remaining as an integer.
# Used by the battery monitor and the Ctrl + Shift + Super + B hotkey.
# omarchy:summary=Returns the battery percentage remaining as an integer.
upower -i $(upower -e | grep BAT) \
| awk -F: '/percentage/ {
gsub(/[%[:space:]]/, "", $2);
val=$2;
printf("%d\n", (val+0.5))
upower -i $(upower -e | grep BAT) | awk '/percentage/ {
print int($2)
exit
}'
}'
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# omarchy:summary=Returns the battery time remaining (to empty or full) in a compact format.
battery_info=$(upower -i $(upower -e | grep BAT))
echo "$battery_info" | awk '/time to (empty|full)/ {
value = $4
unit = $5
if (unit ~ /^minute/) {
printf "%dm", int(value)
} else {
hours = int(value)
minutes = int((value - hours) * 60)
if (minutes > 0) {
printf "%dh %dm", hours, minutes
} else {
printf "%dh", hours
}
}
exit
}'
+27
View File
@@ -0,0 +1,27 @@
#!/bin/bash
# omarchy:summary=Returns a formatted battery status string with percentage and power draw/charge.
battery_info=$(upower -i $(upower -e | grep BAT))
percentage=$(echo "$battery_info" | awk '/percentage/ {
print int($2)
exit
}')
power_rate=$(echo "$battery_info" | awk '/energy-rate/ {
rounded = sprintf("%.1f", $2)
sub(/\.0$/, "", rounded)
print rounded
exit
}')
state=$(echo "$battery_info" | awk '/state/ { print $2; exit }')
time_remaining=$(omarchy-battery-remaining-time)
capacity=$(omarchy-battery-capacity)
if [[ $state == "charging" ]]; then
echo "󰁹 Battery ${percentage}% · ${time_remaining} to full ·  ${power_rate}W / ${capacity}Wh"
else
echo "󰁹 Battery ${percentage}% · ${time_remaining} left ·  ${power_rate}W / ${capacity}Wh"
fi
+9 -7
View File
@@ -1,16 +1,18 @@
#!/bin/bash
# Set the branch for Omarchy's git repository.
# omarchy:summary=Set the branch for Omarchy's git repository.
# omarchy:args=<master|rc|dev>
if (($# == 0)); then
echo "Usage: omarchy-branch-set [master|dev]"
echo "Usage: omarchy-branch-set [master|rc|dev]"
exit 1
else
branch="$1"
fi
case "$branch" in
"master") git -C $OMARCHY_PATH switch master ;;
"dev") git -C $OMARCHY_PATH switch dev ;;
*) echo "Unknown branch: $branch"; exit 1; ;;
esac
if [[ $branch != "master" && $branch != "rc" && $branch != "dev" ]]; then
echo "Error: Invalid branch '$branch'. Must be one of: master, rc, dev"
exit 1
fi
git -C $OMARCHY_PATH switch $branch
+46
View File
@@ -0,0 +1,46 @@
#!/bin/bash
# omarchy:summary=Adjust brightness on the most likely display device.
# omarchy:args=<step>
step="${1:-+5%}"
# Start with the first possible output, then refine to the most likely given an order heuristic.
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
if [[ -e /sys/class/backlight/$candidate ]]; then
device="$candidate"
break
fi
done
# Current brightness percentage
current=$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')
# Apply non-uniform step size: 1% steps if at or below 5%, otherwise set an
# absolute target percentage to avoid raw backlight rounding causing uneven OSD steps.
if [[ $step == "+5%" ]]; then
if (( current < 5 )); then
(( target = current + 1 ))
else
(( target = current + 5 ))
fi
(( target > 100 )) && target=100
step="$target%"
elif [[ $step == "5%-" ]]; then
if (( current <= 5 )); then
(( target = current - 1 ))
else
(( target = current - 5 ))
fi
(( target < 1 )) && target=1
step="$target%"
fi
# Set the actual brightness of the display device.
brightnessctl -d "$device" set "$step" >/dev/null
# Use SwayOSD to display the new brightness setting.
omarchy-swayosd-brightness "$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')"
@@ -1,8 +1,9 @@
#!/bin/bash
# Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
# omarchy:summary=Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
# omarchy:requires-sudo=true
if [[ $# -eq 0 ]]; then
if (( $# == 0 )); then
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
else
device="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
+47
View File
@@ -0,0 +1,47 @@
#!/bin/bash
# omarchy:summary=Adjust keyboard backlight brightness using available steps.
# omarchy:args=<up|down|cycle>
direction="${1:-up}"
# Find keyboard backlight device (look for *kbd_backlight* pattern in leds class).
device=""
for candidate in /sys/class/leds/*kbd_backlight*; do
if [[ -e $candidate ]]; then
device="$(basename "$candidate")"
break
fi
done
if [[ -z $device ]]; then
echo "No keyboard backlight device found" >&2
exit 1
fi
# Get current and max brightness to determine step size.
max_brightness="$(brightnessctl -d "$device" max)"
current_brightness="$(brightnessctl -d "$device" get)"
# Calculate step as 10% of max brightness. Keyboards with many levels (e.g. 512)
# need larger steps; keyboards with few levels (e.g. 3) fall back to step=1.
step=$(( max_brightness / 10 ))
(( step < 1 )) && step=1
if [[ $direction == "cycle" ]]; then
new_brightness=$(( current_brightness + step ))
(( new_brightness > max_brightness )) && new_brightness=0
elif [[ $direction == "up" ]]; then
new_brightness=$(( current_brightness + step ))
(( new_brightness > max_brightness )) && new_brightness=$max_brightness
else
new_brightness=$(( current_brightness - step ))
(( new_brightness < 0 )) && new_brightness=0
fi
# Set the new brightness.
brightnessctl -d "$device" set "$new_brightness" >/dev/null
# Use SwayOSD to display the new brightness setting.
percent=$((new_brightness * 100 / max_brightness))
omarchy-swayosd-kbd-brightness "$percent"
+197
View File
@@ -0,0 +1,197 @@
#!/bin/bash
# omarchy:summary=Start or stop screen recording
# omarchy:group=capture
# omarchy:args=[--with-desktop-audio] [--with-microphone-audio] [--with-webcam] [--webcam-device=<device>] [--resolution=<size>] [--stop-recording]
# omarchy:examples=omarchy screenrecord | omarchy capture screenrecord --with-desktop-audio
# omarchy:aliases=omarchy screenrecord
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
if [[ ! -d $OUTPUT_DIR ]]; then
notify-send "Screen recording directory does not exist: $OUTPUT_DIR" -u critical -t 3000
exit 1
fi
DESKTOP_AUDIO="false"
MICROPHONE_AUDIO="false"
WEBCAM="false"
WEBCAM_DEVICE=""
RESOLUTION=""
STOP_RECORDING="false"
RECORDING_FILE="/tmp/omarchy-screenrecord-filename"
for arg in "$@"; do
case "$arg" in
--with-desktop-audio) DESKTOP_AUDIO="true" ;;
--with-microphone-audio) MICROPHONE_AUDIO="true" ;;
--with-webcam) WEBCAM="true" ;;
--webcam-device=*) WEBCAM_DEVICE="${arg#*=}" ;;
--resolution=*) RESOLUTION="${arg#*=}" ;;
--stop-recording) STOP_RECORDING="true" ;;
esac
done
start_webcam_overlay() {
cleanup_webcam
# Auto-detect first available webcam if none specified
if [[ -z $WEBCAM_DEVICE ]]; then
WEBCAM_DEVICE=$(v4l2-ctl --list-devices 2>/dev/null | grep -m1 "^[[:space:]]*/dev/video" | tr -d '\t')
if [[ -z $WEBCAM_DEVICE ]]; then
notify-send "No webcam devices found" -u critical -t 3000
return 1
fi
fi
# Get monitor scale
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
# Target width (base 360px, scaled to monitor)
local target_width=$(awk "BEGIN {printf \"%.0f\", 360 * $scale}")
# Try preferred 16:9 resolutions in order, use first available
local preferred_resolutions=("640x360" "1280x720" "1920x1080")
local video_size_arg=""
local available_formats=$(v4l2-ctl --list-formats-ext -d "$WEBCAM_DEVICE" 2>/dev/null)
for resolution in "${preferred_resolutions[@]}"; do
if echo "$available_formats" | grep -q "$resolution"; then
video_size_arg="-video_size $resolution"
break
fi
done
ffplay -f v4l2 $video_size_arg -framerate 30 "$WEBCAM_DEVICE" \
-vf "crop=iw/2:ih,scale=${target_width}:-1" \
-window_title "WebcamOverlay" \
-noborder \
-fflags nobuffer -flags low_delay \
-probesize 32 -analyzeduration 0 \
-loglevel quiet &
sleep 1
}
cleanup_webcam() {
pkill -f "WebcamOverlay" 2>/dev/null
}
default_resolution() {
local width height
read -r width height < <(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.width) \(.height)"')
if ((width > 3840 || height > 2160)); then
echo "3840x2160"
else
echo "0x0"
fi
}
start_screenrecording() {
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
local audio_devices=""
local audio_args=()
[[ $DESKTOP_AUDIO == "true" ]] && audio_devices+="default_output"
if [[ $MICROPHONE_AUDIO == "true" ]]; then
# Merge audio tracks into one - separate tracks only play one at a time in most players
[[ -n $audio_devices ]] && audio_devices+="|"
audio_devices+="default_input"
fi
[[ -n $audio_devices ]] && audio_args+=(-a "$audio_devices" -ac aac)
local resolution="${RESOLUTION:-$(default_resolution)}"
gpu-screen-recorder -w portal -k auto -s "$resolution" -f 60 -fm cfr -fallback-cpu-encoding yes -o "$filename" "${audio_args[@]}" &
local pid=$!
# Wait for recording to actually start (file appears after portal selection)
while kill -0 $pid 2>/dev/null && [[ ! -f $filename ]]; do
sleep 0.2
done
if kill -0 $pid 2>/dev/null; then
echo "$filename" >"$RECORDING_FILE"
toggle_screenrecording_indicator
fi
}
stop_screenrecording() {
pkill -SIGINT -f "^gpu-screen-recorder" # SIGINT required to save video properly
# Wait a maximum of 5 seconds to finish before hard killing
local count=0
while pgrep -f "^gpu-screen-recorder" >/dev/null && ((count < 50)); do
sleep 0.1
count=$((count + 1))
done
toggle_screenrecording_indicator
cleanup_webcam
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
pkill -9 -f "^gpu-screen-recorder"
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
else
finalize_recording
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
local preview="${filename%.mp4}-preview.png"
# Generate a preview thumbnail from the first frame
ffmpeg -y -i "$filename" -ss 00:00:00.1 -vframes 1 -q:v 2 "$preview" -loglevel quiet 2>/dev/null
(
ACTION=$(notify-send "Screen recording saved" "Open with Super + Alt + , (or click this)" -t 10000 -i "${preview:-$filename}" -A "default=open")
[[ $ACTION == "default" ]] && mpv "$filename"
rm -f "$preview"
) &
fi
rm -f "$RECORDING_FILE"
}
toggle_screenrecording_indicator() {
pkill -RTMIN+8 waybar
}
screenrecording_active() {
pgrep -f "^gpu-screen-recorder" >/dev/null
}
finalize_recording() {
local latest
latest=$(cat "$RECORDING_FILE" 2>/dev/null)
[[ -f $latest ]] || return
# Re-encode only when the first GOP contains discardable warmup packets — stream copy can't
# trim those (it rewinds to the keyframe). Clean recordings stay on the fast stream-copy path.
local video_codec=(-c:v copy)
if ffprobe -v error -select_streams v:0 -read_intervals %+0.2 -show_entries packet=flags -of csv=p=0 "$latest" 2>/dev/null | grep -q D; then
video_codec=(-c:v libx264 -preset veryfast -crf 20)
fi
# Trim the first frame, and normalize audio to -14 LUFS if present, in a single pass
local args=(-y -ss 0.1 -i "$latest" "${video_codec[@]}")
if ffprobe -v error -select_streams a -show_entries stream=codec_type -of csv=p=0 "$latest" 2>/dev/null | grep -q audio; then
args+=(-af loudnorm=I=-14:TP=-1.5:LRA=11)
fi
local processed="${latest%.mp4}-processed.mp4"
if ffmpeg "${args[@]}" "$processed" -loglevel quiet 2>/dev/null; then
mv "$processed" "$latest"
else
rm -f "$processed"
fi
}
if screenrecording_active; then
stop_screenrecording
elif [[ $STOP_RECORDING == "true" ]]; then
exit 1
else
[[ $WEBCAM == "true" ]] && start_webcam_overlay
start_screenrecording || cleanup_webcam
fi
+139
View File
@@ -0,0 +1,139 @@
#!/bin/bash
# omarchy:summary=Take a screenshot
# omarchy:group=capture
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy] [--editor=<name>]
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
# omarchy:aliases=omarchy screenshot
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
OUTPUT_DIR="${OMARCHY_SCREENSHOT_DIR:-${XDG_PICTURES_DIR:-$HOME/Pictures}}"
if [[ ! -d $OUTPUT_DIR ]]; then
mkdir -p "$OUTPUT_DIR"
notify-send "Created screenshot directory: $OUTPUT_DIR" -u normal -t 2000
fi
pkill slurp && exit 0
SCREENSHOT_EDITOR="${OMARCHY_SCREENSHOT_EDITOR:-satty}"
# Parse --editor flag from any position
ARGS=()
for arg in "$@"; do
if [[ $arg == --editor=* ]]; then
SCREENSHOT_EDITOR="${arg#--editor=}"
else
ARGS+=("$arg")
fi
done
set -- "${ARGS[@]}"
open_editor() {
local filepath="$1"
if [[ $SCREENSHOT_EDITOR == "satty" ]]; then
satty --filename "$filepath" \
--output-filename "$filepath" \
--actions-on-enter save-to-clipboard \
--save-after-copy \
--copy-command 'wl-copy'
else
$SCREENSHOT_EDITOR "$filepath"
fi
}
MODE="${1:-smart}"
PROCESSING="${2:-slurp}"
# accounting for portrait/transformed displays
JQ_MONITOR_GEO='
def format_geo:
.x as $x | .y as $y |
(.width / .scale | floor) as $w |
(.height / .scale | floor) as $h |
.transform as $t |
if $t == 1 or $t == 3 then
"\($x),\($y) \($h)x\($w)"
else
"\($x),\($y) \($w)x\($h)"
end;
'
get_rectangles() {
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
hyprctl monitors -j | jq -r --arg ws "$active_workspace" "${JQ_MONITOR_GEO} .[] | select(.activeWorkspace.id == (\$ws | tonumber)) | format_geo"
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
}
# Keep hyprpicker alive until after grim captures so the screenshot sees the
# frozen overlay rather than live content shifting during teardown.
cleanup_freeze() {
[[ -n $PID ]] && kill $PID 2>/dev/null
}
trap cleanup_freeze EXIT
# Select based on mode
case "$MODE" in
region)
hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
;;
windows)
hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
;;
fullscreen)
SELECTION=$(hyprctl monitors -j | jq -r "${JQ_MONITOR_GEO} .[] | select(.focused == true) | format_geo")
;;
smart | *)
RECTS=$(get_rectangles)
hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
# If the selection area is L * W < 20, we'll assume you were trying to select whichever
# window or output it was inside of to prevent accidental 2px snapshots
if [[ $SELECTION =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
if ((${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20)); then
click_x="${BASH_REMATCH[1]}"
click_y="${BASH_REMATCH[2]}"
while IFS= read -r rect; do
if [[ $rect =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
rect_x="${BASH_REMATCH[1]}"
rect_y="${BASH_REMATCH[2]}"
rect_width="${BASH_REMATCH[3]}"
rect_height="${BASH_REMATCH[4]}"
if ((click_x >= rect_x && click_x < rect_x + rect_width && click_y >= rect_y && click_y < rect_y + rect_height)); then
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
break
fi
fi
done <<<"$RECTS"
fi
fi
;;
esac
[[ -z $SELECTION ]] && exit 0
FILENAME="screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png"
FILEPATH="$OUTPUT_DIR/$FILENAME"
if [[ $PROCESSING == "slurp" ]]; then
grim -g "$SELECTION" "$FILEPATH" || exit 1
wl-copy <"$FILEPATH"
(
ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit")
[[ $ACTION == "default" ]] && open_editor "$FILEPATH"
) &
else
grim -g "$SELECTION" - | wl-copy
fi
+6 -14
View File
@@ -1,27 +1,19 @@
#!/bin/bash
# Set the Omarchy channel, which dictates what git branch and package repository is used.
#
# Stable uses the master branch, which only sees updates on official releases, and
# the stable package repository, which typically lags the edge by a month to ensure
# better compatibility.
#
# Edge tracks the latest package repository, but still relies on the master branch,
# so new packages which require config changes may cause conflicts or errors.
#
# Dev tracks the active development dev branch, which may include partial or broken updates,
# as well as the latest package repository. This should only be used by Omarchy developers
# and people with a lot of experience managing Linux systems.
# omarchy:summary=Set the Omarchy channel, which dictates what git branch and package repository is used.
# omarchy:args=<stable|rc|edge|dev>
# omarchy:requires-sudo=true
if (($# == 0)); then
echo "Usage: omarchy-channel-set [stable|edge|dev]"
echo "Usage: omarchy-channel-set [stable|rc|edge|dev]"
exit 1
else
channel="$1"
fi
case "$channel" in
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" && sudo pacman -Suu --noconfirm ;;
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" ;;
"rc") omarchy-branch-set "rc" && omarchy-refresh-pacman "rc" ;;
"edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;;
"dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;;
*) echo "Unknown channel: $channel"; exit 1; ;;
-58
View File
@@ -1,58 +0,0 @@
#!/bin/bash
# Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute.
focused_monitor="$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
sinks_count=$(echo "$sinks" | jq '. | length')
if [ "$sinks_count" -eq 0 ]; then
swayosd-client \
--monitor "$focused_monitor" \
--custom-message "No audio devices found"
exit 1
fi
current_sink_name=$(pactl get-default-sink)
current_sink_index=$(echo "$sinks" | jq -r --arg name "$current_sink_name" 'map(.name) | index($name)')
if [ "$current_sink_index" != "null" ]; then
next_sink_index=$(((current_sink_index + 1) % sinks_count))
else
next_sink_index=0
fi
next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
next_sink_name=$(echo "$next_sink" | jq -r '.name')
next_sink_description=$(echo "$next_sink" | jq -r '.description')
if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
fi
next_sink_volume=$(echo "$next_sink" | jq -r \
'.volume | to_entries[0].value.value_percent | sub("%"; "")')
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')
if [ "$next_sink_is_muted" = "true" ] || [ "$next_sink_volume" -eq 0 ]; then
icon_state="muted"
elif [ "$next_sink_volume" -le 33 ]; then
icon_state="low"
elif [ "$next_sink_volume" -le 66 ]; then
icon_state="medium"
else
icon_state="high"
fi
next_sink_volume_icon="sink-volume-${icon_state}-symbolic"
if [ "$next_sink_name" != "$current_sink_name" ]; then
pactl set-default-sink "$next_sink_name"
fi
swayosd-client \
--monitor "$focused_monitor" \
--custom-message "$next_sink_description" \
--custom-icon "$next_sink_volume_icon"
-21
View File
@@ -1,21 +0,0 @@
#!/bin/bash
# Adjust brightness on the most likely display device.
# Usage: omarchy-cmd-brightness <step>
step="${1:-+5%}"
# Start with the first possible output, then refine to the most likely given an order heuristic.
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
if [[ -e "/sys/class/backlight/$candidate" ]]; then
device="$candidate"
break
fi
done
# Set the actual brightness of the display device.
brightnessctl -d "$device" set "$step" >/dev/null
# Use SwayOSD to display the new brightness setting.
omarchy-swayosd-brightness "$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Returns true if any of the commands passed in as arguments are missing on the system.
# omarchy:summary=Check whether any required commands are missing
for cmd in "$@"; do
if ! command -v "$cmd" &>/dev/null; then
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Returns true if all the commands passed in as arguments exit on the system.
# omarchy:summary=Check whether all required commands are available
for cmd in "$@"; do
command -v "$cmd" &>/dev/null || exit 1
-123
View File
@@ -1,123 +0,0 @@
#!/bin/bash
# Start and stop a screenrecording, which will be saved to ~/Videos by default.
# Alternative location can be set via OMARCHY_SCREENRECORD_DIR or XDG_VIDEOS_DIR ENVs.
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
if [[ ! -d "$OUTPUT_DIR" ]]; then
notify-send "Screen recording directory does not exist: $OUTPUT_DIR" -u critical -t 3000
exit 1
fi
DESKTOP_AUDIO="false"
MICROPHONE_AUDIO="false"
WEBCAM="false"
STOP_RECORDING="false"
for arg in "$@"; do
case "$arg" in
--with-desktop-audio) DESKTOP_AUDIO="true" ;;
--with-microphone-audio) MICROPHONE_AUDIO="true" ;;
--with-webcam) WEBCAM="true" ;;
--stop-recording) STOP_RECORDING="true"
esac
done
cleanup_webcam() {
pkill -f "WebcamOverlay" 2>/dev/null
}
start_webcam_overlay() {
cleanup_webcam
# Get monitor scale
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
# Target width (base 360px, scaled to monitor)
local target_width=$(awk "BEGIN {printf \"%.0f\", 360 * $scale}")
# Try preferred 16:9 resolutions in order, use first available
local preferred_resolutions=("640x360" "1280x720" "1920x1080")
local video_size_arg=""
local available_formats=$(v4l2-ctl --list-formats-ext -d /dev/video0 2>/dev/null)
for resolution in "${preferred_resolutions[@]}"; do
if echo "$available_formats" | grep -q "$resolution"; then
video_size_arg="-video_size $resolution"
break
fi
done
ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \
-vf "scale=${target_width}:-1" \
-window_title "WebcamOverlay" \
-noborder \
-fflags nobuffer -flags low_delay \
-probesize 32 -analyzeduration 0 \
-loglevel quiet &
sleep 1
}
start_screenrecording() {
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
local audio_devices=""
local audio_args=""
[[ "$DESKTOP_AUDIO" == "true" ]] && audio_devices+="default_output"
if [[ "$MICROPHONE_AUDIO" == "true" ]]; then
# Merge audio tracks into one - separate tracks only play one at a time in most players
[[ -n "$audio_devices" ]] && audio_devices+="|"
audio_devices+="default_input"
fi
[[ -n "$audio_devices" ]] && audio_args+="-a $audio_devices"
gpu-screen-recorder -w portal -f 60 -fallback-cpu-encoding yes -o "$filename" $audio_args -ac aac &
toggle_screenrecording_indicator
}
stop_screenrecording() {
pkill -SIGINT -f "^gpu-screen-recorder" # SIGINT required to save video properly
# Wait a maximum of 5 seconds to finish before hard killing
local count=0
while pgrep -f "^gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
sleep 0.1
count=$((count + 1))
done
if pgrep -f "^gpu-screen-recorder" >/dev/null; then
pkill -9 -f "^gpu-screen-recorder"
cleanup_webcam
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
else
cleanup_webcam
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
fi
toggle_screenrecording_indicator
}
toggle_screenrecording_indicator() {
pkill -RTMIN+8 waybar
}
screenrecording_active() {
pgrep -f "^gpu-screen-recorder" >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
}
if screenrecording_active; then
if pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "^gpu-screen-recorder" >/dev/null; then
cleanup_webcam
else
stop_screenrecording
fi
elif [[ "$STOP_RECORDING" == "false" ]]; then
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
start_screenrecording || cleanup_webcam
else
exit 1
fi
-86
View File
@@ -1,86 +0,0 @@
#!/bin/bash
# Take a screenshot of the whole screen, a specific window, or a user-drawn region.
# Saves to ~/Pictures by default, but that can be changed via OMARCHY_SCREENSHOT_DIR or XDG_PICTURES_DIR ENVs.
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
OUTPUT_DIR="${OMARCHY_SCREENSHOT_DIR:-${XDG_PICTURES_DIR:-$HOME/Pictures}}"
if [[ ! -d "$OUTPUT_DIR" ]]; then
notify-send "Screenshot directory does not exist: $OUTPUT_DIR" -u critical -t 3000
exit 1
fi
pkill slurp && exit 0
MODE="${1:-smart}"
PROCESSING="${2:-slurp}"
get_rectangles() {
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
hyprctl monitors -j | jq -r --arg ws "$active_workspace" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"'
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
}
# Select based on mode
case "$MODE" in
region)
wayfreeze & PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null
;;
windows)
wayfreeze & PID=$!
sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
kill $PID 2>/dev/null
;;
fullscreen)
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
;;
smart|*)
RECTS=$(get_rectangles)
wayfreeze & PID=$!
sleep .1
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
kill $PID 2>/dev/null
# If the selction area is L * W < 20, we'll assume you were trying to select whichever
# window or output it was inside of to prevent accidental 2px snapshots
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then
click_x="${BASH_REMATCH[1]}"
click_y="${BASH_REMATCH[2]}"
while IFS= read -r rect; do
if [[ "$rect" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
rect_x="${BASH_REMATCH[1]}"
rect_y="${BASH_REMATCH[2]}"
rect_width="${BASH_REMATCH[3]}"
rect_height="${BASH_REMATCH[4]}"
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
break
fi
fi
done <<< "$RECTS"
fi
fi
;;
esac
[ -z "$SELECTION" ] && exit 0
if [[ $PROCESSING == "slurp" ]]; then
grim -g "$SELECTION" - |
satty --filename - \
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
--early-exit \
--actions-on-enter save-to-clipboard \
--save-after-copy \
--copy-command 'wl-copy'
else
grim -g "$SELECTION" - | wl-copy
fi
+1 -3
View File
@@ -1,9 +1,7 @@
#!/bin/bash
# Returns the current working directory of the active terminal window,
# so a new terminal window can be started in the same directory.
# omarchy:summary=Print the current working directory of the active terminal window
# Go from current active terminal to its child shell process and run cwd there
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
+58
View File
@@ -0,0 +1,58 @@
#!/bin/bash
# omarchy:summary=Add or remove an EFI boot entry for the Omarchy UKI, allowing the system to boot directly
# omarchy:requires-sudo=true
if [[ ! -d /sys/firmware/efi ]]; then
echo "Error: System is not booted in UEFI mode" >&2
exit 1
fi
if ! efibootmgr &>/dev/null; then
echo "Error: efibootmgr is not available or not functional" >&2
exit 1
fi
if cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "American Megatrends"; then
echo "Error: American Megatrends firmware may not safely support custom EFI entries" >&2
exit 1
fi
if cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "Apple"; then
echo "Error: Apple firmware uses its own boot manager" >&2
exit 1
fi
existing_entry=$(efibootmgr | grep -E "^Boot[0-9A-Fa-f]+\*? Omarchy([[:space:]]|$)" | head -1)
if [[ -n $existing_entry ]]; then
boot_num=$(echo "$existing_entry" | sed -n 's/^Boot\([0-9A-Fa-f]\+\).*/\1/p')
if gum confirm "Disable direct boot (remove Omarchy EFI entry)?"; then
echo "Removing EFI boot entry $boot_num"
sudo efibootmgr --bootnum "$boot_num" --delete-bootnum >/dev/null
fi
exit 0
else
uki_file=$(find /boot/EFI/Linux/ -name "omarchy*.efi" -printf "%f\n" 2>/dev/null | head -1)
if [[ -z $uki_file ]]; then
echo "Error: No Omarchy UKI found in /boot/EFI/Linux/" >&2
exit 1
fi
boot_source=$(findmnt -n -o SOURCE /boot)
disk=$(echo "$boot_source" | sed 's/p\?[0-9]*$//')
part=$(echo "$boot_source" | grep -o 'p\?[0-9]*$' | sed 's/^p//')
if gum confirm "Setup direct boot (so snapshot booting must be done via bios)?"; then
echo "Creating EFI boot entry for $uki_file"
sudo efibootmgr --create \
--disk "$disk" \
--part "$part" \
--label "Omarchy" \
--loader "\\EFI\\Linux\\$uki_file"
fi
fi
+9 -6
View File
@@ -1,11 +1,14 @@
#!/bin/bash
# Return exhaustive debugging information about the system to help diagnose problems.
# omarchy:summary=Print debugging information
# omarchy:args=[--no-sudo] [--print]
# omarchy:examples=omarchy debug --print --no-sudo
# omarchy:requires-sudo=true
NO_SUDO=false
PRINT_ONLY=false
while [[ $# -gt 0 ]]; do
while (( $# > 0 )); do
case "$1" in
--no-sudo)
NO_SUDO=true
@@ -25,7 +28,7 @@ done
LOG_FILE="/tmp/omarchy-debug.log"
if [ "$NO_SUDO" = true ]; then
if [[ $NO_SUDO = "true" ]]; then
DMESG_OUTPUT="(skipped - --no-sudo flag used)"
else
DMESG_OUTPUT="$(sudo dmesg)"
@@ -47,7 +50,7 @@ DMESG
$DMESG_OUTPUT
=========================================
JOURNALCTL (CURRENT BOOT, ERRORS ONLY)
JOURNALCTL (CURRENT BOOT, WARNINGS+ERRORS)
=========================================
$(journalctl -b -p 4..1)
@@ -57,7 +60,7 @@ INSTALLED PACKAGES
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
EOF
if [ "$PRINT_ONLY" = true ]; then
if [[ $PRINT_ONLY = "true" ]]; then
cat "$LOG_FILE"
exit 0
fi
@@ -73,7 +76,7 @@ case "$ACTION" in
"Upload log")
echo "Uploading debug log to 0x0.st..."
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
if [ $? -eq 0 ] && [ -n "$URL" ]; then
if (( $? == 0 )) && [[ -n $URL ]]; then
echo "✓ Log uploaded successfully!"
echo "Share this URL:"
echo ""
+2 -3
View File
@@ -1,13 +1,12 @@
#!/bin/bash
# Creates a new Omarchy migration named after the unix timestamp of the last commit.
# Only intended for Omarchy developers.
# omarchy:summary=Creates a new Omarchy migration named after the unix timestamp of the last commit.
cd ~/.local/share/omarchy
migration_file="$HOME/.local/share/omarchy/migrations/$(git log -1 --format=%cd --date=unix).sh"
touch $migration_file
if [[ "$1" != "--no-edit" ]]; then
if [[ $1 != "--no-edit" ]]; then
nvim $migration_file
fi
+111
View File
@@ -0,0 +1,111 @@
#!/bin/bash
# omarchy:summary=Measure Omarchy CLI response times
# omarchy:args=[--repeat=<count>]
# omarchy:examples=omarchy dev benchmark | omarchy dev benchmark --repeat=10
set -euo pipefail
OMARCHY_BIN_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
CLI="$OMARCHY_BIN_DIR/omarchy"
REPEAT=5
show_help() {
cat <<'EOF'
Usage:
omarchy dev benchmark [--repeat=<count>]
Measure response times for common Omarchy CLI surfaces.
Options:
--repeat=<count> Number of times to run each case (default: 5)
EOF
}
now_us() {
local now="${EPOCHREALTIME/./}"
printf '%s' "$now"
}
format_ms() {
local us="$1"
printf '%d.%03d' "$(( us / 1000 ))" "$(( us % 1000 ))"
}
run_case() {
local label="$1"
shift
local total_us=0
local min_us=0
local max_us=0
local elapsed_us=0
local start_us=0
local end_us=0
local status=0
for (( i = 1; i <= REPEAT; i++ )); do
start_us=$(now_us)
if "$@" >/dev/null; then
status=0
else
status=$?
fi
end_us=$(now_us)
if (( status != 0 )); then
printf '%-34s failed (exit %d)\n' "$label" "$status"
return "$status"
fi
elapsed_us=$(( end_us - start_us ))
total_us=$(( total_us + elapsed_us ))
if (( i == 1 || elapsed_us < min_us )); then
min_us=$elapsed_us
fi
if (( elapsed_us > max_us )); then
max_us=$elapsed_us
fi
done
printf '%-34s avg %8s ms min %8s ms max %8s ms\n' \
"$label" \
"$(format_ms "$(( total_us / REPEAT ))")" \
"$(format_ms "$min_us")" \
"$(format_ms "$max_us")"
}
while (( $# > 0 )); do
case "$1" in
--repeat=*)
REPEAT="${1#*=}"
;;
--help | -h)
show_help
exit 0
;;
*)
echo "Unknown option: $1" >&2
show_help >&2
exit 2
;;
esac
shift
done
if [[ ! $REPEAT =~ ^[0-9]+$ ]] || (( REPEAT < 1 )); then
echo "--repeat must be a positive integer" >&2
exit 2
fi
printf 'Omarchy CLI benchmark (%d runs each)\n\n' "$REPEAT"
run_case "omarchy" "$CLI"
run_case "omarchy --help" "$CLI" --help
run_case "omarchy commands" "$CLI" commands
run_case "omarchy commands --json" "$CLI" commands --json
run_case "omarchy commands --all --json" "$CLI" commands --all --json
run_case "omarchy theme set --help" "$CLI" theme set --help
run_case "omarchy screenshot --help" "$CLI" screenshot --help
run_case "omarchy restart --help" "$CLI" restart --help
run_case "omarchy theme current" "$CLI" theme current
+86
View File
@@ -0,0 +1,86 @@
#!/bin/bash
# omarchy:summary=Show Omarchy bin metadata fields and defaults
# omarchy:args=[--json]
set -euo pipefail
show_json() {
jq -n '{
ok: true,
defaults: {
group: "first filename segment after omarchy-",
name: "remaining filename segments with dashes converted to spaces",
route: "omarchy <group> <name>",
binary: "filename",
requires_sudo: false
},
fields: [
{name: "summary", required: true, type: "string", note: "One-line human and agent-facing description."},
{name: "group", required: false, type: "string", note: "Only set when the route group should differ from the filename-derived group."},
{name: "name", required: false, type: "string", note: "Only set when the route name should differ from the filename-derived name. May be empty for root commands."},
{name: "args", required: false, type: "string", note: "Only set when the command accepts arguments."},
{name: "examples", required: false, type: "string", note: "Pipe-separated examples."},
{name: "aliases", required: false, type: "string", note: "Pipe-separated alternate routes, e.g. omarchy screenshot."},
{name: "requires-sudo", required: false, type: "true", default: false, note: "Only include when true."}
]
}'
}
show_help() {
cat <<'EOF'
Omarchy bin metadata
Metadata lives in the top comment block of each executable bin/omarchy-* file.
Keep it slim: define only fields that are required or override defaults.
Required:
# omarchy:summary=<one-line description>
Inferred defaults:
group first filename segment after omarchy-
name remaining filename segments, with dashes converted to spaces
route omarchy <group> <name>
binary filename
requires-sudo false
Optional fields:
# omarchy:group=<group> route override only
# omarchy:name=<name> route override only; may be empty
# omarchy:args=<args> only if the command accepts args
# omarchy:examples=<cmd> | <cmd> pipe-separated examples
# omarchy:aliases=<route> | <route> pipe-separated alternate routes
# omarchy:requires-sudo=true only when true
Do not define:
binary inferred from filename
usage derived from route + args
false flags or empty args
Examples:
# omarchy:summary=Restart Walker and related user services
# omarchy:summary=Take a screenshot
# omarchy:group=capture
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy] [--editor=<name>]
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
# omarchy:aliases=omarchy screenshot
EOF
}
case "${1:-}" in
--json)
show_json
;;
--help | -h)
show_help
;;
"")
show_help
;;
*)
echo "Unknown option: $1" >&2
show_help >&2
exit 2
;;
esac
+26 -5
View File
@@ -1,6 +1,7 @@
#!/bin/bash
# Returns drive information about a given volumne, like /dev/nvme0, which is used by omarchy-drive-select.
# omarchy:summary=Print drive information such as size, model, and mount details
# omarchy:args=<drive>
if (($# == 0)); then
echo "Usage: omarchy-drive-info [/dev/drive]"
@@ -11,7 +12,7 @@ fi
# Find the root drive in case we are looking at partitions
root_drive=$(lsblk -no PKNAME "$drive" 2>/dev/null | tail -n1)
if [[ -n "$root_drive" ]]; then
if [[ -n $root_drive ]]; then
root_drive="/dev/$root_drive"
else
root_drive="$drive"
@@ -19,11 +20,31 @@ fi
# Get basic disk information
size=$(lsblk -dno SIZE "$drive" 2>/dev/null)
model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null)
vendor=$(lsblk -dno VENDOR "$root_drive" 2>/dev/null | sed 's/ *$//')
model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null | sed 's/ *$//')
# Combine vendor and model, avoiding duplication
label=""
if [[ -n $vendor && -n $model ]]; then
if [[ $model == *$vendor* ]]; then
label="$model"
else
label="$vendor $model"
fi
elif [[ -n $model ]]; then
label="$model"
elif [[ -n $vendor ]]; then
label="$vendor"
fi
# Format display string
display="$drive"
[[ -n "$size" ]] && display="$display ($size)"
[[ -n "$model" ]] && display="$display - $model"
[[ -n $size ]] && display="$display ($size)"
[[ -n $label ]] && display="$display - $label"
# Append compact partition summary
part_summary=$(lsblk -nro TYPE,NAME,FSTYPE,MOUNTPOINT "$root_drive" 2>/dev/null | \
awk '$1=="part" { printf "%s%s%s", s, ($3==""?"unknown":$3), ($4==""?"":"("$4")"); s=", " }')
[[ -n $part_summary ]] && display+=" [$part_summary]"
echo "$display"
+2 -2
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Select a drive from a list with info that includes space and brand. Used by omarchy-drive-set-password.
# omarchy:summary=Select a drive from a list with info that includes space and brand. Used by omarchy-drive-set-password.
if (($# == 0)); then
drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)')
@@ -10,7 +10,7 @@ fi
drives_with_info=""
while IFS= read -r drive; do
[[ -n "$drive" ]] || continue
[[ -n $drive ]] || continue
drives_with_info+="$(omarchy-drive-info "$drive")"$'\n'
done <<<"$drives"
+3 -2
View File
@@ -1,11 +1,12 @@
#!/bin/bash
# Set a new encryption password for a drive selected.
# omarchy:summary=Set a new encryption password for a drive selected.
# omarchy:requires-sudo=true
encrypted_drives=$(blkid -t TYPE=crypto_LUKS -o device)
if [[ -n $encrypted_drives ]]; then
if [[ $(wc -l <<<"$encrypted_drives") -eq 1 ]]; then
if (( $(wc -l <<<"$encrypted_drives") == 1 )); then
drive_to_change="$encrypted_drives"
else
drive_to_change="$(omarchy-drive-select "$encrypted_drives")"
@@ -1,15 +1,17 @@
#!/bin/bash
# Finish the installation of Omarchy with items that can only be done after logging in.
# omarchy:summary=Finish the installation of Omarchy with items that can only be done after logging in.
# omarchy:requires-sudo=true
set -e
FIRST_RUN_MODE=~/.local/state/omarchy/first-run.mode
if [[ -f "$FIRST_RUN_MODE" ]]; then
if [[ -f $FIRST_RUN_MODE ]]; then
rm -f "$FIRST_RUN_MODE"
bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh"
bash "$OMARCHY_PATH/install/first-run/recover-internal-monitor.sh"
bash "$OMARCHY_PATH/install/first-run/cleanup-reboot-sudoers.sh"
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
+2 -2
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Returns the name of the current monospace font being used by extracting it from the Waybar stylesheet.
# This can be changed using omarchy-font-set.
# omarchy:summary=Show current monospace font
# omarchy:examples=omarchy font current
grep -oP 'font-family:\s*["'\'']?\K[^;"'\'']+' ~/.config/waybar/style.css | head -n1
+2 -1
View File
@@ -1,5 +1,6 @@
#!/bin/bash
# Returns a list of all the monospace fonts available on the system that can be set using omarchy-font-set.
# omarchy:summary=List available monospace fonts
# omarchy:examples=omarchy font list | omarchy font set "CaskaydiaMono Nerd Font"
fc-list :spacing=100 -f "%{family[0]}\n" | grep -v -i -E 'emoji|signwriting|omarchy' | sort -u
+5 -4
View File
@@ -1,11 +1,12 @@
#!/bin/bash
# Set the system-wide monospace font that should be used by the terminal, hyprlock, waybar, swayosd, etc.
# The font name must be one of the ones returned by omarchy-font-list.
# omarchy:summary=Set the system monospace font
# omarchy:args=<font-name>
# omarchy:examples=omarchy font list | omarchy font set "CaskaydiaMono Nerd Font"
font_name="$1"
if [[ -n "$font_name" ]]; then
if [[ -n $font_name ]]; then
if fc-list | grep -iq "$font_name"; then
if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
sed -i "s/family = \".*\"/family = \"$font_name\"/g" ~/.config/alacritty/alacritty.toml
@@ -33,7 +34,7 @@ if [[ -n "$font_name" ]]; then
omarchy-restart-swayosd
if pgrep -x ghostty; then
notify-send " You must restart Ghostty to see font change"
notify-send -u low " You must restart Ghostty to see font change"
fi
omarchy-hook font-set "$font_name"
+96
View File
@@ -0,0 +1,96 @@
#!/usr/bin/env python3
# omarchy:summary=Run the Synaptics touchpad haptic feedback daemon
"""Haptic feedback daemon for Synaptics touchpads with Manual Trigger.
Monitors touchpad button press events and sends haptic pulses via HID
feature reports. Required because the kernel's HID haptic subsystem only
supports Auto Trigger with waveform enumeration, not the simpler Manual
Trigger protocol used by these Synaptics touchpads.
"""
import fcntl, glob, os, struct, sys
VENDOR = "06CB"
REPORT_ID = 0x37
INTENSITY = 40 # 0-100
# input_event: struct timeval (16 bytes on 64-bit) + type(H) + code(H) + value(i)
EVENT_FORMAT = "llHHi"
EVENT_SIZE = struct.calcsize(EVENT_FORMAT)
EV_KEY = 0x01
BTN_LEFT = 272
BTN_RIGHT = 273
BTN_MIDDLE = 274
# ioctl: HIDIOCSFEATURE(len) = _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
def HIDIOCSFEATURE(length):
return 0xC0000000 | (length << 16) | (ord("H") << 8) | 0x06
def find_hidraw():
for path in sorted(glob.glob("/sys/class/hidraw/hidraw*")):
uevent = os.path.join(path, "device", "uevent")
try:
with open(uevent) as f:
content = f.read().upper()
if f"0000{VENDOR}" in content:
return os.path.join("/dev", os.path.basename(path))
except OSError:
continue
return None
def find_touchpad_event():
for path in sorted(glob.glob("/sys/class/input/event*/device/name")):
try:
with open(path) as f:
name = f.read().strip().upper()
if VENDOR in name and "TOUCHPAD" in name:
event = path.split("/")[-3]
return os.path.join("/dev/input", event)
except OSError:
continue
return None
def main():
hidraw = find_hidraw()
if not hidraw:
print("No Synaptics haptic touchpad hidraw device found", file=sys.stderr)
sys.exit(1)
event = find_touchpad_event()
if not event:
print("No Synaptics haptic touchpad input device found", file=sys.stderr)
sys.exit(1)
print(f"Haptic touchpad: hidraw={hidraw} input={event} intensity={INTENSITY}", flush=True)
haptic_report = struct.pack("BB", REPORT_ID, INTENSITY)
ioctl_req = HIDIOCSFEATURE(len(haptic_report))
hidraw_fd = os.open(hidraw, os.O_RDWR)
event_fd = os.open(event, os.O_RDONLY)
try:
while True:
data = os.read(event_fd, EVENT_SIZE)
if len(data) < EVENT_SIZE:
continue
_, _, ev_type, code, value = struct.unpack(EVENT_FORMAT, data)
if ev_type == EV_KEY and code in (BTN_LEFT, BTN_RIGHT, BTN_MIDDLE) and value == 1:
try:
fcntl.ioctl(hidraw_fd, ioctl_req, haptic_report)
except OSError:
pass
except KeyboardInterrupt:
pass
finally:
os.close(event_fd)
os.close(hidraw_fd)
if __name__ == "__main__":
main()
+3 -2
View File
@@ -1,6 +1,7 @@
#!/bin/bash
# Check if hibernation is supported
# omarchy:summary=Check if hibernation is supported
if [[ ! -f /sys/power/image_size ]]; then
exit 1
fi
@@ -11,7 +12,7 @@ SWAPSIZE=$(( 1024 * ${SWAPSIZE_KB:-0} ))
HIBERNATION_IMAGE_SIZE=$(cat /sys/power/image_size)
if [[ "$SWAPSIZE" -gt "$HIBERNATION_IMAGE_SIZE" ]] && [[ -f /etc/mkinitcpio.conf.d/omarchy_resume.conf ]]; then
if (( SWAPSIZE > HIBERNATION_IMAGE_SIZE )) && [[ -f /etc/mkinitcpio.conf.d/omarchy_resume.conf ]]; then
exit 0
else
exit 1
+4 -4
View File
@@ -1,12 +1,12 @@
#!/bin/bash
# Removes hibernation setup: disables swap, removes swapfile, removes fstab entry,
# removes resume hook, and removes suspend-then-hibernate configuration.
# omarchy:summary=Remove hibernation setup including swap and boot resume settings
# omarchy:requires-sudo=true
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
# Check if hibernation is configured
if [ ! -f "$MKINITCPIO_CONF" ] || ! grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
if [[ ! -f $MKINITCPIO_CONF ]] || ! grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
echo "Hibernation is not set up"
exit 0
fi
@@ -25,7 +25,7 @@ if swapon --show | grep -q "$SWAP_FILE"; then
fi
# Remove swapfile
if [ -f "$SWAP_FILE" ]; then
if [[ -f $SWAP_FILE ]]; then
echo "Removing swapfile"
sudo rm "$SWAP_FILE"
fi
+63 -16
View File
@@ -1,29 +1,47 @@
#!/bin/bash
# Creates a swap file in the btrfs subvolume, adds the swap file to /etc/fstab,
# adds a resume hook to mkinitcpio, and configures suspend-then-hibernate.
# omarchy:summary=Set up hibernation with swap and boot resume configuration
# omarchy:requires-sudo=true
if [[ ! -f /sys/power/image_size ]]; then
echo -e "\033[31mError: Hibernation is not supported on your system\033[0m" >&2
exit 1
echo -e "Hibernation is not supported on your system" >&2
exit 0
fi
if ! command -v limine-mkinitcpio &>/dev/null; then
echo "Skipping hibernation setup (requires Limine bootloader)"
exit 0
fi
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
SWAP_FILE="/swap/swapfile"
RESUME_DROP_IN="/etc/limine-entry-tool.d/resume.conf"
# Check if hibernation is already configured
if [ -f "$MKINITCPIO_CONF" ] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
if [[ -f $MKINITCPIO_CONF ]] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
# Fix empty resume_offset if btrfs map-swapfile failed during initial setup
if [[ -f $RESUME_DROP_IN ]] && grep -q 'resume_offset="$' "$RESUME_DROP_IN" && [[ -f $SWAP_FILE ]]; then
RESUME_OFFSET=$(sudo btrfs inspect-internal map-swapfile -r "$SWAP_FILE" 2>/dev/null)
if [[ -n $RESUME_OFFSET ]]; then
echo "Fixing empty resume_offset ($RESUME_OFFSET)"
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" "$RESUME_DROP_IN"
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" /etc/default/limine
sudo limine-mkinitcpio
sudo limine-update
fi
fi
echo "Hibernation is already set up"
exit 0
fi
MEM_TOTAL_HUMAN=$(free --human | awk '/Mem/ {print $2}')
if ! gum confirm "Use $MEM_TOTAL_HUMAN on boot drive to make hibernation available?"; then
exit 0
if [[ $1 != "--force" ]]; then
MEM_TOTAL_HUMAN=$(free --human | awk '/Mem/ {print $2}')
if ! gum confirm "Use $MEM_TOTAL_HUMAN on boot drive to make hibernation available?"; then
exit 0
fi
fi
SWAP_SUBVOLUME="/swap"
SWAP_FILE="$SWAP_SUBVOLUME/swapfile"
# Create btrfs subvolume for swap
if ! sudo btrfs subvolume show "$SWAP_SUBVOLUME" &>/dev/null; then
@@ -57,14 +75,43 @@ sudo mkdir -p /etc/mkinitcpio.conf.d
echo "Adding resume hook to $MKINITCPIO_CONF"
echo "HOOKS+=(resume)" | sudo tee "$MKINITCPIO_CONF" >/dev/null
# Configure suspend-then-hibernate
echo "Configuring suspend-then-hibernate"
sudo mkdir -p /etc/systemd/logind.conf.d /etc/systemd/sleep.conf.d
sudo cp "$OMARCHY_PATH/default/systemd/lid.conf" /etc/systemd/logind.conf.d/
sudo cp "$OMARCHY_PATH/default/systemd/hibernate.conf" /etc/systemd/sleep.conf.d/
# Ensure keyboard backlight doesn't prevent sleep
sudo cp -p "$OMARCHY_PATH/default/systemd/system-sleep/keyboard-backlight" /usr/lib/systemd/system-sleep/
# Regenerate initramfs
# Add resume= kernel parameters so the initramfs resume hook knows where to find the
# hibernation image. Without these, resume happens late (after GPU drivers load) and fails.
if [[ ! -f $RESUME_DROP_IN ]]; then
echo "Adding resume kernel parameters"
sudo swapon -p 0 "$SWAP_FILE" 2>/dev/null
RESUME_DEVICE=$(findmnt -no SOURCE -T "$SWAP_FILE" | sed 's/\[.*\]//')
RESUME_OFFSET=$(sudo btrfs inspect-internal map-swapfile -r "$SWAP_FILE")
if [[ -n $RESUME_OFFSET ]]; then
sudo mkdir -p /etc/limine-entry-tool.d
echo "KERNEL_CMDLINE[default]+=\" resume=$RESUME_DEVICE resume_offset=$RESUME_OFFSET\"" | sudo tee "$RESUME_DROP_IN" >/dev/null
sudo tee -a /etc/default/limine < "$RESUME_DROP_IN" >/dev/null
else
echo "Warning: Could not determine resume offset for $SWAP_FILE" >&2
fi
fi
# Use ACPI alarm for RTC wakeup on s2idle systems (needed for suspend-then-hibernate)
if grep -q "\[s2idle\]" /sys/power/mem_sleep 2>/dev/null; then
LIMINE_DROP_IN="/etc/limine-entry-tool.d/rtc-alarm.conf"
if [[ ! -f $LIMINE_DROP_IN ]]; then
echo "Enabling ACPI RTC alarm for s2idle suspend"
sudo mkdir -p /etc/limine-entry-tool.d
echo 'KERNEL_CMDLINE[default]+=" rtc_cmos.use_acpi_alarm=1"' | sudo tee "$LIMINE_DROP_IN" >/dev/null
sudo tee -a /etc/default/limine < "$LIMINE_DROP_IN" >/dev/null
fi
fi
# Regenerate initramfs and boot entry
echo "Regenerating initramfs..."
sudo limine-mkinitcpio
sudo limine-update
echo "Hibernation enabled"
echo
if [[ $1 != "--force" ]] && gum confirm "Reboot to enable hibernation?"; then
omarchy-system-reboot
fi
+3 -2
View File
@@ -1,10 +1,11 @@
#!/bin/bash
# Run a named hook, like post-update (available in ~/.config/omarchy/hooks/post-update).
# omarchy:summary=Run a named hook, like post-update (available in ~/.config/omarchy/hooks/post-update).
# omarchy:args=[name] [args...]
set -e
if [[ $# -lt 1 ]]; then
if (( $# < 1 )); then
echo "Usage: omarchy-hook [name] [args...]"
exit 1
fi
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Detect ASUS ExpertBook B9406 series laptops on Intel Panther Lake.
omarchy-hw-match "B9406" && omarchy-hw-intel-ptl
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Detect whether the computer is an Asus ROG machine.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "ASUSTeK COMPUTER INC." ]] &&
grep -q "ROG" /sys/class/dmi/id/product_family 2>/dev/null
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
# omarchy:summary=Match Dell XPS systems with LG OLED panel on Intel Panther Lake (Xe3) GPU.
omarchy-hw-match "XPS" \
&& omarchy-hw-intel-ptl \
&& test "$(od -An -tx1 -j8 -N2 /sys/class/drm/card*-eDP-*/edid 2>/dev/null | tr -d ' \n')" = "30e4"
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# omarchy:summary=Returns true when an external monitor is physically connected.
for status in /sys/class/drm/card*-*/status; do
[[ "$status" == *-eDP-*/status ]] && continue
[[ "$(<"$status")" == "connected" ]] && exit 0
done
exit 1
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Detect whether the computer is a Framework Laptop 16.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Framework" ]] &&
omarchy-hw-match "Laptop 16"
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# omarchy:summary=Detect whether the system has an active hybrid GPU configuration
if command -v supergfxctl &>/dev/null; then
supergfxctl -s 2>/dev/null | grep -qw Hybrid
else
(($(lspci | grep -cE 'VGA|3D|Display') >= 2))
fi
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Detect whether the computer has an Intel CPU.
[[ $(grep -m1 "vendor_id" /proc/cpuinfo 2>/dev/null | cut -d: -f2 | tr -d ' ') == "GenuineIntel" ]]
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Detect whether the computer has an Intel Panther Lake GPU.
lspci | grep -iE 'vga|3d|display' | grep -qi 'panther lake'
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
# omarchy:summary=Match against the computer's DMI product name or product family (case-insensitive).
# omarchy:args=<pattern>
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null ||
grep -qi "$1" /sys/class/dmi/id/product_family 2>/dev/null
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# omarchy:summary=Clear the internal-monitor-disable toggle if no external display is connected.
TOGGLE="$HOME/.local/state/omarchy/toggles/hypr/internal-monitor-disable.conf"
if [[ -f $TOGGLE ]] && ! omarchy-hw-external-monitors; then
rm -f "$TOGGLE"
fi
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Detect whether the computer is a Microsoft Surface device.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Microsoft Corporation" ]] &&
omarchy-hw-match "Surface"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Print the detected Hyprland touchpad or trackpad device name
device=$(hyprctl devices -j | jq -r '[.mice[] | .name | select(test("touchpad|trackpad"; "i"))] | first // empty')
[[ -n $device ]] && echo "$device"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Print the detected Hyprland touchscreen or tablet device name
device=$(hyprctl devices -j | jq -r '[.touch[]?.name, .tablets[]?.name] | first // empty')
[[ -n $device ]] && echo "$device"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Detect whether Vulkan is available.
[[ -d /usr/share/vulkan/icd.d ]] &&
find /usr/share/vulkan/icd.d -maxdepth 1 -name "*.json" -print -quit | grep -q .
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Toggles transparency for the currently focused window.
hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Print the name of the currently focused Hyprland monitor.
hyprctl monitors -j | jq -r '.[] | select(.focused == true).name'
+46
View File
@@ -0,0 +1,46 @@
#!/bin/bash
# omarchy:summary=Enable, disable, toggle, or recover the internal laptop display
# omarchy:args=<on|off|toggle|recover>
TOGGLE="internal-monitor-disable"
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
MIRROR_TOGGLE="internal-monitor-mirror"
# Get internal monitor name dynamically
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
enable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Laptop display enabled" "$TOGGLE"
fi
}
disable() {
if ! omarchy-hw-external-monitors; then
notify-send -u low "󰍹 Can't disable the only active display"
exit 1
fi
if omarchy-hyprland-toggle-disabled "$TOGGLE" && omarchy-hyprland-toggle-disabled "$MIRROR_TOGGLE"; then
echo "monitor=$INTERNAL,disable" >"$TOGGLE_FLAG"
notify-send -u low "󰍹 Laptop display disabled"
hyprctl reload
fi
}
recover() {
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle "$TOGGLE"
fi
}
case "$1" in
on) enable ;;
off) disable ;;
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then enable; else disable; fi ;;
recover) recover ;;
*)
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
exit 1
;;
esac
+58
View File
@@ -0,0 +1,58 @@
#!/bin/bash
# omarchy:summary=Enable, disable, toggle, or recover mirroring the internal display to an external monitor
# omarchy:args=<on|off|toggle|recover>
TOGGLE="internal-monitor-mirror"
TOGGLE_FLAG="$HOME/.local/state/omarchy/toggles/hypr/$TOGGLE.conf"
DISABLE_TOGGLE="internal-monitor-disable"
# Get names dynamically
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
# Get the first available external monitor
EXTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP") | not).name' | head -n 1)
enable() {
if [[ -z "$EXTERNAL" ]]; then
notify-send -u low "󰍹 No external monitors found for mirror"
exit 1
fi
if [[ -z "$INTERNAL" ]]; then
notify-send -u low "󰍹 No laptop monitor found to mirror"
exit 1
fi
if omarchy-hyprland-toggle-enabled "$DISABLE_TOGGLE"; then
omarchy-hyprland-toggle "$DISABLE_TOGGLE"
fi
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
echo "monitor=$EXTERNAL, preferred, auto, 1, mirror, $INTERNAL" > "$TOGGLE_FLAG"
notify-send -u low "󰍹 Mirroring enabled ($EXTERNAL)"
hyprctl reload
fi
}
disable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Extended mode restored" "$TOGGLE"
fi
}
recover() {
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle "$TOGGLE"
fi
}
case "$1" in
on) enable ;;
off) disable ;;
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then disable; else enable; fi ;;
recover) recover ;;
*)
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
exit 1
;;
esac
+36
View File
@@ -0,0 +1,36 @@
#!/bin/bash
# omarchy:summary=Cycle scaling for the focused Hyprland monitor
MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)')
ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name')
CURRENT_SCALE=$(echo "$MONITOR_INFO" | jq -r '.scale')
WIDTH=$(echo "$MONITOR_INFO" | jq -r '.width')
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 1 (or reverse with --reverse)
SCALES=(1 1.25 1.6 2 3)
# Find the index of the scale closest to the current one (Hyprland may
# snap fractional scales to nearby values, so we can't match exactly)
CURRENT_IDX=$(awk -v s="$CURRENT_SCALE" -v list="${SCALES[*]}" 'BEGIN {
n = split(list, arr, " ")
best = 0; best_diff = 1e9
for (i = 1; i <= n; i++) {
d = s - arr[i]; if (d < 0) d = -d
if (d < best_diff) { best_diff = d; best = i - 1 }
}
print best
}')
if [[ "$1" == "--reverse" ]]; then
NEW_IDX=$(( (CURRENT_IDX - 1 + ${#SCALES[@]}) % ${#SCALES[@]} ))
else
NEW_IDX=$(( (CURRENT_IDX + 1) % ${#SCALES[@]} ))
fi
NEW_SCALE=${SCALES[$NEW_IDX]}
hyprctl keyword monitor "$ACTIVE_MONITOR,${WIDTH}x${HEIGHT}@${REFRESH_RATE},auto,$NEW_SCALE"
notify-send -u low "󰍹 Display scaling set to ${NEW_SCALE}x"
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
# omarchy:summary=Watch Hyprland monitor events and recover monitor toggles when a monitor is removed
SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
socat -U - "UNIX-CONNECT:$SOCKET" | while read -r event; do
case "$event" in
monitorremoved\>\>*|monitorremovedv2\>\>*)
omarchy-hyprland-monitor-internal recover
omarchy-hyprland-monitor-internal-mirror recover
;;
esac
done
+32
View File
@@ -0,0 +1,32 @@
#!/bin/bash
# omarchy:summary=Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely.
# omarchy:args=[--enabled-notification <text>] [--disabled-notification <text>] <flag-name>
ENABLED_NOTIFICATION=""
DISABLED_NOTIFICATION=""
while [[ $# -gt 1 ]]; do
case $1 in
--enabled-notification) ENABLED_NOTIFICATION="$2"; shift 2 ;;
--disabled-notification) DISABLED_NOTIFICATION="$2"; shift 2 ;;
*) break ;;
esac
done
FLAG_NAME="$1"
FLAG="$HOME/.local/state/omarchy/toggles/hypr/$FLAG_NAME.conf"
FLAG_SOURCE="$OMARCHY_PATH/default/hypr/toggles/$FLAG_NAME.conf"
if [[ -f $FLAG ]]; then
rm $FLAG
[[ -n $DISABLED_NOTIFICATION ]] && notify-send -u low "$DISABLED_NOTIFICATION"
elif [[ -f $FLAG_SOURCE ]]; then
cp $FLAG_SOURCE $FLAG
[[ -n $ENABLED_NOTIFICATION ]] && notify-send -u low "$ENABLED_NOTIFICATION"
else
echo "Flag not found: $FLAG_NAME"
exit 1
fi
hyprctl reload
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Check if a Hyprland toggle is currently disabled (missing).
# omarchy:args=<flag-name>
[[ ! -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# omarchy:summary=Check if a Hyprland toggle is currently enabled.
# omarchy:args=<flag-name>
[[ -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash
# Close all open windows
# omarchy:summary=Close all open windows
hyprctl clients -j | \
jq -r ".[].address" | \
xargs -I{} hyprctl dispatch closewindow address:{}
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Toggles the window gaps globally between no gaps and the default.
omarchy-hyprland-toggle window-no-gaps
+2 -14
View File
@@ -1,19 +1,7 @@
#!/bin/bash
# Toggle to pop-out a tile to stay fixed on a display basis.
# Usage:
# omarchy-hyprland-window-pop [width height [x y]]
#
# Arguments:
# width Optional. Width of the floating window. Default: 1300
# height Optional. Height of the floating window. Default: 900
# x Optional. X position of the window. Must provide both X and Y to take effect.
# y Optional. Y position of the window. Must provide both X and Y to take effect.
#
# Behavior:
# - If the window is already pinned, it will be unpinned and removed from the pop layer.
# - If the window is not pinned, it will be floated, resized, moved/centered, pinned, brought to top, and popped.
# omarchy:summary=Toggle to pop-out a tile to stay fixed on a display basis.
# omarchy:args=[width height x y]
width=${1:-1300}
height=${2:-900}
+8
View File
@@ -0,0 +1,8 @@
#!/bin/bash
# omarchy:summary=Toggle single-window square aspect ratio.
omarchy-hyprland-toggle \
--enabled-notification " Enable single-window square aspect ratio" \
--disabled-notification " Disable single-window square aspect ratio" \
single-window-aspect-ratio
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
# omarchy:summary=Toggle the layout on the current active workspace between dwindle and scrolling
ACTIVE_WORKSPACE=$(hyprctl activeworkspace -j | jq -r '.id')
CURRENT_LAYOUT=$(hyprctl activeworkspace -j | jq -r '.tiledLayout')
case "$CURRENT_LAYOUT" in
dwindle) NEW_LAYOUT=scrolling ;;
*) NEW_LAYOUT=dwindle ;;
esac
hyprctl keyword workspace $ACTIVE_WORKSPACE, layout:$NEW_LAYOUT
notify-send -u low "󱂬 Workspace layout set to $NEW_LAYOUT"
@@ -1,12 +0,0 @@
#!/bin/bash
# Toggles the window gaps on the active workspace between no gaps and the default 10/5/2.
workspace_id=$(hyprctl activeworkspace -j | jq -r .id)
gaps=$(hyprctl workspacerules -j | jq -r ".[] | select(.workspaceString==\"$workspace_id\") | .gapsOut[0] // 0")
if [[ $gaps == "0" ]]; then
hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2"
else \
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, bordersize:0"
fi
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash
# Allow Chromium to sign in to Google accounts by adding the correct
# oauth client id and secret to ~/.config/chromium-flags.conf.
# omarchy:summary=Allow Chromium to sign in to Google accounts by adding the required OAuth credentials
if [[ -f ~/.config/chromium-flags.conf ]]; then
CONF=~/.config/chromium-flags.conf
+18 -7
View File
@@ -1,17 +1,21 @@
#!/bin/bash
# Install one of the supported development environments. Usually called via Install > Development > * in the Omarchy Menu.
# omarchy:summary=Install a supported development environment
# omarchy:name=dev-env
# omarchy:args=<ruby|node|bun|deno|go|laravel|symfony|php|python|elixir|phoenix|rust|java|zig|ocaml|dotnet|clojure|scala>
# omarchy:examples=omarchy install dev-env ruby | omarchy install dev-env node
# omarchy:requires-sudo=true
if [[ -z "$1" ]]; then
echo "Usage: omarchy-install-dev-env <ruby|node|bun|go|laravel|symfony|php|python|elixir|phoenix|rust|java|ocaml|dotnet|clojure>" >&2
if [[ -z $1 ]]; then
echo "Usage: omarchy-install-dev-env <ruby|node|bun|deno|go|laravel|symfony|php|python|elixir|phoenix|rust|java|zig|ocaml|dotnet|clojure|scala>" >&2
exit 1
fi
install_php() {
sudo pacman -S php composer php-sqlite xdebug --noconfirm
omarchy-pkg-add php composer php-sqlite xdebug
# Install Path for Composer
if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then
if [[ :$PATH: != *:$HOME/.config/composer/vendor/bin:* ]]; then
echo 'export PATH="$HOME/.config/composer/vendor/bin:$PATH"' >>"$HOME/.bashrc"
source "$HOME/.bashrc"
echo "Added Composer global bin directory to PATH."
@@ -50,9 +54,10 @@ case "$1" in
ruby)
echo -e "Installing Ruby on Rails...\n"
omarchy-pkg-add libyaml
mise use --global ruby@latest
mise settings add ruby.compile false
mise settings add idiomatic_version_file_enable_tools ruby
echo "gem: --no-document" > ~/.gemrc
mise use --global ruby@latest
echo "gem: --no-document" >~/.gemrc
mise x ruby -- gem install rails --no-document
echo -e "\nYou can now run: rails new myproject"
;;
@@ -141,4 +146,10 @@ clojure)
omarchy-pkg-add rlwrap
mise use --global clojure@latest
;;
scala)
echo -e "Installing Scala...\n"
mise use --global java@latest
mise use --global scala@latest
mise use --global scala-cli@latest
;;
esac
+4 -4
View File
@@ -1,17 +1,17 @@
#!/bin/bash
# Install one of the supported databases in a Docker container with the suitable development options.
# Usually called via Install > Development > Docker DB from the Omarchy Menu.
# omarchy:summary=Install one of the supported databases in a Docker container with the suitable development options.
# omarchy:requires-sudo=true
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL")
if [[ "$#" -eq 0 ]]; then
if (( $# == 0 )); then
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
else
choices="$@"
fi
if [[ -n "$choices" ]]; then
if [[ -n $choices ]]; then
for db in $choices; do
case $db in
MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;;
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Install and start the Dropbox service. Must then be authenticated via the web.
# omarchy:summary=Install and start the Dropbox service. Must then be authenticated via the web.
echo "Installing all dependencies..."
omarchy-pkg-add dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox
+17
View File
@@ -0,0 +1,17 @@
#!/bin/bash
# omarchy:summary=Install and launch Geforce Now.
set -e
omarchy-pkg-add flatpak
cd /tmp
# Download and run GeForce NOW
curl -LO https://international.download.nvidia.com/GFNLinux/GeForceNOWSetup.bin
chmod +x GeForceNOWSetup.bin
./GeForceNOWSetup.bin
# Ensure a separate browser process not started by GFN is available.
# If not, it seems like GFN has a tendency to hang on login.
setsid omarchy-launch-browser
+18
View File
@@ -0,0 +1,18 @@
#!/bin/bash
# omarchy:summary=Install the NordVPN service with optional GUI.
# omarchy:requires-sudo=true
echo "Installing NordVPN..."
omarchy-pkg-aur-add nordvpn-bin
echo "Enabling NordVPN daemon..."
sudo systemctl enable --now nordvpnd
echo "Adding user to nordvpn group..."
sudo usermod -aG nordvpn "$USER"
echo -e "\nNordVPN installed! After reboot, run 'nordvpn login' to authenticate."
echo
gum confirm "Reboot now to make NordVPN usable?" && omarchy-system-reboot
+13
View File
@@ -0,0 +1,13 @@
#!/bin/bash
# omarchy:summary=Install the ONCE service, enable its background service, and launch the TUI.
# omarchy:requires-sudo=true
echo "Installing ONCE..."
omarchy-pkg-add once-bin
echo "Enabling ONCE background service..."
sudo systemctl enable --now once-background.service
echo -e "\nLaunching ONCE..."
once
+2 -1
View File
@@ -1,6 +1,7 @@
#!/bin/bash
# Install and launch Steam after first letting the user pick the correct grahics card drivers.
# omarchy:summary=Install Steam and graphics drivers selected for this system
# omarchy:requires-sudo=true
set -e
+6 -8
View File
@@ -1,15 +1,13 @@
#!/bin/bash
# Install the Tailscale mesh VPN service, the tsui TUI management app, and a web app for the Tailscale Admin Console.
# omarchy:summary=Install the Tailscale mesh VPN service and a web app for the Tailscale Admin Console.
# omarchy:requires-sudo=true
curl -fsSL https://tailscale.com/install.sh | sh
curl -fsSL https://neuralink.com/tsui/install.sh | bash
echo -e "\nInstalling Tailscale..."
omarchy-pkg-add tailscale
echo -e "\nStarting Tailscale..."
sudo systemctl enable --now tailscaled.service
sudo tailscale up --accept-routes
echo -e "\nAdd tsui to sudoers..."
echo "$USER ALL=(ALL) NOPASSWD: $(which tsui)" | sudo tee /etc/sudoers.d/tsui
omarchy-tui-install "Tailscale" "sudo tsui" float https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
omarchy-webapp-install "Tailscale Admin Console" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
omarchy-webapp-install "Tailscale" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
+5 -25
View File
@@ -1,6 +1,8 @@
#!/bin/bash
# Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc).
# omarchy:summary=Install one of the approved terminals and set it as the default for Omarchy (Super + Return etc).
# omarchy:args=<alacritty|ghostty|kitty>
# omarchy:requires-sudo=true
if (($# == 0)); then
echo "Usage: omarchy-install-terminal [alacritty|ghostty|kitty]"
@@ -25,33 +27,11 @@ if omarchy-pkg-add $package; then
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
if [[ $package == "alacritty" ]]; then
mkdir -p ~/.local/share/applications
cat > ~/.local/share/applications/Alacritty.desktop << EOF
[Desktop Entry]
Type=Application
TryExec=alacritty
Exec=alacritty
Icon=Alacritty
Terminal=false
Categories=System;TerminalEmulator;
Name=Alacritty
GenericName=Terminal
Comment=A fast, cross-platform, OpenGL terminal emulator
StartupNotify=true
StartupWMClass=Alacritty
Actions=New;
X-TerminalArgExec=-e
X-TerminalArgAppId=--class=
X-TerminalArgTitle=--title=
X-TerminalArgDir=--working-directory=
[Desktop Action New]
Name=New Terminal
Exec=alacritty
EOF
cp $OMARCHY_PATH/applications/Alacritty.desktop ~/.local/share/applications/
fi
# Update xdg-terminals.list to prioritize the proper terminal
cat > ~/.config/xdg-terminals.list << EOF
cat >~/.config/xdg-terminals.list <<EOF
# Terminal emulator preference order for xdg-terminal-exec
# The first found and valid terminal will be used
$desktop_id
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# Install VSCode and configure it to use the gnome-libsecret password store, not to update automatically, and to use the current Omarchy theme.
# omarchy:summary=Install VS Code and configure Omarchy defaults for secrets, updates, and theme
echo "Installing VSCode..."
omarchy-pkg-add visual-studio-code-bin
+4 -3
View File
@@ -1,12 +1,13 @@
#!/bin/bash
# Install support for using Xbox controllers with Steam/RetroArch/etc.
# omarchy:summary=Install support for using Xbox controllers with Steam/RetroArch/etc.
# omarchy:requires-sudo=true
set -e
# Install xpadneo to ensure controllers work out of the box
sudo pacman -S --noconfirm --needed linux-headers
yay -S --noconfirm xpadneo-dkms
omarchy-pkg-add linux-headers
omarchy-pkg-aur-add xpadneo-dkms
# Prevent xpad/xpadneo driver conflict
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
# Launch the fastfetch TUI that gives information about the current system.
# omarchy:summary=Launch the fastfetch TUI that gives information about the current system.
exec omarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'"
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
# Launch the Omarchy audio controls TUI (provided by wiremix).
# omarchy:summary=Launch the Omarchy audio controls TUI (provided by wiremix).
omarchy-launch-or-focus-tui wiremix
+1 -2
View File
@@ -1,7 +1,6 @@
#!/bin/bash
# Launch the Omarchy bluetooth controls TUI (provided by bluetui).
# Also attempts to unblock bluetooth service if rfkill had blocked it.
# omarchy:summary=Launch the Omarchy bluetooth controls TUI (provided by bluetui).
rfkill unblock bluetooth
exec omarchy-launch-or-focus-tui bluetui
+3 -3
View File
@@ -1,12 +1,12 @@
#!/bin/bash
# Launch the default browser as determined by xdg-settings.
# Automatically converts --private into the correct flag for the given browser.
# omarchy:summary=Launch the default browser as determined by xdg-settings.
# omarchy:args=[url]
default_browser=$(xdg-settings get default-web-browser)
browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1)
if [[ $browser_exec =~ (firefox|zen|librewolf|mullvad) ]]; then
if $browser_exec --help | grep -q MOZ_LOG; then
private_flag="--private-window"
elif [[ $browser_exec =~ edge ]]; then
private_flag="--inprivate"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Launch the default editor as determined by $EDITOR (set via ~/.config/uwsm/default) (or nvim if missing).
# Starts suitable editors in a terminal window and otherwise as a regular application.
# omarchy:summary=Launch the default editor as determined by $EDITOR (set via ~/.config/uwsm/default) (or nvim if missing).
# omarchy:args=<path>
omarchy-cmd-present "$EDITOR" || EDITOR=nvim
@@ -1,7 +1,7 @@
#!/bin/bash
# Launch a floating terminal with the Omarchy logo presentation, then execute the command passed in, and finally end with the omarchy-show-done presentation.
# Used by actions such as Update System.
# omarchy:summary=Launch a floating terminal with the Omarchy presentation wrapper
# omarchy:args=<command>
cmd="$*"
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; if [ \$? -ne 130 ]; then omarchy-show-done; fi"
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; if (( \$? != 130 )); then omarchy-show-done; fi"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Launch or focus on a given command identified by the passed in window-pattern.
# Use by some default bindings, like the one for Spotify, to ensure there is only one instance of the application open.
# omarchy:summary=Launch an app or focus an existing window matching a pattern
# omarchy:args=<window-pattern> <launch-command>
if (($# == 0)); then
echo "Usage: omarchy-launch-or-focus [window-pattern] [launch-command]"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Launch or focus on a given TUI identified by the passed in as the command.
# Use by commands like omarchy-launch-wifi to ensure there is only one wifi configuration screen open.
# omarchy:summary=Launch a TUI or focus an existing terminal window for it
# omarchy:args=<command> [args...]
APP_ID="org.omarchy.$(basename "$1")"
LAUNCH_COMMAND="omarchy-launch-tui $@"
+2 -2
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# Launch or focus on a given web app identified by the window-pattern.
# Use by some default bindings, like the one for WhatsApp, to ensure there is only one instance of the application open.
# omarchy:summary=Launch or focus on a given web app identified by the window-pattern.
# omarchy:args=<window-pattern> <url-and-flags...>
if (($# == 0)); then
echo "Usage: omarchy-launch-or-focus-webapp [window-pattern] [url-and-flags...]"
+7 -8
View File
@@ -1,8 +1,7 @@
#!/bin/bash
# Launch the Omarchy screensaver in the default terminal on the system with the correct font configuration.
# omarchy:summary=Launch the Omarchy screensaver in the default terminal on the system with the correct font configuration.
# Exit early if we don't have the tte show
if ! command -v tte &>/dev/null; then
exit 1
fi
@@ -11,14 +10,14 @@ fi
pgrep -f org.omarchy.screensaver && exit 0
# Allow screensaver to be turned off but also force started
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
if omarchy-toggle-enabled screensaver-off && [[ $1 != "force" ]]; then
exit 1
fi
# Silently quit Walker on overlay
walker -q
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
focused=$(omarchy-hyprland-monitor-focused)
terminal=$(xdg-terminal-exec --print-id)
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
@@ -29,24 +28,24 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
hyprctl dispatch exec -- \
alacritty --class=org.omarchy.screensaver \
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
-e omarchy-cmd-screensaver
-e omarchy-screensaver
;;
*ghostty*)
hyprctl dispatch exec -- \
ghostty --class=org.omarchy.screensaver \
--config-file=~/.local/share/omarchy/default/ghostty/screensaver \
--font-size=18 \
-e omarchy-cmd-screensaver
-e omarchy-screensaver
;;
*kitty*)
hyprctl dispatch exec -- \
kitty --class=org.omarchy.screensaver \
--override font_size=18 \
--override window_padding_width=0 \
-e omarchy-cmd-screensaver
-e omarchy-screensaver
;;
*)
notify-send "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
notify-send -u low "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
;;
esac
done

Some files were not shown because too many files have changed in this diff Show More