Files
apf_portal/docs/setup/scripts/80-dotfiles.sh
T
Julien Gautier 43c54616d8
CI / commits (pull_request) Successful in 3m53s
CI / scan (pull_request) Successful in 4m0s
CI / check (pull_request) Successful in 4m16s
CI / a11y (pull_request) Successful in 3m25s
Docs site / build (pull_request) Successful in 3m31s
CI / perf (pull_request) Successful in 6m51s
docs(setup): version aliases.zsh + gitconfig.txt under docs/setup/dotfiles
80-dotfiles.sh was reading notes/aliases.zsh and notes/gitconfig.txt,
but notes/ is gitignored - fresh clones on the dev VM hit "file not
found" and the script aborted.

Move both templates to docs/setup/dotfiles/ where they ship with every
clone. gitconfig.txt's [user] block now carries placeholder identity
(your name / your.email@example.com) instead of the original author's
identity - the script overlays the prompted values at install time so
the file content doesn't matter functionally, but the placeholders
read more clearly as "fill me in".

80-dotfiles.sh source paths flipped from $REPO_ROOT/notes/... to
$REPO_ROOT/docs/setup/dotfiles/.... Step-3 table row, §8.4 (dotfiles
repo appendix), and the setup README index updated accordingly. New
"dotfiles/" section in the setup README documents the folder.

The notes/aliases.zsh and notes/gitconfig.txt on existing dev
workstations are unaffected - those files live outside the repo and
this PR doesn't touch them.
2026-05-24 21:22:08 +02:00

81 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Wire up the project-wide dotfiles:
# - symlink docs/setup/dotfiles/aliases.zsh → ~/.oh-my-zsh/custom/aliases.zsh
# - copy docs/setup/dotfiles/gitconfig.txt to ~/.gitconfig and overlay your identity
set -euo pipefail
# shellcheck source=./lib.sh
source "$(cd "$(dirname "$0")" && pwd)/lib.sh"
require_debian
require_not_root
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
if [[ -z "$REPO_ROOT" ]]; then
err "Run from inside a git checkout of apf_portal."
exit 1
fi
DOTFILES_DIR="$REPO_ROOT/docs/setup/dotfiles"
# ─── 1. Aliases ───────────────────────────────────────────────────────
SOURCE_ALIASES="$DOTFILES_DIR/aliases.zsh"
if [[ ! -f "$SOURCE_ALIASES" ]]; then
err "$SOURCE_ALIASES not found."
exit 1
fi
OMZ_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}"
if [[ ! -d "$OMZ_CUSTOM" ]]; then
err "$OMZ_CUSTOM not found — run 20-zsh.sh first."
exit 1
fi
TARGET_ALIASES="$OMZ_CUSTOM/aliases.zsh"
if [[ -L "$TARGET_ALIASES" \
&& "$(readlink -f "$TARGET_ALIASES")" == "$(readlink -f "$SOURCE_ALIASES")" ]]; then
skip "aliases.zsh symlink already correct."
else
if [[ -e "$TARGET_ALIASES" || -L "$TARGET_ALIASES" ]]; then
backup="$TARGET_ALIASES.bak.$(date +%s)"
mv "$TARGET_ALIASES" "$backup"
warn "Existing $TARGET_ALIASES backed up to $backup."
fi
ln -s "$SOURCE_ALIASES" "$TARGET_ALIASES"
ok "Linked $TARGET_ALIASES$SOURCE_ALIASES."
fi
# ─── 2. gitconfig — copy + identity overlay ───────────────────────────
SOURCE_GITCONFIG="$DOTFILES_DIR/gitconfig.txt"
if [[ ! -f "$SOURCE_GITCONFIG" ]]; then
err "$SOURCE_GITCONFIG not found."
exit 1
fi
TARGET_GITCONFIG="$HOME/.gitconfig"
if [[ -f "$TARGET_GITCONFIG" ]] && ! confirm "$TARGET_GITCONFIG exists — overwrite (existing backed up)?"; then
skip "Keeping existing $TARGET_GITCONFIG."
else
if [[ -f "$TARGET_GITCONFIG" ]]; then
cp "$TARGET_GITCONFIG" "$TARGET_GITCONFIG.bak.$(date +%s)"
fi
# Prompt for identity. Defaults: pre-existing config values, else blank.
current_name="$(git config --global user.name 2>/dev/null || true)"
current_email="$(git config --global user.email 2>/dev/null || true)"
read -r -p "Git user.name [${current_name:-<required>}]: " new_name
new_name="${new_name:-$current_name}"
read -r -p "Git user.email [${current_email:-<required>}]: " new_email
new_email="${new_email:-$current_email}"
if [[ -z "$new_name" || -z "$new_email" ]]; then
err "Both user.name and user.email are required."
exit 1
fi
cp "$SOURCE_GITCONFIG" "$TARGET_GITCONFIG"
# `git config --global` finds and rewrites the [user] section
# cleanly even when the source carries a different identity.
git config --global user.name "$new_name"
git config --global user.email "$new_email"
ok "Wrote $TARGET_GITCONFIG with identity $new_name <$new_email>."
fi