2024-06-20 00:53:35 +01:00
|
|
|
#!/bin/bash
|
2026-01-16 11:11:01 +00:00
|
|
|
set -euo pipefail
|
2024-06-20 00:53:35 +01:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
for arg in "$@"; do
|
|
|
|
|
# allows: ./install.sh macos (sets $macos=1)
|
|
|
|
|
declare "${arg}=1"
|
|
|
|
|
done
|
2024-10-28 19:39:02 +00:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
if [[ -n "${macos:-}" ]]; then
|
|
|
|
|
linux=""
|
2024-12-08 15:49:58 +00:00
|
|
|
else
|
2026-01-16 12:03:49 +00:00
|
|
|
linux=1
|
2024-12-08 15:49:58 +00:00
|
|
|
fi
|
2024-10-28 19:39:02 +00:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
install_neovim() {
|
|
|
|
|
if command -v nvim >/dev/null 2>&1; then
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
2026-01-16 11:11:01 +00:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
if [[ -z "${linux:-}" ]]; then
|
|
|
|
|
# macOS
|
|
|
|
|
if command -v brew >/dev/null 2>&1; then
|
|
|
|
|
brew install neovim
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
echo "Neovim not found and Homebrew is not installed. Install Homebrew or install Neovim manually." >&2
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
2026-01-16 12:07:50 +00:00
|
|
|
# Linux: curl official tarball, install under /opt, symlink to /usr/local/bin (no AppImage)
|
2026-01-16 12:03:49 +00:00
|
|
|
if ! command -v curl >/dev/null 2>&1; then
|
|
|
|
|
echo "curl is required to install Neovim on Linux." >&2
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
2026-01-16 12:07:50 +00:00
|
|
|
if ! command -v tar >/dev/null 2>&1; then
|
|
|
|
|
echo "tar is required to install Neovim on Linux." >&2
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
2026-01-16 11:11:01 +00:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
arch="$(uname -m)"
|
2026-01-16 11:55:47 +00:00
|
|
|
case "$arch" in
|
2026-01-16 12:03:49 +00:00
|
|
|
x86_64) nvim_arch="linux-x86_64" ;;
|
|
|
|
|
aarch64|arm64) nvim_arch="linux-arm64" ;;
|
2026-01-16 11:55:47 +00:00
|
|
|
*)
|
2026-01-16 12:07:50 +00:00
|
|
|
echo "Unsupported architecture for Neovim tarball install: $arch" >&2
|
2026-01-16 11:55:47 +00:00
|
|
|
return 1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
tmpdir="$(mktemp -d)"
|
|
|
|
|
trap 'rm -rf "$tmpdir"' EXIT
|
2026-01-16 11:55:47 +00:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
url="https://github.com/neovim/neovim/releases/latest/download/nvim-${nvim_arch}.tar.gz"
|
|
|
|
|
curl -fsSL "$url" -o "$tmpdir/nvim.tar.gz"
|
|
|
|
|
tar -xzf "$tmpdir/nvim.tar.gz" -C "$tmpdir"
|
2026-01-16 11:55:47 +00:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
src_dir="$tmpdir/nvim-${nvim_arch}"
|
2026-01-16 11:11:01 +00:00
|
|
|
|
2026-01-16 12:07:50 +00:00
|
|
|
# Install to /opt/nvim (replace if present), then symlink binary
|
|
|
|
|
sudo rm -rf /opt/nvim
|
|
|
|
|
sudo mv "$src_dir" /opt/nvim
|
|
|
|
|
sudo ln -sf /opt/nvim/bin/nvim /usr/local/bin/nvim
|
2026-01-16 11:11:01 +00:00
|
|
|
}
|
|
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
mkdir -p "$HOME/.config"
|
|
|
|
|
|
|
|
|
|
# install neovim if missing
|
|
|
|
|
install_neovim
|
2024-06-20 00:53:35 +01:00
|
|
|
|
|
|
|
|
# install neovim config
|
|
|
|
|
if [ ! -d "$HOME/.config/nvim" ]; then
|
2026-01-16 11:11:01 +00:00
|
|
|
ln -s "$HOME/dotfiles/nvim" "$HOME/.config/nvim" || :
|
2025-09-25 22:28:48 +01:00
|
|
|
fi
|
|
|
|
|
|
2024-06-20 00:53:35 +01:00
|
|
|
# install starship config
|
2024-12-08 15:49:58 +00:00
|
|
|
ln -s "$HOME/dotfiles/starship.toml" "$HOME/.config/starship.toml" || :
|
2024-06-20 00:53:35 +01:00
|
|
|
|
2026-01-16 11:11:01 +00:00
|
|
|
if [ ! -n "${linux:-}" ]; then
|
2026-01-16 12:03:49 +00:00
|
|
|
# macos-only configs
|
2026-01-16 11:11:01 +00:00
|
|
|
ln -s "$HOME/dotfiles/aerospace.toml" "$HOME/.aerospace.toml" || :
|
2024-12-08 15:49:58 +00:00
|
|
|
|
2026-01-16 12:03:49 +00:00
|
|
|
if [ ! -d "$HOME/.config/sketchybar" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/sketchybar" "$HOME/.config/sketchybar" || :
|
|
|
|
|
fi
|
|
|
|
|
if [ ! -d "$HOME/.config/borders" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/borders" "$HOME/.config/borders" || :
|
|
|
|
|
fi
|
|
|
|
|
if [ ! -d "$HOME/.config/neovide" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/neovide" "$HOME/.config/neovide" || :
|
|
|
|
|
fi
|
|
|
|
|
if [ ! -d "$HOME/.config/ghostty" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/ghostty" "$HOME/.config/ghostty" || :
|
|
|
|
|
fi
|
2024-10-28 19:39:02 +00:00
|
|
|
else
|
2026-01-16 12:03:49 +00:00
|
|
|
# linux-only configs
|
|
|
|
|
if [ ! -d "$HOME/.config/sway" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/sway" "$HOME/.config/sway" || :
|
|
|
|
|
fi
|
|
|
|
|
if [ ! -d "$HOME/.config/waybar" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/waybar" "$HOME/.config/waybar" || :
|
|
|
|
|
fi
|
|
|
|
|
if [ ! -d "$HOME/.config/rofi" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/rofi" "$HOME/.config/rofi" || :
|
|
|
|
|
fi
|
|
|
|
|
if [ ! -d "$HOME/.config/dunst" ]; then
|
|
|
|
|
ln -s "$HOME/dotfiles/dunst" "$HOME/.config/dunst" || :
|
|
|
|
|
fi
|
2024-08-30 00:19:51 +01:00
|
|
|
fi
|
2026-01-16 11:11:01 +00:00
|
|
|
|