diff --git a/autodeploy.sh b/autodeploy.sh index b037855..adb8a0e 100755 --- a/autodeploy.sh +++ b/autodeploy.sh @@ -1,13 +1,12 @@ #/bin/bash # Preamble -BOLD="\e[1m" -RED="\e[31m" -BLUE="\e[94m" -GREEN="\e[32m" -YELLOW="\e[33m" -ENDCOLOR="\e[0m" -TITLE="\e[4m" +RED=`tput setaf 1` +BLUE=`tput setaf 4` +YELLOW=`tput setaf 3` +ENDCOLOR=`tput sgr0` +GREEN=`tput setaf 2` +#TITLE="\e[4m" TICK="[$GREEN+$ENDCOLOR] " TICK_MOVE="[$GREEN~>$ENDCOLOR]" TICK_BACKUP="[$GREEN<~~$ENDCOLOR] " @@ -28,10 +27,10 @@ selected_config=$HOST_CONFIG_PATH usage() { -echo -e $GREEN"-------------------------------------------------------------------"$ENDCOLOR -echo -e $GREEN"*** $BLUE AutoDeploy - A pure bash configuration management tool$GREEN ***"$ENDCOLOR -echo -e $GREEN"-------------------------------------------------------------------"$ENDCOLOR -echo -e " +echo "${GREEN}-------------------------------------------------------------------"$ENDCOLOR +echo $GREEN"*** $BLUE AutoDeploy - A pure bash configuration management tool$GREEN ***"$ENDCOLOR +echo $GREEN"-------------------------------------------------------------------"$ENDCOLOR +echo " $BLUE Usage: autodeploy -h autodeploy -e [apps|config|files] @@ -48,12 +47,11 @@ $BLUE Options: $GREEN-m$BLUE [M]oves dotfiles defined in autodeploy_files.conf to their correct locations on the local machine $GREEN-e $BLUE[E]dits autodeploy's configuration files - " + " $ENDCOLOR exit 0 } -clear first_setup(){ @@ -61,16 +59,16 @@ first_setup(){ # It handles creating the configuration directory, establishing the git repository for configuration files, and initializing # the ~/.config/autodeploy/ as a git repository - echo -e $TICK$GREEN"Running first time setup"$ENDCOLOR - echo -e $TICK$GREEN"Creating Configuration Files in $BLUE~/.config/autodeploy/ "$ENDCOLOR + echo $TICK$GREEN"Running first time setup"$ENDCOLOR + echo $TICK$GREEN"Creating Configuration Files in $BLUE~/.config/autodeploy/ "$ENDCOLOR mkdir -p ~/.config/autodeploy/ - echo -e $TICK$GREEN"Enter your remote git repository URL"$ENDCOLOR - echo -e $TICK$GREEN"For example: $BLUE"https://github.com/grahamhelton/DotFiles""$ENDCOLOR + echo $TICK$GREEN"Enter your remote git repository URL"$ENDCOLOR + echo $TICK$GREEN"For example: $BLUE"https://github.com/grahamhelton/DotFiles""$ENDCOLOR - echo -e -n $TICK_INPUT$GREEN"Enter Remote Repository URL: $YELLOW" + echo -n $TICK_INPUT$GREEN"Enter Remote Repository URL: $YELLOW" read remote_repo - echo -e $ENDCOLOR$TICK$GREEN"Setting Remote Repository to: $YELLOW$remote_repo " + echo $ENDCOLOR$TICK$GREEN"Setting Remote Repository to: $YELLOW$remote_repo " #. ~/.config/autodeploy/autodeploy_config.conf cd $CONFIG_PATH @@ -78,7 +76,7 @@ first_setup(){ git remote add origin $remote_repo > /dev/null 2>&1; git checkout -b main > /dev/null 2>&1; - echo -e $ENDCOLOR$TICK$GREEN"First time setup complete, use$BLUE autodeploy -f $GREEN to rerun first time setup"$ENDCOLOR + echo $ENDCOLOR$TICK$GREEN"First time setup complete, use$BLUE autodeploy -f $GREEN to rerun first time setup"$ENDCOLOR } get_posture(){ @@ -86,18 +84,18 @@ get_posture(){ # Change to wget -q --spider $remote_repo then check for return code with $? if ping -c 1 8.8.8.8 > /dev/null 2>&1; then - echo -e $TICK"Internet Connectivity Detected"$ENDCOLOR + echo $TICK"Internet Connectivity Detected"$ENDCOLOR internet=True else - echo -e $RED"Internet Connectivity Not Detected"$ENDCOLOR + echo $RED"Internet Connectivity Not Detected"$ENDCOLOR internet=false fi if apt help install -h > /dev/null 2>&1; then - echo -e $TICK"APT is installed"$ENDCOLOR + echo $TICK"APT is installed"$ENDCOLOR apt=true else - echo -e $RED"APT is NOT installed"$ENDCOLOR + echo $RED"APT is NOT installed"$ENDCOLOR apt=false fi @@ -105,40 +103,39 @@ get_posture(){ install_apps(){ # This function is responsible for installing any applications (using apt) defined in ~/.config/autodeploy/autodeploy_apps.conf - echo -e $TICK$BLUE"Please input SUDO password"$ENDCOLOR + echo $TICK$BLUE"Please input SUDO password"$ENDCOLOR # Runs sudo apt update and upgrade - echo -e $TICK$GREEN"Running apt update and apt upgrade..."$ENDCOLOR ; sudo apt update > /dev/null 2>&1 && sudo apt upgrade -y > /dev/null 2>&1 - echo -e $TICK$GREEN"Installing applications from $BLUE$CONFIG_PATH/autodeploy_apps.conf"$ENDCOLOR + echo $TICK$GREEN"Running apt update and apt upgrade..."$ENDCOLOR ; sudo apt update > /dev/null 2>&1 && sudo apt upgrade -y > /dev/null 2>&1 + echo $TICK$GREEN"Installing applications from $BLUE$CONFIG_PATH/autodeploy_apps.conf"$ENDCOLOR # Install each application listed in $CONFIG_PATH/autodeploy_apps grep -v '^#' $CONFIG_PATH/autodeploy_apps.conf | while read -r line; do - echo -e $TICK$GREEN"Installing $BLUE$line"$ENDCOLOR + echo $TICK$GREEN"Installing $BLUE$line"$ENDCOLOR sudo apt install $line -y > /dev/null 2>&1 #| grep -A 1 "NEW packages" | grep -v "NEW packages" done - echo -e $TICK$GREEN"Applications installed."$ENDCOLOR + echo $TICK$GREEN"Applications installed."$ENDCOLOR } list_configs(){ # Lists the config files found in ~/.config/autodeploy/*.conf - echo -e $TICK$GREEN"Listing configs found in $BLUE$CONFIG_PATH"$ENDCOLOR - echo -e -n $BLUE + echo -n $BLUE ls $CONFIG_PATH | grep "_config$" } collect_files(){ - echo -e $TICK$GREEN"Collecting files from around the system"$ENDCOLOR + echo $TICK$GREEN"Collecting files from around the system"$ENDCOLOR # Pulls files from the remote repository and checks to see if the configuration path already exists git -C $CONFIG_PATH pull origin main --allow-unrelated-histories > /dev/null 2>&1 # Check if the configuration path already exists - echo -e $TICK$GREEN"Moving files"$ENDCOLOR + echo $TICK$GREEN"Moving files"$ENDCOLOR if test -d $HOST_CONFIG_PATH;then - echo -e $TICK$GREEN"Creating files in $BLUE$CONFIG_PATH/$(hostname)_config"$ENDCOLOR + echo $TICK$GREEN"Creating files in $BLUE$CONFIG_PATH/$(hostname)_config"$ENDCOLOR else mkdir -p $HOST_CONFIG_PATH - echo -e $TICK$GREEN"Creating files in $BLUE$CONFIG_PATH/$(hostname)_config"$ENDCOLOR + echo $TICK$GREEN"Creating files in $BLUE$CONFIG_PATH/$(hostname)_config"$ENDCOLOR fi # Copy each line in $CONFIG_PATH/autodeploy_files.conf to $HOST_CONFIG_PATH @@ -147,12 +144,12 @@ collect_files(){ # Copies all files listed in $HOST_CONFIG_PATH/autodeploy_files.conf recursively, verbosely, and forcefully to the staging area. Filters out un-needed lines, and logs them to $hostname_files.log cp -rvf --parents $line $HOST_CONFIG_PATH 2> /dev/null | grep "^'" | awk '{print $1}' | sed "s/'//g" | sed 's@'"$HOME"'@$HOME@' 2>/dev/null # Going to need to add sorting somewhere in here because this log will keep growing - echo -e $TICK_MOVE$GREEN" Copying $BLUE$line$GREEN to $BLUE$HOST_CONFIG_PATH$GREEN if file exists"$ENDCOLOR + echo $TICK_MOVE$GREEN" Copying $BLUE$line$GREEN to $BLUE$HOST_CONFIG_PATH$GREEN if file exists"$ENDCOLOR done < $CONFIG_PATH/autodeploy_files.conf | grep -v "^#" cd $CONFIG_PATH - echo -e $TICK$GREEN"Configuration files saved to $BLUE$HOST_CONFIG_PATH$GREEN. Files can be pushed to $BLUE$remote_repo$GREEN with$BLUE autodeploy -p$GREEN"$ENDCOLOR + echo $TICK$GREEN"Configuration files saved to $BLUE$HOST_CONFIG_PATH$GREEN. Files can be pushed to $BLUE$remote_repo$GREEN with$BLUE autodeploy -p$GREEN"$ENDCOLOR } @@ -170,7 +167,7 @@ edit_files() { } move_dev(){ if [ -z "$2" ];then - echo -e $TICK$GREEN"No arguments supplied, using configuration in $BLUE$HOST_CONFIG_PATH"$ENDCOLOR + echo $TICK$GREEN"No arguments supplied, using configuration in $BLUE$HOST_CONFIG_PATH"$ENDCOLOR collect_files else select_config "$@" @@ -179,10 +176,10 @@ move_dev(){ } select_config(){ - echo -e $TICK_ERROR$YELLOW"Please specify the name of the config file you wish to use"$ENDCOLOR + echo $TICK_ERROR$YELLOW"Please specify the name of the config file you wish to use"$ENDCOLOR selected_config=$2 if test -d "$CONFIG_PATH/$selected_config";then - echo -e $TICK$GREEN"$selected_config selected" + echo $TICK$GREEN"$selected_config selected" distribute_files else list_configs @@ -193,17 +190,17 @@ select_config(){ check_git(){ # Check if the autodeploy configuration files are are in the current repo. If not, creates them if ! test -f "$CONFIG_PATH/autodeploy_files.conf";then - echo -e $TICK$GREEN"Config file not found, generating base configuration..."$ENDCOLOR - echo -e "config_name=$(hostname)" > $CONFIG_PATH/autodeploy_config.conf + echo $TICK$GREEN"Config file not found, generating base configuration..."$ENDCOLOR + echo "config_name=$(hostname)" > $CONFIG_PATH/autodeploy_config.conf # Add $remote_repo to autodeploy_config - echo -e "$remote_repo" >> $CONFIG_PATH/autodeploy_config.conf + echo "$remote_repo" >> $CONFIG_PATH/autodeploy_config.conf # Add default applications to autodeploy_apps - echo -e "curl\nneovim\nzsh" > $CONFIG_PATH/autodeploy_apps.conf + echo "curl\nneovim\nzsh" > $CONFIG_PATH/autodeploy_apps.conf # Add default dot files to autodeploy_files.conf - echo -e ".tmux.conf" > $CONFIG_PATH/autodeploy_files.conf + echo ".tmux.conf" > $CONFIG_PATH/autodeploy_files.conf fi } @@ -212,20 +209,20 @@ get_files(){ cd $CONFIG_PATH git -C $CONFIG_PATH pull origin main --allow-unrelated-histories > /dev/null 2>&1; # Figure out how to check if repo exists check_git - echo -e $TICK$GREEN"Pull complete"$ENDCOLOR + echo $TICK$GREEN"Pull complete"$ENDCOLOR } remote_push(){ # Commit and push files to $remote_repo cd $CONFIG_PATH - echo -e $TICK$GREEN"Adding Files"$ENDCOLOR + echo $TICK$GREEN"Adding Files"$ENDCOLOR git add . > /dev/null 2>&1 - echo -e $TICK$GREEN"Commiting"$ENDCOLOR + echo $TICK$GREEN"Commiting"$ENDCOLOR git commit -m "Autodeploy from $(hostname) on $(date)" > /dev/null 2>&1 - echo -e $TICK$GREEN"Pushing..."$ENDCOLOR + echo $TICK$GREEN"Pushing..."$ENDCOLOR git push -u origin main > /dev/null 2>&1 - echo -e $TICK$GREEN"Files have been pushed to $YELLOW$remote_repo"$ENDCOLOR + echo $TICK$GREEN"Files have been pushed to $YELLOW$remote_repo"$ENDCOLOR } @@ -233,7 +230,7 @@ backup_old(){ # Backs up all the files that will be overwritten by autodeploy mkdir -p $HOST_CONFIG_PATH"backup" while read line; do - echo -e $TICK_BACKUP$GREEN"Backing up $BLUE$line$GREEN to $BLUE$BACKUP_DIR" + echo $TICK_BACKUP$GREEN"Backing up $BLUE$line$GREEN to $BLUE$BACKUP_DIR" cp -rf $HOME/$line $BACKUP_DIR > /dev/null 2>&1; done < $CONFIG_PATH/autodeploy_files.conf # Fix } @@ -253,7 +250,7 @@ distribute_files(){ # Need an odd for loop syntax because zsh handles file globs differently than bash for f in .[!.]* *; do - echo -e $TICK_MOVE$GREEN"Copying $BLUE$f$GREEN to $BLUE$HOME" + echo $TICK_MOVE$GREEN"Copying $BLUE$f$GREEN to $BLUE$HOME" cp -rf $f $HOME # Going to need to figure out a way to move all files except for the backup folder done } @@ -269,7 +266,7 @@ main(){ fi # Process command line arugments - while getopts "h d n m c p s f a b l :e:" o; do + while getopts "g h d n m c p s f a b l :e:" o; do case "${o}" in h) h=${OPTARG} @@ -277,62 +274,62 @@ main(){ ;; l) l=${OPTARG} - echo -e $TICK$GREEN$TITLE"Listing available configuration files"$ENDCOLOR + echo $TICK$GREEN"Listing available configuration files in $CONFIG_PATH"$ENDCOLOR list_configs ;; e) e=${OPTARG} - echo -e $TICK$GREEN$TITLE"Editing Files"$ENDCOLOR + echo $TICK$GREEN"Editing Files"$ENDCOLOR edit_files ;; p) c=${OPTARG} - echo -e $TICK$BLUE"Push config to $remote_repo"$ENDCOLOR + echo $TICK$BLUE"Push config to $remote_repo"$ENDCOLOR remote_push ;; g) g=${OPTARG} - echo -e $TICK$GREEN"Getting config from $BLUE$remote_repo"$ENDCOLOR + echo $TICK$GREEN"Getting config from $BLUE$remote_repo"$ENDCOLOR get_files ;; c) c=${OPTARG} - echo -e $TICK$GREEN"Collecting config files and storing them in $BLUE$HOST_CONFIG_PATH"$ENDCOLOR + echo $TICK$GREEN"Collecting config files and storing them in $BLUE$HOST_CONFIG_PATH"$ENDCOLOR collect_files ;; f) f=${OPTARG} - echo -e $TICK$BLUE"Re-running first time setup"$ENDCOLOR + echo $TICK$BLUE"Re-running first time setup"$ENDCOLOR # Add this feature ;; a) a=${OPTARG} - echo -e $TICK$BLUE"Installing applications"$ENDCOLOR + echo $TICK$BLUE"Installing applications"$ENDCOLOR install_apps ;; b) b=${OPTARG} - echo -e $TICK$BLUE"Backing up current dotfiles to $BACKUP_DIR"$ENDCOLOR + echo $TICK$BLUE"Backing up current dotfiles to $BACKUP_DIR"$ENDCOLOR backup_old ;; m) m=${OPTARG} - echo -e $BOLD$BLUE"Move files to correct locations"$ENDCOLOR - echo -e $GREEN$BOLD"---------------------------------------"$ENDCOLOR + echo $BOLD$BLUE"Move files to correct locations"$ENDCOLOR + echo $GREEN$BOLD"---------------------------------------"$ENDCOLOR distribute_files ;; n) n=${OPTARG} - echo -e $BOLD$BLUE"Running full new client install"$ENDCOLOR - echo -e $GREEN$BOLD"---------------------------------------"$ENDCOLOR + echo $BOLD$BLUE"Running full new client install"$ENDCOLOR + echo $GREEN$BOLD"---------------------------------------"$ENDCOLOR new_client ;; d) d=${OPTARG} - echo -e $BOLD$BLUE"Running move dev"$ENDCOLOR - echo -e $OPTARG - echo -e $GREEN$BOLD"---------------------------------------"$ENDCOLOR + echo $BOLD$BLUE"Running move dev"$ENDCOLOR + echo $OPTARG + echo $GREEN$BOLD"---------------------------------------"$ENDCOLOR move_dev "$@" ;; ?)