diff --git a/kbdupdater b/kbdupdater index 506913659fff27218a27c8876f6c4b27be8ffce5..2a45cc9b6982d270bc3d605aa85e77edb518c833 100755 --- a/kbdupdater +++ b/kbdupdater @@ -13,13 +13,16 @@ OBJ_PATH="/org/freedesktop/locale1" KEY="VConsoleKeymap" # Path to keyboard layouts -SQUEEKBOARD_LAYOUT_PATH=/usr/share/squeekboard/keyboards TERMINAL_LAYOUT=terminal.yaml LOCAL_SQUEEKBOARD_PATH=$HOME/.local/share/squeekboard LOCAL_SQUEEKBOARD_LAYOUT_PATH=$LOCAL_SQUEEKBOARD_PATH/keyboards +SQUEEKBOARD_LAYOUT_PATH=$LOCAL_SQUEEKBOARD_PATH/data + +# Squeekboard keyboards/data directory, with all yaml templates for keyboard layouts +SQUEEKBOARD_REPOS=https://source.puri.sm/Librem5/squeekboard/-/raw/master/data/keyboards # Contry code (empty by default = US) -CC="" +CC="us" ################################################################################ @@ -28,12 +31,6 @@ CC=`gdbus introspect --system --dest $DEST --object-path $OBJ_PATH --only-proper #logger "kbdupdater: Country code=$CC" -# Look for a template -if [ ! -e "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" ]; then - logger "kbdupdater: Error, no layout found" - exit 0 -fi - # Ensure all directories are valid if [ ! -d $LOCAL_SQUEEKBOARD_PATH ]; then mkdir $LOCAL_SQUEEKBOARD_PATH @@ -51,6 +48,14 @@ if [ ! -d $LOCAL_SQUEEKBOARD_LAYOUT_PATH ]; then fi fi +if [ ! -d $SQUEEKBOARD_LAYOUT_PATH ]; then + mkdir $SQUEEKBOARD_LAYOUT_PATH + if [ $? -ne 0 ]; then + logger "kbdupdater: Error, can't create $SQUEEKBOARD_LAYOUT_PATH" + exit 1 + fi +fi + # Create/update/keep the current symlink to the template... if [ -f $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT ]; then @@ -60,6 +65,15 @@ if [ -f $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT ]; then fi fi +# Try to fetch the new layout, only if the selected template is missing locally +if [ ! -f "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" ]; then + curl --fail "$SQUEEKBOARD_REPOS/$CC+$TERMINAL_LAYOUT" --output "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" 2>/dev/null + if [ $? -ne 0 ]; then + logger "kbdupdater: Error can't fetch the new layout from Internet" + exit 1 + fi +fi + logger "kbdupdater: Updating keyboard layout" ln -s -f "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT if [ $? -ne 0 ]; then