diff --git a/.config/ags/modules/sideleft/tools/changeres.sh b/.config/ags/modules/sideleft/tools/changeres.sh new file mode 100644 index 000000000..333f09881 --- /dev/null +++ b/.config/ags/modules/sideleft/tools/changeres.sh @@ -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." diff --git a/.config/ags/modules/sideleft/tools/quickscripts.js b/.config/ags/modules/sideleft/tools/quickscripts.js index c928cc4cd..09fdb1b15 100644 --- a/.config/ags/modules/sideleft/tools/quickscripts.js +++ b/.config/ags/modules/sideleft/tools/quickscripts.js @@ -11,6 +11,12 @@ import { setupCursorHover } from '../../.widgetutils/cursorhover.js'; import { distroID, isArchDistro, isDebianDistro, hasFlatpak } from '../../.miscutils/system.js'; const scripts = [ + { + icon: 'desktop-symbolic', + name: 'Change screen resolution', + command: `bash ${App.configDir}/modules/sideleft/tools/changeres.sh`, + enabled: true, + }, { icon: 'nixos-symbolic', name: 'Trim system generations to 5',