From 40bdaec84f24f6f6dcb7c1d623d85bb77f8b9459 Mon Sep 17 00:00:00 2001 From: egvimo Date: Sat, 5 Dec 2020 09:42:03 +0100 Subject: [PATCH] Add option to append template to existing config --- docs/installation.rst | 1 + install.sh | 34 ++++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 12cc9437..9688af20 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -19,6 +19,7 @@ The install script can take the following options: * ``--interactive``\ : Asks the user which aliases, completions and plugins to enable. * ``--silent``\ : Ask nothing and install using default settings. * ``--no-modify-config``\ : Do not modify the existing config file (\ ``~/.bash_profile`` or ``~/.bashrc``\ ). +* ``--append-to-config``\ : Back up existing config file and append bash-it templates at the end. When run without the ``--interactive`` switch, Bash-it only enables a sane default set of functionality to keep your shell clean and to avoid issues with missing dependencies. Feel free to enable the tools you want to use after the installation. diff --git a/install.sh b/install.sh index 8250c3df..1651abb0 100755 --- a/install.sh +++ b/install.sh @@ -10,6 +10,7 @@ function show_usage() { echo "--silent (-s): Install default settings without prompting for input"; echo "--interactive (-i): Interactively choose plugins" echo "--no-modify-config (-n): Do not modify existing config file" + echo "--append-to-config (-a): Keep existing config file and append bash-it templates at the end" exit 0; } @@ -56,15 +57,27 @@ function load_some() { done } -# Back up existing profile and create new one for bash-it -function backup_new() { +# Back up existing profile +function backup() { test -w "$HOME/$CONFIG_FILE" && cp -aL "$HOME/$CONFIG_FILE" "$HOME/$CONFIG_FILE.bak" && echo -e "\033[0;32mYour original $CONFIG_FILE has been backed up to $CONFIG_FILE.bak\033[0m" +} + +# Back up existing profile and create new one for bash-it +function backup_new() { + backup sed "s|{{BASH_IT}}|$BASH_IT|" "$BASH_IT/template/bash_profile.template.bash" > "$HOME/$CONFIG_FILE" echo -e "\033[0;32mCopied the template $CONFIG_FILE into ~/$CONFIG_FILE, edit this file to customize bash-it\033[0m" } +# Back up existing profile and append bash-it templates at the end +function backup_append() { + backup + (sed "s|{{BASH_IT}}|$BASH_IT|" "$BASH_IT/template/bash_profile.template.bash" | tail -n +2) >> "$HOME/$CONFIG_FILE" + echo -e "\033[0;32mBash-it template has been added to your $CONFIG_FILE\033[0m" +} + for param in "$@"; do shift case "$param" in @@ -72,6 +85,7 @@ for param in "$@"; do "--silent") set -- "$@" "-s" ;; "--interactive") set -- "$@" "-i" ;; "--no-modify-config") set -- "$@" "-n" ;; + "--append-to-config") set -- "$@" "-a" ;; *) set -- "$@" "$param" esac done @@ -84,6 +98,7 @@ do "s") silent=true ;; "i") interactive=true ;; "n") no_modify_config=true ;; + "a") append_to_config=true ;; "?") show_usage >&2; exit 1 ;; esac done @@ -94,6 +109,11 @@ if [[ $silent ]] && [[ $interactive ]]; then exit 1; fi +if [[ $no_modify_config ]] && [[ $append_to_config ]]; then + echo -e "\033[91mOptions --no-modify-config and --append-to-config are mutually exclusive. Please choose one or the other.\033[m" + exit 1; +fi + BASH_IT="$(cd "$(dirname "$0")" && pwd)" case $OSTYPE in @@ -131,12 +151,7 @@ if ! [[ $silent ]] && ! [[ $no_modify_config ]]; then read -e -n 1 -r -p "Would you like to keep your $CONFIG_FILE and append bash-it templates at the end? [y/N] " choice case $choice in [yY]) - test -w "$HOME/$CONFIG_FILE" && - cp -aL "$HOME/$CONFIG_FILE" "$HOME/$CONFIG_FILE.bak" && - echo -e "\033[0;32mYour original $CONFIG_FILE has been backed up to $CONFIG_FILE.bak\033[0m" - - (sed "s|{{BASH_IT}}|$BASH_IT|" "$BASH_IT/template/bash_profile.template.bash" | tail -n +2) >> "$HOME/$CONFIG_FILE" - echo -e "\033[0;32mBash-it template has been added to your $CONFIG_FILE\033[0m" + backup_append break ;; [nN]|"") @@ -148,6 +163,9 @@ if ! [[ $silent ]] && ! [[ $no_modify_config ]]; then ;; esac done +elif [[ $silent ]] && [[ $append_to_config ]]; then + # backup/append + backup_append elif [[ $silent ]] && ! [[ $no_modify_config ]]; then # backup/new by default backup_new