Compare commits

...

93 Commits

Author SHA1 Message Date
David Heinemeier Hansson
69dbee75cd Match existing term 2026-01-31 21:59:32 +01:00
David Heinemeier Hansson
d9c5df29d1 DRY 2026-01-31 21:58:29 +01:00
David Heinemeier Hansson
7c9708d647 Respect rc too 2026-01-31 21:52:09 +01:00
David Heinemeier Hansson
5a9f0318e8 Respect rc 2026-01-31 21:51:18 +01:00
David Heinemeier Hansson
ab4694e3f5 Introduce rc channel 2026-01-31 21:49:07 +01:00
David Heinemeier Hansson
bebf14a18c In order of appearance 2026-01-31 18:14:47 +01:00
Bhavesh Sooka
ff2a47c67e feat: allow overloading for the about menu action via the ~/.config/omarchy/extensions/menu.sh file. Example included (#4311)
Co-authored-by: Bhavesh Sooka <bhavesh@synthesis.co.za>
2026-01-31 18:14:25 +01:00
schwepmo
d9bd4a8db3 Open Nautilus in cwd of terminal (#4331)
* feat: Open Nautilus (files) in cwd of terminal using omarchy-cmd-termina-cwd

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

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

* Check for battery presence before installing power profile rules

* Add battery presence check script and update powerprofilesctl rules

* fix indentation

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

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

* Excess CR

---------

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

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

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

* Remove the no-longer-needed yq packages

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-01-27 11:32:37 +01:00
Marco
768c553c4c Add missing icons to Development remove menus (#4339)
* Add missing icons to Development remove menus

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

- show_remove_development_menu
- show_remove_javascript_menu
- show_remove_php_menu
- show_remove_elixir_menu

---------

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

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

* Use correct exit

* Simplify

* Wording

* Revise switching process

* Spacing

* These are sudo actions

* Make it exe

* No need for extensions

Matches existing style

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

* Prevent race condition

* Reminder to add to OPR
2026-01-19 17:11:23 -04:00
David Heinemeier Hansson
4701726c83 Split out removing orphan packages as well
And make sure failed AUR update doesn't fail the update entirely
2026-01-19 12:21:06 -05:00
David Heinemeier Hansson
bfc3c69cf1 Update AUR packages after system pkgs + migrate
As AUR packages need local compiling and that might fail. Which
shouldn't prevent migrations from running.
2026-01-19 10:49:46 -05:00
David Heinemeier Hansson
21514dc577 Turn audio soft mixing into an opt-in toggle
It causes issues on some machines, but is required on the Asus G14
2026-01-17 14:43:59 -05:00
David Heinemeier Hansson
5ff76df5e4 Ensure default routes don't overwrite the ffix 2026-01-14 19:53:28 -05:00
David Heinemeier Hansson
bab0004d08 Fix volume controls on Asus G14 2026-01-14 17:40:53 -05:00
David Heinemeier Hansson
93079858f1 Extract shared swayosd helper 2026-01-14 17:21:10 -05:00
David Heinemeier Hansson
4287472e02 Simplify 2026-01-14 17:11:50 -05:00
David Heinemeier Hansson
291786d36a Set brightness in a more broadly compatible way
Fixes brightness setting on the Asus G14
2026-01-14 16:37:22 -05:00
Ryan Hughes
ed9a4a45ba Merge pull request #4247 from incpo/feat/webcam-source-selection
Add webcam source selection for screen recording
2026-01-13 18:31:44 -05:00
Pierre Olivier Martel
05b82cbee5 Add headset icon to pulseaudio module in waybar (#4244) 2026-01-13 11:28:04 +01:00
incpo
697d09022a Add webcam source selection for screen recording
- Add --webcam-device argument to omarchy-cmd-screenrecord
- Auto-detect first available webcam if none specified
- Add webcam selection UI in omarchy-menu when multiple cameras available
- Skip selection UI when only one webcam is detected
2026-01-13 12:48:00 +03:00
Yaroslav Yenkala
1ff31cfe41 Automatic fallback to Alacritty for legacy GPUs when install Omarchy (#3711)
* Use alacritty when legacy gpu when install omarchy

* Inline legacy GPU detection, install Alacritty only when needed
2026-01-12 12:24:16 +01:00
David Heinemeier Hansson
cd995319bf Add img2jpg-medium 2026-01-12 11:50:07 +01:00
David Heinemeier Hansson
281f0b86d2 Add new default wallpaper for Tokyo Night
Created by @Maxteabag
Closes #4221
2026-01-12 11:20:33 +01:00
David Heinemeier Hansson
55668f4c6d Use just a single capture menu instead 2026-01-12 10:59:55 +01:00
David Heinemeier Hansson
9c71962a16 Add Super + Ctrl + P (and friends) as alternative keybinds for captures on keyboards without a printscr key
Closes #4051
2026-01-12 10:57:04 +01:00
Ryan Hughes
7d77500c33 Eliminate rdp check causing black screen 2026-01-10 22:39:01 -05:00
Ryan Hughes
fb1d9ccfa3 Merge pull request #4217 from arcangelo7/fix/windows-vm-clipboard-sharing
Enable clipboard sharing for Windows VM
2026-01-10 22:38:54 -05:00
Ryan Hughes
2f75e9c7ec Merge pull request #3958 from felixzsh/fix-windows-vm-lauch-sleep
fix: dynamic Windows VM boot synchronization for RDP
2026-01-10 22:17:10 -05:00
felixzsh
b22ed8448a fix: dynamic windows-vm boot detection
The current 5-second sleep is not enough for all hardware. On my PC (and
likely many others), Windows takes longer to initialize. If the script
tries to connect via RDP before Windows is fully ready, the connection
fails or hangs.

I replaced the fixed sleep with a dynamic loop that checks the Docker
logs for the "Windows started successfully" message. This ensures the
RDP client only starts once Windows has confirmed it's ready, making the
launch process much more reliable across different hardware specs.

Fixes #2599
2026-01-10 22:14:19 -05:00
David Heinemeier Hansson
a0d2f007fd Specialize waybar to match the backgrounds better 2026-01-10 21:08:57 +01:00
Arcangelo Massari
955844cb5d feat(windows-vm): enable clipboard sharing in RDP session
Add /clipboard flag to xfreerdp3 command to enable bidirectional
clipboard sharing between Windows VM and Omarchy.
2026-01-10 19:49:54 +01:00
David Heinemeier Hansson
295c7c91fc Fix concatenation 2026-01-10 14:33:36 +01:00
Will Hampson
bc1a531534 fix: skill name must match case of skill directory exactly (#4162) 2026-01-09 15:40:56 +01:00
Dominik
4cec214a53 Replace yq with pure bash for TOML parsing (#4171)
* Replace yq with pure bash for TOML parsing

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

* Remove the no-longer-needed yq packages

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-01-09 15:39:07 +01:00
David Heinemeier Hansson
0b5ba427b2 Merge branch 'master' into dev 2026-01-09 15:32:56 +01:00
David Heinemeier Hansson
53b8fc4257 Ensure we reset the DBs with the Omarchy versions 2026-01-09 14:34:38 +01:00
David Heinemeier Hansson
dcb9527770 Ensure we reset the DBs with the Omarchy versions 2026-01-09 14:34:29 +01:00
Ryan Hughes
6c35e840f5 Version bump 2026-01-08 22:27:03 -05:00
Ryan Hughes
da984ce243 Fix infinite waiting 2026-01-08 22:26:52 -05:00
Ryan Hughes
65bafa4f3b Bump 2026-01-08 19:33:06 -05:00
Ryan Hughes
f5a35a1afe Bump 2026-01-08 19:32:32 -05:00
Ryan Hughes
c9b3e13df8 Merge pull request #4174 from basecamp/dev
v3.3.3
2026-01-08 18:51:48 -05:00
Ryan Hughes
9775b01070 Don't update gcc14 2026-01-08 18:49:41 -05:00
Ryan Hughes
b42dcf098b Merge pull request #4170 from basecamp/dev
v3.3.2
2026-01-08 17:18:41 -05:00
Ryan Hughes
6ae31aedae Update message 2026-01-08 17:17:32 -05:00
Ryan Hughes
63b0cd64bd Add update logger w/ analysis 2026-01-08 16:52:49 -05:00
Ryan Hughes
bf779a6bbc Add additional hardening for missing headers 2026-01-08 15:28:56 -05:00
Ryan Hughes
774b4700ef Extra hardening the driver swap 2026-01-08 13:44:34 -05:00
Ryan Hughes
400a87955e Use omarchy-pkg-add 2026-01-08 13:41:20 -05:00
David Heinemeier Hansson
fe48a16a90 Correct the accent color 2026-01-08 15:02:05 +01:00
82 changed files with 862 additions and 158 deletions

10
bin/omarchy-battery-present Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
for bat in /sys/class/power_supply/BAT*; do
[[ -r "$bat/present" ]] &&
[[ "$(cat "$bat/present")" == "1" ]] &&
[[ "$(cat "$bat/type")" == "Battery" ]] &&
exit 0
done
exit 1

View File

@@ -3,14 +3,15 @@
# Set the branch for Omarchy's git repository. # Set the branch for Omarchy's git repository.
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-branch-set [master|dev]" echo "Usage: omarchy-branch-set [master|rc|dev]"
exit 1 exit 1
else else
branch="$1" branch="$1"
fi fi
case "$branch" in if [[ "$branch" != "master" && "$branch" != "rc" && "$branch" != "edge" ]]; then
"master") git -C $OMARCHY_PATH switch master ;; echo "Error: Invalid branch '$branch'. Must be one of: master, rc, edge"
"dev") git -C $OMARCHY_PATH switch dev ;; exit 1
*) echo "Unknown branch: $branch"; exit 1; ;; fi
esac
git -C $OMARCHY_PATH switch $branch

21
bin/omarchy-brightness-display Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/bash
# Adjust brightness on the most likely display device.
# Usage: omarchy-brightness-display <step>
step="${1:-+5%}"
# Start with the first possible output, then refine to the most likely given an order heuristic.
device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)"
for candidate in amdgpu_bl* intel_backlight acpi_video*; do
if [[ -e "/sys/class/backlight/$candidate" ]]; then
device="$candidate"
break
fi
done
# Set the actual brightness of the display device.
brightnessctl -d "$device" set "$step" >/dev/null
# Use SwayOSD to display the new brightness setting.
omarchy-swayosd-brightness "$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')"

View File

@@ -0,0 +1,12 @@
#!/bin/bash
# Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
if [[ $# -eq 0 ]]; then
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
else
device="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
sudo asdcontrol "$device" -- "$1" >/dev/null
value="$(sudo asdcontrol "$device" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
omarchy-swayosd-brightness "$(( value * 100 / 60000 ))"
fi

40
bin/omarchy-brightness-keyboard Executable file
View File

@@ -0,0 +1,40 @@
#!/bin/bash
# Adjust keyboard backlight brightness using available steps.
# Usage: omarchy-brightness-keyboard <up|down>
direction="${1:-up}"
# Find keyboard backlight device (look for *kbd_backlight* pattern in leds class).
device=""
for candidate in /sys/class/leds/*kbd_backlight*; do
if [[ -e "$candidate" ]]; then
device="$(basename "$candidate")"
break
fi
done
if [[ -z "$device" ]]; then
echo "No keyboard backlight device found" >&2
exit 1
fi
# Get current and max brightness to determine step size.
max_brightness="$(brightnessctl -d "$device" max)"
current_brightness="$(brightnessctl -d "$device" get)"
# Calculate step as one unit (keyboards typically have discrete levels like 0-3).
if [[ "$direction" == "up" ]]; then
new_brightness=$((current_brightness + 1))
[[ $new_brightness -gt $max_brightness ]] && new_brightness=$max_brightness
else
new_brightness=$((current_brightness - 1))
[[ $new_brightness -lt 0 ]] && new_brightness=0
fi
# Set the new brightness.
brightnessctl -d "$device" set "$new_brightness" >/dev/null
# Use SwayOSD to display the new brightness setting.
percent=$((new_brightness * 100 / max_brightness))
omarchy-swayosd-brightness "$percent"

View File

@@ -14,7 +14,7 @@
# and people with a lot of experience managing Linux systems. # and people with a lot of experience managing Linux systems.
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-channel-set [stable|edge|dev]" echo "Usage: omarchy-channel-set [stable|rc|edge|dev]"
exit 1 exit 1
else else
channel="$1" channel="$1"
@@ -22,6 +22,7 @@ fi
case "$channel" in case "$channel" in
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" && sudo pacman -Suu --noconfirm ;; "stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" && sudo pacman -Suu --noconfirm ;;
"rc") omarchy-branch-set "rc" && omarchy-refresh-pacman "rc" && sudo pacman -Suu --noconfirm ;;
"edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;; "edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;;
"dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;; "dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;;
*) echo "Unknown channel: $channel"; exit 1; ;; *) echo "Unknown channel: $channel"; exit 1; ;;

View File

@@ -1,16 +0,0 @@
#!/bin/bash
# Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol.
if [[ $# -eq 0 ]]; then
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
else
DEVICE="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)"
sudo asdcontrol "$DEVICE" -- "$1" >/dev/null
VALUE="$(sudo asdcontrol "$DEVICE" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
swayosd-client \
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
--custom-icon display-brightness \
--custom-progress "$(awk -v v="$VALUE" 'BEGIN{printf "%.2f", v/60000}')" \
--custom-progress-text "$(( VALUE * 100 / 60000 ))%"
fi

View File

@@ -14,6 +14,7 @@ fi
DESKTOP_AUDIO="false" DESKTOP_AUDIO="false"
MICROPHONE_AUDIO="false" MICROPHONE_AUDIO="false"
WEBCAM="false" WEBCAM="false"
WEBCAM_DEVICE=""
STOP_RECORDING="false" STOP_RECORDING="false"
for arg in "$@"; do for arg in "$@"; do
@@ -21,6 +22,7 @@ for arg in "$@"; do
--with-desktop-audio) DESKTOP_AUDIO="true" ;; --with-desktop-audio) DESKTOP_AUDIO="true" ;;
--with-microphone-audio) MICROPHONE_AUDIO="true" ;; --with-microphone-audio) MICROPHONE_AUDIO="true" ;;
--with-webcam) WEBCAM="true" ;; --with-webcam) WEBCAM="true" ;;
--webcam-device=*) WEBCAM_DEVICE="${arg#*=}" ;;
--stop-recording) STOP_RECORDING="true" --stop-recording) STOP_RECORDING="true"
esac esac
done done
@@ -32,6 +34,15 @@ cleanup_webcam() {
start_webcam_overlay() { start_webcam_overlay() {
cleanup_webcam 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')
if [[ -z "$WEBCAM_DEVICE" ]]; then
notify-send "No webcam devices found" -u critical -t 3000
return 1
fi
fi
# Get monitor scale # Get monitor scale
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale') local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
@@ -41,7 +52,7 @@ start_webcam_overlay() {
# Try preferred 16:9 resolutions in order, use first available # Try preferred 16:9 resolutions in order, use first available
local preferred_resolutions=("640x360" "1280x720" "1920x1080") local preferred_resolutions=("640x360" "1280x720" "1920x1080")
local video_size_arg="" local video_size_arg=""
local available_formats=$(v4l2-ctl --list-formats-ext -d /dev/video0 2>/dev/null) local available_formats=$(v4l2-ctl --list-formats-ext -d "$WEBCAM_DEVICE" 2>/dev/null)
for resolution in "${preferred_resolutions[@]}"; do for resolution in "${preferred_resolutions[@]}"; do
if echo "$available_formats" | grep -q "$resolution"; then if echo "$available_formats" | grep -q "$resolution"; then
@@ -50,7 +61,7 @@ start_webcam_overlay() {
fi fi
done done
ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \ ffplay -f v4l2 $video_size_arg -framerate 30 "$WEBCAM_DEVICE" \
-vf "scale=${target_width}:-1" \ -vf "scale=${target_width}:-1" \
-window_title "WebcamOverlay" \ -window_title "WebcamOverlay" \
-noborder \ -noborder \

View File

@@ -67,4 +67,8 @@ sudo cp "$OMARCHY_PATH/default/systemd/hibernate.conf" /etc/systemd/sleep.conf.d
echo "Regenerating initramfs..." echo "Regenerating initramfs..."
sudo limine-mkinitcpio sudo limine-mkinitcpio
echo "Hibernation enabled" echo
if gum confirm "Reboot to enable hiberation?"; then
omarchy-cmd-reboot
fi

17
bin/omarchy-install-geforce-now Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
# Install and launch Geforce Now.
set -e
omarchy-pkg-add flatpak
cd /tmp
# Download and run GeForce NOW
curl -LO https://international.download.nvidia.com/GFNLinux/GeForceNOWSetup.bin
chmod +x GeForceNOWSetup.bin
./GeForceNOWSetup.bin
# Ensure a separate browser process not started by GFN is available.
# If not, it seems like GFN has a tendency to hang on login.
setsid omarchy-launch-browser

View File

@@ -88,10 +88,11 @@ show_learn_menu() {
} }
show_trigger_menu() { show_trigger_menu() {
case $(menu "Trigger" " Capture\n Share\n󰔎 Toggle") in case $(menu "Trigger" " Capture\n Share\n󰔎 Toggle\n Hardware") in
*Capture*) show_capture_menu ;; *Capture*) show_capture_menu ;;
*Share*) show_share_menu ;; *Share*) show_share_menu ;;
*Toggle*) show_toggle_menu ;; *Toggle*) show_toggle_menu ;;
*Hardware*) show_hardware_menu ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
} }
@@ -113,13 +114,43 @@ show_screenshot_menu() {
esac esac
} }
get_webcam_list() {
v4l2-ctl --list-devices 2>/dev/null | while IFS= read -r line; do
if [[ "$line" != $'\t'* && -n "$line" ]]; then
local name="$line"
IFS= read -r device || break
device=$(echo "$device" | tr -d '\t' | head -1)
[[ -n "$device" ]] && echo "$device $name"
fi
done
}
show_webcam_select_menu() {
local devices=$(get_webcam_list)
local count=$(echo "$devices" | grep -c . 2>/dev/null || echo 0)
if [[ -z "$devices" || "$count" -eq 0 ]]; then
notify-send "No webcam devices found" -u critical -t 3000
return 1
fi
if [[ "$count" -eq 1 ]]; then
echo "$devices" | awk '{print $1}'
else
menu "Select Webcam" "$devices" | awk '{print $1}'
fi
}
show_screenrecord_menu() { show_screenrecord_menu() {
omarchy-cmd-screenrecord --stop-recording && exit 0 omarchy-cmd-screenrecord --stop-recording && exit 0
case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;; *"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;; *"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
*"With desktop + microphone audio + webcam") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam ;; *"With desktop + microphone audio + webcam")
local device=$(show_webcam_select_menu) || { back_to show_capture_menu; return; }
omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
;;
*) back_to show_capture_menu ;; *) back_to show_capture_menu ;;
esac esac
} }
@@ -143,6 +174,13 @@ show_toggle_menu() {
esac esac
} }
show_hardware_menu() {
case $(menu "Toggle" " Hybrid GPU") in
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
*) show_trigger_menu ;;
esac
}
show_style_menu() { show_style_menu() {
case $(menu "Style" "󰸌 Theme\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in case $(menu "Style" "󰸌 Theme\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in
*Theme*) show_theme_menu ;; *Theme*) show_theme_menu ;;
@@ -317,8 +355,9 @@ show_install_ai_menu() {
} }
show_install_gaming_menu() { show_install_gaming_menu() {
case $(menu "Install" " Steam\n RetroArch [AUR]\n󰍳 Minecraft\n󰖺 Xbox Controller [AUR]") in case $(menu "Install" " Steam\n󰢹 NVIDIA GeForce NOW\n RetroArch [AUR]\n󰍳 Minecraft\n󰖺 Xbox Controller [AUR]") in
*Steam*) present_terminal omarchy-install-steam ;; *Steam*) present_terminal omarchy-install-steam ;;
*GeForce*) present_terminal omarchy-install-geforce-now ;;
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;; *RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;; *Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
*Xbox*) present_terminal omarchy-install-xbox-controllers ;; *Xbox*) present_terminal omarchy-install-xbox-controllers ;;
@@ -407,7 +446,7 @@ show_remove_menu() {
} }
show_remove_development_menu() { show_remove_development_menu() {
case $(menu "Remove" "󰫏 Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in case $(menu "Remove" "󰫏 Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in
*Rails*) present_terminal "omarchy-remove-dev-env ruby" ;; *Rails*) present_terminal "omarchy-remove-dev-env ruby" ;;
*JavaScript*) show_remove_javascript_menu ;; *JavaScript*) show_remove_javascript_menu ;;
*Go*) present_terminal "omarchy-remove-dev-env go" ;; *Go*) present_terminal "omarchy-remove-dev-env go" ;;
@@ -425,7 +464,7 @@ show_remove_development_menu() {
} }
show_remove_javascript_menu() { show_remove_javascript_menu() {
case $(menu "Remove" " Node.js\n Bun\n Deno") in case $(menu "Remove" " Node.js\n Bun\n Deno") in
*Node*) present_terminal "omarchy-remove-dev-env node" ;; *Node*) present_terminal "omarchy-remove-dev-env node" ;;
*Bun*) present_terminal "omarchy-remove-dev-env bun" ;; *Bun*) present_terminal "omarchy-remove-dev-env bun" ;;
*Deno*) present_terminal "omarchy-remove-dev-env deno" ;; *Deno*) present_terminal "omarchy-remove-dev-env deno" ;;
@@ -434,7 +473,7 @@ show_remove_javascript_menu() {
} }
show_remove_php_menu() { show_remove_php_menu() {
case $(menu "Remove" " PHP\n Laravel\n Symfony") in case $(menu "Remove" " PHP\n Laravel\n Symfony") in
*PHP*) present_terminal "omarchy-remove-dev-env php" ;; *PHP*) present_terminal "omarchy-remove-dev-env php" ;;
*Laravel*) present_terminal "omarchy-remove-dev-env laravel" ;; *Laravel*) present_terminal "omarchy-remove-dev-env laravel" ;;
*Symfony*) present_terminal "omarchy-remove-dev-env symfony" ;; *Symfony*) present_terminal "omarchy-remove-dev-env symfony" ;;
@@ -443,7 +482,7 @@ show_remove_php_menu() {
} }
show_remove_elixir_menu() { show_remove_elixir_menu() {
case $(menu "Remove" " Elixir\n Phoenix") in case $(menu "Remove" " Elixir\n Phoenix") in
*Elixir*) present_terminal "omarchy-remove-dev-env elixir" ;; *Elixir*) present_terminal "omarchy-remove-dev-env elixir" ;;
*Phoenix*) present_terminal "omarchy-remove-dev-env phoenix" ;; *Phoenix*) present_terminal "omarchy-remove-dev-env phoenix" ;;
*) show_remove_development_menu ;; *) show_remove_development_menu ;;
@@ -467,8 +506,9 @@ show_update_menu() {
} }
show_update_channel_menu() { show_update_channel_menu() {
case $(menu "Update channel" "🟢 Stable\n🟡 Edge\n🔴 Dev") in case $(menu "Update channel" "🟢 Stable\n🟡 RC\n🟠 Edge\n🔴 Dev") in
*Stable*) present_terminal "omarchy-channel-set stable" ;; *Stable*) present_terminal "omarchy-channel-set stable" ;;
*RC*) present_terminal "omarchy-channel-set rc" ;;
*Edge*) present_terminal "omarchy-channel-set edge" ;; *Edge*) present_terminal "omarchy-channel-set edge" ;;
*Dev*) present_terminal "omarchy-channel-set dev" ;; *Dev*) present_terminal "omarchy-channel-set dev" ;;
*) show_update_menu ;; *) show_update_menu ;;
@@ -516,6 +556,10 @@ show_update_password_menu() {
esac esac
} }
show_about() {
omarchy-launch-about
}
show_system_menu() { show_system_menu() {
local options=" Lock\n󱄄 Screensaver" local options=" Lock\n󱄄 Screensaver"
[ -f ~/.local/state/omarchy/toggles/suspend-on ] && options="$options\n󰒲 Suspend" [ -f ~/.local/state/omarchy/toggles/suspend-on ] && options="$options\n󰒲 Suspend"
@@ -543,6 +587,7 @@ go_to_menu() {
*learn*) show_learn_menu ;; *learn*) show_learn_menu ;;
*trigger*) show_trigger_menu ;; *trigger*) show_trigger_menu ;;
*share*) show_share_menu ;; *share*) show_share_menu ;;
*capture*) show_capture_menu ;;
*style*) show_style_menu ;; *style*) show_style_menu ;;
*theme*) show_theme_menu ;; *theme*) show_theme_menu ;;
*screenshot*) show_screenshot_menu ;; *screenshot*) show_screenshot_menu ;;
@@ -552,7 +597,7 @@ go_to_menu() {
*install*) show_install_menu ;; *install*) show_install_menu ;;
*remove*) show_remove_menu ;; *remove*) show_remove_menu ;;
*update*) show_update_menu ;; *update*) show_update_menu ;;
*about*) omarchy-launch-about ;; *about*) show_about ;;
*system*) show_system_menu ;; *system*) show_system_menu ;;
esac esac
} }

View File

@@ -7,17 +7,18 @@
sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak
sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
if [[ $1 == "edge" ]]; then channel="${1:-stable}"
sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-edge.conf /etc/pacman.conf
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist if [[ "$channel" != "stable" && "$channel" != "rc" && "$channel" != "edge" ]]; then
echo "Setting channel to edge" echo "Error: Invalid channel '$channel'. Must be one of: stable, rc, edge"
else exit 1
sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-stable.conf /etc/pacman.conf
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist
echo "Setting channel to stable"
fi fi
echo "Setting channel to $channel"
echo echo
sudo cp -f "$OMARCHY_PATH/default/pacman/pacman-$channel.conf" /etc/pacman.conf
sudo cp -f "$OMARCHY_PATH/default/pacman/mirrorlist-$channel" /etc/pacman.d/mirrorlist
# Reset all package DBs and then update # Reset all package DBs and then update
sudo pacman -Syyu --noconfirm sudo pacman -Syyu --noconfirm

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
echo echo
gum spin --spinner "globe" --title "Done! Press any key to close..." -- bash -c 'read -n 1 -s' gum spin --spinner "globe" --title "Done! Press any key to close..." -- bash -c 'read -t 7 -n 1 -s'

15
bin/omarchy-swayosd-brightness Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
# Display brightness level using SwayOSD on the current monitor.
# Usage: omarchy-swayosd-brightness <percent>
percent="$1"
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')" \
--custom-icon display-brightness \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"

View File

@@ -2,7 +2,7 @@
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy-cmd-present brave; then if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
if [[ -f $CHROMIUM_THEME ]]; then if [[ -f $CHROMIUM_THEME ]]; then
THEME_RGB_COLOR=$(<$CHROMIUM_THEME) THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ }) THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ })
@@ -13,14 +13,8 @@ if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy
fi fi
if omarchy-cmd-present chromium; then if omarchy-cmd-present chromium; then
rm -f /etc/chromium/policies/managed/color.json echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR" >/dev/null chromium --refresh-platform-policy --no-startup-window >/dev/null
if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
chromium --no-startup-window --set-color-scheme="light" >/dev/null
else
chromium --no-startup-window --set-color-scheme="dark" >/dev/null
fi
fi fi
if omarchy-cmd-present brave; then if omarchy-cmd-present brave; then

View File

@@ -13,22 +13,21 @@ hex_to_rgb() {
# Only generate dynamic templates for themes with a colors.toml definition # Only generate dynamic templates for themes with a colors.toml definition
if [[ -f $COLORS_FILE ]]; then if [[ -f $COLORS_FILE ]]; then
# Parse TOML using yq (treating it as YAML since the flat key=value structure is compatible)
# We convert 'key = value' to 'key: value' to make it valid YAML, then use yq/jq to generate the replacement commands.
sed_script=$(mktemp) sed_script=$(mktemp)
# Generate standard and _strip substitutions
sed 's/=/:/' "$COLORS_FILE" | yq -r 'to_entries[] | "s|{{ \(.key) }}|\(.value)|g", "s|{{ \(.key)_strip }}|\(.value | sub("^#";""))|g"' > "$sed_script"
# Generate _rgb substitutions for hex colors
while IFS='=' read -r key value; do while IFS='=' read -r key value; do
key=$(echo "$key" | xargs) key="${key//[\"\' ]/}" # strip quotes and spaces from key
value=$(echo "$value" | xargs | tr -d '"') [[ $key && $key != \#* ]] || continue # skip empty lines and comments
value="${value#*[\"\']}"
value="${value%%[\"\']*}" # extract value between quotes (ignores inline comments)
printf 's|{{ %s }}|%s|g\n' "$key" "$value" # {{ key }} -> value
printf 's|{{ %s_strip }}|%s|g\n' "$key" "${value#\#}" # {{ key_strip }} -> value without leading #
if [[ $value =~ ^# ]]; then if [[ $value =~ ^# ]]; then
rgb=$(hex_to_rgb "$value") rgb=$(hex_to_rgb "$value")
echo "s|{{ ${key}_rgb }}|${rgb}|g" >> "$sed_script" echo "s|{{ ${key}_rgb }}|${rgb}|g"
fi fi
done < "$COLORS_FILE" done <"$COLORS_FILE" >"$sed_script"
shopt -s nullglob shopt -s nullglob
@@ -39,7 +38,7 @@ if [[ -f $COLORS_FILE ]]; then
# Don't overwrite configs already exists in the output directory (copied from theme specific folder) # Don't overwrite configs already exists in the output directory (copied from theme specific folder)
if [[ ! -f $output_path ]]; then if [[ ! -f $output_path ]]; then
sed -f "$sed_script" "$tpl" > "$output_path" sed -f "$sed_script" "$tpl" >"$output_path"
fi fi
done done

53
bin/omarchy-toggle-hybrid-gpu Executable file
View File

@@ -0,0 +1,53 @@
#!/bin/bash
# Toggle dedicated vs integrated GPU mode via supergfxd (for hybrid gpu laptops, like Asus G14).
# Requires reboot to take effect.
# Ensure supergfxctl has been installed
if omarchy-cmd-missing supergfxctl; then
omarchy-pkg-add supergfxctl
sudo systemctl enable supergfxd
# Needed to deal with restoring to sleep where going through VFIO first means we don't need to reboot.
sudo sed -i "s/\"vfio_enable\": \".*\"/\"vfio_enable\": true/" /etc/supergfxd.conf
fi
gpu_mode=$(supergfxctl -g)
case "$gpu_mode" in
"Integrated")
if gum confirm "Enable dedicated GPU and reboot?"; then
# Switch to hybrid mode
sudo sed -i "s/\"mode\": \".*\"/\"mode\": \"Hybrid\"/" /etc/supergfxd.conf
# Let hybrid mode be the default after system sleep
sudo rm -rf /usr/lib/systemd/system-sleep/force-igpu
# Remove the startup delay override (not needed for Hybrid mode)
sudo rm -rf /etc/systemd/system/supergfxd.service.d/delay-start.conf
omarchy-cmd-reboot
fi
;;
"Hybrid")
if gum confirm "Use only integrated GPU and reboot?"; then
# Switch to integrated mode
sudo sed -i "s/\"mode\": \".*\"/\"mode\": \"Integrated\"/" /etc/supergfxd.conf
# Force igpu mode after system sleep (or dgpu could get activated)
sudo mkdir -p /usr/lib/systemd/system-sleep
sudo cp -p $OMARCHY_PATH/default/systemd/system-sleep/force-igpu /usr/lib/systemd/system-sleep/
# Delay supergfxd startup to avoid race condition with display manager
# that can cause system freeze when booting in Integrated mode
sudo mkdir -p /etc/systemd/system/supergfxd.service.d
sudo cp -p $OMARCHY_PATH/default/systemd/system/supergfxd.service.d/delay-start.conf /etc/systemd/system/supergfxd.service.d/
omarchy-cmd-reboot
fi
;;
*)
echo "Hybrid GPU not found or in unknown mode."
exit 1
;;
esac

18
bin/omarchy-update-analyze-logs Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
update_log="/tmp/omarchy-update.log"
# Check for errors
if grep -qi "error" "$update_log"; then
echo -e "\e[31mNon-stopping errors detected during update:\e[0m"
grep -i "error" "$update_log"
echo
fi
# Check for initramfs generation failure
if grep -q "Updating linux initcpios" "$update_log"; then
if ! grep -q "Initcpio image generation successful" "$update_log"; then
echo -e '\e[31mError: Initramfs generation may have failed. Review logs before restart.\e[0m'
echo
fi
fi

13
bin/omarchy-update-aur-pkgs Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Update AUR packages if any are installed
if pacman -Qem >/dev/null; then
if omarchy-pkg-aur-accessible; then
echo -e "\e[32m\nUpdate AUR packages\e[0m"
yay -Sua --noconfirm --ignore gcc14,gcc14-libs
echo
else
echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m"
echo
fi
fi

10
bin/omarchy-update-orphan-pkgs Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/bash
orphans=$(pacman -Qtdq || true)
if [[ -n $orphans ]]; then
echo -e "\e[32m\nRemove orphan system packages\e[0m"
for pkg in $orphans; do
sudo pacman -Rs --noconfirm "$pkg" || true
done
echo
fi

View File

@@ -5,13 +5,21 @@ set -e
# Ensure screensaver/sleep doesn't set in during updates # Ensure screensaver/sleep doesn't set in during updates
hyprctl dispatch tagwindow +noidle &> /dev/null || true hyprctl dispatch tagwindow +noidle &> /dev/null || true
# Capture update logs
exec > >(tee "/tmp/omarchy-update.log") 2>&1
# Perform all update steps # Perform all update steps
omarchy-update-time omarchy-update-time
omarchy-update-keyring omarchy-update-keyring
omarchy-update-available-reset omarchy-update-available-reset
omarchy-update-system-pkgs omarchy-update-system-pkgs
omarchy-migrate omarchy-migrate
omarchy-update-aur-pkgs
omarchy-update-orphan-pkgs
omarchy-hook post-update omarchy-hook post-update
omarchy-update-analyze-logs
omarchy-update-restart omarchy-update-restart
# Re-enable screensaver/sleep after updates # Re-enable screensaver/sleep after updates

View File

@@ -4,24 +4,3 @@ set -e
echo -e "\e[32m\nUpdate system packages\e[0m" echo -e "\e[32m\nUpdate system packages\e[0m"
sudo pacman -Syyu --noconfirm sudo pacman -Syyu --noconfirm
# Update AUR packages if any are installed
if pacman -Qem >/dev/null; then
if omarchy-pkg-aur-accessible; then
echo -e "\e[32m\nUpdate AUR packages\e[0m"
yay -Sua --noconfirm
echo
else
echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m"
echo
fi
fi
orphans=$(pacman -Qtdq || true)
if [[ -n $orphans ]]; then
echo -e "\e[32m\nRemove orphan system packages\e[0m"
for pkg in $orphans; do
sudo pacman -Rs --noconfirm "$pkg" || true
done
echo
fi

View File

@@ -2,6 +2,8 @@
if grep -q "https://stable-mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then if grep -q "https://stable-mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then
mirror="stable" mirror="stable"
elif grep -q "https://rc-mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then
mirror="rc"
elif grep -q "https://mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then elif grep -q "https://mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then
mirror="edge" mirror="edge"
else else
@@ -12,6 +14,8 @@ if grep -q "https://pkgs.omarchy.org/stable/" /etc/pacman.conf; then
pkgs="stable" pkgs="stable"
elif grep -q "https://pkgs.omarchy.org/edge/" /etc/pacman.conf; then elif grep -q "https://pkgs.omarchy.org/edge/" /etc/pacman.conf; then
pkgs="edge" pkgs="edge"
elif grep -q "https://pkgs.omarchy.org/rc/" /etc/pacman.conf; then
pkgs="rc"
else else
pkgs="unknown" pkgs="unknown"
fi fi

View File

@@ -254,25 +254,6 @@ remove_windows() {
echo "Windows VM removal completed!" echo "Windows VM removal completed!"
} }
wait_for_rdp_ready() {
local WIN_USER="$1"
local WIN_PASS="$2"
local TIMEOUT=240
local SECONDS=0
echo "Waiting for Windows VM to be ready..."
while ! timeout 5s xfreerdp3 /auth-only /cert:ignore /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 &>/dev/null; do
sleep 2
if [ $SECONDS -gt $TIMEOUT ]; then
echo "❌ Timeout waiting for RDP!"
echo " The VM might still be installing Windows."
echo " Check progress at: http://127.0.0.1:8006"
return 1
fi
done
}
launch_windows() { launch_windows() {
KEEP_ALIVE=false KEEP_ALIVE=false
if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then
@@ -309,12 +290,20 @@ launch_windows() {
notify-send -u critical "Windows VM" "Failed to start Windows VM" notify-send -u critical "Windows VM" "Failed to start Windows VM"
exit 1 exit 1
fi fi
fi
if ! wait_for_rdp_ready "$WIN_USER" "$WIN_PASS"; then echo "Waiting for Windows VM to start..."
notify-send -u critical "Windows VM" "Did not come alive in time." WAIT_COUNT=0
until docker logs omarchy-windows 2>&1 | grep -qi "windows started successfully"; do
sleep 2
WAIT_COUNT=$((WAIT_COUNT + 1))
if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout
echo ""
echo "❌ Timeout: Windows VM failed to start within 2 minutes"
echo " Check logs: docker logs omarchy-windows"
exit 1 exit 1
fi fi
done
fi
# Build the connection info # Build the connection info
if [ "$KEEP_ALIVE" = true ]; then if [ "$KEEP_ALIVE" = true ]; then
@@ -346,7 +335,7 @@ To stop: omarchy-windows-vm stop"
# If scale is less than 130%, don't set any scale (use default 100) # If scale is less than 130%, don't set any scale (use default 100)
# Connect with RDP in fullscreen (auto-detects resolution) # Connect with RDP in fullscreen (auto-detects resolution)
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /cert:ignore /title:"Windows VM - Omarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /clipboard /cert:ignore /title:"Windows VM - Omarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
# After RDP closes, stop the container unless --keep-alive was specified # After RDP closes, stop the container unless --keep-alive was specified
if [ "$KEEP_ALIVE" = false ]; then if [ "$KEEP_ALIVE" = false ]; then

10
boot.sh
View File

@@ -28,12 +28,10 @@ git clone "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/
# Use custom branch if instructed, otherwise default to master # Use custom branch if instructed, otherwise default to master
OMARCHY_REF="${OMARCHY_REF:-master}" OMARCHY_REF="${OMARCHY_REF:-master}"
if [[ $OMARCHY_REF != "master" ]]; then echo -e "\e[32mUsing branch: $OMARCHY_REF\e[0m"
echo -e "\e[32mUsing branch: $OMARCHY_REF\e[0m" cd ~/.local/share/omarchy
cd ~/.local/share/omarchy git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}"
git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}" cd -
cd -
fi
# Set edge mirror for dev installs # Set edge mirror for dev installs
if [[ $OMARCHY_REF == "dev" ]]; then if [[ $OMARCHY_REF == "dev" ]]; then

View File

@@ -0,0 +1 @@
command = 'wl-copy && hyprctl dispatch sendshortcut "SHIFT, Insert,"'

View File

@@ -1,6 +1,7 @@
# Application bindings # Application bindings
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)"
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window 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 bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify

View File

@@ -3,6 +3,10 @@
input { input {
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt # Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
# kb_layout = us,dk,eu # kb_layout = us,dk,eu
# Use a specific keyboard variant if needed (e.g. intl for international keyboards)
# kb_variant = intl
kb_options = compose:caps # ,grp:alts_toggle kb_options = compose:caps # ,grp:alts_toggle
# Change speed of keyboard repeat # Change speed of keyboard repeat

View File

@@ -12,3 +12,9 @@
# *) back_to show_main_menu ;; # *) back_to show_main_menu ;;
# esac # esac
# } # }
#
# Example of overriding just the about menu action: (Using zsh instead of bash (default))
#
# show_about() {
# exec omarchy-launch-or-focus-tui "zsh -c 'fastfetch; read -k 1'"
# }

View File

@@ -116,6 +116,7 @@
"format-muted": "", "format-muted": "",
"format-icons": { "format-icons": {
"headphone": "", "headphone": "",
"headset": "",
"default": ["", "", ""] "default": ["", "", ""]
} }
}, },

View File

@@ -21,9 +21,9 @@ if command -v zoxide &> /dev/null; then
} }
fi fi
open() { open() (
xdg-open "$@" >/dev/null 2>&1 & xdg-open "$@" >/dev/null 2>&1 &
} )
# Directories # Directories
alias ..='cd ..' alias ..='cd ..'

View File

@@ -58,7 +58,7 @@ img2jpg() {
img="$1" img="$1"
shift shift
magick "$img" $@ -quality 95 -strip ${img%.*}-optimized.jpg magick "$img" $@ -quality 95 -strip ${img%.*}-converted.jpg
} }
# Transcode any image to JPG image that's great for sharing online without being too big # Transcode any image to JPG image that's great for sharing online without being too big
@@ -66,7 +66,14 @@ img2jpg-small() {
img="$1" img="$1"
shift shift
magick "$img" $@ -resize 1080x\> -quality 95 -strip ${img%.*}-optimized.jpg magick "$img" $@ -resize 1080x\> -quality 95 -strip ${img%.*}-small.jpg
}
# Transcode any image to JPG image that's great for sharing online without being too big
img2jpg-medium() {
img="$1"
shift
magick "$img" $@ -resize 1800x\> -quality 95 -strip ${img%.*}-medium.jpg
} }
# Transcode any image to compressed-but-lossless PNG # Transcode any image to compressed-but-lossless PNG

View File

@@ -9,7 +9,9 @@ source = ~/.local/share/omarchy/default/hypr/apps/pip.conf
source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf
source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf
source = ~/.local/share/omarchy/default/hypr/apps/steam.conf source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
source = ~/.local/share/omarchy/default/hypr/apps/geforce.conf
source = ~/.local/share/omarchy/default/hypr/apps/system.conf source = ~/.local/share/omarchy/default/hypr/apps/system.conf
source = ~/.local/share/omarchy/default/hypr/apps/telegram.conf
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf

View File

@@ -1,2 +1,6 @@
windowrule = no_screen_share on, match:class ^(Bitwarden)$ windowrule = no_screen_share on, match:class ^(Bitwarden)$
windowrule = tag +floating-window, match:class ^(Bitwarden)$ windowrule = tag +floating-window, match:class ^(Bitwarden)$
# Bitwarden Chrome Extension
windowrule = no_screen_share on, match:class chrome-nngceckbapebfimnlniiiahkandclblb-Default
windowrule = tag +floating-window, match:class chrome-nngceckbapebfimnlniiiahkandclblb-Default

View File

@@ -0,0 +1,5 @@
windowrule {
name = geforce
match:class = GeForceNOW
idle_inhibit = fullscreen
}

View File

@@ -1,22 +1,41 @@
# Fix splash screen showing in weird places and prevent annoying focus takeovers # Fix splash screen showing in weird places and prevent annoying focus takeovers
windowrule = tag +jetbrains-splash, match:class ^(jetbrains-.*)$, match:title ^(splash)$, match:float 1 windowrule {
windowrule = center on, match:tag jetbrains-splash name = jetbrains-splash
windowrule = no_focus on, match:tag jetbrains-splash match:class = ^(jetbrains-.*)$
windowrule = border_size 0, match:tag jetbrains-splash match:title = ^(splash)$
match:float = 1
tag = +jetbrains-splash
center = on
no_focus = on
border_size = 0
}
# Center popups/find windows # Center popups/find windows
windowrule = tag +jetbrains, match:class ^(jetbrains-.*), match:title ^()$, match:float 1 windowrule {
windowrule = center on, match:tag jetbrains name = jetbrains-popup
match:class = ^(jetbrains-.*)
# Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.) match:title = ^()$
windowrule = stay_focused on, match:tag jetbrains match:float = 1
windowrule = border_size 0, match:tag jetbrains tag = +jetbrains
center = on
# For some reason tag:jetbrains does not work for size rule # Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.)
windowrule = min_size (monitor_w*0.5) (monitor_h*0.5), match:class ^(jetbrains-.*), match:title ^()$, match:float 1 stay_focused = on
border_size = 0
min_size = (monitor_w*0.5) (monitor_h*0.5)
}
# Disable window flicker when autocomplete or tooltips appear # Disable window flicker when autocomplete or tooltips appear
windowrule = no_initial_focus on, match:class ^(jetbrains-.*)$, match:title ^(win.*)$, match:float 1 windowrule {
name = jetbrains-tooltip
match:class = ^(jetbrains-.*)$
match:title = ^(win.*)$
match:float = 1
no_initial_focus = on
}
# Disable mouse focus # Disable mouse focus
windowrule = no_follow_mouse on, match:class ^(jetbrains-.*)$ windowrule {
name = jetbrains-focus
no_follow_mouse = on
match:class = ^(jetbrains-.*)$
}

View File

@@ -1,7 +1,7 @@
# Float Steam # Float Steam
windowrule = float on, match:class steam windowrule = float on, match:class steam
windowrule = center on, match:class steam, match:title Steam windowrule = center on, match:class steam, match:title Steam
windowrule = opacity 1 1, match:class steam windowrule = opacity 1 1, match:class steam.*
windowrule = size 1100 700, match:class steam, match:title Steam windowrule = size 1100 700, match:class steam, match:title Steam
windowrule = size 460 800, match:class steam, match:title Friends List windowrule = size 460 800, match:class steam, match:title Friends List
windowrule = idle_inhibit fullscreen, match:class steam windowrule = idle_inhibit fullscreen, match:class steam

View File

@@ -0,0 +1,2 @@
# Prevent Telegram from stealing focus on new messages
windowrule = focus_on_activate off, match:class org.telegram.desktop

View File

@@ -6,14 +6,16 @@ bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume rai
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, $osdclient --brightness raise bindeld = ,XF86MonBrightnessUp, Brightness up, exec, omarchy-brightness-display +5%
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, $osdclient --brightness lower bindeld = ,XF86MonBrightnessDown, Brightness down, exec, omarchy-brightness-display 5%-
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, omarchy-brightness-keyboard up
bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, omarchy-brightness-keyboard down
# Precise 1% multimedia adjustments with Alt modifier # Precise 1% multimedia adjustments with Alt modifier
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1 bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1 bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1
bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, $osdclient --brightness +1 bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, omarchy-brightness-display +1%
bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, $osdclient --brightness -1 bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, omarchy-brightness-display 1%-
# Requires playerctl # Requires playerctl
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next

View File

@@ -1,6 +1,7 @@
# Menus # Menus
bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols
bindd = SUPER CTRL, C, Capture menu, exec, omarchy-menu capture
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
bindd = SUPER, ESCAPE, System menu, exec, omarchy-menu system bindd = SUPER, ESCAPE, System menu, exec, omarchy-menu system
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
@@ -28,9 +29,9 @@ bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight
# Control Apple Display brightness # Control Apple Display brightness
bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-cmd-apple-display-brightness -5000 bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-brightness-display-apple -5000
bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000 bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-brightness-display-apple +5000
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000 bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-brightness-display-apple +60000
# Captures # Captures
bindd = , PRINT, Screenshot with editing, exec, omarchy-cmd-screenshot bindd = , PRINT, Screenshot with editing, exec, omarchy-cmd-screenshot

View File

@@ -6,7 +6,7 @@ env = HYPRCURSOR_SIZE,24
env = GDK_BACKEND,wayland,x11,* env = GDK_BACKEND,wayland,x11,*
env = QT_QPA_PLATFORM,wayland;xcb env = QT_QPA_PLATFORM,wayland;xcb
env = QT_STYLE_OVERRIDE,kvantum env = QT_STYLE_OVERRIDE,kvantum
env = SDL_VIDEODRIVER,wayland env = SDL_VIDEODRIVER,wayland,x11
env = MOZ_ENABLE_WAYLAND,1 env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,wayland env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = OZONE_PLATFORM,wayland env = OZONE_PLATFORM,wayland

View File

@@ -131,6 +131,11 @@ cursor {
hide_on_key_press = true hide_on_key_press = true
} }
# Auto toggle scratchpad on switching workspace from scratchpad
binds {
hide_special_on_workspace_change = true
}
# Style Gum confirm to match terminal theme # Style Gum confirm to match terminal theme
env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan
env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black

View File

@@ -3,7 +3,7 @@ TARGET_OS_NAME="Omarchy"
ESP_PATH="/boot" ESP_PATH="/boot"
KERNEL_CMDLINE[default]="@@CMDLINE@@" KERNEL_CMDLINE[default]="@@CMDLINE@@"
KERNEL_CMDLINE[default]+="quiet splash" KERNEL_CMDLINE[default]+=" quiet splash"
ENABLE_UKI=yes ENABLE_UKI=yes
CUSTOM_UKI_NAME="omarchy" CUSTOM_UKI_NAME="omarchy"

View File

@@ -1,5 +1,5 @@
--- ---
name: Omarchy name: omarchy
description: > description: >
REQUIRED for ANY changes to Linux desktop, window manager, or system config. REQUIRED for ANY changes to Linux desktop, window manager, or system config.
Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/, Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/,

View File

@@ -0,0 +1 @@
Server = https://rc-mirror.omarchy.org/$repo/os/$arch

View File

@@ -0,0 +1,30 @@
# See the pacman.conf(5) manpage for option and repository directives
[options]
Color
ILoveCandy
VerbosePkgLists
HoldPkg = pacman glibc
Architecture = auto
CheckSpace
ParallelDownloads = 5
DownloadUser = alpm
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
# pacman searches repositories in the order defined here
[core]
Include = /etc/pacman.d/mirrorlist
[extra]
Include = /etc/pacman.d/mirrorlist
[multilib]
Include = /etc/pacman.d/mirrorlist
[omarchy]
SigLevel = Optional TrustAll
Server = https://pkgs.omarchy.org/edge/$arch

View File

@@ -0,0 +1,18 @@
#!/bin/bash
# Use the Vfio to Integrated trick to turn off NVIDIA dgpu when in integrated mode
# without needing to restart the computer. This is needed because computers like the Asus G14
# will wake after suspend in Hybrid mode, even if the system was in Integrated mode before
# suspending.
if [[ $1 == "post" ]]; then
# small delay so the device is fully re-enumerated
sleep 4
# force-bind dGPU to vfio (fully detached from nvidia)
/usr/bin/supergfxctl -m Vfio
sleep 1
# then go back to Integrated, which powers it off again
/usr/bin/supergfxctl -m Integrated
fi

View File

@@ -0,0 +1,6 @@
[Service]
# Delay startup to avoid race condition with display manager initialization
# when booting in Integrated mode. Without this delay, the system can freeze
# on boot because supergfxd tries to disable the dGPU while the display
# subsystem is still initializing.
ExecStartPre=/bin/sleep 5

View File

@@ -0,0 +1,18 @@
## Use software volume control for all ALSA devices.
## This prevents hardware mixer quirks (like muffled audio on Realtek codecs)
## and provides consistent volume behavior across all hardware.
monitor.alsa.rules = [
{
matches = [
{
device.name = "~alsa_card.*"
}
]
actions = {
update-props = {
api.alsa.soft-mixer = true
}
}
}
]

View File

@@ -19,6 +19,7 @@ run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh
run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh
run_logged $OMARCHY_INSTALL/config/input-group.sh run_logged $OMARCHY_INSTALL/config/input-group.sh
run_logged $OMARCHY_INSTALL/config/omarchy-ai-skill.sh run_logged $OMARCHY_INSTALL/config/omarchy-ai-skill.sh
run_logged $OMARCHY_INSTALL/config/powerprofilesctl-rules.sh
run_logged $OMARCHY_INSTALL/config/hardware/network.sh run_logged $OMARCHY_INSTALL/config/hardware/network.sh
run_logged $OMARCHY_INSTALL/config/hardware/set-wireless-regdom.sh run_logged $OMARCHY_INSTALL/config/hardware/set-wireless-regdom.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-fkeys.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-fkeys.sh
@@ -26,6 +27,7 @@ run_logged $OMARCHY_INSTALL/config/hardware/bluetooth.sh
run_logged $OMARCHY_INSTALL/config/hardware/printer.sh run_logged $OMARCHY_INSTALL/config/hardware/printer.sh
run_logged $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh run_logged $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh
run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh
run_logged $OMARCHY_INSTALL/config/hardware/legacy-gpu-terminal.sh
run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh
@@ -33,3 +35,5 @@ run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-suspend-nvme.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-suspend-nvme.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-surface-keyboard.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-surface-keyboard.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-asus-rog-audio-mixer.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-asus-rog-mic.sh

View File

@@ -0,0 +1,15 @@
# Fix audio volume on Asus ROG laptops by using a soft mixer.
if [[ "$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null)" == "ASUSTeK COMPUTER INC." ]] &&
grep -q "ROG" /sys/class/dmi/id/product_family 2>/dev/null; then
mkdir -p ~/.config/wireplumber/wireplumber.conf.d/
cp $OMARCHY_PATH/default/wireplumber/wireplumber.conf.d/alsa-soft-mixer.conf ~/.config/wireplumber/wireplumber.conf.d/
rm -rf ~/.local/state/wireplumber/default-routes
# Unmute the Master control on the ALC285 card (often muted by default)
card=$(aplay -l 2>/dev/null | grep -i "ALC285" | head -1 | sed 's/card \([0-9]*\).*/\1/')
if [[ -n "$card" ]]; then
amixer -c "$card" set Master 80% unmute 2>/dev/null
fi
fi

View File

@@ -0,0 +1,17 @@
# Fix internal mic gain on ASUS ROG laptops with Realtek ALC285.
# The mic boost is way too high by default, causing clipping.
# Sets levels and stores ALSA state so it persists across reboots.
if [[ "$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null)" == "ASUSTeK COMPUTER INC." ]] &&
grep -q "ROG" /sys/class/dmi/id/product_family 2>/dev/null; then
for card in /proc/asound/card*/codec*; do
if grep -q "ALC285" "$card" 2>/dev/null; then
cardnum=$(echo "$card" | grep -oP 'card\K\d+')
amixer -c "$cardnum" set 'Internal Mic Boost' 0 >/dev/null 2>&1 || true
amixer -c "$cardnum" set 'Capture' 70% >/dev/null 2>&1 || true
sudo alsactl store "$cardnum" 2>/dev/null || true
break
fi
done
fi

View File

@@ -0,0 +1,17 @@
# Ghostty requires modern GPU acceleration (OpenGL/Vulkan) which is often unstable
# or missing on legacy hardware. Detect legacy GPU drivers and fall back to Alacritty.
legacy_drivers=("radeon")
for card in /sys/class/drm/card*; do
if [[ -e "$card/device/driver" ]]; then
driver=$(basename "$(readlink -f "$card/device/driver")")
for legacy in "${legacy_drivers[@]}"; do
if [[ "$driver" == "$legacy" ]]; then
omarchy-install-terminal alacritty
exit 0
fi
done
fi
done

View File

@@ -7,8 +7,8 @@ if [ -n "$NVIDIA" ]; then
if echo "$NVIDIA" | grep -qE "RTX [2-9][0-9]|GTX 16"; then if echo "$NVIDIA" | grep -qE "RTX [2-9][0-9]|GTX 16"; then
# Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules # Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules
PACKAGES=(nvidia-open-dkms nvidia-utils lib32-nvidia-utils libva-nvidia-driver) PACKAGES=(nvidia-open-dkms nvidia-utils lib32-nvidia-utils libva-nvidia-driver)
elif echo "$NVIDIA" | grep -qE "GTX 9|GTX 10|Quadro P"; then elif echo "$NVIDIA" | grep -qE "GTX 9|GTX 10|Quadro P|MX1|MX2|MX3"; then
# Pascal (10xx or Quadro Pxxx) and Maxwell (9xx) use legacy branch that can only be installed from AUR # Pascal (10xx, Quadro Pxxx, MX150, MX2xx, and MX3xx) and Maxwell (9xx, MX110, and MX130) use legacy branch that can only be installed from AUR
PACKAGES=(nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils) PACKAGES=(nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils)
fi fi
# Bail if no supported GPU # Bail if no supported GPU
@@ -17,7 +17,7 @@ if [ -n "$NVIDIA" ]; then
exit 0 exit 0
fi fi
pacman -S --needed --noconfirm "$KERNEL_HEADERS" "${PACKAGES[@]}" omarchy-pkg-add "$KERNEL_HEADERS" "${PACKAGES[@]}"
# Configure modprobe for early KMS # Configure modprobe for early KMS
sudo tee /etc/modprobe.d/nvidia.conf <<EOF >/dev/null sudo tee /etc/modprobe.d/nvidia.conf <<EOF >/dev/null

View File

@@ -1,6 +1,9 @@
omarchy-refresh-applications omarchy-refresh-applications
update-desktop-database ~/.local/share/applications update-desktop-database ~/.local/share/applications
# Open directories in file manager
xdg-mime default org.gnome.Nautilus.desktop inode/directory
# Open all images with imv # Open all images with imv
xdg-mime default imv.desktop image/png xdg-mime default imv.desktop image/png
xdg-mime default imv.desktop image/jpeg xdg-mime default imv.desktop image/jpeg

View File

@@ -0,0 +1,26 @@
if omarchy-battery-present; then
mapfile -t profiles < <(omarchy-powerprofiles-list)
if [[ ${#profiles[@]} -gt 0 ]]; then
# Default AC profile:
# 3 profiles → performance
# 2 profiles → balanced
# 1 profile → profiles[0]
ac_profile="${profiles[2]:-${profiles[1]:-${profiles[0]}}}"
# Default Battery profile:
# 3 profiles → balanced
# 2 profiles → balanced
# 1 profile → profiles[0]
battery_profile="${profiles[1]:-${profiles[0]}}"
cat <<EOF | sudo tee "/etc/udev/rules.d/99-power-profile.rules"
SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="0", RUN+="/usr/bin/powerprofilesctl set $battery_profile"
SUBSYSTEM=="power_supply", ATTR{type}=="Mains", ATTR{online}=="1", RUN+="/usr/bin/powerprofilesctl set $ac_profile"
EOF
sudo udevadm control --reload
sudo udevadm trigger --subsystem-match=power_supply
fi
fi

View File

@@ -1,10 +1,8 @@
if ls /sys/class/power_supply/BAT* &>/dev/null; then if omarchy-battery-present; then
# This computer runs on a battery
powerprofilesctl set balanced || true powerprofilesctl set balanced || true
# Enable battery monitoring timer for low battery notifications # Enable battery monitoring timer for low battery notifications
systemctl --user enable --now omarchy-battery-monitor.timer systemctl --user enable --now omarchy-battery-monitor.timer
else else
# This computer runs on power outlet
powerprofilesctl set performance || true powerprofilesctl set performance || true
fi fi

View File

@@ -5,6 +5,7 @@
1password-cli 1password-cli
aether aether
alacritty alacritty
alsa-utils
asdcontrol asdcontrol
avahi avahi
bash-completion bash-completion
@@ -13,6 +14,7 @@ bluetui
bolt bolt
brightnessctl brightnessctl
btop btop
chromium
clang clang
cups cups
cups-browsed cups-browsed
@@ -78,6 +80,7 @@ mariadb-libs
mise mise
mpv mpv
nautilus nautilus
nautilus-python
gnome-disk-utility gnome-disk-utility
noto-fonts noto-fonts
noto-fonts-cjk noto-fonts-cjk
@@ -87,7 +90,6 @@ nss-mdns
nvim nvim
obs-studio obs-studio
obsidian obsidian
omarchy-chromium
omarchy-nvim omarchy-nvim
omarchy-walker omarchy-walker
opencode opencode
@@ -144,5 +146,4 @@ xmlstarlet
xournalpp xournalpp
yaru-icon-theme yaru-icon-theme
yay yay
yq
zoxide zoxide

View File

@@ -19,5 +19,5 @@ if [[ -n ${OMARCHY_ONLINE_INSTALL:-} ]]; then
# Refresh all repos # Refresh all repos
sudo pacman -Syu --noconfirm sudo pacman -Syyu --noconfirm
fi fi

View File

@@ -3,6 +3,17 @@ echo "Migrate legacy NVIDIA GPUs to nvidia-580xx driver (if needed)"
# Only migrate GTX 9xx or 10xx (Pascal/Maxwell) # Only migrate GTX 9xx or 10xx (Pascal/Maxwell)
NVIDIA="$(lspci | grep -i 'nvidia')" NVIDIA="$(lspci | grep -i 'nvidia')"
if echo "$NVIDIA" | grep -qE "GTX 9|GTX 10"; then if echo "$NVIDIA" | grep -qE "GTX 9|GTX 10"; then
if ! pacman -Qq | grep -qE '^linux(-[a-z0-9]+)?-headers$'; then
echo "Error: no linux headers package installed (required for DKMS drivers). Please install the appropriate headers and re-run this migration."
exit 1
fi
# Piping yes to override existing packages # Piping yes to override existing packages
yes | sudo pacman -S nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils yes | sudo pacman -S nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils
# Verify packages were installed
if ! pacman -Qq nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils &>/dev/null; then
echo "Error: NVIDIA 580xx driver packages failed to install"
exit 1
fi
fi fi

View File

@@ -1,7 +1,5 @@
echo "Migrate to new theme setup" echo "Migrate to new theme setup"
omarchy-pkg-add yq
# Move user-added backgrounds from Omarchy theme folders to user config # Move user-added backgrounds from Omarchy theme folders to user config
OMARCHY_DIR="$HOME/.local/share/omarchy" OMARCHY_DIR="$HOME/.local/share/omarchy"
USER_BACKGROUNDS_DIR="$HOME/.config/omarchy/backgrounds" USER_BACKGROUNDS_DIR="$HOME/.config/omarchy/backgrounds"

14
migrations/1768270644.sh Executable file
View File

@@ -0,0 +1,14 @@
echo "Add icon for headset audio profile in Waybar"
if ! grep -q '"headset": ""' "$HOME/.config/waybar/config.jsonc"; then
sed -i '
/"pulseaudio": {/,/^[ ]*}/{
/"format-icons": {/,/^[ ]*}/{
/"default":/i\
\ "headset": "",
}
}
' "$HOME/.config/waybar/config.jsonc"
omarchy-restart-waybar
fi

19
migrations/1768906440.sh Normal file
View File

@@ -0,0 +1,19 @@
echo "Migrate legacy mobile NVIDIA GPUs to nvidia-580xx driver (if needed)"
# Only migrate MX1xx, 2xx or 3xx (Pascal/Maxwell)
NVIDIA="$(lspci | grep -i 'nvidia')"
if echo "$NVIDIA" | grep -qE "MX1|MX2|MX3"; then
if ! pacman -Qq | grep -qE '^linux(-[a-z0-9]+)?-headers$'; then
echo "Error: no linux headers package installed (required for DKMS drivers). Please install the appropriate headers and re-run this migration."
exit 1
fi
# Piping yes to override existing packages
yes | sudo pacman -S nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils
# Verify packages were installed
if ! pacman -Qq nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils &>/dev/null; then
echo "Error: NVIDIA 580xx driver packages failed to install"
exit 1
fi
fi

9
migrations/1768916735.sh Normal file
View File

@@ -0,0 +1,9 @@
echo "Fix microphone gain and audio mixing on Asus ROG laptops"
source "$OMARCHY_PATH/install/config/hardware/fix-asus-rog-mic.sh"
source "$OMARCHY_PATH/install/config/hardware/fix-asus-rog-audio-mixer.sh"
if [[ "$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null)" == "ASUSTeK COMPUTER INC." ]] &&
grep -q "ROG" /sys/class/dmi/id/product_family 2>/dev/null; then
omarchy-restart-pipewire
fi

4
migrations/1769182209.sh Normal file
View File

@@ -0,0 +1,4 @@
echo "Enable auto-pasting for the emoji picker"
omarchy-refresh-config elephant/symbols.toml
omarchy-restart-walker

3
migrations/1769183359.sh Normal file
View File

@@ -0,0 +1,3 @@
echo "Add nautilus-python package for 'Open in Ghostty' shortcut in Nautilus"
omarchy-pkg-add nautilus-python

5
migrations/1769510847.sh Normal file
View File

@@ -0,0 +1,5 @@
echo "Switch back to mainline chromium now that it supports full live themeing"
omarchy-pkg-drop omarchy-chromium
omarchy-pkg-add chromium
omarchy-theme-set-browser

6
migrations/1769543550.sh Normal file
View File

@@ -0,0 +1,6 @@
echo "Add SUPER+ALT+SHIFT+F shortcut to open nautilus in cwd"
# Add the new CWD binding if it doesn't exist
if ! grep -q "SUPER ALT SHIFT, F" ~/.config/hypr/bindings.conf; then
sed -i '/bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window/a bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"' ~/.config/hypr/bindings.conf
fi

3
migrations/1769566732.sh Executable file
View File

@@ -0,0 +1,3 @@
echo "Set power profile based on source switching (AC or Battery)"
source $OMARCHY_PATH/install/config/powerprofilesctl-rules.sh

3
migrations/1769619823.sh Normal file
View File

@@ -0,0 +1,3 @@
echo "Open directories in file manager using the shell open command"
xdg-mime default org.gnome.Nautilus.desktop inode/directory

View File

@@ -0,0 +1,2 @@
@define-color foreground #cdd6f4;
@define-color background #181824;

View File

@@ -1,4 +1,4 @@
accent = "#829dd4" accent = "#82FB9C"
cursor = "#ddf7ff" cursor = "#ddf7ff"
foreground = "#ddf7ff" foreground = "#ddf7ff"
background = "#0B0C16" background = "#0B0C16"

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 KiB

70
themes/miasma/btop.theme Normal file
View File

@@ -0,0 +1,70 @@
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#222222"
# Main text color
theme[main_fg]="#c2c2b0"
# Title color for boxes
theme[title]="#bb7744"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#c9a554"
# Background color of selected item in processes box
theme[selected_bg]="#e4c47a"
# Foreground color of selected item in processes box
theme[selected_fg]="#000000"
# Color of inactive/disabled text
theme[inactive_fg]="#666666"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#bb7744"
# Box outline and divider line color
theme[cpu_box]="#5f875f"
theme[mem_box]="#5f875f"
theme[net_box]="#5f875f"
theme[proc_box]="#5f875f"
theme[div_line]="#666666"
# Gradient for all meters and graphs
theme[temp_start]="#c9a554"
theme[temp_mid]="#78824b"
theme[temp_end]="#5f875f"
theme[cpu_start]="#c9a554"
theme[cpu_mid]="#78824b"
theme[cpu_end]="#5f875f"
theme[free_start]="#78824b"
theme[free_mid]="#b36d43"
theme[free_end]="#b36d43"
theme[cached_start]="#b36d43"
theme[cached_mid]="#b36d43"
theme[cached_end]="#b36d43"
theme[available_start]="#c9a554"
theme[available_mid]="#c9a554"
theme[available_end]="#c9a554"
theme[used_start]="#5f875f"
theme[used_mid]="#5f875f"
theme[used_end]="#5f875f"
theme[download_start]="#b36d43"
theme[download_mid]="#c9a554"
theme[download_end]="#78824b"
theme[upload_start]="#b36d43"
theme[upload_mid]="#c9a554"
theme[upload_end]="#78824b"

23
themes/miasma/colors.toml Normal file
View File

@@ -0,0 +1,23 @@
accent = "#78824b"
cursor = "#c7c7c7"
foreground = "#c2c2b0"
background = "#222222"
selection_foreground = "#c2c2b0"
selection_background = "#78824b"
color0 = "#000000"
color1 = "#685742"
color2 = "#5f875f"
color3 = "#b36d43"
color4 = "#78824b"
color5 = "#bb7744"
color6 = "#c9a554"
color7 = "#d7c483"
color8 = "#666666"
color9 = "#685742"
color10 = "#5f875f"
color11 = "#b36d43"
color12 = "#78824b"
color13 = "#bb7744"
color14 = "#c9a554"
color15 = "#d7c483"

View File

@@ -0,0 +1 @@
Yaru-wartybrown

88
themes/miasma/neovim.lua Normal file
View File

@@ -0,0 +1,88 @@
return {
{
"xero/miasma.nvim",
priority = 1000,
},
{
"LazyVim/LazyVim",
opts = {
colorscheme = "miasma",
},
},
}
-- local function has_miasma_in_user_plugins()
-- local plugins_dir = vim.fn.expand("~/.config/nvim/lua/plugins")
-- if vim.fn.isdirectory(plugins_dir) ~= 1 then
-- return false
-- end
-- local plugin_files = vim.fn.glob(plugins_dir .. "/**/*.lua", true, true)
-- for _, file in ipairs(plugin_files) do
-- local ok, lines = pcall(vim.fn.readfile, file)
-- if ok then
-- for _, line in ipairs(lines) do
-- if line:find("xero/miasma.nvim", 1, true) then
-- return true
-- end
-- end
-- end
-- end
-- return false
-- end
--
-- if has_miasma_in_user_plugins() then
-- return {
-- {
-- "xero/miasma.nvim",
-- lazy = false,
-- priority = 1000,
-- config = function()
-- vim.cmd("colorscheme miasma")
-- end,
-- },
-- }
-- end
--
-- return {
-- {
-- "bjarneo/aether.nvim",
-- name = "aether",
-- priority = 1000,
-- opts = {
-- disable_italics = false,
-- colors = {
-- -- Monotone shades (base00-base07)
-- base00 = "#222222", -- Default background
-- base01 = "#666666", -- Lighter background (status bars)
-- base02 = "#e4c47a", -- Selection background
-- base03 = "#666666", -- Comments, invisibles
-- base04 = "#c2c2b0", -- Dark foreground
-- base05 = "#c2c2b0", -- Default foreground
-- base06 = "#d7c483", -- Light foreground
-- base07 = "#d7c483", -- Light background
--
-- -- Accent colors (base08-base0F)
-- base08 = "#685742", -- Variables, errors, red
-- base09 = "#685742", -- Integers, constants, orange
-- base0A = "#b36d43", -- Classes, types, yellow
-- base0B = "#5f875f", -- Strings, green
-- base0C = "#c9a554", -- Support, regex, cyan
-- base0D = "#78824b", -- Functions, keywords, blue
-- base0E = "#bb7744", -- Keywords, storage, magenta
-- base0F = "#b36d43", -- Deprecated, brown/yellow
-- },
-- },
-- config = function(_, opts)
-- require("aether").setup(opts)
-- vim.cmd.colorscheme("aether")
--
-- -- Enable hot reload
-- require("aether.hotreload").setup()
-- end,
-- },
-- {
-- "LazyVim/LazyVim",
-- opts = {
-- colorscheme = "aether",
-- },
-- },
-- }

BIN
themes/miasma/preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 KiB

View File

@@ -0,0 +1,4 @@
{
"name": "In The Fog Dark",
"extension": "ganevru.in-the-fog-theme"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

View File

@@ -1 +1 @@
3.3.1 3.3.4