forked from Shinonome/dots-hyprland
New Tool for Changing Screen Resolution (#700)
This commit is contained in:
@@ -0,0 +1,99 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Function to get the current resolution
|
||||||
|
get_current_resolution() {
|
||||||
|
local output
|
||||||
|
output=$(hyprctl monitors -j)
|
||||||
|
local width height refreshRate
|
||||||
|
width=$(echo "$output" | jq -r '.[0].width')
|
||||||
|
height=$(echo "$output" | jq -r '.[0].height')
|
||||||
|
refreshRate=$(echo "$output" | jq -r '.[0].refreshRate')
|
||||||
|
echo "$width $height $refreshRate"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to update the Hyprland configuration with the new resolution
|
||||||
|
update_resolution_config() {
|
||||||
|
local newWidth="$1"
|
||||||
|
local newHeight="$2"
|
||||||
|
local newRefreshRate="$3"
|
||||||
|
local currentRes
|
||||||
|
currentRes=$(get_current_resolution)
|
||||||
|
local width height refreshRate
|
||||||
|
width=${newWidth:-$(echo "$currentRes" | awk '{print $1}')}
|
||||||
|
height=${newHeight:-$(echo "$currentRes" | awk '{print $2}')}
|
||||||
|
refreshRate=${newRefreshRate:-$(echo "$currentRes" | awk '{print $3}')}
|
||||||
|
|
||||||
|
local modelineOutput
|
||||||
|
modelineOutput=$(gtf "$width" "$height" "$refreshRate")
|
||||||
|
local modeline
|
||||||
|
modeline=$(echo "$modelineOutput" | grep -oP 'Modeline "\K[^"]+')
|
||||||
|
|
||||||
|
if [ -z "$modeline" ]; then
|
||||||
|
echo "Failed to generate modeline"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract the resolution and refresh rate from the modeline
|
||||||
|
local resolution
|
||||||
|
resolution=$(echo "$modeline" | grep -oP '^[0-9]+x[0-9]+')
|
||||||
|
local rate
|
||||||
|
rate=$(echo "$modeline" | grep -oP '[0-9]+.[0-9]+$')
|
||||||
|
|
||||||
|
if [ -z "$resolution" ] || [ -z "$rate" ]; then
|
||||||
|
echo "Failed to extract resolution or refresh rate from modeline"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local configPath="${HOME}/.config/hypr/hyprland/general.conf"
|
||||||
|
local newConfigContent
|
||||||
|
newConfigContent=$(sed "s/^monitor=.*$/monitor=eDP-1, $resolution@$rate, auto, 1/" "$configPath")
|
||||||
|
|
||||||
|
echo "$newConfigContent" > "$configPath"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script
|
||||||
|
echo "Welcome to the Resolution Configurator"
|
||||||
|
echo ""
|
||||||
|
echo " +---------------------------+"
|
||||||
|
echo " | _____ |"
|
||||||
|
echo " | | | |"
|
||||||
|
echo " | | | |"
|
||||||
|
echo " | |_____| |"
|
||||||
|
echo " | |"
|
||||||
|
echo " +---------------------------+"
|
||||||
|
echo ""
|
||||||
|
echo "Current resolution and refresh rate:"
|
||||||
|
currentRes=$(get_current_resolution)
|
||||||
|
width=$(echo "$currentRes" | awk '{print $1}')
|
||||||
|
height=$(echo "$currentRes" | awk '{print $2}')
|
||||||
|
refreshRate=$(echo "$currentRes" | awk '{print $3}')
|
||||||
|
|
||||||
|
echo "Width: $width px"
|
||||||
|
echo "Height: $height px"
|
||||||
|
echo "Refresh Rate: $refreshRate Hz"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "Enter new width (or press Enter to keep current width): " newWidth
|
||||||
|
read -p "Enter new height (or press Enter to keep current height): " newHeight
|
||||||
|
read -p "Enter new refresh rate (or press Enter to keep current refresh rate): " newRefreshRate
|
||||||
|
|
||||||
|
# Validate inputs (if provided)
|
||||||
|
if [[ ! "$newWidth" =~ ^[0-9]+$ && -n "$newWidth" ]]; then
|
||||||
|
echo "Invalid width value."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! "$newHeight" =~ ^[0-9]+$ && -n "$newHeight" ]]; then
|
||||||
|
echo "Invalid height value."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! "$newRefreshRate" =~ ^[0-9]+$ && -n "$newRefreshRate" ]]; then
|
||||||
|
echo "Invalid refresh rate value."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
update_resolution_config "$newWidth" "$newHeight" "$newRefreshRate"
|
||||||
|
|
||||||
|
echo "Resolution updated successfully."
|
||||||
@@ -11,6 +11,12 @@ import { setupCursorHover } from '../../.widgetutils/cursorhover.js';
|
|||||||
import { distroID, isArchDistro, isDebianDistro, hasFlatpak } from '../../.miscutils/system.js';
|
import { distroID, isArchDistro, isDebianDistro, hasFlatpak } from '../../.miscutils/system.js';
|
||||||
|
|
||||||
const scripts = [
|
const scripts = [
|
||||||
|
{
|
||||||
|
icon: 'desktop-symbolic',
|
||||||
|
name: 'Change screen resolution',
|
||||||
|
command: `bash ${App.configDir}/modules/sideleft/tools/changeres.sh`,
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
icon: 'nixos-symbolic',
|
icon: 'nixos-symbolic',
|
||||||
name: 'Trim system generations to 5',
|
name: 'Trim system generations to 5',
|
||||||
|
|||||||
Reference in New Issue
Block a user