Files
mangotune/scripts/mangohud-position-matrix.sh
T
2026-03-30 23:06:06 -04:00

98 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
mangohud-position-matrix.sh [app] [output_dir] [profile_dir]
Examples:
mangohud-position-matrix.sh vkcube /tmp/mh-matrix
DISPLAY=:1 XAUTHORITY=/root/.Xauthority mangohud-position-matrix.sh glxgears /tmp/mh-matrix /home/aaron/mangotune-test-profiles
What it does:
- finds the standard MangoTune right-alignment test profiles
- generates margin-on and margin-off variants
- runs MangoHud directly for each case using mangohud-position-lab.sh
- stores generated configs and capture artifacts under the output dir
EOF
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
usage
exit 0
fi
APP="${1:-vkcube}"
OUTPUT_DIR="${2:-/tmp/mangohud-position-matrix}"
PROFILE_DIR="${3:-$HOME/.config/mangotune/profiles}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LAB_SCRIPT="$SCRIPT_DIR/mangohud-position-lab.sh"
if [[ ! -x "$LAB_SCRIPT" ]]; then
chmod +x "$LAB_SCRIPT" 2>/dev/null || true
fi
mkdir -p "$OUTPUT_DIR/generated"
profiles=(
"zz_test_right_full_top"
"zz_test_right_full_middle"
"zz_test_right_sparse_top"
"zz_test_right_sparse_middle"
"zz_test_right_sparse_compact_top"
"zz_test_right_sparse_compact_middle"
)
ensure_flag_state() {
local input_file="$1"
local output_file="$2"
local flag="$3"
local enabled="$4"
awk -v flag="$flag" -v enabled="$enabled" '
BEGIN { saw = 0 }
{
trimmed = $0
gsub(/^[[:space:]]+/, "", trimmed)
if (trimmed == flag || trimmed == "# " flag || trimmed == "#" flag) {
if (enabled == "1") {
print flag
} else {
print "# " flag
}
saw = 1
next
}
print $0
}
END {
if (!saw && enabled == "1") {
print flag
}
}
' "$input_file" >"$output_file"
}
for profile in "${profiles[@]}"; do
base="$PROFILE_DIR/$profile.conf"
[[ -f "$base" ]] || continue
for margin_state in margin_on margin_off; do
generated="$OUTPUT_DIR/generated/${profile}_${margin_state}.conf"
case "$margin_state" in
margin_on)
ensure_flag_state "$base" "$generated" "hud_no_margin" 0
;;
margin_off)
ensure_flag_state "$base" "$generated" "hud_no_margin" 1
;;
esac
case_out="$OUTPUT_DIR/${profile}_${margin_state}_${APP}"
"$LAB_SCRIPT" "$generated" "$APP" "$case_out"
done
done
echo "Matrix artifacts written to $OUTPUT_DIR"