Compare commits

..

3 Commits

Author SHA1 Message Date
Dawson Matthews
39d46fa9e1 removed alternate load profile script and finished up the original one. ready for testing I believe. 2025-12-04 06:57:39 -07:00
Dawson Matthews
4bbe14f8f2 working recognition of enabled/disabled outputs 2025-12-04 06:55:51 -07:00
Dawson Matthews
9e990cf58d making changes to get back lost progress from yesterday 2025-12-04 06:52:15 -07:00
3 changed files with 73 additions and 157 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
profiles/*.json

View File

@@ -25,18 +25,43 @@ if ! command -v kscreen-doctor &>/dev/null; then
exit 1
fi
#######################
# Parse JSON + restore
#######################
# Extract outputs list
enabled_outputs=$(jq -c '.outputs[] | select(.enabled == true)' "$PROFILE")
echo "enabled:"
echo $enabled_outputs
disabled_outputs=$(jq -c '.outputs[] | select(.enabled == false)' "$PROFILE")
echo "disabled:"
echo $disabled_outputs
outputs=$(jq -c '.outputs[]' "$PROFILE")
# 1. Restore enabled/disabled + basic properties
# Restore enabled/disabled starting with the enabled monitors
# Starting with a disabled monitor might not work if it was
# previously the only enabled monitor
function enable_outputs {
local outputs=$1
while IFS= read -r out; do
id=$(echo "$out" | jq -r '.id')
name=$(echo "$out" | jq -r '.name')
enabled=$(echo "$out" | jq -r '.enabled')
# Enable/disable
if [[ "$enabled" == "true" ]]; then
kscreen-doctor "output.$name.enable"
else
kscreen-doctor "output.$name.disable"
fi
done <<< "$outputs"
}
enable_outputs $enabled_outputs
enable_outputs $disabled_outputs
function load_profile_to_outputs {
local outputs=$1
while IFS= read -r out; do
id=$(echo "$out" | jq -r '.id')
name=$(echo "$out" | jq -r '.name')
posx=$(echo "$out" | jq -r '.pos.x')
posy=$(echo "$out" | jq -r '.pos.y')
rotation=$(echo "$out" | jq -r '.rotation')
@@ -44,14 +69,6 @@ while IFS= read -r out; do
mode=$(echo "$out" | jq -r '.currentModeId')
priority=$(echo "$out" | jq -r '.priority')
# Enable/disable
if [[ "$enabled" == "true" ]]; then
kscreen-doctor "output.$id.enable"
else
kscreen-doctor "output.$id.disable"
continue
fi
# Mode (Resolution + refresh)
kscreen-doctor "output.$id.mode.$mode"
@@ -75,9 +92,10 @@ while IFS= read -r out; do
kscreen-doctor "output.$id.primary"
fi
done <<< "$outputs"
}
load_profile_to_outputs $outputs
#########################
# 2. Restore clone groups
@@ -85,6 +103,8 @@ done <<< "$outputs"
clone_groups=$(jq -c '.clones[]?' "$PROFILE")
function restore_clone_groups {
local clone_groups=$1
while IFS= read -r clone; do
primary=$(echo "$clone" | jq -r '.[0]')
others=$(echo "$clone" | jq -r '.[]' | tail -n +2)
@@ -93,5 +113,8 @@ while IFS= read -r clone; do
kscreen-doctor "output.$o.clone.$primary"
done
done <<< "$clone_groups"
}
restore_clone_groups $clone_groups
echo "Display configuration restored."

View File

@@ -1,108 +0,0 @@
#!/usr/bin/env bash
set -e
# Make sure a config file was provided
if [ $# -lt 1 ]; then
echo "Usage: $0 <config file>"
exit
fi
PROFILE=$1
if [[ ! -f "$PROFILE" ]]; then
echo "Profile file not found: $PROFILE" >&2
exit 1
fi
if ! command -v jq &>/dev/null; then
echo "jq not installed!" >&2
exit 1
fi
if ! command -v kscreen-doctor &>/dev/null; then
echo "kscreen-doctor not found!" >&2
exit 1
fi
#######################
# Parse JSON + ordering
#######################
# Extract output entries based on positions
origin_out=$(jq -c '.outputs[] | select(.pos.x == 0 and .pos.y == 0 and .enabled == true)' "$PROFILE")
non_origin_outs=$(jq -c '.outputs[] | select(.pos.x != 0 or .pos.y != 0 or .enable == false)' "$PROFILE")
#######################
# Function: Apply output
#######################
apply_output() {
local out="$1"
id=$(echo "$out" | jq -r '.id')
posx=$(echo "$out" | jq -r '.pos.x')
posy=$(echo "$out" | jq -r '.pos.y')
rotation=$(echo "$out" | jq -r '.rotation')
scale=$(echo "$out" | jq -r '.scale')
mode=$(echo "$out" | jq -r '.currentModeId')
priority=$(echo "$out" | jq -r '.priority')
enabled=$(echo "$out" | jq -r '.enabled')
# Enable/disable
if [[ "$enabled" == "true" ]]; then
kscreen-doctor "output.$id.enable"
else
kscreen-doctor "output.$id.disable"
return
fi
# Mode
kscreen-doctor "output.$id.mode.$mode"
# Position
kscreen-doctor "output.$id.position.$posx,$posy"
# Scale
kscreen-doctor "output.$id.scale.$scale"
# Rotation
case "$rotation" in
"1") kscreen-doctor "output.$id.rotation.normal" ;;
"2") kscreen-doctor "output.$id.rotation.left" ;;
"4") kscreen-doctor "output.$id.rotation.inverted" ;;
"8") kscreen-doctor "output.$id.rotation.right" ;;
esac
# Primary
if [ "$priority" -eq 1 ]; then
kscreen-doctor "output.$id.primary"
fi
}
if [[ -n "$origin_out" ]]; then
apply_output "$origin_out"
fi
while IFS= read -r out; do
apply_output "$out"
done <<< "$non_origin_outs"
#########################
# 3. Restore clone groups
#########################
clone_groups=$(jq -c '.clones[]?' "$PROFILE")
while IFS= read -r clone; do
primary=$(echo "$clone" | jq -r '.[0]')
others=$(echo "$clone" | jq -r '.[]' | tail -n +2)
for o in $others; do
kscreen-doctor "output.$o.clone.$primary"
done
done <<< "$clone_groups"
echo "Display configuration restored."