Compare commits

..
318 Commits
Author SHA1 Message Date
David Heinemeier Hansson 2924278be5 Remove the migration too 2026-04-22 07:52:25 +02:00
David Heinemeier HanssonandGitHub ca8e3c24de Revert "Add battery identifier to Waybar config" 2026-04-22 07:51:12 +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
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
249 changed files with 2094 additions and 385 deletions
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# 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
# Returns the battery full capacity in Wh (rounded to whole number).
# Used by omarchy-battery-status for displaying battery capacity.
battery_info=$(upower -i $(upower -e | grep BAT))
echo "$battery_info" | awk '/energy-full:/ {
printf "%d", $2
exit
}'
+1
View File
@@ -9,6 +9,7 @@ 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
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# 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
}'
+28
View File
@@ -0,0 +1,28 @@
#!/bin/bash
# Returns a formatted battery status string with percentage and power draw/charge.
# Used by the battery notification hotkey (Ctrl + Shift + Super + B).
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 -4
View File
@@ -23,14 +23,19 @@ fi
max_brightness="$(brightnessctl -d "$device" max)"
current_brightness="$(brightnessctl -d "$device" get)"
# Calculate step as one unit (keyboards typically have discrete levels like 0-3).
# 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 + 1) % (max_brightness + 1) ))
new_brightness=$(( current_brightness + step ))
(( new_brightness > max_brightness )) && new_brightness=0
elif [[ $direction == "up" ]]; then
new_brightness=$((current_brightness + 1))
new_brightness=$(( current_brightness + step ))
(( new_brightness > max_brightness )) && new_brightness=$max_brightness
else
new_brightness=$((current_brightness - 1))
new_brightness=$(( current_brightness - step ))
(( new_brightness < 0 )) && new_brightness=0
fi
+1 -1
View File
@@ -2,7 +2,7 @@
# 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')"
focused_monitor=$(omarchy-hyprland-monitor-focused)
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
sinks_count=$(echo "$sinks" | jq '. | length')
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# Toggle microphone mute. Dell XPS systems get special handling for the hardware LED.
if omarchy-hw-match "XPS"; then
omarchy-cmd-mic-mute-xps
else
swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)" --input-volume mute-toggle
fi
+44
View File
@@ -0,0 +1,44 @@
#!/bin/bash
# Toggle microphone mute on Dell XPS systems. Uses wpctl for reliable toggling
# and syncs the ALSA capture switch so the hardware mic mute LED follows state.
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
swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+91 -54
View File
@@ -2,6 +2,8 @@
# 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.
# Resolution is capped to 4K for monitors above 4K, native otherwise.
# Override via --resolution= (e.g. --resolution=1920x1080, --resolution=0x0 for native).
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
@@ -15,28 +17,27 @@ 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#*=}" ;;
--stop-recording) STOP_RECORDING="true"
--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
cleanup_webcam() {
pkill -f "WebcamOverlay" 2>/dev/null
}
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 "^\s*/dev/video" | tr -d '\t')
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
@@ -62,7 +63,7 @@ start_webcam_overlay() {
done
ffplay -f v4l2 $video_size_arg -framerate 30 "$WEBCAM_DEVICE" \
-vf "scale=${target_width}:-1" \
-vf "crop=iw/2:ih,scale=${target_width}:-1" \
-window_title "WebcamOverlay" \
-noborder \
-fflags nobuffer -flags low_delay \
@@ -71,10 +72,24 @@ start_webcam_overlay() {
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=""
local audio_args=()
[[ $DESKTOP_AUDIO == "true" ]] && audio_devices+="default_output"
@@ -84,15 +99,71 @@ start_screenrecording() {
audio_devices+="default_input"
fi
[[ -n $audio_devices ]] && audio_args+="-a $audio_devices"
[[ -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
gpu-screen-recorder -w portal -k h264 -f 60 -fallback-cpu-encoding yes -o "$filename" $audio_args -ac aac &
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
trim_first_frame
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
}
trim_first_frame() {
local latest=$(ls -t "$OUTPUT_DIR"/screenrecording-*.mp4 2>/dev/null | head -1)
if [[ -n $latest ]]; then
local latest
latest=$(cat "$RECORDING_FILE" 2>/dev/null)
if [[ -n $latest && -f $latest ]]; then
local trimmed="${latest%.mp4}-trimmed.mp4"
if ffmpeg -y -ss 0.1 -i "$latest" -c copy "$trimmed" -loglevel quiet 2>/dev/null; then
mv "$trimmed" "$latest"
@@ -102,46 +173,12 @@ trim_first_frame() {
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
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
trim_first_frame
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
stop_screenrecording
elif [[ $STOP_RECORDING == "true" ]]; then
exit 1
else
[[ $WEBCAM == "true" ]] && start_webcam_overlay
start_screenrecording || cleanup_webcam
else
exit 1
fi
+26 -23
View File
@@ -8,8 +8,8 @@
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
mkdir -p "$OUTPUT_DIR"
notify-send "Created screenshot directory: $OUTPUT_DIR" -u normal -t 2000
fi
pkill slurp && exit 0
@@ -65,27 +65,30 @@ get_rectangles() {
# Select based on mode
case "$MODE" in
region)
hyprpicker -r -z >/dev/null 2>&1 & PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null
;;
windows)
hyprpicker -r -z >/dev/null 2>&1 & PID=$!
sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
kill $PID 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)
kill $PID 2>/dev/null
region)
hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null
;;
windows)
hyprpicker -r -z >/dev/null 2>&1 &
PID=$!
sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
kill $PID 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)
kill $PID 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
+1 -1
View File
@@ -33,7 +33,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"
+94
View File
@@ -0,0 +1,94 @@
#!/usr/bin/env python3
"""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()
+23 -6
View File
@@ -14,9 +14,22 @@ if ! command -v limine-mkinitcpio &>/dev/null; then
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
# 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
@@ -29,7 +42,6 @@ if [[ $1 != "--force" ]]; then
fi
SWAP_SUBVOLUME="/swap"
SWAP_FILE="$SWAP_SUBVOLUME/swapfile"
# Create btrfs subvolume for swap
if ! sudo btrfs subvolume show "$SWAP_SUBVOLUME" &>/dev/null; then
@@ -68,14 +80,18 @@ sudo cp -p "$OMARCHY_PATH/default/systemd/system-sleep/keyboard-backlight" /usr/
# 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.
RESUME_DROP_IN="/etc/limine-entry-tool.d/resume.conf"
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=$(btrfs inspect-internal map-swapfile -r "$SWAP_FILE")
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
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)
@@ -84,7 +100,8 @@ if grep -q "\[s2idle\]" /sys/power/mem_sleep 2>/dev/null; then
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
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
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
# 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"
+1 -1
View File
@@ -3,4 +3,4 @@
# Detect whether the computer is a Framework Laptop 16.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Framework" ]] &&
grep -q "Laptop 16" /sys/class/dmi/id/product_name 2>/dev/null
omarchy-hw-match "Laptop 16"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# 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
# Detect whether the computer has an Intel Panther Lake GPU.
lspci | grep -iE 'vga|3d|display' | grep -qi 'panther lake'
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# Match against the computer's DMI product name (case-insensitive).
# Usage: omarchy-hw-match "XPS"
grep -qi "$1" /sys/class/dmi/id/product_name 2>/dev/null
+1 -1
View File
@@ -3,4 +3,4 @@
# Detect whether the computer is a Microsoft Surface device.
[[ $(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) == "Microsoft Corporation" ]] &&
grep -q "Surface" /sys/class/dmi/id/product_name 2>/dev/null
omarchy-hw-match "Surface"
+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
# 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
# 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
# Print the name of the currently focused Hyprland monitor.
hyprctl monitors -j | jq -r '.[] | select(.focused == true).name'
+13
View File
@@ -0,0 +1,13 @@
#!/bin/bash
# Disable the internal laptop display. No-op if already disabled or if it
# would leave no active display.
if omarchy-hyprland-monitors-many; then
if omarchy-hyprland-toggle-disabled internal-monitor-disable; then
omarchy-hyprland-toggle --enabled-notification "󰍹 Laptop display disabled" internal-monitor-disable
fi
else
notify-send -u low "󰍹 Can't disable the only active display"
exit 1
fi
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
# Enable the internal laptop display. No-op if already enabled.
if omarchy-hyprland-toggle-enabled internal-monitor-disable; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Laptop display enabled" internal-monitor-disable
fi
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# Re-enable the internal display if it was toggled off and no external monitors
# are currently active (e.g. external got disconnected live, during sleep, or
# wasn't present on boot).
if omarchy-hyprland-monitors-none && omarchy-hyprland-toggle-enabled internal-monitor-disable; then
omarchy-hyprland-monitor-internal-enable
fi
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# Toggle the internal laptop display on/off.
if omarchy-hyprland-toggle-enabled internal-monitor-disable; then
omarchy-hyprland-monitor-internal-enable
else
omarchy-hyprland-monitor-internal-disable
fi
@@ -4,6 +4,9 @@
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.6 → 2 → 3 → 1
CURRENT_INT=$(awk -v s="$CURRENT_SCALE" 'BEGIN { printf "%.0f", s * 10 }')
@@ -15,7 +18,5 @@ case "$CURRENT_INT" in
*) NEW_SCALE=1 ;;
esac
hyprctl keyword misc:disable_scale_notification true
hyprctl keyword monitor "$ACTIVE_MONITOR,preferred,auto,$NEW_SCALE"
hyprctl keyword misc:disable_scale_notification false
notify-send "󰍹 Display scaling set to ${NEW_SCALE}x"
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
# Listen on Hyprland's event socket and recover the internal display whenever
# 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
;;
esac
done
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# Returns true when there are multiple monitors connected (so we can disable the internal one)
(( $(hyprctl monitors -j 2>/dev/null | jq length) > 1 ))
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# Returns true when no monitors are connected
(( $(hyprctl monitors -j 2>/dev/null | jq length) == 0 ))
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
# Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely.
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
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# Check if a Hyprland toggle is currently disabled (missing).
[[ ! -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# Check if a Hyprland toggle is currently enabled.
[[ -f "$HOME/.local/state/omarchy/toggles/hypr/$1.conf" ]]
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# Toggles the window gaps globally between no gaps and the default.
omarchy-hyprland-toggle window-no-gaps
@@ -1,13 +1,8 @@
#!/bin/bash
# Check current single_window_aspect_ratio setting
CURRENT_VALUE=$(hyprctl getoption "dwindle:single_window_aspect_ratio" 2>/dev/null | head -1)
# Toggle single-window square aspect ratio.
# Parse vec2 output: "vec2: [1, 1]" or "vec2: [0, 0]"
if [[ $CURRENT_VALUE == *"[1, 1]"* ]]; then
hyprctl keyword dwindle:single_window_aspect_ratio "0 0"
notify-send " Disable single-window square aspect ratio"
else
hyprctl keyword dwindle:single_window_aspect_ratio "1 1"
notify-send " Enable single-window square aspect"
fi
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
# 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,15 +0,0 @@
#!/bin/bash
# Toggles the window gaps globally between no gaps and the default 10/5/2.
gaps=$(hyprctl getoption general:gaps_out -j | jq -r '.custom' | awk '{print $1}')
if [[ $gaps == "0" ]]; then
hyprctl keyword general:gaps_out 10
hyprctl keyword general:gaps_in 5
hyprctl keyword general:border_size 2
else
hyprctl keyword general:gaps_out 0
hyprctl keyword general:gaps_in 0
hyprctl keyword general:border_size 0
fi
+2 -2
View File
@@ -50,9 +50,9 @@ case "$1" in
ruby)
echo -e "Installing Ruby on Rails...\n"
omarchy-pkg-add libyaml
mise use --global ruby@latest
mise settings add idiomatic_version_file_enable_tools ruby
mise settings add ruby.compile false
mise settings add idiomatic_version_file_enable_tools ruby
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"
+1 -1
View File
@@ -14,4 +14,4 @@ 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?" && sudo reboot now
gum confirm "Reboot now to make NordVPN usable?" && omarchy-system-reboot
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
# Install the ONCE service, enable its background service, and launch the TUI.
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
+1 -1
View File
@@ -10,7 +10,7 @@ fi
WINDOW_PATTERN="$1"
LAUNCH_COMMAND="${2:-"uwsm-app -- $WINDOW_PATTERN"}"
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|select((.class|test("\\b" + $p + "\\b";"i")) or (.title|test("\\b" + $p + "\\b";"i")))|.address' | head -n1)
if [[ -n $WINDOW_ADDRESS ]]; then
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
+3 -3
View File
@@ -11,14 +11,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
@@ -46,7 +46,7 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
-e omarchy-cmd-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
+1 -1
View File
@@ -9,7 +9,7 @@ fi
# Ensure walker service is running
if ! pgrep -f "walker --gapplication-service" > /dev/null; then
setsid uwsm-app -- walker --gapplication-service &
setsid uwsm-app -- env GSK_RENDERER=cairo walker --gapplication-service &
fi
exec walker --width 644 --maxheight 300 --minheight 300 "$@"
+1 -1
View File
@@ -5,7 +5,7 @@
browser=$(xdg-settings get default-web-browser)
case $browser in
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
google-chrome* | brave* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
*) browser="chromium.desktop" ;;
esac
+30 -16
View File
@@ -19,6 +19,13 @@ back_to() {
fi
}
toggle_existing_menu() {
if pgrep -f "walker.*--dmenu" >/dev/null; then
walker --close >/dev/null 2>&1
exit 0
fi
}
menu() {
local prompt="$1"
local options="$2"
@@ -47,7 +54,7 @@ present_terminal() {
}
open_in_editor() {
notify-send "Editing config file" "$1"
notify-send -u low "Editing config file" "$1"
omarchy-launch-editor "$1"
}
@@ -102,7 +109,7 @@ show_capture_menu() {
*Screenshot*) omarchy-cmd-screenshot ;;
*Screenrecord*) show_screenrecord_menu ;;
*Color*) pkill hyprpicker || hyprpicker -a ;;
*) show_trigger_menu ;;
*) back_to show_trigger_menu ;;
esac
}
@@ -161,12 +168,18 @@ show_share_menu() {
}
show_toggle_menu() {
case $(menu "Toggle" "󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar") in
case $(menu "Toggle" "󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Monitor Scaling\n󰛧 Laptop Display") in
*Screensaver*) omarchy-toggle-screensaver ;;
*Nightlight*) omarchy-toggle-nightlight ;;
*Idle*) omarchy-toggle-idle ;;
*Bar*) omarchy-toggle-waybar ;;
*) show_trigger_menu ;;
*Layout*) omarchy-hyprland-workspace-layout-toggle ;;
*Ratio*) omarchy-hyprland-window-single-square-aspect-toggle ;;
*Gaps*) omarchy-hyprland-window-gaps-toggle ;;
*Scaling*) omarchy-hyprland-monitor-scaling-cycle ;;
*Laptop*) omarchy-hyprland-monitor-internal-toggle ;;
*) back_to show_trigger_menu ;;
esac
}
@@ -264,7 +277,7 @@ show_setup_config_menu() {
show_setup_system_menu() {
local options=""
if [[ -f ~/.local/state/omarchy/toggles/suspend-off ]]; then
if omarchy-toggle-enabled suspend-off; then
options="$options󰒲 Enable Suspend"
else
options="$options󰒲 Disable Suspend"
@@ -303,10 +316,11 @@ show_install_menu() {
}
show_install_service_menu() {
case $(menu "Install" " Dropbox\n Tailscale\n󱇱 NordVPN\n󰟵 Bitwarden\n Chromium Account") in
case $(menu "Install" " Dropbox\n Tailscale\n󱇱 NordVPN [AUR]\n󰏖 ONCE\n󰟵 Bitwarden\n Chromium Account") in
*Dropbox*) present_terminal omarchy-install-dropbox ;;
*Tailscale*) present_terminal omarchy-install-tailscale ;;
*NordVPN*) present_terminal omarchy-install-nordvpn ;;
*ONCE*) present_terminal omarchy-install-once ;;
*Bitwarden*) install_and_launch "Bitwarden" "bitwarden bitwarden-cli" "bitwarden" ;;
*Chromium*) present_terminal omarchy-install-chromium-google-account ;;
*) show_install_menu ;;
@@ -341,14 +355,9 @@ show_install_ai_menu() {
echo ollama
)
case $(menu "Install" " Dictation\n󱚤 Claude Code\n󱚤 Codex\n󱚤 Gemini CLI\n󱚤 Copilot CLI\n󱚤 Cursor CLI\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush") in
case $(menu "Install" " Dictation\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush") in
*Dictation*) present_terminal omarchy-voxtype-install ;;
*Claude*) install "Claude Code" "claude-code" ;;
*Codex*) install "Codex" "openai-codex" ;;
*Gemini*) install "Gemini CLI" "gemini-cli" ;;
*Copilot*) install "Copilot CLI" "github-copilot-cli" ;;
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
*Studio*) install "LM Studio" "lmstudio" ;;
*Studio*) install "LM Studio" "lmstudio-bin" ;;
*Ollama*) install "Ollama" $ollama_pkg ;;
*Crush*) install "Crush" "crush-bin" ;;
*) show_install_menu ;;
@@ -520,9 +529,10 @@ show_update_channel_menu() {
esac
}
show_update_process_menu() {
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
case $(menu "Restart" " Hypridle\n Hyprsunset\n󰎟 Mako\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
*Hypridle*) omarchy-restart-hypridle ;;
*Hyprsunset*) omarchy-restart-hyprsunset ;;
*Mako*) omarchy-restart-mako ;;
*Swayosd*) omarchy-restart-swayosd ;;
*Walker*) omarchy-restart-walker ;;
*Waybar*) omarchy-restart-waybar ;;
@@ -546,10 +556,11 @@ show_update_config_menu() {
}
show_update_hardware_menu() {
case $(menu "Restart" " Audio\n󱚾 Wi-Fi\n󰂯 Bluetooth") in
case $(menu "Restart" " Audio\n󱚾 Wi-Fi\n󰂯 Bluetooth\n󰟸 Trackpad") in
*Audio*) present_terminal omarchy-restart-pipewire ;;
*Wi-Fi*) present_terminal omarchy-restart-wifi ;;
*Bluetooth*) present_terminal omarchy-restart-bluetooth ;;
*Trackpad*) present_terminal omarchy-restart-trackpad ;;
*) show_update_menu ;;
esac
}
@@ -568,7 +579,7 @@ show_about() {
show_system_menu() {
local options="󱄄 Screensaver\n Lock"
[[ ! -f ~/.local/state/omarchy/toggles/suspend-off ]] && options="$options\n󰒲 Suspend"
! omarchy-toggle-enabled suspend-off && options="$options\n󰒲 Suspend"
omarchy-hibernation-available && options="$options\n󰤁 Hibernate"
options="$options\n󰍃 Logout\n󰜉 Restart\n󰐥 Shutdown"
@@ -593,6 +604,7 @@ go_to_menu() {
*apps*) walker -p "Launch…" ;;
*learn*) show_learn_menu ;;
*trigger*) show_trigger_menu ;;
*toggle*) show_toggle_menu ;;
*share*) show_share_menu ;;
*background*) show_background_menu ;;
*capture*) show_capture_menu ;;
@@ -613,6 +625,8 @@ go_to_menu() {
USER_EXTENSIONS="$HOME/.config/omarchy/extensions/menu.sh"
[[ -f $USER_EXTENSIONS ]] && source "$USER_EXTENSIONS"
toggle_existing_menu
if [[ -n $1 ]]; then
BACK_TO_EXIT=true
go_to_menu "$1"
+6 -2
View File
@@ -46,8 +46,12 @@ parse_keycodes() {
while IFS= read -r line; do
if [[ $line =~ code:([0-9]+) ]]; then
code="${BASH_REMATCH[1]}"
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
echo "${line/code:${code}/$symbol}"
if [[ $code == "201" ]]; then
echo "${line/SUPER SHIFT,code:201/,COPILOT KEY}"
else
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
echo "${line/code:${code}/$symbol}"
fi
elif [[ $line =~ mouse:([0-9]+) ]]; then
code="${BASH_REMATCH[1]}"
+24
View File
@@ -0,0 +1,24 @@
#!/bin/bash
# Install an npx wrapper for a given npm package.
# Usage: omarchy-npx-install <package> [command-name]
#
# If command-name is omitted, it defaults to the package name.
# Example: omarchy-npx-install opencode-ai opencode
if [[ -z $1 ]]; then
echo "Usage: omarchy-npx-install <package> [command-name]"
exit 1
fi
package=$1
command=${2:-$1}
mkdir -p "$HOME/.local/bin"
cat > "$HOME/.local/bin/$command" <<EOF
#!/bin/bash
exec mise exec node@latest -- npx --yes $package "\$@"
EOF
chmod +x "$HOME/.local/bin/$command"
+2 -1
View File
@@ -20,7 +20,8 @@ pkg_names=$(yay -Slqa | fzf "${fzf_args[@]}")
if [[ -n $pkg_names ]]; then
# Add aur/ prefix to each package name and convert to space-separated for yay
sudo -v
source omarchy-sudo-keepalive
echo "$pkg_names" | sed 's/^/aur\//' | tr '\n' ' ' | xargs yay -S --noconfirm
sudo updatedb
omarchy-show-done
+3 -1
View File
@@ -17,7 +17,9 @@ fzf_args=(
pkg_names=$(pacman -Slq | fzf "${fzf_args[@]}")
if [[ -n $pkg_names ]]; then
# Convert newline-separated selections to space-separated for yay
source omarchy-sudo-keepalive
# Convert newline-separated selections to space-separated for pacman
echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -S --noconfirm
omarchy-show-done
fi
+11
View File
@@ -0,0 +1,11 @@
#!/bin/bash
# Set the correct power profile on boot based on current AC/battery state.
# The udev rules only fire on state *changes*, so without this, booting
# on AC leaves you in the default balanced mode.
if omarchy-battery-present && ! omarchy-ac-present; then
omarchy-powerprofiles-set battery
else
omarchy-powerprofiles-set ac
fi
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# Set the power profile to the requested level, falling back to balanced
# if the requested profile isn't available on this machine.
#
# Usage: omarchy-powerprofiles-set <ac|battery>
mapfile -t profiles < <(powerprofilesctl list | awk '/^\s*[* ]\s*[a-zA-Z0-9\-]+:$/ { gsub(/^[*[:space:]]+|:$/,""); print }')
case "$1" in
ac)
# Prefer performance, fall back to balanced
if [[ " ${profiles[*]} " == *" performance "* ]]; then
powerprofilesctl set performance
else
powerprofilesctl set balanced
fi
;;
battery)
powerprofilesctl set balanced
;;
esac
+1 -4
View File
@@ -3,7 +3,4 @@
# Overwrite the user tmux config with the Omarchy default and reload tmux.
omarchy-refresh-config tmux/tmux.conf
if pgrep -x tmux; then
tmux source-file ~/.config/tmux/tmux.conf
fi
omarchy-restart-tmux
+1 -1
View File
@@ -3,6 +3,6 @@ set -e
# Reinstall the Omarchy configuration directory from the git source.
git clone "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
git clone --depth=1 "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
mv $OMARCHY_PATH ~/.local/share/omarchy-old
mv ~/.local/share/omarchy-new $OMARCHY_PATH
+4
View File
@@ -13,6 +13,10 @@ if gum confirm "Are you sure you want to remove all preinstalled web apps, TUI w
cp "$OMARCHY_PATH/default/hypr/plain-bindings.conf" ~/.config/hypr/bindings.conf
hyprctl reload
# Remove npx stubs
rm -f ~/.local/bin/codex ~/.local/bin/gemini ~/.local/bin/copilot \
~/.local/bin/opencode ~/.local/bin/playwright-cli ~/.local/bin/pi
omarchy-pkg-drop \
aether \
typora \
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
# Restart tmux if running with the latest configuration
if pgrep -x tmux; then
tmux source-file ~/.config/tmux/tmux.conf
fi
+23
View File
@@ -0,0 +1,23 @@
#!/bin/bash
# Reset the trackpad by unbinding and rebinding its driver.
# Covers both driver paths:
# - i2c_hid_acpi (DesignWare I2C, e.g. XPS 14/16 Synaptics trackpad)
# - intel_quicki2c (THC Touch Host Controller)
# Try i2c_hid_acpi path (DesignWare I2C trackpads)
for dev in /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-*; do
[ -e "$dev" ] || continue
I2C_DEVICE=$(basename "$dev")
echo "Resetting $I2C_DEVICE via i2c_hid_acpi unbind/rebind..."
echo "$I2C_DEVICE" | sudo tee /sys/bus/i2c/drivers/i2c_hid_acpi/unbind > /dev/null
sleep 1
echo "$I2C_DEVICE" | sudo tee /sys/bus/i2c/drivers/i2c_hid_acpi/bind > /dev/null
echo "Done"
done
# Also try THC path
if lsmod | grep -q intel_quicki2c; then
echo "Reloading intel_quicki2c..."
sudo modprobe -r intel_quicki2c && sudo modprobe intel_quicki2c
fi
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
# Prompt for sudo once and keep the credential alive in the background.
# Source this script so the trap applies to the calling shell:
# source omarchy-sudo-keepalive
sudo -v
while true; do sudo -n true; sleep 60; done 2>/dev/null &
SUDO_KEEPALIVE_PID=$!
trap "kill $SUDO_KEEPALIVE_PID 2>/dev/null" EXIT
+43
View File
@@ -0,0 +1,43 @@
#!/bin/bash
# Toggle passwordless sudo for the current user.
# First run: enables passwordless sudo for 15 minutes (after confirmation).
# Second run: disables it early.
NOPASSWD_FILE="/etc/sudoers.d/99-omarchy-nopasswd-${USER}"
TIMER_NAME="omarchy-nopasswd-expire-${USER}"
# Safety: if the file exists but the timer doesn't (e.g. after reboot), clean up
if sudo test -f "$NOPASSWD_FILE" && ! systemctl is-active "${TIMER_NAME}.timer" &>/dev/null; then
sudo rm "$NOPASSWD_FILE"
fi
# Check for the file directly — sudo -n can stay cached or be granted by other rules
if sudo test -f "$NOPASSWD_FILE"; then
sudo rm "$NOPASSWD_FILE"
sudo systemctl stop "${TIMER_NAME}.timer" 2>/dev/null
echo "Passwordless sudo has been DISABLED. Sudo will require a password again."
else
echo ""
echo "⚠️ WARNING: This will allow ANY process running as your user to"
echo "execute ANY command as root WITHOUT a password for 15 minutes."
echo ""
echo "This is useful for AI agents that need to run sudo commands,"
echo "but it significantly weakens the security of your system."
echo "Anyone or anything with access to your user account gets full root."
echo ""
echo "Passwordless sudo will automatically disable after 15 minutes."
echo "Run this command again to disable it early."
echo ""
if gum confirm "Enable passwordless sudo for 15 minutes? This is a significant security risk!"; then
echo "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee "$NOPASSWD_FILE" > /dev/null
sudo chmod 440 "$NOPASSWD_FILE"
sudo systemd-run --on-active=15m --timer-property=AccuracySec=1s --unit="$TIMER_NAME" \
rm "$NOPASSWD_FILE"
echo "Passwordless sudo has been ENABLED. It will automatically disable in 15 minutes."
echo "Note: if you restart before then, run omarchy-sudo-passwordless-toggle again to disable it."
else
echo "Aborted. No changes made."
fi
fi
+1 -1
View File
@@ -9,7 +9,7 @@ progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
[[ $progress == "0.00" ]] && progress="0.01"
swayosd-client \
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-icon display-brightness \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"
+1 -1
View File
@@ -9,7 +9,7 @@ progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
[[ $progress == "0.00" ]] && progress="0.01"
swayosd-client \
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-icon keyboard-brightness \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"
+4 -4
View File
@@ -13,12 +13,12 @@ if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
fi
if omarchy-cmd-present chromium; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
chromium --refresh-platform-policy --no-startup-window >/dev/null
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
chromium --refresh-platform-policy --no-startup-window &>/dev/null
fi
if omarchy-cmd-present brave; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
brave --refresh-platform-policy --no-startup-window >/dev/null
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\", \"BrowserColorScheme\": \"device\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
brave --refresh-platform-policy --no-startup-window &>/dev/null
fi
fi
+5 -5
View File
@@ -7,9 +7,8 @@ VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
set_theme() {
local editor_cmd="$1"
local settings_path="$2"
local skip_flag="$3"
omarchy-cmd-present "$editor_cmd" && [[ ! -f $skip_flag ]] || return 0
omarchy-cmd-present "$editor_cmd" || return 0
if [[ -f $VS_CODE_THEME ]]; then
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
@@ -34,6 +33,7 @@ set_theme() {
fi
}
set_theme "code" "$HOME/.config/Code/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-vscode-theme-changes"
set_theme "codium" "$HOME/.config/VSCodium/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-codium-theme-changes"
set_theme "cursor" "$HOME/.config/Cursor/User/settings.json" "$HOME/.local/state/omarchy/toggles/skip-cursor-theme-changes"
! omarchy-toggle-enabled skip-vscode-theme-changes && set_theme "code" "$HOME/.config/Code/User/settings.json"
! omarchy-toggle-enabled skip-vscode-insiders-theme-changes && set_theme "code-insiders" "$HOME/.config/Code - Insiders/User/settings.json"
! omarchy-toggle-enabled skip-codium-theme-changes && set_theme "codium" "$HOME/.config/VSCodium/User/settings.json"
! omarchy-toggle-enabled skip-cursor-theme-changes && set_theme "cursor" "$HOME/.config/Cursor/User/settings.json"
+26
View File
@@ -0,0 +1,26 @@
#!/bin/bash
# Toggle Omarchy features between enabled and disabled
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/$FLAG_NAME"
if [[ -f $FLAG ]]; then
rm $FLAG
[[ -n $DISABLED_NOTIFICATION ]] && notify-send -u low "$DISABLED_NOTIFICATION"
else
mkdir -p "$(dirname $FLAG)"
touch $FLAG
[[ -n $ENABLED_NOTIFICATION ]] && notify-send -u low "$ENABLED_NOTIFICATION"
fi
+4
View File
@@ -0,0 +1,4 @@
#!/bin/bash
# Check if a toggle is enabled (flag file exists)
[[ -f "$HOME/.local/state/omarchy/toggles/$1" ]]
+2 -2
View File
@@ -2,10 +2,10 @@
if pgrep -x hypridle >/dev/null; then
pkill -x hypridle
notify-send "󱫖 Stop locking computer when idle"
notify-send -u low "󱫖 Stop locking computer when idle"
else
uwsm-app -- hypridle >/dev/null 2>&1 &
notify-send "󱫖 Now locking computer when idle"
notify-send -u low "󱫖 Now locking computer when idle"
fi
pkill -RTMIN+9 waybar
+2 -2
View File
@@ -21,10 +21,10 @@ restart_nightlighted_waybar() {
if [[ $CURRENT_TEMP == $OFF_TEMP ]]; then
hyprctl hyprsunset temperature $ON_TEMP
notify-send " Nightlight screen temperature"
notify-send -u low " Nightlight screen temperature"
restart_nightlighted_waybar
else
hyprctl hyprsunset temperature $OFF_TEMP
notify-send " Daylight screen temperature"
notify-send -u low " Daylight screen temperature"
restart_nightlighted_waybar
fi
+2 -2
View File
@@ -3,9 +3,9 @@
makoctl mode -t do-not-disturb
if makoctl mode | grep -q 'do-not-disturb'; then
notify-send "󰂛 Silenced notifications"
notify-send -u low "󰂛 Silenced notifications"
else
notify-send "󰂚 Enabled notifications"
notify-send -u low "󰂚 Enabled notifications"
fi
pkill -RTMIN+10 waybar
+4 -10
View File
@@ -1,12 +1,6 @@
#!/bin/bash
STATE_FILE=~/.local/state/omarchy/toggles/screensaver-off
if [[ -f $STATE_FILE ]]; then
rm -f $STATE_FILE
notify-send "󱄄 Screensaver enabled"
else
mkdir -p "$(dirname $STATE_FILE)"
touch $STATE_FILE
notify-send "󱄄 Screensaver disabled"
fi
omarchy-toggle \
--enabled-notification "󱄄 Screensaver disabled" \
--disabled-notification "󱄄 Screensaver enabled" \
screensaver-off
+4 -10
View File
@@ -1,12 +1,6 @@
#!/bin/bash
STATE_FILE=~/.local/state/omarchy/toggles/suspend-off
if [[ -f $STATE_FILE ]]; then
rm -f $STATE_FILE
notify-send "󰒲 Suspend now available in system menu"
else
mkdir -p "$(dirname $STATE_FILE)"
touch $STATE_FILE
notify-send "󰒲 Suspend removed from system menu"
fi
omarchy-toggle \
--enabled-notification "󰒲 Suspend removed from system menu" \
--disabled-notification "󰒲 Suspend now available in system menu" \
suspend-off
+2
View File
@@ -1,5 +1,7 @@
#!/bin/bash
omarchy-toggle waybar-off
if pgrep -x waybar >/dev/null; then
pkill -x waybar
else
+8 -1
View File
@@ -2,10 +2,17 @@
set -e
# Run the update inside a PTY so pacman/yay keep showing download progress
# while still logging the full session for later analysis.
if [[ -z $OMARCHY_UPDATE_LOGGED ]]; then
script_command=$(printf '%q ' "$0" "$@")
exec env OMARCHY_UPDATE_LOGGED=1 script -qefc "$script_command" "/tmp/omarchy-update.log"
fi
trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR
if [[ $1 == "-y" ]] || omarchy-update-confirm; then
omarchy-snapshot create || (( $? == 127 ))
omarchy-snapshot create || (($? == 127))
omarchy-update-git
omarchy-update-perform
fi
+7
View File
@@ -1,5 +1,8 @@
#!/bin/bash
# Update system firmware using fwupd. Ensures the fwupd EFI binary is installed
# in the ESP so UEFI capsule updates work with the Limine bootloader.
set -e
echo -e "\e[32mUpdate Firmware\e[0m"
@@ -7,5 +10,9 @@ if omarchy-cmd-missing fwupdmgr; then
omarchy-pkg-add fwupd
fi
if [[ -d /sys/firmware/efi ]] && [[ -f /usr/lib/fwupd/efi/fwupdx64.efi ]]; then
sudo install -D /usr/lib/fwupd/efi/fwupdx64.efi /boot/EFI/arch/fwupdx64.efi
fi
fwupdmgr refresh --force
sudo fwupdmgr update
+7
View File
@@ -4,5 +4,12 @@ set -e
echo -e "\e[32mUpdate Omarchy\e[0m"
omarchy-update-time
# Suppress Hyprland config errors while git updates default config files mid-pull
hyprctl keyword debug:suppress_errors true &>/dev/null || true
git -C $OMARCHY_PATH pull --autostash
git -C $OMARCHY_PATH --no-pager diff --check || git -C $OMARCHY_PATH reset --merge
hyprctl reload &>/dev/null || true
+2 -6
View File
@@ -3,13 +3,9 @@
set -e
# Ensure screensaver/sleep doesn't set in during updates
hyprctl dispatch tagwindow +noidle &> /dev/null || true
# Capture update logs
exec > >(tee "/tmp/omarchy-update.log") 2>&1
hyprctl dispatch tagwindow +noidle &>/dev/null || true
# Perform all update steps
omarchy-update-time
omarchy-update-keyring
omarchy-update-available-reset
omarchy-update-system-pkgs
@@ -23,4 +19,4 @@ omarchy-update-analyze-logs
omarchy-update-restart
# Re-enable screensaver/sleep after updates
hyprctl dispatch tagwindow -- -noidle &> /dev/null || true
hyprctl dispatch tagwindow -- -noidle &>/dev/null || true
+7
View File
@@ -1,11 +1,18 @@
#!/bin/bash
echo
if [[ ! -d /usr/lib/modules/$(uname -r) ]]; then
gum confirm "Linux kernel has been updated. Reboot?" && omarchy-system-reboot
elif [[ -f $HOME/.local/state/omarchy/reboot-required ]]; then
gum confirm "Updates require reboot. Ready?" && omarchy-system-reboot
fi
running_hyprland=$(readlink /proc/$(pgrep -x Hyprland)/exe 2>/dev/null)
if [[ $running_hyprland == *"(deleted)"* ]]; then
gum confirm "Hyprland has been updated. Reboot?" && omarchy-system-reboot
fi
for file in "$HOME"/.local/state/omarchy/restart-*-required; do
if [[ -f $file ]]; then
filename=$(basename "$file")
+3
View File
@@ -11,6 +11,9 @@ if gum confirm "Install Voxtype + AI model (~150MB) to enable dictation?"; then
cp $OMARCHY_PATH/default/voxtype/config.toml ~/.config/voxtype/
voxtype setup --download --no-post-install
if omarchy-hw-vulkan; then
voxtype setup gpu --enable || true
fi
voxtype setup systemd
omarchy-restart-waybar
+1 -1
View File
@@ -8,7 +8,7 @@
--light-header-color: #dbdbdb; /* H1-H3 */
--select-text-bg-color: #186a9a;
--accent-color: #4f525a;
--background-color: #101010;
--background-color: #000000;
--font-color: #bbbcbc;
--header-color: #bebebe; /* H4-H6 */
--border-color: #232629;
+2 -1
View File
@@ -20,5 +20,6 @@ decorations = "None"
[keyboard]
bindings = [
{ key = "Insert", mods = "Shift", action = "Paste" },
{ key = "Insert", mods = "Control", action = "Copy" }
{ key = "Insert", mods = "Control", action = "Copy" },
{ key = "Return", mods = "Shift", chars = "\u001B\r" }
]
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
+73 -47
View File
@@ -1,18 +1,18 @@
#? Config file for btop
#? Config file for btop v.1.4.6
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "current"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = True
theme_background = true
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True
truecolor = true
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = False
force_tty = false
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
@@ -22,10 +22,13 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = True
vim_keys = true
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True
rounded_corners = true
#* Use terminal synchronized output sequences to reduce flickering on supported terminals.
terminal_sync = true
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
@@ -60,37 +63,40 @@ update_ms = 2000
proc_sorting = "cpu lazy"
#* Reverse sorting order, True or False.
proc_reversed = False
proc_reversed = false
#* Show processes as a tree.
proc_tree = False
proc_tree = false
#* Use the cpu graph colors in the process list.
proc_colors = True
proc_colors = true
#* Use a darkening gradient in the process list.
proc_gradient = True
proc_gradient = true
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False
proc_per_core = false
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True
proc_mem_bytes = true
#* Show cpu graph for each process.
proc_cpu_graphs = True
proc_cpu_graphs = true
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False
proc_info_smaps = false
#* Show proc box on left side of screen instead of right.
proc_left = False
proc_left = false
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = False
proc_filter_kernel = false
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = False
proc_aggregate = false
#* Should cpu and memory usage display be preserved for dead processes when paused.
keep_dead_proc_usage = false
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
@@ -104,25 +110,28 @@ cpu_graph_lower = "Auto"
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True
cpu_invert_lower = true
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False
cpu_single_graph = false
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False
cpu_bottom = false
#* Shows the system uptime in the CPU box.
show_uptime = True
show_uptime = true
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = true
#* Show cpu temperature.
check_temp = True
check_temp = true
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True
show_coretemp = true
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
@@ -134,63 +143,66 @@ cpu_core_map = ""
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False
base_10_sizes = false
#* Show CPU frequency.
show_cpu_freq = True
show_cpu_freq = true
#* How to calculate CPU frequency, available values: "first", "range", "lowest", "highest" and "average".
freq_mode = "first"
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = True
background_update = true
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = True
mem_graphs = true
#* Show mem box below net box instead of above.
mem_below_net = False
mem_below_net = false
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True
zfs_arc_cached = true
#* If swap memory should be shown in memory box.
show_swap = True
show_swap = true
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = True
swap_disk = true
#* If mem box should be split to also show disks info.
show_disks = True
show_disks = true
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True
only_physical = true
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True
use_fstab = true
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False
zfs_hide_datasets = false
#* Set to true to show available disk space for privileged users.
disk_free_priv = False
disk_free_priv = false
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True
show_io_stat = true
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = False
io_mode = false
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False
io_graph_combined = false
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
@@ -202,29 +214,44 @@ net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True
net_auto = true
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = True
net_sync = true
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = True
show_battery = true
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* Show power stats of battery next to charge indicator.
show_battery_watts = true
#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Automatically save current settings to config file on exit.
save_config_on_exit = true
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True
nvml_measure_pcie_speeds = true
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = true
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True
gpu_mirror_graph = true
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
shown_gpus = "nvidia amd intel"
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
@@ -243,4 +270,3 @@ custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""
+7 -1
View File
@@ -1,6 +1,7 @@
# Application bindings
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)"
bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" tmux new
bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" bash -c "tmux attach || tmux new -s Work"
bindd = SUPER SHIFT, RETURN, Browser, exec, omarchy-launch-browser
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"
bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser
@@ -31,3 +32,8 @@ bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/c
# Overwrite existing bindings, like putting Omarchy Menu on Super + Space
# unbind = SUPER, SPACE
# bindd = SUPER, SPACE, Omarchy menu, exec, omarchy-menu
# Logitech MX Keys
# bind = SUPER SHIFT, S, exec, omarchy-cmd-screenshot # Print Screen Button
# bind = SUPER, H, exec, voxtype record toggle # Dictation Button
# bind = SUPER, PERIOD, exec, omarchy-launch-walker -m symbols # Emoji Button
+3
View File
@@ -19,5 +19,8 @@ source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/autostart.conf
# Toggle config flags dynamically
source = ~/.local/state/omarchy/toggles/hypr/*.conf
# Add any other personal Hyprland configuration below
# windowrule = workspace 5, match:class qemu
+6 -2
View File
@@ -11,14 +11,14 @@ input {
# Change speed of keyboard repeat
repeat_rate = 40
repeat_delay = 600
repeat_delay = 250
# Start with numlock on by default
numlock_by_default = true
# Increase sensitivity for mouse/trackpad (default: 0)
# sensitivity = 0.35
# Turn off mouse acceleration (default: false)
# force_no_accel = true
@@ -47,3 +47,7 @@ windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2
# Enable touchpad gestures for changing workspaces
# See https://wiki.hyprland.org/Configuring/Gestures/
# gesture = 3, horizontal, workspace
# Enable touchpad gestures for moving focus (helpful on scrolling layout)
# gesture = 3, left, dispatcher, movefocus, l
# gesture = 3, right, dispatcher, movefocus, r
+4 -4
View File
@@ -7,8 +7,8 @@ general {
# gaps_out = 0
# border_size = 0
# Use master layout instead of dwindle
# layout = master
# Change to niri-like side-scrolling layout
# layout = scrolling
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
@@ -27,8 +27,8 @@ animations {
# enabled = no
}
# https://wiki.hypr.land/Configuring/Dwindle-Layout/
dwindle {
# https://wiki.hypr.land/Configuring/Variables/#layout
layout {
# Avoid overly wide single-window layouts on wide screens
# single_window_aspect_ratio = 1 1
}
+3
View File
@@ -21,3 +21,6 @@ monitor=,preferred,auto,auto
# Example for Framework 13 w/ 6K XDR Apple display
# monitor = DP-5, 6016x3384@60, auto, 2
# monitor = eDP-1, 2880x1920@120, auto, 2
# Disable the second ghost monitor on an Apple 6K XDR over Thunderbolt
# monitor=DP-2,disable
@@ -3,7 +3,7 @@
# relative paths are resolved relative to the location of the config file
stylesheets: ["../omarchy/current/theme/hyprland-preview-share-picker.css"]
# default page selected when the picker is opened
default_page: windows
default_page: outputs
window:
# height of the application window
+10
View File
@@ -0,0 +1,10 @@
#!/bin/bash
# This hook is called with the current battery percentage when the low battery
# notification is sent. To put it into use, remove .sample from the name.
SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga"
if omarchy-cmd-present mpv && [[ -f $SOUND_FILE ]]; then
mpv --no-video "$SOUND_FILE" >/dev/null 2>&1
fi
+1 -1
View File
@@ -4,4 +4,4 @@
# To put it into use, remove .sample from the name.
# Example: Show the name of the theme that was just set.
# notify-send "New font" "Your new font is $1"
# notify-send -u low "New font" "Your new font is $1"
+1 -1
View File
@@ -4,4 +4,4 @@
# To put it into use, remove .sample from the name.
# Example: Show notification after the system has been updated.
# notify-send "Update Performed" "Your system is now up to date"
# notify-send -u low "Update Performed" "Your system is now up to date"
+1 -1
View File
@@ -4,4 +4,4 @@
# To put it into use, remove .sample from the name.
# Example: Show the name of the theme that was just set.
# notify-send "New theme" "Your new theme is $1"
# notify-send -u low "New theme" "Your new theme is $1"
+12 -2
View File
@@ -4,7 +4,7 @@ set -g prefix2 C-b
bind C-Space send-prefix
# Reload config
bind q source-file ~/.config/tmux/tmux.conf
bind q source-file ~/.config/tmux/tmux.conf \; display "Configuration reloaded"
# Vi mode for copy
setw -g mode-keys vi
@@ -41,6 +41,11 @@ bind -n M-7 select-window -t 7
bind -n M-8 select-window -t 8
bind -n M-9 select-window -t 9
bind -n M-Left select-window -t -1
bind -n M-Right select-window -t +1
bind -n M-S-Left swap-window -t -1 \; select-window -t -1
bind -n M-S-Right swap-window -t +1 \; select-window -t +1
# Session controls
bind R command-prompt -I "#S" "rename-session -- '%%'"
bind C new-session -c "#{pane_current_path}"
@@ -48,6 +53,9 @@ bind K kill-session
bind P switch-client -p
bind N switch-client -n
bind -n M-Up switch-client -p
bind -n M-Down switch-client -n
# General
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",*:RGB"
@@ -69,11 +77,13 @@ set -g status-interval 5
set -g status-left-length 30
set -g status-right-length 50
set -g window-status-separator ""
set -gw automatic-rename on
set -gw automatic-rename-format '#{b:pane_current_path}'
# Theme
set -g status-style "bg=default,fg=default"
set -g status-left "#[fg=black,bg=blue,bold] #S #[bg=default] "
set -g status-right "#[fg=blue]#{?client_prefix,PREFIX ,}#[fg=brightblack]#h "
set -g status-right "#[fg=blue]#{?pane_in_mode,COPY ,}#{?client_prefix,PREFIX ,}#{?window_zoomed_flag,ZOOM ,}#[fg=brightblack]#h "
set -g window-status-format "#[fg=brightblack] #I:#W "
set -g window-status-current-format "#[fg=blue,bold] #I:#W "
set -g pane-border-style "fg=brightblack"
+2 -2
View File
@@ -2,10 +2,10 @@
# Ensure Omarchy bins are in the path
export OMARCHY_PATH=$HOME/.local/share/omarchy
export PATH=$OMARCHY_PATH/bin:$PATH
export PATH=$OMARCHY_PATH/bin:$PATH:$HOME/.local/bin
# Set default terminal and editor
source ~/.config/uwsm/default
# Activate mise if present on the system
omarchy-cmd-present mise && eval "$(mise activate bash)"
omarchy-cmd-present mise && eval "$(mise activate bash --shims)"
+2 -2
View File
@@ -72,8 +72,8 @@
"format-wifi": "{icon}",
"format-ethernet": "󰀂",
"format-disconnected": "󰤮",
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-wifi": "{essid} ({frequency} GHz)",
"tooltip-format-ethernet": "Connected",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"spacing": 1,
+17 -6
View File
@@ -6,18 +6,29 @@ if command -v eza &> /dev/null; then
alias lta='lt -a'
fi
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
if [[ "$TERM" == "xterm-kitty" ]]; then
alias ff="fzf --preview 'case \$(file --mime-type -b {}) in image/*) kitty icat --clear --transfer-mode=memory --stdin=no --place=\${FZF_PREVIEW_COLUMNS}x\${FZF_PREVIEW_LINES}@0x0 {} ;; *) bat --style=numbers --color=always {} ;; esac'"
else
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
fi
alias eff='$EDITOR "$(ff)"'
sff() { if [ $# -eq 0 ]; then echo "Usage: sff <destination> (e.g. sff host:/tmp/)"; return 1; fi; local file; file=$(find . -type f -printf '%T@\t%p\n' | sort -rn | cut -f2- | ff) && [ -n "$file" ] && scp "$file" "$1"; }
if command -v zoxide &> /dev/null; then
alias cd="zd"
zd() {
if [ $# -eq 0 ]; then
builtin cd ~ && return
elif [ -d "$1" ]; then
builtin cd "$1"
if (( $# == 0 )); then
builtin cd ~ || return
elif [[ -d $1 ]]; then
builtin cd "$1" || return
else
z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found"
if ! z "$@"; then
echo "Error: Directory not found"
return 1
fi
printf "\U000F17A9 "
pwd
fi
}
fi
+4
View File
@@ -1,3 +1,7 @@
# Editor used by CLI
export SUDO_EDITOR="$EDITOR"
export BAT_THEME=ansi
# Duplicated from .config/uwsm/env so SSH works too
export OMARCHY_PATH=$HOME/.local/share/omarchy
export PATH=$OMARCHY_PATH/bin:$PATH:$HOME/.local/bin
+13 -5
View File
@@ -13,23 +13,31 @@ img2jpg() {
img="$1"
shift
magick "$img" "$@" -quality 95 -strip "${img%.*}-converted.jpg"
magick "$img" "$@" -quality 85 -strip "${img%.*}-converted.jpg"
}
# Transcode any image to a small JPG (max 1080px wide) that's great for sharing online
# Transcode any image to a small JPG (max 1080px wide)
img2jpg-small() {
img="$1"
shift
magick "$img" "$@" -resize 1080x\> -quality 95 -strip "${img%.*}-small.jpg"
magick "$img" "$@" -resize 1080x\> -quality 85 -strip "${img%.*}-small.jpg"
}
# Transcode any image to a medium JPG (max 1800px wide) that's great for sharing online
# Transcode any image to a 4K JPG (max 2160px wide)
img2jpg-medium() {
img="$1"
shift
magick "$img" "$@" -resize 1800x\> -quality 95 -strip "${img%.*}-medium.jpg"
magick "$img" "$@" -resize 2160x\> -quality 85 -strip "${img%.*}-medium.jpg"
}
# Transcode any image to a 6K JPG (max 3160px wide)
img2jpg-large() {
img="$1"
shift
magick "$img" "$@" -resize 3160x\> -quality 85 -strip "${img%.*}-large.jpg"
}
# Transcode any image to compressed-but-lossless PNG
+36
View File
@@ -0,0 +1,36 @@
# Create a new worktree and branch from within current git directory.
ga() {
if [[ -z "$1" ]]; then
echo "Usage: ga [branch name]"
return 1
fi
local branch="$1"
local base="$(basename "$PWD")"
local wt_path="../${base}--${branch}"
git worktree add -b "$branch" "$wt_path"
mise trust "$wt_path"
cd "$wt_path"
}
# Remove worktree and branch from within active worktree directory.
gd() {
if gum confirm "Remove worktree and branch?"; then
local cwd base branch root worktree
cwd="$(pwd)"
worktree="$(basename "$cwd")"
# split on first `--`
root="${worktree%%--*}"
branch="${worktree#*--}"
# Protect against accidentally nuking a non-worktree directory
if [[ "$root" != "$worktree" ]]; then
cd "../$root"
git worktree remove "$cwd" --force || return 1
git branch -D "$branch"
fi
fi
}
+2 -5
View File
@@ -2,10 +2,7 @@ if command -v mise &> /dev/null; then
eval "$(mise activate bash)"
fi
if command -v starship &> /dev/null; then
# clear stale readline state before rendering prompt (prevents artifacts in prompt after abnormal exits like SIGQUIT)
__sanitize_prompt() { printf '\r\033[K'; }
PROMPT_COMMAND="__sanitize_prompt${PROMPT_COMMAND:+;$PROMPT_COMMAND}"
if [[ $- == *i* ]] && [[ ${TERM:-} != "dumb" ]] && command -v starship &> /dev/null; then
eval "$(starship init bash)"
fi
@@ -14,7 +11,7 @@ if command -v zoxide &> /dev/null; then
fi
if command -v try &> /dev/null; then
eval "$(SHELL=/bin/bash try init ~/Work/tries)"
eval "$(SHELL=/bin/bash command try init ~/Work/tries)"
fi
if command -v fzf &> /dev/null; then

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