#!/bin/bash

xorg_modeline_conf="/etc/X11/xorg.conf.d/10-software-connector-modes.conf"

[ -e /etc/astra/mobile_version ] || exit 1
[ -e $xorg_modeline_conf ] && exit 0

internal_connectors=("DSI eDP LVDS")

iterate_connectors() {
    internal_connector=""
    modeline=""

    [ x"$1" = x"internal" ] || modeline="$1"

    for p in /sys/class/drm/*/modes; do
        con=${p%/modes}
        connector=$(echo ${con#*/card?-} | sed "s/-[a-z|A-Z]//")
        connector_type=$(echo $connector | cut -d '-' -f1 | tr -s ' ')

        if grep -wq "$connector_type" <<<"$internal_connectors"; then
            [ -z "$modeline" ] && echo `head -n1 $p | tr -s ' '`
        else
            [ -z "$modeline" ] || echo -e "Section \"Monitor\"\n\tIdentifier \"$connector\"\n\t$modeline\nEndSection\n"
        fi
    done
}

# find best mode for internal connector
best_mode="$(iterate_connectors internal)"
[ -z $best_mode ] && exit 1

mode_w=$(echo $best_mode | cut -d 'x' -f1)
mode_h=$(echo $best_mode | cut -d 'x' -f2)
cvt_modeline=""

# generate modeline
if [ $mode_h -gt $mode_w ]; then
    cvt_modeline=`cvt $mode_h $mode_w 60 | tail -n1`
else
    cvt_modeline=`cvt $mode_w $mode_h 60 | tail -n1`
fi

# generate X11 configuration file
iterate_connectors "$cvt_modeline" > $xorg_modeline_conf
