#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$( cd "$( dirname $0 )/.." && pwd )" NEOVIM_CONFIG_SOURCE_DIR="${ROOT_DIR}/neovim" NEOVIM_CONFIG_DESTINATION_DIR="${XDG_CONFIG_HOME}/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 update { 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" neovim } 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 ;; update) update ;; package) package ;; publish) publish ;; *) echo "ERROR: Unknown action ${action}" exit 1 ;; esac