|
@@ -6,46 +6,70 @@ action="$1"
|
|
package="$2"
|
|
package="$2"
|
|
target="${3:-}"
|
|
target="${3:-}"
|
|
|
|
|
|
-#stow="echo stow" # for debugging
|
|
|
|
-stow="stow"
|
|
|
|
|
|
+stow="echo stow" # for debugging
|
|
|
|
+#stow="stow"
|
|
|
|
|
|
DOTFILES_DIR="${DOTFILES_DIR:=}"
|
|
DOTFILES_DIR="${DOTFILES_DIR:=}"
|
|
[ "$DOTFILES_DIR" ] || DOTFILES_DIR=$(pwd)
|
|
[ "$DOTFILES_DIR" ] || DOTFILES_DIR=$(pwd)
|
|
|
|
|
|
|
|
+action_to_arg(){
|
|
|
|
+case "$1" in
|
|
|
|
+ "remove") echo --delete;;
|
|
|
|
+ "update") echo --restow;;
|
|
|
|
+ "apply" ) echo --stow;;
|
|
|
|
+ * ) ;;
|
|
|
|
+esac
|
|
|
|
+}
|
|
|
|
+
|
|
target_to_dest(){
|
|
target_to_dest(){
|
|
case "$1" in
|
|
case "$1" in
|
|
- "user") echo "$HOME";;
|
|
|
|
- "system") echo /;;
|
|
|
|
- *) ;;
|
|
|
|
|
|
+ "user" ) echo "$HOME";;
|
|
|
|
+ "system") echo /;;
|
|
|
|
+ * ) ;;
|
|
esac
|
|
esac
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+_stow(){
|
|
|
|
+ stow_dir="$1"
|
|
|
|
+ stow_target_dir="$2"
|
|
|
|
+ stow_action="$3"
|
|
|
|
+ stow_package="$4"
|
|
|
|
+ $stow -d "${stow_dir}" -t "${stow_target_dir}" "${stow_action}" "${stow_package}"
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+action=$(action_to_arg "$action")
|
|
|
|
+
|
|
|
|
+[ "$action" ] || {
|
|
|
|
+ echo "No such action: $1"
|
|
|
|
+ exit
|
|
|
|
+}
|
|
|
|
+
|
|
if [ "$target" ]
|
|
if [ "$target" ]
|
|
then
|
|
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
|
|
|
|
|
|
+ if [ -d "${DOTFILES_DIR}/${package}/${target}" ]
|
|
|
|
+ then
|
|
|
|
+ dest=$(target_to_dest "$target")
|
|
|
|
+ _stow "${DOTFILES_DIR}/${package}" "${dest}" "${action}" "${target}"
|
|
|
|
+ else
|
|
|
|
+ [ "$target" == "user" ] || {
|
|
|
|
+ echo "Target '$target' does not exist for package '$package'"
|
|
|
|
+ exit 1
|
|
|
|
+ }
|
|
|
|
+ dest=$(target_to_dest "user")
|
|
|
|
+ _stow "${DOTFILES_DIR}" "${dest}" "${action}" "${package}"
|
|
|
|
+ fi
|
|
else
|
|
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
|
|
|
|
|
|
+ any=false
|
|
|
|
+ for target in user system;
|
|
|
|
+ do
|
|
|
|
+ [ -d "${DOTFILES_DIR}/${package}/${target}" ] || continue
|
|
|
|
+ any=true
|
|
|
|
+ dest=$(target_to_dest "$target")
|
|
|
|
+ _stow "${DOTFILES_DIR}/${package}" "${dest}" "${action}" "${target}"
|
|
|
|
+ done
|
|
|
|
+ if ! "$any"
|
|
|
|
+ then
|
|
|
|
+ dest=$(target_to_dest "user")
|
|
|
|
+ _stow "${DOTFILES_DIR}" "${dest}" "${action}" "${package}"
|
|
|
|
+ fi
|
|
fi
|
|
fi
|