From 447b619f76577b640b6cb1f869a2fba77db6030f Mon Sep 17 00:00:00 2001 From: Stephan Date: Thu, 26 Feb 2026 18:14:51 -0800 Subject: [PATCH] changed monitor and updated hyprland window rules - 59in baby --- hypr/hyprland/windowrules.conf | 12 ++- hypr/scripts/monitor_setup.sh | 136 ++++++++++++--------------------- 2 files changed, 60 insertions(+), 88 deletions(-) diff --git a/hypr/hyprland/windowrules.conf b/hypr/hyprland/windowrules.conf index 9629f81..d3d95d8 100644 --- a/hypr/hyprland/windowrules.conf +++ b/hypr/hyprland/windowrules.conf @@ -2,6 +2,14 @@ #██ ▄█▄ ██ ██ ██ ▀▄██ ██ ██ ██ ██ ██ ▄█▄ ██ ██▄▄██▄ ██ ██ ██ ██▄▄ ▀▀▀▄▄▄ # ▀██▀██▀ ██ ██ ██ ████▀ ▀████▀ ▀██▀██▀ ██ ██ ▀████▀ ██████ ██▄▄▄▄ █████▀ -# Ignore maximize requests from apps. You'll probably like this. -windowrule = suppress_event maximize fullscreen, +# Fix some dragging issues with XWayland +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 diff --git a/hypr/scripts/monitor_setup.sh b/hypr/scripts/monitor_setup.sh index af2b738..2bfe404 100755 --- a/hypr/scripts/monitor_setup.sh +++ b/hypr/scripts/monitor_setup.sh @@ -1,139 +1,103 @@ #!/bin/bash # ~/.config/hypr/scripts/monitor_setup.sh + notify-send -t 3000 "Monitor Setup" "Detecting display configuration..." + LAPTOP="eDP-1" LID_STATE=$(grep -q "open" /proc/acpi/button/lid/LID/state && echo "open" || echo "closed") 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) -# Improved function to get the maximum resolution with highest refresh rate -get_max_res() { +get_capped_res() { local monitor=$1 - - # Get all available modes for the monitor local modes=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$monitor\") | .availableModes[]") - + if [[ -z "$modes" ]]; then echo "preferred" return fi - - # Find the mode with the highest resolution and refresh rate + local max_pixels=0 local max_refresh=0 local best_mode="preferred" - + 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 height=$(echo "$mode" | awk -F'@' '{print $1}' | awk -F'x' '{print $2}') 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)) - - # 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 max_pixels=$pixels max_refresh=$refresh best_mode="${width}x${height}@${refresh}" fi done <<< "$modes" - + echo "$best_mode" } -# Alternative method to get max resolution using hyprctl -get_max_res_alt() { - 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" -} +EXT_RES=$(get_capped_res "$EXTERNAL") +LAPTOP_RES=$(get_capped_res "$LAPTOP") -# Get resolution for monitors - try both methods -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 +# Case 1: Laptop Only 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" - # Wait for monitors to be ready - sleep 1 - for ws in {1..5}; do - hyprctl keyword "workspace $ws,monitor:$LAPTOP" >/dev/null 2>&1 - hyprctl dispatch workspace "$ws" >/dev/null 2>&1 - hyprctl dispatch moveworkspacetomonitor $ws $LAPTOP 2>/dev/null + hyprctl dispatch workspace "$ws" # Ensure workspace exists + hyprctl keyword "workspace $ws,monitor:$LAPTOP" done exit 0 fi -# Case 2: External + open lid +# Case 2: External + Open Lid if [ "$LID_STATE" = "open" ]; then - notify-send -t 3000 "Monitor Setup" "Dual monitor mode (Laptop + External)\nLaptop: $LAPTOP_RES\nExternal: $EXT_RES" - hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,auto,1" - hyprctl keyword monitor "$EXTERNAL,$EXT_RES,auto,1" + notify-send -t 3000 "Monitor Setup" "Dual Mode\nExternal: $EXT_RES (VRR On)" - # 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 - - for ws in {1..3}; do - hyprctl keyword "workspace $ws,monitor:$LAPTOP" >/dev/null 2>&1 - hyprctl dispatch workspace "$ws" >/dev/null 2>&1 - hyprctl dispatch moveworkspacetomonitor $ws $LAPTOP 2>/dev/null + + # Workspace 1 & 2 to Big Screen + for ws in 1 2; do + hyprctl dispatch workspace "$ws" + hyprctl keyword "workspace $ws,monitor:$EXTERNAL" + hyprctl dispatch moveworkspacetomonitor "$ws" "$EXTERNAL" done - for ws in {4..5}; do - hyprctl keyword "workspace $ws,monitor:$EXTERNAL" >/dev/null 2>&1 - hyprctl dispatch workspace "$ws" >/dev/null 2>&1 - hyprctl dispatch moveworkspacetomonitor $ws $EXTERNAL 2>/dev/null - done -# Case 3: External + closed lid + # Workspace 3 to Laptop + hyprctl dispatch workspace 3 + hyprctl keyword "workspace 3,monitor:$LAPTOP" + hyprctl dispatch moveworkspacetomonitor 3 "$LAPTOP" + +# Case 3: External Only (Clamshell) 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 keyword monitor "$LAPTOP,disable" - hyprctl keyword monitor "$EXTERNAL,$EXT_RES,0x0,1" - - # Wait for monitors to be ready + hyprctl keyword monitor "$EXTERNAL,$EXT_RES,0x0,1,vrr,1" + sleep 1 - + for ws in {1..5}; do - hyprctl keyword "workspace $ws,monitor:$EXTERNAL" >/dev/null 2>&1 - hyprctl dispatch workspace "$ws" >/dev/null 2>&1 - hyprctl dispatch moveworkspacetomonitor $ws $EXTERNAL 2>/dev/null + hyprctl dispatch workspace "$ws" + hyprctl keyword "workspace $ws,monitor:$EXTERNAL" + hyprctl dispatch moveworkspacetomonitor "$ws" "$EXTERNAL" done fi -# Debug output - helpful for troubleshooting -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')" +hyprctl dispatch workspace 1