#!/usr/bin/env bash
# chfont - change the default font of various programs

. lib.bash || exit

require() {
	if [[ $font && $font != '-' ]]; then
		case $1 in
		gtk)
			re=' [[:digit:].]+(px)?$'
			eg='Cantarell 11'
			[[ $font =~ $re ]];;
		esac || die "bad font spec '$font' (example: '$eg')"
	fi
}

do_gsettings() {
	local schema=$1 key=$2 value=$3
	if [[ $value == '-' ]]; then
		gsettings reset "$schema" "$key"
	elif [[ $value ]]; then
		gsettings set "$schema" "$key" "$value"
	else
		gsettings get "$schema" "$key"
	fi
}

do_dconf() {
	local path=$1 value=$2
	if [[ $value == '-' ]]; then
		dconf reset "$path"
	elif [[ $value ]]; then
		dconf write "$path" "'$value'"
	else
		dconf read "$path"
	fi
}

app=$1 font=$2

case $app in
term|terminal)
	require gtk
	dconf list /org/gnome/terminal/legacy/profiles:/ |
	grep '^:.*/$' |
	while read -r profile; do
		profile=${profile#":"}
		profile=${profile%"/"}
		path="/org/gnome/terminal/legacy/profiles:/:$profile/"
		do_gsettings "org.gnome.Terminal.Legacy.Profile:$path" 'font' "$font"
	done
	;;
builder)
	require gtk
	do_gsettings 'org.gnome.builder.editor' 'font-name' "$font"
	;;
kgx|gnome-console)
	require gtk
	do_gsettings 'org.gnome.Console' 'custom-font' "$font"
	if [[ $font == "-" ]]; then
		do_gsettings 'org.gnome.TextEditor' 'use-system-font' -
	elif [[ $font ]]; then
		do_gsettings 'org.gnome.TextEditor' 'use-system-font' false
	fi
	echo "Font scale: $(do_gsettings 'org.gnome.Console' 'font-scale')"
	;;
gte|gnome-text-editor)
	require gtk
	do_gsettings 'org.gnome.TextEditor' 'custom-font' "$font"
	if [[ $font == "-" ]]; then
		do_gsettings 'org.gnome.TextEditor' 'use-system-font' -
	elif [[ $font ]]; then
		do_gsettings 'org.gnome.TextEditor' 'use-system-font' false
	fi
	;;
gnome|gtk|gui)
	require gtk
	do_gsettings 'org.gnome.desktop.interface' 'font-name' "$font"
	;;
gnome-mono|gtk-mono|gui-mono)
	require gtk
	do_gsettings 'org.gnome.desktop.interface' 'monospace-font-name' "$font"
	;;
wm|mutter|titlebar)
	require gtk
	do_gsettings 'org.gnome.desktop.wm.preferences' 'titlebar-font' "$font"
	;;
gedit)
	require gtk
	do_gsettings 'org.gnome.gedit.preferences.editor' 'editor-font' "$font"
	;;
*)
	die "unknown setting '$app'"
	;;
esac
