Переглянути джерело

add dot script and update Readme

Daniel Sheffield 5 днів тому
батько
коміт
0ecd336127
2 змінених файлів з 52 додано та 1 видалено
  1. 1 1
      Readme.md
  2. 51 0
      dot

+ 1 - 1
Readme.md

@@ -69,6 +69,6 @@ On GNU compatible system this is equivalent to:
 
 ```bash
 stow -d "$DOTFILES_DIR/ssh" -t "/home/$USER" user
-sudo stow -d "$DOTFILES_DIR/ssh" -t / system
+stow -d "$DOTFILES_DIR/ssh" -t / system             # needs root permissions obviously
 ```
 

+ 51 - 0
dot

@@ -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