mirror of
https://github.com/zerotier/edge.git
synced 2026-05-22 16:25:05 -07:00
121 lines
2.4 KiB
Bash
Executable File
121 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
PREFIX=
|
|
. $PREFIX/lib/libalpine.sh
|
|
|
|
MAPDIR="$ROOT/usr/share/bkeymaps"
|
|
|
|
if [ -f "$ROOT/etc/conf.d/loadkmap" ]; then
|
|
. "$ROOT/etc/conf.d/loadkmap"
|
|
variant=$(basename "KEYMAP")
|
|
variant="${variant%%.*}"
|
|
fi
|
|
|
|
|
|
show_layouts() {
|
|
local owpd; owpd="$PWD"
|
|
cd "$MAPDIR"
|
|
ls --color=never
|
|
cd "$owpd"
|
|
}
|
|
|
|
show_variants() {
|
|
local i; for i in "$MAPDIR/$1"/* ; do
|
|
i="$(basename "$i")"
|
|
printf "%s " "${i%%.*}"
|
|
done
|
|
echo
|
|
}
|
|
|
|
select_layout() {
|
|
while true; do
|
|
if [ -z "$layout" ]; then
|
|
layout=none
|
|
fi
|
|
echo "Available keyboard layouts:"
|
|
show_layouts
|
|
echon "Select keyboard layout [$layout]: "
|
|
default_read layout "$layout"
|
|
if [ "$layout" = "abort" ] || [ "$layout" = "none" ] ; then
|
|
goodbye 0
|
|
fi
|
|
set -- $layout
|
|
if [ $# -eq 2 ]; then
|
|
layout="$1"
|
|
variant="$2"
|
|
fi
|
|
if [ -d "$MAPDIR/$layout" ] ; then
|
|
return 0
|
|
fi
|
|
done
|
|
}
|
|
|
|
setup_mapfile() {
|
|
local name=$(basename "$1")
|
|
local conf="$ROOT/etc/conf.d/loadkmap"
|
|
mkdir -p "$ROOT/etc/keymap"
|
|
mkdir -p "$ROOT/etc/conf.d/"
|
|
if cp "$1" "$ROOT/etc/keymap/$name" ; then
|
|
[ -f "$conf" ] && sed -i '/^KEYMAP=/d' "$conf"
|
|
echo "KEYMAP=/etc/keymap/$name" >> "$conf"
|
|
# we actually load the keymap now
|
|
rc-service loadkmap restart
|
|
rc-update -q add loadkmap boot
|
|
goodbye 0
|
|
fi
|
|
}
|
|
|
|
select_variant() {
|
|
while true; do
|
|
echon "Available variants: "
|
|
show_variants "$layout"
|
|
if [ ! -f "$MAPDIR/$layout/$variant.bmap" ] ; then
|
|
variant=""
|
|
fi
|
|
echon "Select variant [$variant]: "
|
|
default_read variant "$variant"
|
|
if [ "$variant" = "abort" ] || [ "$variant" = "none" ]; then
|
|
break;
|
|
fi
|
|
if [ -f "$MAPDIR/$layout/$variant.bmap"* ]; then
|
|
setup_mapfile "$MAPDIR/$layout/$variant.bmap"*
|
|
fi
|
|
done
|
|
}
|
|
|
|
goodbye() {
|
|
apk del --quiet --no-progress .setup-keymap-deps
|
|
exit $1
|
|
}
|
|
|
|
trap 'goodbye 1' INT
|
|
apk add --quiet --virtual .setup-keymap-deps kbd-bkeymaps
|
|
|
|
deflayout="$1"
|
|
defvariant="$2"
|
|
while true; do
|
|
if [ -n "$deflayout" ]; then
|
|
layout="$deflayout"
|
|
unset deflayout
|
|
else
|
|
select_layout
|
|
fi
|
|
|
|
if [ -n "$defvariant" ]; then
|
|
variant="$defvariant"
|
|
fi
|
|
|
|
# if variant is defined, this could match, otherwise we'll have to choose a variant
|
|
if [ -f "$MAPDIR/$layout/$variant.bmap"* ]; then
|
|
setup_mapfile "$MAPDIR/$layout/$variant.bmap"*
|
|
else
|
|
# if there is only one variant, just pick it
|
|
count=$(ls "$MAPDIR"/"$layout" | wc -l)
|
|
if [ $count -eq 1 ]; then
|
|
setup_mapfile "$MAPDIR/$layout/"*
|
|
continue
|
|
fi
|
|
select_variant
|
|
fi
|
|
done
|