2021-04-27 19:33:06 +02:00
|
|
|
#! /usr/bin/env bash
|
2021-04-26 15:25:57 +02:00
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
cat << EOF
|
|
|
|
_______ _______ __ __ ___ __ _
|
|
|
|
| _ || || | | || | | | | |
|
|
|
|
| |_| ||_ _|| | | || | | |_| |
|
|
|
|
| | | | | |_| || | | |
|
|
|
|
| | | | | || | | _ |
|
|
|
|
| _ | | | | || | | | | |
|
|
|
|
|__| |__| |___| |_______||___| |_| |__|
|
|
|
|
|
|
|
|
Magical shell history
|
|
|
|
|
|
|
|
Atuin setup
|
|
|
|
https://github.com/ellie/atuin
|
|
|
|
|
|
|
|
Please file an issue if you encounter any problems!
|
|
|
|
|
|
|
|
===============================================================================
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
LATEST_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/ellie/atuin/releases/latest)
|
2021-05-14 09:31:15 +02:00
|
|
|
# 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/')
|
2021-04-26 15:25:57 +02:00
|
|
|
|
|
|
|
__atuin_install_arch(){
|
2021-04-26 17:54:53 +02:00
|
|
|
echo "Arch Linux detected!"
|
|
|
|
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/"
|
|
|
|
fi
|
2021-04-26 15:25:57 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
__atuin_install_ubuntu(){
|
|
|
|
echo "Ubuntu detected"
|
|
|
|
# TODO: select correct AARCH too
|
2021-05-07 20:06:43 +02:00
|
|
|
ARTIFACT_URL="https://github.com/ellie/atuin/releases/download/$LATEST_VERSION/atuin_${LATEST_VERSION//v/}_amd64.deb"
|
2021-04-26 15:25:57 +02:00
|
|
|
|
|
|
|
TEMP_DEB="$(mktemp)" &&
|
2021-05-14 09:31:15 +02:00
|
|
|
wget -O "$TEMP_DEB" "$ARTIFACT_URL"
|
2021-04-26 15:25:57 +02:00
|
|
|
sudo dpkg -i "$TEMP_DEB"
|
|
|
|
rm -f "$TEMP_DEB"
|
|
|
|
}
|
|
|
|
|
|
|
|
__atuin_install_linux(){
|
|
|
|
echo "Detected Linux!"
|
|
|
|
echo "Checking distro..."
|
|
|
|
|
2021-05-14 09:31:15 +02:00
|
|
|
if (uname -a | grep -qi "Microsoft"); then
|
2021-04-26 15:25:57 +02:00
|
|
|
OS="UbuntuWSL"
|
|
|
|
else
|
|
|
|
if ! command -v lsb_release &> /dev/null; then
|
|
|
|
echo "lsb_release could not be found, unable to determine your distribution"
|
|
|
|
echo "If you are using Arch, please get lsb_release from AUR"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
OS=$(lsb_release -i | awk '{ print $3 }')
|
|
|
|
fi
|
|
|
|
|
2021-05-14 09:31:15 +02:00
|
|
|
if [ "$OS" == "Arch" ] || [ "$OS" == "ManjaroLinux" ]; then
|
2021-04-26 15:25:57 +02:00
|
|
|
__atuin_install_arch
|
2021-05-14 09:31:15 +02:00
|
|
|
elif [ "$OS" == "Ubuntu" ] || [ "$OS" == "Debian" ] || [ "$OS" == "Linuxmint" ] || [ "$OS" == "Parrot" ] || [ "$OS" == "Kali" ] || [ "$OS" == "Elementary" ]; then
|
2021-04-26 15:25:57 +02:00
|
|
|
__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 tap ellie/atuin
|
|
|
|
brew install atuin
|
|
|
|
else
|
|
|
|
echo "Could not find brew, installing with Cargo"
|
|
|
|
__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
|
2021-05-08 15:30:41 +02:00
|
|
|
|
|
|
|
cargo install atuin
|
2021-04-26 15:25:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
__atuin_install_unsupported(){
|
|
|
|
echo "Unknown or unsupported OS"
|
|
|
|
echo "Please check the README at https://github.com/ellie/atuin for manual install instructions"
|
|
|
|
echo "If you have any problems, please open an issue!"
|
|
|
|
|
|
|
|
while true; do
|
2021-05-14 09:31:15 +02:00
|
|
|
read -r -p "Do you wish to attempt an install with 'cargo'?" yn
|
2021-04-26 15:25:57 +02:00
|
|
|
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*) __atuin_install_linux ;;
|
2021-05-14 09:31:15 +02:00
|
|
|
darwin*) __atuin_install_mac ;;
|
2021-04-26 15:25:57 +02:00
|
|
|
msys*) __atuin_install_unsupported ;;
|
|
|
|
solaris*) __atuin_install_unsupported ;;
|
|
|
|
bsd*) __atuin_install_unsupported ;;
|
|
|
|
*) __atuin_install_unsupported ;;
|
|
|
|
esac
|
2021-04-26 16:46:47 +02:00
|
|
|
|
2021-05-14 09:31:15 +02:00
|
|
|
# TODO: Check which shell is in use
|
|
|
|
# Use of single quotes around $() is intentional here
|
|
|
|
# shellcheck disable=SC2016
|
2021-05-08 14:57:27 +02:00
|
|
|
printf '\neval "$(atuin init zsh)"' >> ~/.zshrc
|
2021-04-26 16:46:47 +02:00
|
|
|
|
|
|
|
curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
|
2021-05-08 14:57:27 +02:00
|
|
|
printf '\n[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' >> ~/.bashrc
|
2021-05-14 09:31:15 +02:00
|
|
|
# Use of single quotes around $() is intentional here
|
|
|
|
# shellcheck disable=SC2016
|
2021-04-26 16:46:47 +02:00
|
|
|
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
|