aboutsummaryrefslogtreecommitdiffstats
path: root/install.sh
diff options
context:
space:
mode:
Diffstat (limited to 'install.sh')
-rwxr-xr-xinstall.sh178
1 files changed, 178 insertions, 0 deletions
diff --git a/install.sh b/install.sh
new file mode 100755
index 00000000..61e5459a
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,178 @@
+#! /bin/sh
+set -eu
+
+ATUIN_NON_INTERACTIVE="no"
+
+for arg in "$@"; do
+ case "$arg" in
+ --non-interactive) ATUIN_NON_INTERACTIVE="yes" ;;
+ *) ;;
+ esac
+done
+
+if [ "$ATUIN_NON_INTERACTIVE" != "yes" ]; then
+ if [ -t 0 ] || [ -c /dev/tty ]; then
+ ATUIN_NON_INTERACTIVE="no"
+ else
+ ATUIN_NON_INTERACTIVE="yes"
+ fi
+fi
+
+cat << EOF
+ _______ _______ __ __ ___ __ _
+| _ || || | | || | | | | |
+| |_| ||_ _|| | | || | | |_| |
+| | | | | |_| || | | |
+| | | | | || | | _ |
+| _ | | | | || | | | | |
+|__| |__| |___| |_______||___| |_| |__|
+
+Magical shell history
+
+Atuin setup
+https://github.com/atuinsh/atuin
+https://forum.atuin.sh
+
+Please file an issue or reach out on the forum if you encounter any problems!
+
+===============================================================================
+
+EOF
+
+__atuin_install_binary(){
+ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/atuinsh/atuin/releases/latest/download/atuin-installer.sh | sh
+}
+
+if ! command -v curl > /dev/null; then
+ echo "curl not installed. Please install curl."
+ exit
+elif ! command -v sed > /dev/null; then
+ echo "sed not installed. Please install sed."
+ exit
+fi
+
+
+__atuin_install_binary
+
+# TODO: Check which shell is in use
+# Use of single quotes around $() is intentional here
+# shellcheck disable=SC2016
+if ! grep -q "atuin init zsh" "${ZDOTDIR:-$HOME}/.zshrc"; then
+ printf '\neval "$(atuin init zsh)"\n' >> "${ZDOTDIR:-$HOME}/.zshrc"
+fi
+
+# Use of single quotes around $() is intentional here
+# shellcheck disable=SC2016
+
+if ! grep -q "atuin init bash" ~/.bashrc; then
+ curl --proto '=https' --tlsv1.2 -LsSf https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
+ printf '\n[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh\n' >> ~/.bashrc
+ echo 'eval "$(atuin init bash)"' >> ~/.bashrc
+fi
+
+if [ -f "$HOME/.config/fish/config.fish" ]; then
+ # Check if the line already exists to prevent duplicates
+ if ! grep -q "atuin init fish" "$HOME/.config/fish/config.fish"; then
+ # Detect BSD or GNU sed
+ if sed --version >/dev/null 2>&1; then
+ # GNU
+ sed -i '/if status is-interactive/,/end/ s/end$/ atuin init fish | source\
+end/' "$HOME/.config/fish/config.fish"
+ else
+ # BSD (macOS)
+ sed -i '' '/if status is-interactive/,/end/ s/end$/ atuin init fish | source\
+end/' "$HOME/.config/fish/config.fish"
+ fi
+ fi
+fi
+
+ATUIN_BIN="$HOME/.atuin/bin/atuin"
+
+echo ""
+echo "Atuin installed successfully!"
+echo ""
+
+if [ "$ATUIN_NON_INTERACTIVE" != "yes" ]; then
+
+ printf "Would you like to import your existing shell history into Atuin? [Y/n] "
+ read -r import_answer </dev/tty || import_answer="n"
+ import_answer="${import_answer:-y}"
+
+ case "$import_answer" in
+ [yY]*)
+ echo ""
+ if ! "$ATUIN_BIN" import auto; then
+ echo ""
+ echo "History import failed. You can retry later with 'atuin import auto'."
+ fi
+ echo ""
+ ;;
+ *)
+ echo "Skipping history import. You can always run 'atuin import auto' later."
+ echo ""
+ ;;
+ esac
+
+ cat << EOF
+Sync your history across all your machines with Atuin Cloud:
+
+ - End-to-end encrypted — only you can read your data
+ - Access your history from any device
+ - Never lose your history, even if you wipe a machine
+
+EOF
+
+ printf "Sign up for a sync account? [Y/n] "
+ read -r sync_answer </dev/tty || sync_answer="n"
+ sync_answer="${sync_answer:-y}"
+
+ case "$sync_answer" in
+ [yY]*)
+ echo ""
+ if ! "$ATUIN_BIN" register </dev/tty; then
+ echo ""
+ echo "Registration did not complete. You can run 'atuin register' any time to try again."
+ fi
+ ;;
+ *)
+ echo ""
+ printf "Already have an account? Log in with 'atuin login'.\n"
+ echo "You can also run 'atuin register' any time to create one."
+ ;;
+ esac
+
+else
+ echo "Non-interactive environment detected — skipping setup prompts."
+ echo "You can run the following commands manually after installation:"
+ echo ""
+ echo " atuin import auto Import your existing shell history"
+ echo " atuin register Sign up for a sync account"
+ echo " atuin login Log in to an existing sync account"
+fi
+
+if [ "$ATUIN_NON_INTERACTIVE" != "yes" ]; then
+ "$ATUIN_BIN" setup
+fi
+
+cat << EOF
+
+ _______ __ __ _______ __ _ ___ _ __ __ _______ __ __
+| || | | || _ || | | || | | | | | | || || | | |
+|_ _|| |_| || |_| || |_| || |_| | | |_| || _ || | | |
+ | | | || || || _| | || | | || |_| |
+ | | | || || _ || |_ |_ _|| |_| || |
+ | | | _ || _ || | | || _ | | | | || |
+ |___| |__| |__||__| |__||_| |__||___| |_| |___| |_______||_______|
+
+Thanks for installing Atuin! I really hope you like it.
+
+If you have any issues, please open an issue on GitHub or visit our forum (https://forum.atuin.sh)!
+
+If you love Atuin, please give us a star on GitHub! It really helps ⭐️ https://github.com/atuinsh/atuin
+
+===============================================================================
+
+ ⚠️ Please restart your shell or open a new terminal for Atuin to take effect!
+
+===============================================================================
+EOF