Finally add all dotfiles correctly
This commit is contained in:
130
hypr/scripts/monitor_setup.sh
Executable file
130
hypr/scripts/monitor_setup.sh
Executable file
@@ -0,0 +1,130 @@
|
||||
#!/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)
|
||||
|
||||
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() {
|
||||
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
|
||||
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"
|
||||
}
|
||||
|
||||
# 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
|
||||
if [ -z "$EXTERNAL" ]; then
|
||||
notify-send -t 3000 "Monitor Setup" "Laptop-only mode\nUsing: $LAPTOP_RES"
|
||||
hyprctl keyword monitor "$LAPTOP,$LAPTOP_RES,auto,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
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 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"
|
||||
|
||||
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
|
||||
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
|
||||
else
|
||||
notify-send -t 3000 "Monitor Setup" "External monitor only (Lid closed)\nUsing: $EXT_RES"
|
||||
hyprctl dispatch dpms off "$LAPTOP"
|
||||
hyprctl keyword monitor "$LAPTOP,disable"
|
||||
hyprctl keyword monitor "$EXTERNAL,$EXT_RES,0x0,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
|
||||
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')"
|
||||
118
hypr/scripts/monitor_setup.sh.dual-not_working
Executable file
118
hypr/scripts/monitor_setup.sh.dual-not_working
Executable file
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env bash
|
||||
# Robust Monitor Setup with Workspace Assignments
|
||||
|
||||
notify-send "Monitor Setup" "Starting configuration..."
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Phase 1: Reset State
|
||||
# -------------------------------------------------------------------
|
||||
#hyprctl keyword monitor "" # Clear all monitor rules
|
||||
#hyprctl keyword workspace "" # Clear workspace assignments
|
||||
#sleep 1
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Phase 2: Hardware Detection
|
||||
# -------------------------------------------------------------------
|
||||
MONITORS=$(hyprctl monitors -j all)
|
||||
LAPTOP="eDP-1"
|
||||
LID_STATE=$(cat /proc/acpi/button/lid/LID0/state | awk '{print $2}')
|
||||
EXTERNAL_MONITORS=($(echo "$MONITORS" | jq -r '.[] | select(.name != "eDP-1") | .name'))
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Phase 3: Configuration
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
# Case 1: No externals - Laptop only
|
||||
if [ ${#EXTERNAL_MONITORS[@]} -eq 0 ]; then
|
||||
notify-send "Monitor Setup" "Laptop-only mode"
|
||||
hyprctl keyword monitor "$LAPTOP,1920x1200@60,0x0,1.5"
|
||||
sleep 1
|
||||
|
||||
# Assign all workspaces to laptop
|
||||
for ws in {1..10}; do
|
||||
hyprctl keyword "workspace $ws, monitor:$LAPTOP"
|
||||
done
|
||||
|
||||
# Case 2: Any external monitors
|
||||
else
|
||||
# Try to identify known monitors by serial
|
||||
ULTRAWIDE=$(echo "$MONITORS" | jq -r '.[] | select(.serial == "303NTLE84432") | .name')
|
||||
STANDARD=$(echo "$MONITORS" | jq -r '.[] | select(.serial == "H4LN801666") | .name')
|
||||
|
||||
# Dual monitor setup (known monitors)
|
||||
if [ -n "$ULTRAWIDE" ] && [ -n "$STANDARD" ]; then
|
||||
notify-send "Monitor Setup" "Dual monitor mode (Ultrawide + Standard)"
|
||||
|
||||
# Configure monitors
|
||||
hyprctl keyword monitor "$ULTRAWIDE,5120x1440@120,0x1440,1"
|
||||
sleep 1
|
||||
hyprctl keyword monitor "$STANDARD,3440x1440@60,840x0,1"
|
||||
sleep 1
|
||||
hyprctl dispatch dpms off "$LAPTOP"
|
||||
|
||||
# Workspace assignments:
|
||||
# 1-4 on Ultrawide, 5-10 on Standard
|
||||
for ws in {1..4}; do
|
||||
hyprctl keyword "workspace $ws, monitor:$ULTRAWIDE"
|
||||
hyprctl dispatch moveworkspacetomonitor "$ws $ULTRAWIDE"
|
||||
done
|
||||
for ws in {5..9}; do
|
||||
hyprctl keyword "workspace $ws, monitor:$STANDARD"
|
||||
hyprctl dispatch moveworkspacetomonitor "$ws $STANDARD"
|
||||
done
|
||||
|
||||
hyprctl keyword "workspace 10, monitor:$LAPTOP"
|
||||
hyprctl dispatch moveworkspacetomonitor "10 $LAPTOP"
|
||||
|
||||
# Single external (any monitor)
|
||||
else
|
||||
EXT_MON=${EXTERNAL_MONITORS[0]}
|
||||
notify-send "Monitor Setup" "Single external: $EXT_MON"
|
||||
|
||||
# Get max resolution
|
||||
MAX_RES=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$EXT_MON\") | .availableModes[0] | \"\(.width)x\(.height)@\(.refreshRate)\"")
|
||||
|
||||
# Check lid state
|
||||
if [ "$LID_STATE" == "closed" ]; then
|
||||
# Lid closed - only external monitor
|
||||
notify-send "Monitor Setup" "Lid closed - using external only"
|
||||
hyprctl dispatch dpms off "$LAPTOP"
|
||||
hyprctl keyword monitor "$EXT_MON,$MAX_RES,0x0,1"
|
||||
sleep 1
|
||||
|
||||
hyprctl keyword "workspace 10, monitor:$LAPTOP"
|
||||
hyprctl dispatch moveworkspacetomonitor "10 $LAPTOP"
|
||||
|
||||
# Assign all workspaces to external
|
||||
for ws in {1..9}; do
|
||||
hyprctl keyword "workspace $ws, monitor:$EXT_MON"
|
||||
hyprctl dispatch moveworkspacetomonitor "$ws $EXT_MON"
|
||||
done
|
||||
|
||||
else
|
||||
# Lid open - both monitors
|
||||
notify-send "Monitor Setup" "Lid open - using laptop + external"
|
||||
hyprctl keyword monitor "$LAPTOP,1920x1200@60,0x0,1.5"
|
||||
sleep 1
|
||||
hyprctl keyword monitor "$EXT_MON,$MAX_RES,1920x0,1"
|
||||
sleep 1
|
||||
|
||||
# Workspace assignments:
|
||||
# 1-4 on laptop, 5-10 on external
|
||||
for ws in {1..4}; do
|
||||
hyprctl keyword "workspace $ws, monitor:$LAPTOP"
|
||||
hyprctl dispatch moveworkspacetomonitor "$ws $LAPTOP"
|
||||
done
|
||||
for ws in {5..10}; do
|
||||
hyprctl keyword "workspace $ws, monitor:$EXT_MON"
|
||||
hyprctl dispatch moveworkspacetomonitor "$ws $EXT_MON"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Finalization
|
||||
# -------------------------------------------------------------------
|
||||
sleep 1
|
||||
notify-send "Monitor Setup Complete" "Active configuration:\n$(hyprctl monitors)"
|
||||
60
hypr/scripts/monitor_setup.sh.old
Executable file
60
hypr/scripts/monitor_setup.sh.old
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Get all monitor info (including disabled)
|
||||
MONITORS=$(hyprctl monitors -j all)
|
||||
ALL_MONITORS=$(echo "$MONITORS" | jq -r '.[] | .name')
|
||||
EXTERNAL_COUNT=$(echo "$ALL_MONITORS" | grep -v "eDP-1" | wc -l)
|
||||
|
||||
#echo $MONITORS
|
||||
#echo $ALL_MONITORS
|
||||
#echo $EXTERNAL_COUNT
|
||||
|
||||
# Case 1: No externals - laptop only
|
||||
if [[ $EXTERNAL_COUNT -eq 0 ]]; then
|
||||
hyprctl keyword monitor "eDP-1,1920x1200@60,0x0,1"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Case 2: Single external monitor
|
||||
if [[ $EXTERNAL_COUNT -eq 1 ]]; then
|
||||
EXT_MON=$(echo "$ALL_MONITORS" | grep -v "eDP-1")
|
||||
MODES=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$EXT_MON\") | .availableModes | join(\" \")")
|
||||
MAX_RES=$(echo "$MODES" | grep -oE "[0-9]+x[0-9]+@[0-9.]+" | awk -F'[@x]' '{print $1,$2,$3}' | sort -k1,1nr -k2,2nr -k3,3nr | awk '{print $1"x"$2"@"$3}' | head -n1)
|
||||
|
||||
hyprctl keyword monitor "eDP-1,1920x1200@60,0x0,1"
|
||||
hyprctl keyword monitor "$EXT_MON,$MAX_RES,1920x0,1" # Right of laptop
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Identify our specific monitors
|
||||
ULTRAWIDE=""
|
||||
STANDARD_ULTRAWIDE=""
|
||||
|
||||
for MON in $(echo "$ALL_MONITORS"); do
|
||||
echo $MON
|
||||
[[ $MON == "eDP-1" ]] && continue
|
||||
|
||||
MODES=$(echo "$MONITORS" | jq -r ".[] | select(.name == \"$MON\") | .availableModes | join(\" \")")
|
||||
|
||||
echo $MODES
|
||||
|
||||
if [[ $MODES =~ "5120x1440" ]]; then
|
||||
ULTRAWIDE=$MON
|
||||
echo "Ultrawide = $ULTRAWIDE"
|
||||
elif [[ $MODES =~ "3440x1440" ]]; then
|
||||
STANDARD_ULTRAWIDE=$MON
|
||||
echo "Standard = $STANDARD_ULTRAWIDE"
|
||||
fi
|
||||
done
|
||||
|
||||
# Case 3: Dual monitor setup (only if we found both our specific monitors)
|
||||
if [[ -n "$ULTRAWIDE" && -n "$STANDARD_ULTRAWIDE" ]]; then
|
||||
echo "dual monitors"
|
||||
hyprctl keyword monitor "eDP-1,disable"
|
||||
hyprctl keyword monitor "$ULTRAWIDE,5120x1440@120,0x1440,1" # 49" at bottom
|
||||
hyprctl keyword monitor "$STANDARD_ULTRAWIDE,3440x1440@60,840x0,1" # 34" at top-left
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# If we get here, it's an unexpected configuration - do nothing
|
||||
notify-send "Error detecting monitors, no changes"
|
||||
Reference in New Issue
Block a user