Dotfiles/setup/install.sh

95 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║ install.sh — Legacy manual dotfiles installer ║
# ║ ║
# ║ PURPOSE: ║
# ║ The original, non-TUI entry point for setting up the dotfiles on an ║
# ║ already-running Arch Linux system. Runs modules sequentially with ║
# ║ minimal user interaction (a single DE selection prompt). ║
# ║ ║
# ║ USAGE: bash ~/Dotfiles/setup/install.sh ║
# ║ ║
# ║ SUPERSEDED BY: tui-install.sh / simple-install.sh (preferred) ║
# ║ This file is kept for quick headless runs or scripted CI deployments. ║
# ╚══════════════════════════════════════════════════════════════════════════════╝
set -uo pipefail
# -u: treat unset variables as errors (catches typos in variable names)
# -o pipefail: if any command in a pipeline fails, the whole pipeline fails
# (Note: -e is intentionally omitted so module failures don't abort the whole run)
# ── Logging setup ─────────────────────────────────────────────────────────────
# All output is tee'd to a log file so the run can be reviewed after the fact.
LOG="$HOME/dotfiles-install.log"
# Truncate the log file at the start of each run (> with no input empties it)
> "$LOG"
# Stamp the log with a timestamp for traceability
printf "Dotfiles install: %s\n" "$(date)" >> "$LOG"
# Redirect both stdout and stderr through tee so they appear on screen AND
# get appended to the log file simultaneously.
# exec > >(tee -a ...) 2>&1 is a permanent redirect for the rest of the script.
exec > >(tee -a "$LOG") 2>&1
# ── Core installation modules ──────────────────────────────────────────────────
# These three modules form the mandatory base layer and must run in this order:
# 1. package-managers — installs yay (AUR helper), nvm (Node.js), rustup (Rust)
# 2. core-packages — installs 100+ system packages via pacman/yay
# 3. core — enables systemd services (NetworkManager, cronie, greetd, etc.)
echo "Running Core installation Scripts"
bash ~/Dotfiles/setup/modules/package-managers.sh
bash ~/Dotfiles/setup/modules/core-packages.sh
bash ~/Dotfiles/setup/modules/core.sh
# ── Shell configuration deployment ────────────────────────────────────────────
# Deploys shell dotfiles (zsh, neovim, yazi, starship, etc.) and installs
# oh-my-zsh with its plugins. Run after core because it needs packages from core.
echo "Running Shell config deployment Script"
bash ~/Dotfiles/setup/modules/shell-setup.sh
# ── Desktop environment selection ─────────────────────────────────────────────
# Prompts for a single keypress to choose which DE installer to run.
# -n1: read exactly one character without needing Enter
# -p: display the prompt inline
read -n1 -p "what DE to install? [hyprland,sway,none]" doit
case $doit in
# HyprLua is the primary/recommended DE — Hyprland configured via Lua scripts
hyprland) bash ~/Dotfiles/setup/modules/Desktop-Environments/hyprland.sh ;;
# Sway — Wayland tiling compositor, i3-compatible
sway) bash ~/Dotfiles/setup/modules/Desktop-Environments/sway.sh ;;
# Skip DE entirely (for headless/server setups)
none) echo "Skipping DE installation" ;;
# Catch-all for invalid input
*) echo "please choose a desktop environment to install" ;;
esac
# ── Optional application modules ──────────────────────────────────────────────
# These are intentionally commented out — uncomment the ones you want.
# Each is a self-contained idempotent module that installs a specific app.
# In the TUI installer (tui-install.sh), these are presented as a checklist.
# Optional apps — uncomment what you want:
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/steam.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/vesktop.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/spotify.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/prismlauncher.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/vintagestory.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/localsend.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/croc.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/onlyoffice.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/wireshark.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/apps/k8s.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/python.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/zfs.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/wprs.sh
# ── Done ──────────────────────────────────────────────────────────────────────
# Print a final message pointing the user to the log file for review.
printf "\nDone. Log: %s\n" "$LOG"