Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add guided install mode #169

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 166 additions & 22 deletions scripts/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,43 @@

set -euo pipefail

# Setting this to `1` skips prompts and always uses the deault option
SKIP_ASK_PROMPTS=0

# Helper for "ask [Y/n]" and "ask [y/N]"
ask() {
yn="$1"
shift
case "$yn" in
0) options="[Y/n]" ;;
1) options="[y/N]" ;;
*)
echo "FATAL: ask() got invalid argument."
exit 2
;;
esac
if [ "$SKIP_ASK_PROMPTS" = "0" ]; then
echo
# We are using echo -e to allow multiline messages
echo -en "$@"
printf " %s\n" "$options"
read reply
else
reply=""
fi
case "$reply" in
y*|Y*) return 0 ;;
n*|N*) return 1 ;;
*) return "$yn" ;;
esac
}
ask_Yn() {
ask 0 "$@"
}
ask_yN() {
ask 1 "$@"
}

echo
echo "Checking your system ..."

Expand All @@ -15,7 +52,7 @@ fi
echo " * Login shell: $login_shell - OK"


# check like we are not running bash
# check like if we are not running bash
bash_version=$(bash -c 'echo ${BASH_VERSION}')
bash_version_major=$(bash -c 'echo ${BASH_VERSINFO[0]}')
bash_version_minor=$(bash -c 'echo ${BASH_VERSINFO[1]}')
Expand Down Expand Up @@ -88,10 +125,16 @@ else
fi
fi

# echo
# echo "Continue with installation? (Any key to CONTINUE / Ctrl+C to ABORT)"
# # shellcheck disable=2034
# read -r x
echo
echo "This installations has two modes:"
echo " * Automatic - no question asked - RECOMMENDED"
echo " * Guided - prompts to give you more control - useful if you have heavily customized shell configuration"
if ask_Yn ">>> Would you like to use the AUTOMATIC install mode?"; then
SKIP_ASK_PROMPTS=1
echo "Using automatic install mode ..."
else
echo "Using guided install mode ..."
fi

echo
echo "Creating directories ..."
Expand Down Expand Up @@ -128,7 +171,6 @@ update_config() {
fi
}


# Do not overwrite config if it exists
if [ ! -f ~/.config/resh.toml ]; then
echo "Copying config file ..."
Expand All @@ -139,7 +181,7 @@ if [ ! -f ~/.config/resh.toml ]; then
# HINT: check which version are we updating FROM and make changes to config based on that
fi

echo "Generating completions ..."
echo "Generating shell completions ..."
bin/resh-control completion bash > ~/.resh/bash_completion.d/_reshctl
bin/resh-control completion zsh > ~/.resh/zsh_completion.d/_reshctl

Expand All @@ -152,22 +194,124 @@ cp -fr data/sanitizer ~/.resh/sanitizer_data
# backward compatibility: We have a new location for resh history file
[ ! -f ~/.resh/history.json ] || mv ~/.resh/history.json ~/.resh_history.json

echo "Finishing up ..."
# Adding resh shellrc to .bashrc ...
if [ ! -f ~/.bashrc ]; then
touch ~/.bashrc
echo "Adding RESH to shell rc files ..."

setup_bashrc() {
# Creating .bashrc ...
if [ ! -f ~/.bashrc ]; then
ask_Yn \
"It looks like there is no '~/.bashrc'." \
"RESH must be sourced when your shell starts otherwise it won't work." \
">>> Create '~/.bashrc'?"
if [ "$?" = "0" ]; then
echo "Creating '~/.bashrc' ..."
touch ~/.bashrc
else
return 1
fi
fi
# Adding resh shellrc to .bashrc ...
if ! grep -q '[[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc' ~/.bashrc; then
ask_Yn \
"It looks like there is no '[[ -f ~/.resh/shellrc ]] && source ~/.resh/shelrc' directive in your '~/.bashrc'." \
"\nRESH must be sourced when your shell starts otherwise it won't work." \
"\n>>> Add source directive to '~/.bashrc'?"
if [ "$?" = "0" ]; then
echo "Adding RESH source directive to '~/.bashrc' ..."
echo -e '\n[[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc # this line was added by RESH (Rich Enchanced Shell History)' >> ~/.bashrc
else
return 1
fi
fi
# Adding bash-preexec to .bashrc ...
if ! grep -q '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' ~/.bashrc; then
ask_Yn \
"It looks like there is no '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' directive in your '~/.bashrc'." \
"\nBash-preexec must be sourced when your shell starts otherwise RESH won't work." \
"\n>>> Add bash-preexec source directive to '~/.bashrc'?"
if [ "$?" = "0" ]; then
echo "Adding bash-preexec source directive to '~/.bashrc' ..."
echo -e '\n[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh # this line was added by RESH (Rich Enchanced Shell History)' >> ~/.bashrc
else
return 1
fi
fi
}

setup_zshrc() {
# Creating .zshrc ...
if [ ! -f ~/.zshrc ]; then
echo "There is no '~/.zshrc' - skipping zsh setup. (This is fine if you don't use zsh.)"
return 0
fi
# Adding resh shellrc to .zshrc ...
if ! grep -q '[[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc' ~/.zshrc; then
ask_Yn \
"It looks like there is no '[[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc' directive in your '~/.zshrc'." \
"\nRESH must be sourced when your shell starts otherwise it won't work." \
"\n>>> Add source directive to '~/.zshrc'?"
if [ "$?" = "0" ]; then
echo "Adding RESH source directive to '~/.zshrc' ..."
echo -e '\n[[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc # this line was added by RESH (Rich Enchanced Shell History)' >> ~/.zshrc
else
return 1
fi
fi
}

bash_setup_info() {
echo
echo "WARNING: Shell config setup didn't complete for BASH! (You probably answered 'no' somewhere.)"
echo
echo "It is likely that you will need to modify your bash startup scripts to make RESH work in bash."
echo "Consider rerunning the installation if you do not want to modify your shell configs yourself."
echo
echo "Instructions for manual config setup for BASH:"
echo " 1) Add following lines to the end of your bash startup file:"
echo
echo " [[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc # enable RESH"
echo " [[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh # enable bash-preexec (required by RESH)"
echo
echo " 2) Make sure that you have the right config - '~/.bashrc' is usually the right one."
echo " 3) Make sure that you added the lines to the *end* of the file."
echo " 4) Make sure that you added the lines in the correct order - bash-preexec needs to come last."
echo
echo "Press any key to continue ..."
read -n 1 x
echo
echo
}
zsh_setup_info() {
echo
echo "WARNING: Shell config setup didn't complete for ZSH! (You probably answered 'no' somewhere.)"
echo
echo "It is likely that you will need to modify your zsh startup scripts to make RESH work in zsh."
echo "Consider rerunning the installation if you do not want to modify your shell configs yourself."
echo
echo "Instructions for manual config setup for ZSH:"
echo " 1) Add following line to the end of your zsh startup file:"
echo
echo " [[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc # enable RESH"
echo
echo " 2) Make sure that you have the right config - '~/.zshrc' is usually the right one."
echo " 3) Make sure that you added the line to the *end* of the file."
echo
echo "Press any key to continue ..."
read -n 1 x
echo
echo
}

if ! setup_bashrc; then
bash_setup_info
fi
grep -q '[[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc' ~/.bashrc ||\
echo -e '\n[[ -f ~/.resh/shellrc ]] && source ~/.resh/shellrc # this line was added by RESH (Rich Enchanced Shell History)' >> ~/.bashrc
# Adding bash-preexec to .bashrc ...
grep -q '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' ~/.bashrc ||\
echo -e '\n[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh # this line was added by RESH (Rich Enchanced Shell History)' >> ~/.bashrc
# Adding resh shellrc to .zshrc ...
if [ -f ~/.zshrc ]; then
grep -q '[ -f ~/.resh/shellrc ] && source ~/.resh/shellrc' ~/.zshrc ||\
echo -e '\n[ -f ~/.resh/shellrc ] && source ~/.resh/shellrc # this line was added by RESH (Rich Enchanced Shell History)' >> ~/.zshrc

if ! setup_zshrc; then
zsh_setup_info
fi

echo "Finishing up ..."

# Deleting zsh completion cache - for future use
# [ ! -e ~/.zcompdump ] || rm ~/.zcompdump

Expand Down Expand Up @@ -214,7 +358,7 @@ RESH SEARCH APPLICATION = Redesigned reverse search that actually works
Host, directories, git remote, and exit status is used to display relevant results first.

At first, the search application will use the standard shell history without context.
All history recorded from now on will have context which will by the RESH SEARCH app.
All history recorded from now on will have context which will be used by the RESH SEARCH app.

Enable/disable Ctrl+R binding using reshctl command:
$ reshctl enable ctrl_r_binding
Expand Down Expand Up @@ -259,4 +403,4 @@ if [ -z "${__RESH_VERSION:-}" ]; then echo "
# Finish the installation by RESTARTING this terminal! #
# #
##############################################################"
fi
fi