#!/bin/sh
# env
# Written in 2022-2023 by Lucas
# CC0 1.0 Universal/Public domain - No rights reserved
#
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
# public domain worldwide. This software is distributed without any
# warranty. You should have received a copy of the CC0 Public Domain
# Dedication along with this software. If not, see
# <http://creativecommons.org/publicdomain/zero/1.0/>.

usage()
{
	printf "Usage: %s [-n] [targetdpi]\n" "${0##*/}" >&2
	exit 1
}

err()
{
	printf "%s: %s\n" "${0##*/}" "$*" >&2
	exit 1
}

show=false
while getopts n flag; do
	case $flag in
	n)	show=true ;;
	*)	usage ;;
	esac
done
shift $((OPTIND - 1))
if [ $# -gt 1 ]; then
	usage
fi

FACESIZES="8.0 4.0 6.0 7.0 8.0 9.0 10.0 12.0"

basedpi=$(xdpyinfo | grep '^  resolution:' | {
	min=
	while IFS= read -r line; do
		set -- $line
		dpi_x=${2%%x*}
		dpi_y=${2##*x}
		dpi_sum=$(( $dpi_x + $dpi_y ))
		if [ -z "$min" ]; then
			min=$dpi_sum
		else
			min=$(( $dpi_sum < $min ? $dpi_sum : $dpi ))
		fi
	done

	if [ -n "$min" ]; then
		echo "$min / 2" | bc -l
	fi
})

if [ -z "$basedpi" ]; then
	err "Can't find DPI"
fi

targetdpi=${1:-96}

for facesize in $FACESIZES; do
	echo "$basedpi * $facesize / $targetdpi"
done | bc -l | {
	i=0
	printf "Xft.dpi:\t%.1f\n" "$targetdpi"
	while IFS= read -r v; do
		if [ $i -eq 0 ]; then
			printf "XTerm.VT100.faceSize:\t%f\n" "$v"
		else
			printf "XTerm.VT100.faceSize%d:\t%f\n" $i "$v"
		fi
		i=$(($i + 1))
	done
} | if $show; then
	cat
else
	xrdb -merge
fi
