#!/bin/bash set -euo pipefail REPO="git@gitea.hptrow.me:pt/nvchad.git" BRANCH="customize" NVIM_CONFIG="$HOME/.config/nvim" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" deploy_nvim_modules() { local src_dir="$SCRIPT_DIR/dotfiles/nvim" [[ -d "$src_dir" ]] || return 0 [[ -d "$NVIM_CONFIG/lua" ]] || return 0 echo "Deploying nvim lua modules..." for mod in "$src_dir"/*.lua; do [[ -f "$mod" ]] || continue local target="$NVIM_CONFIG/lua/$(basename "$mod")" [[ -e "$target" ]] && mv "$target" "${target}.backup" ln -s "$mod" "$target" echo " linked: $(basename "$mod")" done } echo "============================================" echo "NvChad Configuration Installation Script" echo "============================================" echo "" # Check prerequisites if ! command -v nvim &> /dev/null; then echo "Error: Neovim is not installed or not in PATH" >&2 echo "Please run ./install_neovim.sh first" >&2 exit 1 fi if ! command -v git &> /dev/null; then echo "Error: Git is not installed" >&2 exit 1 fi # Verify Neovim version NVIM_VERSION=$(nvim --version | head -n1 | grep -oP 'v\K[0-9]+\.[0-9]+' || echo "0.0") REQUIRED_VERSION="0.9" if [ "$(printf '%s\n' "$REQUIRED_VERSION" "$NVIM_VERSION" | sort -V | head -n1)" != "$REQUIRED_VERSION" ]; then echo "Error: Neovim version $NVIM_VERSION is too old (need 0.9.5+)" >&2 exit 1 fi echo "Neovim version: $(nvim --version | head -n1)" echo "" # If already installed and pointing at the right remote, just pull if [ -d "$NVIM_CONFIG/.git" ]; then EXISTING_REMOTE=$(git -C "$NVIM_CONFIG" remote get-url hptrow 2>/dev/null || git -C "$NVIM_CONFIG" remote get-url origin 2>/dev/null || echo "") if [ "$EXISTING_REMOTE" = "$REPO" ]; then echo "NvChad config already installed — pulling latest..." git -C "$NVIM_CONFIG" pull hptrow "$BRANCH" deploy_nvim_modules echo "Done." exit 0 fi fi echo "This script will:" echo " - Backup existing ~/.config/nvim to ~/.config/nvim.backup (if exists)" echo " - Clone your NvChad config from $REPO ($BRANCH branch)" echo " - Deploy lua modules from dotfiles/nvim/" echo " - Launch nvim to auto-install lazy.nvim and all plugins" echo "" echo "Prerequisites:" echo " - SSH key must be set up for gitea.hptrow.me" echo "" read -p "Continue with installation? (y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Installation cancelled." exit 0 fi echo "" echo "Starting installation..." echo "" # Backup existing config if [ -d "$NVIM_CONFIG" ]; then echo "Backing up existing ~/.config/nvim to ~/.config/nvim.backup" [ -d "$NVIM_CONFIG.backup" ] && rm -rf "$NVIM_CONFIG.backup" mv "$NVIM_CONFIG" "$NVIM_CONFIG.backup" fi # Clone the config echo "Cloning NvChad config from gitea ($BRANCH branch)..." set -x git clone -b "$BRANCH" "$REPO" "$NVIM_CONFIG" set +x [ -d "$NVIM_CONFIG" ] || { echo "Error: Failed to clone config" >&2; exit 1; } echo "" echo "Config cloned successfully!" echo "" deploy_nvim_modules echo "" echo "============================================" echo "First Launch Setup" echo "============================================" echo "" echo "Neovim will now launch and automatically:" echo " 1. Bootstrap lazy.nvim plugin manager" echo " 2. Install NvChad (as a plugin)" echo " 3. Install all configured plugins" echo "" echo "This may take a few minutes on first run." echo "After installation completes, close nvim with :q" echo "" read -p "Press Enter to launch nvim and complete setup..." -r echo "" nvim +q echo "" echo "============================================" echo "Installation Complete!" echo "============================================" echo "" echo "Your NvChad configuration is installed at: $NVIM_CONFIG" echo "" echo "Key customizations in this config:" echo " - Theme: vscode_dark" echo " - Tab width: 4 spaces" echo " - Obsidian.nvim integration" echo " - SQL development tools (pg_format, sqlfluff)" echo " - Mason for installing formatters" echo " - Custom keybindings: g+w (format), gb (blame), more in lua/mappings.lua" echo "" echo "Next time you launch nvim, everything will be ready!" echo "" [ -d "$NVIM_CONFIG.backup" ] && echo "Note: Your old config was backed up to $NVIM_CONFIG.backup" echo "============================================"