From a5323d32262993f741146598cef1b2c7b8be0b68 Mon Sep 17 00:00:00 2001 From: "Bradan J. Wolbeck" Date: Tue, 16 Jun 2026 23:43:37 -0600 Subject: [PATCH] feat: add install script --- README.md | 7 +++++++ install.sh | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 install.sh diff --git a/README.md b/README.md index 3a401ab..98e1130 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,10 @@ Clone: ``` git clone https://git.nanikore.de/compaqdisc/dotfiles.git ~/.dotfiles ``` + +Install: +``` +~/.dotfiles/install.sh +``` + +The install script symlinks to the shared directory and backs up original files. diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..076fe6d --- /dev/null +++ b/install.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -euo pipefail + +DOTFILES="${DOTFILES:-$HOME/.dotfiles}" + +link_file() { + local src="$1" + local dst="$2" + + if [[ ! -e "$src" ]]; then + echo "missing source: $src" + return 1 + fi + + if [[ -L "$dst" && "$(readlink "$dst")" == "$src" ]]; then + echo "ok: $dst -> $src" + return 0 + fi + + if [[ -e "$dst" || -L "$dst" ]]; then + printf "replace %s? [y/N] " "$dst" + read -r answer + + case "$answer" in + y|Y|yes|YES) + mv "$dst" "$dst.bak.$(date +%Y%m%d%H%M%S)" + ;; + *) + echo "skip: $dst" + return 0 + ;; + esac + fi + + mkdir -p "$(dirname "$dst")" + ln -s "$src" "$dst" + echo "linked: $dst -> $src" +}