#!/bin/sh
#
# $NetBSD: Xsession.in,v 1.20 2022/05/29 12:40:36 nia Exp $

# redirect errors to a file in user's home directory if we can

errfile="$HOME/.xsession-errors"
if ( umask 077 && cp /dev/null "$errfile" 2> /dev/null )
then
	exec > "$errfile" 2>&1
else
    mktemp="/usr/bin/mktemp"
    if [ "x$mktemp" != "x" -a -x "$mktemp" ]
    then
	for errfile in "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER"
	do
		if ef="$( umask 077 && $mktemp "$errfile.XXXXXX" 2> /dev/null)"
		then
			exec > "$ef" 2>&1
			mv "$ef" "$errfile" 2> /dev/null
			break
		fi
	done
    else
# Since this system doesn't have a mktemp command to allow secure
# creation of files in shared directories, no fallback error log
# is being used.   See https://bugs.freedesktop.org/show_bug.cgi?id=5898
#
# 	for errfile in "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER"
#	do
#		if ( umask 077 && cp /dev/null "$errfile" 2> /dev/null )
#		then
#			exec > "$errfile" 2>&1
#			break
#		fi
#	done

	exec > /dev/null 2>&1
    fi
fi

case $# in
1)
	case $1 in
	failsafe)
		exec /usr/X11R7/bin/xterm -geometry 80x24-0-0
		;;
	esac
esac

# The startup script is not intended to have arguments.

startup=$HOME/.xsession
resources=$HOME/.Xresources

fontsize=$(/usr/X11R7/libexec/ctwm_font_size)
if ! [ -n "$fontsize" ]; then
	fontsize=16
fi

if [ -s "$startup" ]; then
	if [ -x "$startup" ]; then
		exec "$startup"
	else
		exec /bin/sh "$startup"
	fi
else
	if [ -f $HOME/.profile ]; then
		. $HOME/.profile
	fi
	if [ -r "$resources" ]; then
		/usr/X11R7/bin/xrdb -load "$resources"
	else
		/usr/X11R7/bin/xrdb -load - <<EOF
#ifdef COLOR
*customization: -color
#endif
*VT100.foreground: grey90
*VT100.background: black
Bitmap*font:    -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Editres*font:   -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Viewres*font:   -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
XCalc*font:     -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
XClipboard*font:        -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
XConsole*font:  -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
XFontSel*font:  -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
XLoad*font:     -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Xedit*font:     -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Xfd*font:       -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Xgc*font:       -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Xmag*font:      -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Xmessage*font:  -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
Xmh*font:       -*-spleen-medium-r-*-*-$fontsize-*-*-*-*-*-*-*
EOF
if [ $fontsize -gt 18 ]; then
#
# For HiDPI displays, the font size returned by ctwm_font_size will
# generally be a multiple of 16.  96 is our standard DPI, and many
# applications want to scale by integer increments or don't handle
# non-integer scaling gracefully, so we want to scale by multiples
# of 96.
# 
    /usr/X11R7/bin/xrdb -merge - <<EOF
Xft.dpi: $((96 * (fontsize / 16)))
*VT100.faceName: xft:Monospace:pixelsize=$fontsize
EOF
elif [ $fontsize -gt 13 ]; then
#
# For non-HiDPI cases, use the standard misc-fixed font in xterm
# since it has bold variants, and seems to have caused fewer
# complaints than alternatives in the community so far.
#
# Using bitmap instead of TrueType fonts offers us some minor
# performance gains on very slow machines.
#
    /usr/X11R7/bin/xrdb -merge - <<EOF
*VT100.font: -misc-fixed-medium-r-normal-*-18-*-*-*-*-*-iso10646-1
*VT100.fontBold: -misc-fixed-bold-r-normal-*-18-*-*-*-*-*-iso10646-1
*VT100.utf8Fonts.font: -misc-fixed-medium-r-normal-*-18-*-*-*-*-*-iso10646-1
*VT100.utf8Fonts.fontBold: -misc-fixed-bold-r-normal-*-18-*-*-*-*-*-iso10646-1
EOF
else
    /usr/X11R7/bin/xrdb -merge - <<EOF
*VT100.font: -misc-fixed-medium-r-normal-*-13-*-*-*-*-*-iso10646-1
*VT100.fontBold: -misc-fixed-bold-r-normal-*-13-*-*-*-*-*-iso10646-1
*VT100.utf8Fonts.font: -misc-fixed-medium-r-normal-*-13-*-*-*-*-*-iso10646-1
*VT100.utf8Fonts.fontBold: -misc-fixed-bold-r-normal-*-13-*-*-*-*-*-iso10646-1
EOF
fi
	fi
	/usr/X11R7/bin/xsetroot -cursor_name left_ptr
	/usr/X11R7/bin/xsetroot -solid 'rgb:00/22/44'
	/usr/X11R7/bin/uxterm &
	/usr/X11R7/bin/xclock -digital -strftime '%a %Y-%m-%d %H:%M' \
		-face "spleen:pixelsize=$fontsize" -g +0+0 &
	exec /usr/X11R7/bin/ctwm -W
fi
