bf179ef0b1
Fold macinstaller + install-apt-pkgs + install-tools + install-zellij into a single host-aware lk-installers/install-apps (macOS->Homebrew, bootstrapping Homebrew if absent; Linux->apt + upstream installers). Installs the tools the configs assume (bat, fd, fzf, zoxide, zellij, nvim, btop, htop, tldr) plus the fzf-git.sh helper and fzf shell integration; idempotent. link-dotfiles gains --apps to install then link in one shot. .zshrc drops the redundant brew/system zsh-autosuggestions source (zinit already loads it), fixing the missing-file error on a fresh box. README documents the new flow.
62 lines
2.0 KiB
Bash
Executable File
62 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# One-shot, host-aware dotfile linker for Linux & macOS.
|
|
#
|
|
# home_root/* -> ~/<name> (e.g. ~/.zshrc) via `stow home_root`
|
|
# home_config/* -> ~/.config/<name> (e.g. ~/.config/nvim) via `stow home_config`
|
|
#
|
|
# Ensures GNU stow is present first (Homebrew on macOS; apt/dnf/pacman on Linux),
|
|
# so a fresh box needs nothing pre-installed. Re-running is safe — stow is
|
|
# idempotent and refuses to clobber unrelated real files.
|
|
#
|
|
# Windows / PowerShell: run ./link-dotfiles.ps1 instead (stow has no native
|
|
# Windows port; the .ps1 mirrors this with junctions + symlinks).
|
|
set -euo pipefail
|
|
|
|
repo="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$repo"
|
|
|
|
# `--apps`: install all host CLI tools first, then link. Without it, this only
|
|
# links (fast + idempotent). App install is delegated to the host-aware
|
|
# lk-installers/install-apps.
|
|
if [ "${1:-}" = "--apps" ]; then
|
|
echo "Installing apps first (--apps)…"
|
|
"$repo/lk-installers/install-apps"
|
|
fi
|
|
|
|
ensure_stow() {
|
|
command -v stow >/dev/null 2>&1 && return
|
|
|
|
echo "GNU stow not found — installing it…"
|
|
case "$(uname -s)" in
|
|
Darwin)
|
|
if ! command -v brew >/dev/null 2>&1; then
|
|
echo "error: Homebrew is required on macOS. Run ./lk-installers/install-apps (or ./link-dotfiles --apps) first." >&2
|
|
exit 1
|
|
fi
|
|
brew install stow
|
|
;;
|
|
Linux)
|
|
if command -v apt >/dev/null 2>&1; then sudo apt update && sudo apt install -y stow
|
|
elif command -v dnf >/dev/null 2>&1; then sudo dnf install -y stow
|
|
elif command -v pacman >/dev/null 2>&1; then sudo pacman -S --noconfirm stow
|
|
else
|
|
echo "error: no supported package manager (apt/dnf/pacman). Install GNU stow manually." >&2
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
echo "error: unsupported OS '$(uname -s)'. On Windows run ./link-dotfiles.ps1 instead." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
ensure_stow
|
|
|
|
echo "Linking home_root -> ~"
|
|
stow -v home_root
|
|
echo "Linking home_config -> ~/.config"
|
|
stow -v --target="$HOME/.config" home_config
|
|
|
|
echo "Done."
|