#!/bin/bash

findkeymap () {
    local MAP=$1
    [[ ! -f $MAP ]] && \
	MAP=$(find /lib/kbd/keymaps -type f -name $MAP -o -name $MAP.\* | head -n1)
    [[ " $KEYMAPS " = *" $MAP "* ]] && return
    KEYMAPS="$KEYMAPS $MAP"
    case $MAP in
        *.gz) cmd=zgrep;;
        *.bz2) cmd=bzgrep;;
        *) cmd=grep ;;
    esac

    for INCL in $($cmd "^include " $MAP | cut -d' ' -f2 | tr -d '"'); do
        for FN in $(find /lib/kbd/keymaps -type f -name $INCL\*); do
            findkeymap $FN
        done
    done
}

install_local()
{
# FIXME: i18n stuff isn't really distro-independent :/
    if [[ -f /etc/sysconfig/keyboard || -f /etc/sysconfig/console/default.kmap ]]; then
	if [ -f /etc/sysconfig/console/default.kmap ]; then
            KEYMAP=/etc/sysconfig/console/default.kmap
	else
            . /etc/sysconfig/keyboard
            [[ $KEYTABLE && -d /lib/kbd/keymaps ]] && KEYMAP="$KEYTABLE.map"
	fi
	if [[ $KEYMAP ]]; then
            [ -f /etc/sysconfig/keyboard ] && inst /etc/sysconfig/keyboard
            inst loadkeys
            findkeymap $KEYMAP

            for FN in $KEYMAPS; do
		if [ -L $FN ]; then
		    TARGET=$(readlink -f $FN)
		    TG=$(echo $TARGET | sed -e 's/\.gz$//' -e 's/\.bz2$//')
		    LN=$(echo $FN | sed -e 's/\.gz$//' -e 's/\.bz2$//')
                    mkdir -p "$initdir/$(dirname $LN)"
                    ln -s "$TG" "$initdir/$LN"
                    FN=$TARGET
		fi
		inst $FN
		case $FN in
                    *.gz) gzip -d "$initdir$FN" ;;
                    *.bz2) bzip2 -d "$initdir$FN" ;;
		esac
            done
	fi
    fi

    if [ -f /etc/sysconfig/i18n ]; then
	. /etc/sysconfig/i18n
	inst /etc/sysconfig/i18n
	[[ $SYSFONT ]] || SYSFONT=latarcyrheb-sun16
	inst setfont

	for FN in /lib/kbd/consolefonts/$SYSFONT.* ; do
            inst "$FN"
            case $FN in
		*.gz) gzip -d "$initdir$FN" ;;
		*.bz2) bzip2 -d "$initdir$FN" ;;
            esac
	done
	[[ $SYSFONTACM ]] && inst /lib/kbd/consoletrans/$SYSFONTACM
	[[ $UNIMAP ]] && inst /lib/kbd/unimaps/$UNIMAP
    fi
}

if [[ $hostonly ]]; then 
    install_local
else
    for i in $(find /lib/kbd -type f -print); do
	dracut_install $i
    done
    # remove unnecessary files
    rm -f "$initdir/lib/kbd/consoletrans/utflist" 2>/dev/null
    find "$initdir/lib/kbd/" -name README\* -exec rm -f '{}' \;
    dracut_install gzip bzip2
fi

dracut_install /lib/udev/console_init 
dracut_install setfont loadkeys
inst_rules 10-console.rules
inst_hook cmdline 20 "$moddir/parse-i18n.sh"
