dot-add: support multiple files and directories
This commit is contained in:
50
dot-add
50
dot-add
@@ -1,50 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
# dot-add: Move a config file into the dotfiles repo and stow it.
|
||||
# dot-add: Move config files/dirs into the dotfiles repo and stow them.
|
||||
#
|
||||
# Usage: dot-add <package-name> <file-path>
|
||||
# Usage: dot-add <package> <path> [<path> ...]
|
||||
#
|
||||
# Example: dot-add sway ~/.config/sway/config
|
||||
# dot-add alacritty ~/.config/alacritty/alacritty.toml
|
||||
# Examples:
|
||||
# dot-add sway ~/.config/sway/config
|
||||
# dot-add sway ~/.config/sway/
|
||||
# dot-add sway ~/.config/sway/*
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
DOTFILES_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
if [[ $# -ne 2 ]]; then
|
||||
echo "Usage: dot-add <package> <file>"
|
||||
echo " package: name for the stow package (e.g. sway, alacritty)"
|
||||
echo " file: path to the file (absolute or relative to HOME)"
|
||||
if [[ $# -lt 2 ]]; then
|
||||
echo "Usage: dot-add <package> <path> [<path> ...]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PACKAGE="$1"
|
||||
FILE="$(realpath "$2")"
|
||||
shift
|
||||
|
||||
add_one() {
|
||||
local FILE
|
||||
FILE="$(realpath "$1")"
|
||||
|
||||
if [[ ! -e "$FILE" ]]; then
|
||||
echo "Error: '$FILE' does not exist"
|
||||
exit 1
|
||||
echo "Error: '$FILE' does not exist" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ ! "$FILE" == "$HOME/"* ]]; then
|
||||
echo "Error: file must be under \$HOME ($HOME)"
|
||||
exit 1
|
||||
echo "Error: '$FILE' is not under \$HOME" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Relative path from HOME (e.g. .config/sway/config)
|
||||
REL="${FILE#$HOME/}"
|
||||
local REL="${FILE#$HOME/}"
|
||||
local DEST="$DOTFILES_DIR/$PACKAGE/$REL"
|
||||
|
||||
DEST_DIR="$DOTFILES_DIR/$PACKAGE/$(dirname "$REL")"
|
||||
DEST="$DOTFILES_DIR/$PACKAGE/$REL"
|
||||
|
||||
mkdir -p "$DEST_DIR"
|
||||
mkdir -p "$(dirname "$DEST")"
|
||||
mv "$FILE" "$DEST"
|
||||
echo "Moved: $FILE -> $DEST"
|
||||
}
|
||||
|
||||
for PATH_ARG in "$@"; do
|
||||
add_one "$PATH_ARG"
|
||||
done
|
||||
|
||||
# Stow the package (restow if already stowed)
|
||||
stow --dir="$DOTFILES_DIR" --target="$HOME" --restow "$PACKAGE"
|
||||
echo "Stowed: $PACKAGE"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " cd ~/dotfiles"
|
||||
echo " git add $PACKAGE/$REL"
|
||||
echo " git commit -m 'add $REL'"
|
||||
|
||||
Reference in New Issue
Block a user