Simplify montor scaling

This commit is contained in:
Ryan Hughes
2026-05-11 10:40:26 -04:00
parent 804571d8e2
commit e39206f24d
2 changed files with 26 additions and 14 deletions
+12 -5
View File
@@ -9,8 +9,9 @@ WIDTH=$(echo "$MONITOR_INFO" | jq -r '.width')
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height') HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate') REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 4 → 1 (or reverse with --reverse) # Cycle through monitor/GDK scale pairs: 1 → 1.25 → 1.6 → 2 → 3 → 4 → 1 (or reverse with --reverse)
SCALES=(1 1.25 1.6 2 3 4) SCALES=(1 1.25 1.6 2 3 4)
GDK_SCALES=(1 1.25 1.75 2 3 4)
# Find the index of the scale closest to the current one (Hyprland may # Find the index of the scale closest to the current one (Hyprland may
# snap fractional scales to nearby values, so we can't match exactly) # snap fractional scales to nearby values, so we can't match exactly)
@@ -31,16 +32,22 @@ else
fi fi
NEW_SCALE=${SCALES[$NEW_IDX]} NEW_SCALE=${SCALES[$NEW_IDX]}
NEW_GDK_SCALE=${GDK_SCALES[$NEW_IDX]}
hyprctl eval "hl.monitor({ output = \"$ACTIVE_MONITOR\", mode = \"${WIDTH}x${HEIGHT}@${REFRESH_RATE}\", position = \"auto\", scale = $NEW_SCALE })" >/dev/null hyprctl eval "hl.monitor({ output = \"$ACTIVE_MONITOR\", mode = \"${WIDTH}x${HEIGHT}@${REFRESH_RATE}\", position = \"auto\", scale = $NEW_SCALE })" >/dev/null
# Persist to monitors.lua if the user has a single generic catch-all line, # Persist to monitors.lua if the user still has Omarchy's generic catch-all
# so the scale survives reboots. # defaults, so the scale survives reboots.
MONITOR_LUA="$HOME/.config/hypr/monitors.lua" MONITOR_LUA="$HOME/.config/hypr/monitors.lua"
if [[ -f $MONITOR_LUA ]] && grep -q '^hl\.monitor({ output = "", mode = "preferred", position = "auto", scale = ' "$MONITOR_LUA"; then if [[ -f $MONITOR_LUA ]] && grep -q '^local omarchy_monitor_scale = ' "$MONITOR_LUA"; then
sed -i -E \
-e "s|^local omarchy_monitor_scale = .*|local omarchy_monitor_scale = ${NEW_SCALE}|" \
-e "s|^local omarchy_gdk_scale = .*|local omarchy_gdk_scale = ${NEW_GDK_SCALE}|" \
"$MONITOR_LUA"
elif [[ -f $MONITOR_LUA ]] && grep -Eq '^hl\.monitor\(\{ output = "", mode = "preferred", position = "auto", scale = ("auto"|[0-9.]+) \}\)' "$MONITOR_LUA"; then
sed -i -E \ sed -i -E \
-e "s|^(hl\.monitor\(\{ output = \"\", mode = \"preferred\", position = \"auto\", scale = )([^ ]+)( \}\))|\\1${NEW_SCALE}\\3|" \ -e "s|^(hl\.monitor\(\{ output = \"\", mode = \"preferred\", position = \"auto\", scale = )([^ ]+)( \}\))|\\1${NEW_SCALE}\\3|" \
-e 's|^hl\.env\("GDK_SCALE", ".*"\)|hl.env("GDK_SCALE", "'"$NEW_SCALE"'")|' \ -e 's|^hl\.env\("GDK_SCALE", ".*"\)|hl.env("GDK_SCALE", "'"$NEW_GDK_SCALE"'")|' \
"$MONITOR_LUA" "$MONITOR_LUA"
fi fi
+14 -9
View File
@@ -1,18 +1,23 @@
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/ -- See https://wiki.hypr.land/Configuring/Basics/Monitors/
-- List current monitors and resolutions possible: hyprctl monitors all -- List current monitors and resolutions possible: hyprctl monitors all
local omarchy_gdk_scale = 2
local omarchy_monitor_scale = "auto"
-- Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K. -- Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
hl.env("GDK_SCALE", "2") -- local omarchy_gdk_scale = 2
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = "auto" }) -- local omarchy_monitor_scale = "auto"
-- Good compromise for 27" or 32" 4K monitors (but fractional!) -- Good compromise for 27" or 32" 4K monitors (but fractional!): monitor scale 1.6, GDK scale 1.75.
-- hl.env("GDK_SCALE", "1.75") -- local omarchy_gdk_scale = 1.75
-- hl.monitor({ output = "", mode = "preferred", position = "auto", scale = 1.6 }) -- local omarchy_monitor_scale = 1.6
-- Straight 1x setup for low-resolution displays like 1080p or 1440p. -- Straight 1x setup for low-resolution displays like 1080p, 1440p, or ultrawides: both 1.
-- Or for ultrawide monitors like 34" 3440x1440 or 49" 5120x1440. -- local omarchy_gdk_scale = 1
-- hl.env("GDK_SCALE", "1") -- local omarchy_monitor_scale = 1
-- hl.monitor({ output = "", mode = "preferred", position = "auto", scale = 1 })
hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })
-- Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°) -- Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°)
-- hl.monitor({ output = "DP-2", mode = "preferred", position = "auto", scale = 1, transform = 1 }) -- hl.monitor({ output = "DP-2", mode = "preferred", position = "auto", scale = 1, transform = 1 })