From fdf0384e206b8b1da5c3a37662d0a735f23f079e Mon Sep 17 00:00:00 2001 From: Ryan Greenup Date: Mon, 20 Jul 2020 13:28:12 +1000 Subject: [PATCH] Wrote an automatic installation Script --- README.md | 14 +++++++++-- install.sh | 74 +++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 63 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index ced54be..08a08f1 100644 --- a/README.md +++ b/README.md @@ -35,11 +35,21 @@ share those scripts with classmates. ## Installation -To install: +Cadmus will work from within a self-contained directory, in this way it's zero lock-in and does not modify your system other than a single simlink into "~/.local/bin". + +Installation will automatically create a config file in its directory, to install automatically just run the following command and follow the prompts: + +``` bash +cd $(mktemp -d) +wget https://raw.githubusercontent.com/RyanGreenup/cadmus/master/install.sh +bash install.sh +``` + +To install manually: 1. satisfy [the dependencies](#Dependencies) 2. [Set up Recoll](#Configuring-recoll) -3. Download cadmus and put it in the `PATH` +3. Download cadmus and put it into the `PATH` ```bash git clone https://github.com/RyanGreenup/cadmus ~/.cadmus \ || echo "Delete $HOME/.cadmus first" diff --git a/install.sh b/install.sh index 5e3c529..c40b0f4 100755 --- a/install.sh +++ b/install.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash INSTALL_DIR="$HOME/.cadmus" +BIN_DIR="$HOME/.local/bin/" main () { me=`basename "$0"` @@ -7,10 +8,12 @@ main () { HelpStatement $1 UninstallQ $1 printThis - download_the_repo +# download_the_repo Install_bin check_path check_for_dependencies + + echo -e "\nInstallation Complete \n" } check_path () { @@ -31,7 +34,7 @@ function UninstallQ() { HelpStatement() { if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then - echo -e "To uninstall do `basename $0` --rm is the script name, + echo -e "To uninstall do `basename $0` --rm , If you are on Arch stow 2.3.1-2 is broken, downgrade with @@ -60,7 +63,7 @@ printThis () { safePrint $me - echo "Are you happy to proceed? Press y to continue" + echo -e "\nAre you happy to proceed? Press y to continue \n" read -d '' -s -n1 proceedQ if [ "$proceedQ" != "y" ]; then exit 0 @@ -78,8 +81,6 @@ safePrint () { check_for_dependencies () { - echo "Missing dependencies will now be printed to STDERR, missing packages to STDOUT" - ## echo "Press Any Key to Check for dependencies, press the c Key to Skip this" ## read -d '' -s -n1 CheckDepQ ## if [ "$CheckDepQ" == "c" ]; then @@ -89,43 +90,58 @@ check_for_dependencies () { depLog="$(mktemp)" for i in ${StringArray[@]}; do - command -v "$i" >/dev/null 2>&1 || { echo >&2 "I require $i but it's not installed. Aborting."; echo $i >> "${depLog}"; } + command -v "$i" >/dev/null 2>&1 || { echo $i >> "${depLog}"; } done if [[ $(cat "${depLog}") == "" ]]; then - echo "All Dependencies Satisfied" + echo -e "\nAll Dependencies Satisfied\n" else - cat "${depLog}" + echo -e "\e[1;31m \nMissing the Following Dependencies \e[0m \n" + echo -e " \e[1;31m -------------------------\e[0m " + echo -e "\e[1;32m \n" + addBullets "$(cat "${depLog}")" + echo -e "\e[0m \n" + echo -e "They are listed in \e[1;34m "${depLog}" \e[0m \n" fi } + +addBullets() { + command -v sed >/dev/null 2>&1 || { echo >&2 "I require sed but it's not installed. Aborting."; exit 1; } + echo "$1" | sed 's/^/\t‣\ /g' +} + download_the_repo () { - echo "Press y to download the repo" - read -d '' -s -n1 downloadQ - if [ "$downloadQ" != "y" ]; then + if [[ -d "${INSTALL_DIR}" ]]; then + echo -e "Detected a cadmus install" + + if [ -f "${INSTALL_DIR}/config.json" ]; then + oldConfigFile="$(mktemp)" && cat "${INSTALL_DIR}/config.json" > "${oldConfigFile}" + echo -e "\n\tConfig File Backed up for later restore\n" + fi + + ask_to_remove + download_the_repo return - fi - - if [[ -d "${INSTALL_DIR}/.git" ]]; then - echo "Detected a cadmus install" - ask_to_remove - elif [[ -f ".git" ]]; then - echo "You have a file called .git In "${INSTALL_DIR}", which was unexpected" - ask_to_remove else - git clone https://github.com/RyanGreenup/cadmus "~/.cadmus" + git clone https://github.com/RyanGreenup/cadmus "$HOME/.cadmus" fi - echo "Repository is downloaded" + echo -e "Repository is downloaded\n\n" + if [[ "$CheckDepQ" == "y" ]] && [[ -f "${oldConfigFile}" ]]; then + echo -e "Press y to restore the old config or any other key to continue otherwise\n" + read -d '' -s -n1 CheckDepQ + cp "${oldConfigFile}" "${INSTALL_DIR}/config.json" + fi } ask_to_remove () { echo "press y to remove "${INSTALL_DIR}"" read -d '' -s -n1 CheckDepQ - if [ "$CheckDepQ" != "y" ]; then + if [ "$CheckDepQ" == "y" ]; then rm -rf "${INSTALL_DIR}" else exit 1 @@ -133,7 +149,18 @@ ask_to_remove () { } Install_bin() { - ln -s "$HOME/.cadmus/bin/cadmus" "$HOME/.local/bin/" + if [ -f "${BIN_DIR}/cadmus" ]; then + echo -e "The executable \e[1;32m "${BIN_DIR}"/cadmus \e[0m already exists, it must be replaced, press y to continue or any key to exit" + read -d '' -s -n1 CheckDepQ + if [ "$CheckDepQ" == "y" ]; then + rm "${BIN_DIR}/cadmus" + else + exit 1 + fi + Install_bin + else + ln -s "$HOME/.cadmus/bin/cadmus" "$HOME/.local/bin/" && echo -e "\nSuccessfully created symlink from $HOME/.cadmus/bin/cadmus to $HOME/.local/bin/ \n" + fi } # Declare an array of string with type @@ -146,6 +173,7 @@ declare -a StringArray=( "sk" "rg" "perl" + "tectonic" "stow" "python" "tmsu"