Files
dotfiles/setup.sh
2025-09-24 21:01:23 +12:00

82 lines
2.2 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# CLI: parse flags
PROMPT_DELETE=1
while [[ $# -gt 0 ]]; do
case "$1" in
--no-prompt|-n)
PROMPT_DELETE=0
shift
;;
--prompt|-p)
PROMPT_DELETE=1
shift
;;
*) break
esac
done
echo ">>> Bootstrapping new Debian-like machine..."
# 1. Update package list and install essentials
echo ">>> Installing bash, tmux, and vim..."
sudo apt update
sudo apt install -y bash tmux vim git curl
# 2. Clone your dotfiles (bare repo style)
if [ ! -d "$HOME/.dotfiles" ]; then
echo ">>> Cloning dotfiles repo..."
git clone --bare https://gitea.james-server.duckdns.org/james/dotfiles $HOME/.dotfiles
else
echo ">>> Dotfiles repo already exists."
fi
# 3. Checkout dotfiles
dotfiles() {
/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME" "$@"
}
echo ">>> Checking out dotfiles..."
if ! dotfiles checkout; then
echo ">>> Conflicts detected! Handling conflicting dotfiles..."
mkdir -p "$HOME/.dotfiles-backup"
# Gather conflicts (paths with spaces supported)
conflicts=$(dotfiles checkout 2>&1 | grep -E "\s+\." | awk '{print $1}')
if [ -n "$conflicts" ]; then
if [ "$PROMPT_DELETE" = "0" ]; then
while IFS= read -r f; do
[ -z "$f" ] && continue
mv "$f" "$HOME/.dotfiles-backup/$f"
done <<< "$conflicts"
else
while IFS= read -r f; do
[ -z "$f" ] && continue
if [ -t 1 ]; then
read -r -p "Move '$f' to backup? (y/N): " resp
case "$resp" in
[Yy]* ) mv "$f" "$HOME/.dotfiles-backup/$f" ;;
* ) echo "Skipping '$f'." ;;
esac
else
echo "Non-interactive environment detected; skipping '$f'."
fi
done <<< "$conflicts"
fi
fi
dotfiles checkout
fi
dotfiles config --local status.showUntrackedFiles no
# 4. setup tmux
mkdir -p ~/.tmux/plugins
if [ ! -d ~/.tmux/plugins/tpm ]; then
echo ">>> Installing Tmux Plugin Manager..."
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
fi
echo ">>> Done! Bash, tmux, vim, and dotfiles are ready."