|
@@ -0,0 +1,51 @@
|
|
|
+#!/bin/bash
|
|
|
+set -euo pipefail
|
|
|
+
|
|
|
+# shellcheck disable=SC2034
|
|
|
+action="$1"
|
|
|
+package="$2"
|
|
|
+target="${3:-}"
|
|
|
+
|
|
|
+#stow="echo stow" # for debugging
|
|
|
+stow="stow"
|
|
|
+
|
|
|
+DOTFILES_DIR="${DOTFILES_DIR:=}"
|
|
|
+[ "$DOTFILES_DIR" ] || DOTFILES_DIR=$(pwd)
|
|
|
+
|
|
|
+target_to_dest(){
|
|
|
+case "$1" in
|
|
|
+ "user") echo "$HOME";;
|
|
|
+ "system") echo /;;
|
|
|
+ *) ;;
|
|
|
+esac
|
|
|
+}
|
|
|
+
|
|
|
+if [ "$target" ]
|
|
|
+then
|
|
|
+ if [ -d "${DOTFILES_DIR}/${package}/${target}" ]
|
|
|
+ then
|
|
|
+ dest=$(target_to_dest "$target")
|
|
|
+ $stow -d "${DOTFILES_DIR}/${package}" -t "${dest}" "${target}"
|
|
|
+ else
|
|
|
+ [ "$target" == "user" ] || {
|
|
|
+ echo "Target '$target' does not exist for package '$package'"
|
|
|
+ exit 1
|
|
|
+ }
|
|
|
+ dest=$(target_to_dest "user")
|
|
|
+ $stow -d "${DOTFILES_DIR}" -t "${dest}" "${package}"
|
|
|
+ fi
|
|
|
+else
|
|
|
+ any=false
|
|
|
+ for target in user system;
|
|
|
+ do
|
|
|
+ [ -d "${DOTFILES_DIR}/${package}/${target}" ] || continue
|
|
|
+ any=true
|
|
|
+ dest=$(target_to_dest "$target")
|
|
|
+ $stow -d "${DOTFILES_DIR}/${package}" -t "${dest}" "${target}"
|
|
|
+ done
|
|
|
+ if ! "$any"
|
|
|
+ then
|
|
|
+ dest=$(target_to_dest "user")
|
|
|
+ $stow -d "${DOTFILES_DIR}" -t "${dest}" "${package}"
|
|
|
+ fi
|
|
|
+fi
|