196 lines
7.7 KiB
Bash
196 lines
7.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -x
|
|
|
|
# KMonad is an advanced tool that lets you infinitely customize and extend the functionalities
|
|
# of almost any keyboard. For a detailed list of features, see here
|
|
|
|
# Include the script create functions split into a separate file.
|
|
source ./020_kmonad-conf_print.sh
|
|
|
|
DEST=${1:-/etc/skel}
|
|
|
|
GITHUB_USER=kmonad
|
|
PROJECT=kmonad
|
|
API_URL=https://api.github.com/repos/${USER}/${PROJECT}/releases/latest
|
|
# RELEASE=$(curl -s ${API_URL} | grep tarball_url | cut -d '"' -f 4 | awk -F "/" {'print $8'})
|
|
RELEASE=$(lastversion ${GITHUB_USER}/${PROJECT})
|
|
SDK_URL=https://github.com/${USER}/${PROJECT}/releases/download/${RELEASE}
|
|
|
|
RSS_FEED="https://github.com/${USER}/${PROJECT}/releases.atom"
|
|
# xdg-open ${RSS_FEED}
|
|
echo ${RSS_FEED}
|
|
|
|
# make a containing directory
|
|
BUILD_HOME="/var/tmp/${PROJECT}-${RELEASE}"
|
|
mkdir -p "${BUILD_HOME}"
|
|
echo "git clone --depth 1 https://github.com/${GITHUB_USER}/${PROJECT} /var/tmp/${PROJECT}-${RELEASE}"
|
|
git clone --depth 1 https://github.com/${GITHUB_USER}/${PROJECT} "${BUILD_HOME}"
|
|
cd "${BUILD_HOME}" || exit
|
|
|
|
cat <<FOE | tee ${BUILD_HOME}/description-pak
|
|
Customize and extend the functionalities of a keyboard.
|
|
FOE
|
|
|
|
cat <<EOF | tee ${BUILD_HOME}/checkinstall_it.sh
|
|
|
|
echo "ENTERING CHECKINSTALL"
|
|
|
|
BASE_URL='https://raw.githubusercontent.com/'
|
|
BASE_USER=${GITHUB_USER}
|
|
BASE_REPO=${PROJECT}
|
|
LICENSE_URL="\${BASE_URL}/\${BASE_USER}/\${BASE_REPO}"/master/LICENSE
|
|
# wget -c \${LICENSE_URL}
|
|
|
|
# VERSION=\$(date +%Y-%m-%d_)git
|
|
VERSION=${RELEASE}
|
|
RELEASE="1"
|
|
LICENSE=bsd
|
|
|
|
# make a new temporary directory for this use
|
|
BASE_TMP_DIR=~/tmptmp/checkinstall_tmp
|
|
mkdir -p \${BASE_TMP_DIR}
|
|
|
|
# do your work
|
|
sudo checkinstall -y --fstrans \
|
|
--exclude=/home/${USER}/.sudo_as_admin_successful \
|
|
--pkgname=\${BASE_REPO} \
|
|
--pkgversion=\${VERSION}\
|
|
--pkgrelease="\${RELEASE}" \
|
|
--pkgarch=\${ARCH} \
|
|
--pkggroup=development \
|
|
--pkglicense=\$LICENSE \
|
|
--pkgsource=${LATEST_URL} \
|
|
--maintainer=cyteen@ring-zero.co.uk \
|
|
--requires= \
|
|
-D \
|
|
bash ./install_it.sh
|
|
EOF
|
|
|
|
cat <<-EOF | tee ${BUILD_HOME}/install_it.sh
|
|
# Copy files to their production locations.
|
|
cp -v ${BUILD_HOME}/kmonad /usr/local/bin/kmonad
|
|
|
|
mkdir -p /usr/share/kmonad
|
|
cp -v -a keymap /usr/share/kmonad/
|
|
cp -v -a startup /usr/share/kmonad/
|
|
cp -v README.md /usr/share/kmonad/
|
|
cp -v changelog.md /usr/share/kmonad/
|
|
EOF
|
|
|
|
# Create config directory and copy files there.
|
|
sudo -u ${USER} bash -c "mkdir -p "${DEST}"/.config/kmonad"
|
|
# bash -c "mkdir -p "${DEST}"/.config/kmonad"
|
|
|
|
# Create the template files
|
|
conf_print_dell_d830_template_header_generic | tee ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
|
|
conf_print_dell_d830_template_deflayer_empty_generic | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
|
|
conf_print_dell_d830_template_defcfg_generic | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
|
|
conf_print_dell_d830_template_defsrc | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
|
|
|
|
## Add some keymaps to the ${HOME}/.config/kmonad directory, miryoku, seniply, colemak-dh-extend-iso
|
|
# assign variable for use in sed
|
|
DEFCFG=$(conf_print_dell_d830_template_defcfg)
|
|
DEFSRC=$(conf_print_dell_d830_template_defsrc)
|
|
|
|
# Generate the miryoku kmonad config
|
|
MIRYOKU_BUILD_HOME="/var/tmp/miryoku-kmonad-git"
|
|
echo "MIRYOKU_BUILD_HOME ${MIRYOKU_BUILD_HOME}"
|
|
mkdir -p "${MIRYOKU_BUILD_HOME}"
|
|
git clone --depth 1 https://github.com/manna-harbour/miryoku_kmonad ${MIRYOKU_BUILD_HOME}
|
|
pushd ${MIRYOKU_BUILD_HOME}/src
|
|
make
|
|
make \
|
|
MIRYOKU_ALPHAS=QWERTY \
|
|
MIRYOKU_EXTRA=COLEMAKDH \
|
|
MIRYOKU_TAP=QWERTY \
|
|
MIRYOKU_NAV=INVERTEDT \
|
|
MIRYOKU_CLIPBOARD=WIN \
|
|
MIRYOKU_LAYERS=FLIP \
|
|
MIRYOKU_MAPPING=LITE \
|
|
MIRYOKU_KMONAD_OS=LINUX
|
|
popd
|
|
|
|
# Apply local defcfg and defsrc
|
|
DEST_FILE="${DEST}/.config/kmonad/miryoku.kbd"
|
|
echo "DEST_FILE ${DEST_FILE}"
|
|
cp "${MIRYOKU_BUILD_HOME}/src/build/miryoku_kmonad.kbd" ${DEST_FILE}
|
|
# sed -E -e '/^(defcfg/,/^)/ { s/(.*)/\1'"$DEFCFG"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
# sed -E -e '/^(defsrc/,/^)/ { s/(.*)/\1'"$DEFSRC"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
|
|
# Gnerate the semply config: https://stevep99.github.io/seniply/
|
|
# SEMPLY_BUILD_HOME=/var/tmp/semply-kmonad-git
|
|
# mkdir -p "${BUILD_HOME}"
|
|
# git clone --depth 1 https://github.com/semplify/semply_kmonad ${SEMPLY_BUILD_HOME}
|
|
DEST_FILE="${DEST}/.config/kmonad/colemak-dh-seniply-split.kbd"
|
|
echo "DEST_FILE ${DEST_FILE}"
|
|
echo ${DEST_FILE}
|
|
wget -c -O "${DEST_FILE}" https://raw.githubusercontent.com/stevep99/seniply/master/downloads/kmonad/colemak-dh-seniply-split.kbd
|
|
# sed -E -e '/^(defcfg/,/^)/ { s/(.*)/\1'"$DEFCFG"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
# sed -E -e '/^(defsrc/,/^)/ { s/(.*)/\1'"$DEFSRC"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
|
|
DEST_FILE="${DEST}/.config/kmonad/colemak-dh-seniply-wide.kbd"
|
|
echo ${DEST_FILE}
|
|
echo "DEST_FILE ${DEST_FILE}"
|
|
wget -c -O "${DEST_FILE}" https://raw.githubusercontent.com/stevep99/seniply/master/downloads/kmonad/colemak-dh-seniply-wide.kbd
|
|
DEST_FILE="colemak-dh-seniply-wide.kbd"
|
|
# sed -E -e '/^(defcfg/,/^)/ { s/(.*)/\1'"$DEFCFG"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
# sed -E -e '/^(defsrc/,/^)/ { s/(.*)/\1'"$DEFSRC"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
|
|
# create a config for the official colemak mod dh
|
|
# See: https://raw.githubusercontent.com/ColemakMods/mod-dh/master/kmonad/colemak-dh-extend-iso.kbd
|
|
KMONAD_HOME="${DEST}/.config/kmonad"
|
|
DEST_FILE="${DEST}/.config/kmonad/colemak-dh-extend-iso.kbd"
|
|
echo "DEST_FILE ${DEST_FILE}"
|
|
FILE="${DEST}/.config/kmonad/colemak-dh-extend-iso.kbd"
|
|
echo "DEST ${DEST}"
|
|
|
|
# wget -c -O ${DEST_FILE} https://raw.githubusercontent.com/ColemakMods/mod-dh/master/kmonad/colemak-dh-extend-iso.kbd
|
|
# sed -E -e '/^(defcfg/,/^)/ { s/(.*)/\1'"$DEFCFG"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
# sed -E -e '/^(defsrc/,/^)/ { s/(.*)/\1'"$DEFSRC"'/ }' ${DEST_FILE} >/tmp/temp && mv /tmp/temp ${DEST_FILE}
|
|
|
|
conf_print_dell_d830_template_header | tee ${DEST_FILE}
|
|
conf_print_dell_d830_template_defcfg | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_defsrc | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_defalias_extend | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_defalias | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_deflayer_querty | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_deflayer_colemak_dh | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_deflayer_colemak_dhk | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_deflayer_extend | tee -a ${DEST_FILE}
|
|
conf_print_dell_d830_template_deflayer_empty | tee -a ${DEST_FILE}
|
|
|
|
# set the default keymap
|
|
DEFAULT_KEYMAP="colemak-dh-seniply-split.kbd"
|
|
DEFAULT_KEYMAP="colemak-dh-seniply-wide.kbd"
|
|
DEFAULT_KEYMAP="miryoku.kbd"
|
|
DEFAULT_KEYMAP="colemak-dh-extend-iso.kbd"
|
|
|
|
sudo ln -sf ${DEST}/.config/kmonad/${DEFAULT_KEYMAP} ${DEST}/.config/kmonad/config.kbd
|
|
|
|
# copy templates to the home config dir.
|
|
sudo -u ${USER} cp -a keymap ${DEST}/.config/kmonad/
|
|
|
|
# This loads the user keymap on zsh start
|
|
cat <<-EOF | tee ${HOME}/.zshrc.d/008_kmonad.zsh
|
|
if [[ -f "${HOME}/.config/config.kbd" ]]; then
|
|
/usr/local/bin/kmonad "${HOME}/.config/kmonad/config.kbd"
|
|
fi
|
|
EOF
|
|
|
|
# Build the Docker image with alpine/haskell which will contain the binary.
|
|
# if [ ! docker info ] >/dev/null 2>&1; then
|
|
# echo "This script uses docker, and it isn't running - please start docker and try again!"
|
|
# exit 1
|
|
# else
|
|
# docker build -t kmonad-builder .
|
|
# # Spin up an ephemeral Docker container from the built image, to just copy the
|
|
# # built binary to the host's current directory bind-mounted inside the
|
|
# # container at /host/.
|
|
# docker run --rm -it -v ${PWD}:/host/ kmonad-builder bash -c "cp -vp /root/.local/bin/kmonad /host/"
|
|
#
|
|
# # Clean up build image, since it is no longer needed.
|
|
# # docker rmi kmonad-builder
|
|
# fi
|
|
|
|
bash ${BUILD_HOME}/checkinstall_it.sh
|