#!/bin/bash get_decompressor() { case "$1" in *.gz) cat=zcat of=${1%.gz} ;; *.bz2) cat=bzcat of=${1%.bz2} ;; *) cat=cat of=$1 ;; esac } add_keymap_file() { local cat cmd rest f of while read f; do get_decompressor "$f" while read -r cmd rest; do if [[ $cmd == include ]]; then eval set $rest add_keymap_file "$1" fi done < <($cat "$f") add_dir "${of%/*}" $cat "$f" > "$BUILDROOT/$of" done < <( ( find /usr/share/kbd/keymaps/ -type f -regex ".*/$1\(\.inc\)?\(\.gz\|\.bz2\)?" ; find ${1%/*} -maxdepth 1 -type f -regex "$1\(\.inc\)?\(\.gz\|\.bz2\)?" 2>/dev/null ) | cat ) } build() { add_binary /usr/lib/systemd/systemd-vconsole-setup add_binary loadkeys add_binary setfont add_file /etc/vconsole.conf add_udev_rule 90-vconsole.rules # subshell to avoid namespace pollution ( shopt -s nullglob [[ -s /etc/vconsole.conf ]] && . /etc/vconsole.conf [[ $KEYMAP ]] && add_keymap_file $KEYMAP.map [[ $KEYMAP_TOGGLE ]] && add_keymap_file $KEYMAP_TOGGLE.map if [[ $FONT ]]; then for file in "/usr/share/kbd/consolefonts/$FONT".@(fnt|psf?(u))?(.gz); do get_decompressor "$file" add_dir "${of%/*}" $cat "$file" > "$BUILDROOT/$of" done fi ) } help() { cat <