dotfiles/files/setup.sh
Ben Grande b38834d66b
fix: avoid operand evaluation as argument
Explicit end option parsing as the shell can be quite dangerous without
it.
2024-08-06 17:13:11 +02:00

52 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
##
## SPDX-License-Identifier: AGPL-3.0-or-later
set -eu
prg="$0"
if ! test -e "${prg}"; then
case "${prg}" in
(*/*) exit 1;;
(*) prg=$(command -v -- "${prg}") || exit;;
esac
fi
dir="$(cd -P -- "$(dirname -- "${prg}")" && pwd -P)" || exit 1
prg="${dir}/$(basename -- "${prg}")" || exit 1
cd -- "${dir}" || exit 1
usage(){
printf '%s\n' "Usage: ${0##*/} [-h|--help] DIR [DIR2...]"
printf '%s\n' "Example: ${0##*/} # deploy all"
printf '%s\n' "Example: ${0##*/} sh vim ... # deploy specific dirs"
}
case "${1-}" in
-h|--help) usage; exit 1;;
""|--all) args="$(find . -maxdepth 1 -type d)";;
*) args="${*}";;
esac
for dir in ${args}; do
case "${dir##*/}" in
"."|"..") continue;;
*) ;;
esac
dir="${dir%*/}"
test -f "${dir}" && continue
if ! test -d "${dir}"; then
printf '%s\n' "Directory doesn't exist: '${dir}'." >&2
exit 1
fi
for file in "${dir}"/.*; do
test -e "${file}" || continue
case "${file##*/}" in
"."|"..") continue;;
*) ;;
esac
cp -rv -- "${file}" "${HOME}"
done
done