mirror of
https://github.com/ellie/atuin.git
synced 2024-08-17 17:00:33 +03:00
If we're running Ubuntu on non-amd64 we get an install error. As there's no ARM package yet we can offer the user the option to install via cargo rather than install something that won't work.
218 lines
6.2 KiB
Bash
Executable File
218 lines
6.2 KiB
Bash
Executable File
#! /usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
cat << EOF
|
|
_______ _______ __ __ ___ __ _
|
|
| _ || || | | || | | | | |
|
|
| |_| ||_ _|| | | || | | |_| |
|
|
| | | | | |_| || | | |
|
|
| | | | | || | | _ |
|
|
| _ | | | | || | | | | |
|
|
|__| |__| |___| |_______||___| |_| |__|
|
|
|
|
Magical shell history
|
|
|
|
Atuin setup
|
|
https://github.com/atuinsh/atuin
|
|
|
|
Please file an issue if you encounter any problems!
|
|
|
|
===============================================================================
|
|
|
|
EOF
|
|
|
|
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
|
|
|
|
LATEST_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/atuinsh/atuin/releases/latest)
|
|
# Allow sed; sometimes it's more readable than ${variable//search/replace}
|
|
# shellcheck disable=SC2001
|
|
LATEST_VERSION=$(echo "$LATEST_RELEASE" | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
|
|
|
|
__atuin_install_arch(){
|
|
echo "Arch Linux detected!"
|
|
|
|
if command -v pacman &> /dev/null
|
|
then
|
|
echo "Installing with pacman"
|
|
sudo pacman -S atuin
|
|
else
|
|
echo "Attempting AUR install"
|
|
if command -v yaourt &> /dev/null; then
|
|
echo "Found yaourt"
|
|
yaourt -S atuin
|
|
elif command -v yay &> /dev/null; then
|
|
echo "Found yay"
|
|
yay -S atuin
|
|
elif command -v pakku &> /dev/null; then
|
|
echo "Found pakku"
|
|
pakku -S atuin
|
|
elif command -v pamac &> /dev/null; then
|
|
echo "Found pamac"
|
|
pamac install atuin
|
|
else
|
|
echo "Failed to install atuin! Please try manually: https://aur.archlinux.org/packages/atuin-git/"
|
|
fi
|
|
fi
|
|
|
|
}
|
|
|
|
__atuin_install_ubuntu(){
|
|
if [ "$(dpkg --print-architecture)" = "amd64" ]; then
|
|
echo "Ubuntu detected"
|
|
ARTIFACT_URL="https://github.com/atuinsh/atuin/releases/download/$LATEST_VERSION/atuin_${LATEST_VERSION//v/}_amd64.deb"
|
|
TEMP_DEB="$(mktemp)".deb &&
|
|
curl -Lo "$TEMP_DEB" "$ARTIFACT_URL"
|
|
if command -v sudo &> /dev/null; then
|
|
sudo apt install "$TEMP_DEB"
|
|
else
|
|
su -l -c "apt install '$TEMP_DEB'"
|
|
fi
|
|
rm -f "$TEMP_DEB"
|
|
else
|
|
echo "Ubuntu detected, but not amd64"
|
|
__atuin_install_unsupported
|
|
fi
|
|
}
|
|
|
|
__atuin_install_linux(){
|
|
echo "Detected Linux!"
|
|
echo "Checking distro..."
|
|
if (uname -a | grep -qi "Microsoft"); then
|
|
OS="ubuntuwsl"
|
|
elif ! command -v lsb_release &> /dev/null; then
|
|
echo "lsb_release could not be found. Falling back to /etc/os-release"
|
|
OS="$(grep -Po '(?<=^ID=).*$' /etc/os-release | tr '[:upper:]' '[:lower:]')" 2>/dev/null
|
|
else
|
|
OS=$(lsb_release -i | awk '{ print $3 }' | tr '[:upper:]' '[:lower:]')
|
|
fi
|
|
if [ "$OS" == "arch" ] || [ "$OS" == "manjarolinux" ] || [ "$OS" == "endeavouros" ]; then
|
|
__atuin_install_arch
|
|
elif [ "$OS" == "ubuntu" ] || [ "$OS" == "ubuntuwsl" ] || [ "$OS" == "debian" ] || [ "$OS" == "linuxmint" ] || [ "$OS" == "parrot" ] || [ "$OS" == "kali" ] || [ "$OS" == "elementary" ] || [ "$OS" == "pop" ]; then
|
|
__atuin_install_ubuntu
|
|
else
|
|
# TODO: download a binary or smth
|
|
__atuin_install_unsupported
|
|
fi
|
|
}
|
|
|
|
__atuin_install_mac(){
|
|
echo "Detected Mac!"
|
|
|
|
if command -v brew &> /dev/null
|
|
then
|
|
echo "Installing with brew"
|
|
brew install atuin
|
|
else
|
|
echo "Could not find brew, installing with Cargo"
|
|
__atuin_install_unsupported
|
|
fi
|
|
|
|
}
|
|
|
|
__atuin_install_termux(){
|
|
echo "Termux detected!"
|
|
|
|
if command -v pkg &> /dev/null; then
|
|
echo "Installing with pkg"
|
|
pkg install atuin
|
|
else
|
|
echo "Could not find pkg"
|
|
__atuin_install_unsupported
|
|
fi
|
|
}
|
|
|
|
__atuin_install_cargo(){
|
|
echo "Attempting install with cargo"
|
|
|
|
if ! command -v cargo &> /dev/null
|
|
then
|
|
echo "cargo not found! Attempting to install rustup"
|
|
|
|
if command -v rustup &> /dev/null
|
|
then
|
|
echo "rustup was found, but cargo wasn't. Something is up with your install"
|
|
exit 1
|
|
fi
|
|
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -q
|
|
|
|
echo "rustup installed! Attempting cargo install"
|
|
|
|
fi
|
|
|
|
cargo install atuin
|
|
}
|
|
|
|
__atuin_install_unsupported(){
|
|
echo "Unknown or unsupported OS or architecture"
|
|
echo "Please check the README at https://github.com/atuinsh/atuin for manual install instructions"
|
|
echo "If you have any problems, please open an issue!"
|
|
|
|
while true; do
|
|
read -r -p "Do you wish to attempt an install with 'cargo'? [Y/N] " yn
|
|
case $yn in
|
|
[Yy]* ) __atuin_install_cargo; break;;
|
|
[Nn]* ) exit;;
|
|
* ) echo "Please answer yes or no.";;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# TODO: would be great to support others!
|
|
case "$OSTYPE" in
|
|
linux-android*) __atuin_install_termux ;;
|
|
linux*) __atuin_install_linux ;;
|
|
darwin*) __atuin_install_mac ;;
|
|
msys*) __atuin_install_unsupported ;;
|
|
solaris*) __atuin_install_unsupported ;;
|
|
bsd*) __atuin_install_unsupported ;;
|
|
*) __atuin_install_unsupported ;;
|
|
esac
|
|
|
|
# TODO: Check which shell is in use
|
|
# Use of single quotes around $() is intentional here
|
|
# shellcheck disable=SC2016
|
|
if ! grep -q "atuin init zsh" ~/.zshrc; then
|
|
printf '\neval "$(atuin init zsh)"\n' >> ~/.zshrc
|
|
fi
|
|
|
|
# Use of single quotes around $() is intentional here
|
|
# shellcheck disable=SC2016
|
|
|
|
if ! grep -q "atuin init bash" ~/.bashrc; then
|
|
curl 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
|
|
|
|
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 Discord (https://discord.gg/dPhv2B3x)!
|
|
|
|
If you love Atuin, please give us a star on GitHub! It really helps ⭐️ https://github.com/atuinsh/atuin
|
|
|
|
Please run "atuin register" to get setup with sync, or "atuin login" if you already have an account
|
|
|
|
EOF
|