changed monitor and updated hyprland window rules - 59in baby

This commit is contained in:
2026-02-26 18:14:51 -08:00
parent 1c875d57cc
commit 447b619f76
2 changed files with 60 additions and 88 deletions

View File

@@ -2,6 +2,14 @@
#██ ▄█▄ ██ ██ ██ ▀▄██ ██ ██ ██ ██ ██ ▄█▄ ██ ██▄▄██▄ ██ ██ ██ ██▄▄ ▀▀▀▄▄▄ #██ ▄█▄ ██ ██ ██ ▀▄██ ██ ██ ██ ██ ██ ▄█▄ ██ ██▄▄██▄ ██ ██ ██ ██▄▄ ▀▀▀▄▄▄
# ▀██▀██▀ ██ ██ ██ ████▀ ▀████▀ ▀██▀██▀ ██ ██ ▀████▀ ██████ ██▄▄▄▄ █████▀ # ▀██▀██▀ ██ ██ ██ ████▀ ▀████▀ ▀██▀██▀ ██ ██ ▀████▀ ██████ ██▄▄▄▄ █████▀
# Ignore maximize requests from apps. You'll probably like this. # Fix some dragging issues with XWayland
windowrule = suppress_event maximize fullscreen, windowrule = match:class ^$, match:title ^$, match:xwayland 1, match:float 0, match:fullscreen 0, match:pin 0, no_focus on
# Prevent apps from auto-maximizing themselves
windowrule = suppress_event maximize, match:class .*
# 97% opacity when focused, 90% when unfocused
windowrule = opacity 0.97 0.9, match:class .*
# Runelite specific rule
windowrule = match:class ^(net-runelite-client-RuneLite)$, float on, size 1600 850, center on

View File

@@ -1,139 +1,103 @@
#!/bin/bash #!/bin/bash
# ~/.config/hypr/scripts/monitor_setup.sh # ~/.config/hypr/scripts/monitor_setup.sh
notify-send -t 3000 "Monitor Setup" "Detecting display configuration..." notify-send -t 3000 "Monitor Setup" "Detecting display configuration..."
LAPTOP="eDP-1" LAPTOP="eDP-1"
LID_STATE=$(grep -q "open" /proc/acpi/button/lid/LID/state && echo "open" || echo "closed") LID_STATE=$(grep -q "open" /proc/acpi/button/lid/LID/state && echo "open" || echo "closed")
MONITORS=$(hyprctl monitors -j) MONITORS=$(hyprctl monitors -j)
if [[ $(echo "$MONITORS" | jq 'length') -eq 0 ]]; then
notify-send "Monitor Error" "No monitors detected."
exit 1
fi
EXTERNAL=$(echo "$MONITORS" | jq -r '.[] | select(.name != "'$LAPTOP'") | .name' | head -1) EXTERNAL=$(echo "$MONITORS" | jq -r '.[] | select(.name != "'$LAPTOP'") | .name' | head -1)
# Improved function to get the maximum resolution with highest refresh rate get_capped_res() {
get_max_res() {
local monitor=$1 local monitor=$1
# Get all available modes for the monitor
local modes=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$monitor\") | .availableModes[]") local modes=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$monitor\") | .availableModes[]")
if [[ -z "$modes" ]]; then if [[ -z "$modes" ]]; then
echo "preferred" echo "preferred"
return return
fi fi
# Find the mode with the highest resolution and refresh rate
local max_pixels=0 local max_pixels=0
local max_refresh=0 local max_refresh=0
local best_mode="preferred" local best_mode="preferred"
while IFS= read -r mode; do while IFS= read -r mode; do
# Extract width, height, and refresh rate
local width=$(echo "$mode" | awk -F'@' '{print $1}' | awk -F'x' '{print $1}') local width=$(echo "$mode" | awk -F'@' '{print $1}' | awk -F'x' '{print $1}')
local height=$(echo "$mode" | awk -F'@' '{print $1}' | awk -F'x' '{print $2}') local height=$(echo "$mode" | awk -F'@' '{print $1}' | awk -F'x' '{print $2}')
local refresh=$(echo "$mode" | awk -F'@' '{print $2}' | sed 's/Hz//') local refresh=$(echo "$mode" | awk -F'@' '{print $2}' | sed 's/Hz//')
# Calculate total pixels (width × height) for better comparison if (( $(echo "$refresh > 120.1" | bc -l) )); then
continue
fi
local pixels=$((width * height)) local pixels=$((width * height))
# First prioritize by total pixel count (resolution), then by refresh rate
if [[ $pixels -gt $max_pixels || ($pixels -eq $max_pixels && $(echo "$refresh > $max_refresh" | bc -l) -eq 1) ]]; then if [[ $pixels -gt $max_pixels || ($pixels -eq $max_pixels && $(echo "$refresh > $max_refresh" | bc -l) -eq 1) ]]; then
max_pixels=$pixels max_pixels=$pixels
max_refresh=$refresh max_refresh=$refresh
best_mode="${width}x${height}@${refresh}" best_mode="${width}x${height}@${refresh}"
fi fi
done <<< "$modes" done <<< "$modes"
echo "$best_mode" echo "$best_mode"
} }
# Alternative method to get max resolution using hyprctl EXT_RES=$(get_capped_res "$EXTERNAL")
get_max_res_alt() { LAPTOP_RES=$(get_capped_res "$LAPTOP")
local monitor=$1
local modes=$(hyprctl monitors -j | jq -r ".[] | select(.name == \"$monitor\") | .availableModes[]")
if [[ -z "$modes" ]]; then
# Try querying wlr-randr directly as a fallback
if command -v wlr-randr &> /dev/null; then
modes=$(wlr-randr | grep -A 10 "$monitor" | grep -o '[0-9]\+x[0-9]\+@[0-9.]\+Hz')
fi
fi
if [[ -z "$modes" ]]; then
echo "preferred"
return
fi
# Find highest resolution with best refresh rate
local best_mode=$(echo "$modes" | sort -nr -k1 -t'x' -k2 -t'@' | head -1)
echo "$best_mode"
}
# Get resolution for monitors - try both methods # Case 1: Laptop Only
EXT_RES=$(get_max_res "$EXTERNAL")
if [[ "$EXT_RES" == "preferred" ]]; then
EXT_RES=$(get_max_res_alt "$EXTERNAL")
fi
LAPTOP_RES=$(get_max_res "$LAPTOP")
if [[ "$LAPTOP_RES" == "preferred" ]]; then
LAPTOP_RES=$(get_max_res_alt "$LAPTOP")
fi
# Case 1: Only laptop
if [ -z "$EXTERNAL" ]; then if [ -z "$EXTERNAL" ]; then
notify-send -t 3000 "Monitor Setup" "Laptop-only mode\nUsing: $LAPTOP_RES" notify-send -t 3000 "Monitor Setup" "Laptop Mode: $LAPTOP_RES"
hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,auto,1" hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,auto,1"
# Wait for monitors to be ready
sleep 1
for ws in {1..5}; do for ws in {1..5}; do
hyprctl keyword "workspace $ws,monitor:$LAPTOP" >/dev/null 2>&1 hyprctl dispatch workspace "$ws" # Ensure workspace exists
hyprctl dispatch workspace "$ws" >/dev/null 2>&1 hyprctl keyword "workspace $ws,monitor:$LAPTOP"
hyprctl dispatch moveworkspacetomonitor $ws $LAPTOP 2>/dev/null
done done
exit 0 exit 0
fi fi
# Case 2: External + open lid # Case 2: External + Open Lid
if [ "$LID_STATE" = "open" ]; then if [ "$LID_STATE" = "open" ]; then
notify-send -t 3000 "Monitor Setup" "Dual monitor mode (Laptop + External)\nLaptop: $LAPTOP_RES\nExternal: $EXT_RES" notify-send -t 3000 "Monitor Setup" "Dual Mode\nExternal: $EXT_RES (VRR On)"
hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,auto,1"
hyprctl keyword monitor "$EXTERNAL,$EXT_RES,auto,1"
# Wait for monitors to be ready hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,0x0,1"
hyprctl keyword monitor "$EXTERNAL,$EXT_RES,auto,1,vrr,1"
sleep 1 sleep 1
for ws in {1..3}; do # Workspace 1 & 2 to Big Screen
hyprctl keyword "workspace $ws,monitor:$LAPTOP" >/dev/null 2>&1 for ws in 1 2; do
hyprctl dispatch workspace "$ws" >/dev/null 2>&1 hyprctl dispatch workspace "$ws"
hyprctl dispatch moveworkspacetomonitor $ws $LAPTOP 2>/dev/null hyprctl keyword "workspace $ws,monitor:$EXTERNAL"
hyprctl dispatch moveworkspacetomonitor "$ws" "$EXTERNAL"
done done
for ws in {4..5}; do # Workspace 3 to Laptop
hyprctl keyword "workspace $ws,monitor:$EXTERNAL" >/dev/null 2>&1 hyprctl dispatch workspace 3
hyprctl dispatch workspace "$ws" >/dev/null 2>&1 hyprctl keyword "workspace 3,monitor:$LAPTOP"
hyprctl dispatch moveworkspacetomonitor $ws $EXTERNAL 2>/dev/null hyprctl dispatch moveworkspacetomonitor 3 "$LAPTOP"
done
# Case 3: External + closed lid # Case 3: External Only (Clamshell)
else else
notify-send -t 3000 "Monitor Setup" "External monitor only (Lid closed)\nUsing: $EXT_RES" notify-send -t 3000 "Monitor Setup" "Clamshell Mode\nExternal: $EXT_RES (VRR On)"
hyprctl dispatch dpms off "$LAPTOP" hyprctl dispatch dpms off "$LAPTOP"
hyprctl keyword monitor "$LAPTOP,disable" hyprctl keyword monitor "$LAPTOP,disable"
hyprctl keyword monitor "$EXTERNAL,$EXT_RES,0x0,1" hyprctl keyword monitor "$EXTERNAL,$EXT_RES,0x0,1,vrr,1"
# Wait for monitors to be ready
sleep 1 sleep 1
for ws in {1..5}; do for ws in {1..5}; do
hyprctl keyword "workspace $ws,monitor:$EXTERNAL" >/dev/null 2>&1 hyprctl dispatch workspace "$ws"
hyprctl dispatch workspace "$ws" >/dev/null 2>&1 hyprctl keyword "workspace $ws,monitor:$EXTERNAL"
hyprctl dispatch moveworkspacetomonitor $ws $EXTERNAL 2>/dev/null hyprctl dispatch moveworkspacetomonitor "$ws" "$EXTERNAL"
done done
fi fi
# Debug output - helpful for troubleshooting hyprctl dispatch workspace 1
echo "Monitor Configuration:" > /tmp/hypr_monitor_debug.log
echo "LAPTOP: $LAPTOP with resolution $LAPTOP_RES" >> /tmp/hypr_monitor_debug.log
echo "EXTERNAL: $EXTERNAL with resolution $EXT_RES" >> /tmp/hypr_monitor_debug.log
echo "LID_STATE: $LID_STATE" >> /tmp/hypr_monitor_debug.log
hyprctl monitors >> /tmp/hypr_monitor_debug.log
notify-send -t 5000 "Monitor Setup Complete" "Active configuration:\n$(hyprctl monitors | grep -E 'Monitor|workspace|resolution')"