#!/usr/bin/env bash # dot-add: Move config files/dirs into the dotfiles repo and stow them. # # Usage: dot-add [ ...] # # Examples: # dot-add sway ~/.config/sway/config # dot-add sway ~/.config/sway/ # dot-add sway ~/.config/sway/* set -euo pipefail DOTFILES_DIR="$(cd "$(dirname "$(readlink -f "$0")")" && pwd)" if [[ $# -lt 2 ]]; then echo "Usage: dot-add [ ...]" exit 1 fi PACKAGE="$1" shift add_one() { local FILE FILE="$(realpath "$1")" if [[ ! -e "$FILE" ]]; then echo "Error: '$FILE' does not exist" >&2 return 1 fi if [[ ! "$FILE" == "$HOME/"* ]]; then echo "Error: '$FILE' is not under \$HOME" >&2 return 1 fi local REL="${FILE#$HOME/}" local DEST="$DOTFILES_DIR/$PACKAGE/$REL" mkdir -p "$(dirname "$DEST")" mv "$FILE" "$DEST" echo "Moved: $FILE -> $DEST" } for PATH_ARG in "$@"; do add_one "$PATH_ARG" done stow --dir="$DOTFILES_DIR" --target="$HOME" --restow "$PACKAGE" echo "Stowed: $PACKAGE"