From 22bc1e1879da0d99e5e1d79b10742b8cc9fd0521 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Thu, 30 May 2024 12:47:11 -0500 Subject: Initial commit --- dots.sh | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 dots.sh (limited to 'dots.sh') diff --git a/dots.sh b/dots.sh new file mode 100755 index 0000000..5036e30 --- /dev/null +++ b/dots.sh @@ -0,0 +1,81 @@ +#!/bin/sh + +QUIET=false +NORUN=false +FORCE=false +DIR="$(dirname "$(realpath "$0")")" + +main() { + action=homify + while getopts hqnfdx OPT + do + case "$OPT" in + (h) usage; exit 0 ;; + (q) QUIET=true ;; + (n) NORUN=true ;; + (f) FORCE=true ;; + (d) action=dotify ;; + (x) set -x ;; + (*) usage; exit 1 ;; + esac + done + shift $((OPTIND - 1)) + "$action" "$@" +} + +usage() { + cat<&2 "* $@"; } +run() { log "$@"; $NORUN || "$@"; } + +mklink() { # mklink SOURCE DEST + # make hardlinks to DEST from SOURCE -- making directories + $NORUN || test -d "$(dirname "$2")" || run mkdir -p "$(dirname "$2")" + if ! test -f "$2" + then run ln "$1" "$2" + elif test -f "$2" && "$FORCE" + then run ln -f "$1" "$2" + else log "$2 exists: skipping" + fi +} + +getfiles() { + d="$1"; shift + find "$d" -type f -a -not -name "$(basename "$0")" "$@" +} + +homify() { + getfiles "$DIR" "$@" | + while read -r dot + do mklink "$dot" "$HOME/.${dot#$DIR/}" + done +} + +dotify() { + getfiles "$@" | + while read -r file + do mklink "$file" "$DIR/${file#.}" + done +} + +main "$@" -- cgit 1.4.1-21-gabe81