#!/usr/bin/env bash set -o errexit set -o nounset set -o pipefail CONFIG_ROOT="${XDG_CONFIG_HOME:-null}" if [[ "${CONFIG_ROOT}" == "null" ]]; then CONFIG_ROOT="${HOME}/.config" fi ROOT_DIR="$( cd "$( dirname $0 )/.." && pwd )" NEOVIM_CONFIG_SOURCE_DIR="${ROOT_DIR}/nvim" NEOVIM_CONFIG_DESTINATION_DIR="${CONFIG_ROOT}/nvim" VERSION="$( git describe --tags | tr -d '\n' )" PROJECT_NAME="nvim.d" CODEFLOW_GROUP="linux-home" action="$1" function backup { if [ -d "${NEOVIM_CONFIG_DESTINATION_DIR}" ]; then echo "[INFO] backing up existing config..." TIMESTAMP=$( date +"%Y.%m.%dT%H.%M.%S" ) BACKUP_DIR="${ROOT_DIR}/backup" mkdir -p "${BACKUP_DIR}" cd "${NEOVIM_CONFIG_DESTINATION_DIR}" tar czf "${BACKUP_DIR}/neovim-config-${TIMESTAMP}.tar.gz" . fi } function clean { rm -f "${NEOVIM_CONFIG_DESTINATION_DIR}/init.lua" find "${NEOVIM_CONFIG_DESTINATION_DIR}" -maxdepth 1 -mindepth 1 -type d -not -iwholename "*/plugin" | xargs rm -rf } function install { mkdir -p "${NEOVIM_CONFIG_DESTINATION_DIR}" # Syncing the neovim configuration files echo "[INFO] Syncing ${NEOVIM_CONFIG_SOURCE_DIR} to ${NEOVIM_CONFIG_DESTINATION_DIR}..." rsync -avh "${NEOVIM_CONFIG_SOURCE_DIR}/" "${NEOVIM_CONFIG_DESTINATION_DIR}" chmod a-rwx,u+rwx "${NEOVIM_CONFIG_DESTINATION_DIR}" # Ensuring the state directories are present mkdir -p ${XDG_STATE_HOME}/nvim/{backup,swap,undo,view} ${XDG_STATE_HOME}/logs/nvim ${XDG_DATA_HOME}/nvim/spell chmod 0700 ${XDG_STATE_HOME}/nvim/{backup,swap,undo,view} ${XDG_STATE_HOME}/logs/nvim ${XDG_DATA_HOME}/nvim/spell } function package { cd "${ROOT_DIR}" if ! [ -d "${ROOT_DIR}/build" ]; then mkdir "${ROOT_DIR}/build" fi tar czv -f "${ROOT_DIR}/build/${PROJECT_NAME}-${VERSION}.tar.gz" $( basename "${NEOVIM_CONFIG_SOURCE_DIR}" ) } function publish { curl --request PUT \ --user ${CODEFLOW_USERNAME}:${CODEFLOW_TOKEN} \ --upload-file build/${PROJECT_NAME}-${VERSION}.tar.gz \ https://codeflow.dananglin.me.uk/api/packages/${CODEFLOW_GROUP}/generic/${PROJECT_NAME}/${VERSION}/${PROJECT_NAME}-${VERSION}.tar.gz } case ${action} in backup) backup ;; clean) clean ;; install) install ;; package) package ;; publish) publish ;; *) echo "ERROR: Unknown action ${action}" exit 1 ;; esac