add unlink and help

This commit is contained in:
Denis Lehmann 2021-09-12 00:29:11 +02:00
parent 2b3c8f3962
commit 63b595383c

63
dotlink
View file

@ -17,8 +17,44 @@ function warning {
function error {
echo -ne "${text_bold}${text_red}ERROR${text_reset} $1\n"
exit 1
}
function print_usage {
cat <<EOF
Usage: dotlink [OPTIONS]
Simple dotfile management based on symlinks.
OPTIONS
-h, --help Show this help message
-u, --unlink Remove current links
EOF
exit
}
# Set default values
unlink=false
# Parse arguments
while (( "$#" )); do
case "$1" in
-h|--help)
print_usage
;;
-u|--unlink)
unlink=true
shift
;;
-*|--*=)
error "Unsupported flag: $1"
;;
*)
error "Unsupported argument: $1"
;;
esac
done
# Get current dotfile directory for later linking
dotfiles="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
@ -32,11 +68,32 @@ fi
cd "$dotfiles/machines/$HOSTNAME"
files=( $(find -L -type f -printf '%P\n'))
log "Linking $text_bold${#files[@]}$text_reset files..\n"
if [ "$unlink" == true ]; then
log "Unlinking $text_bold${#files[@]}$text_reset files..\n"
else
log "Linking $text_bold${#files[@]}$text_reset files..\n"
fi
# Link files
for file in "${files[@]}"; do
# Unlink files
if [ "$unlink" == true ]; then
if [ -L "$HOME/$file" ] && [ "$(readlink $HOME/$file)" == "$dotfiles/machines/$HOSTNAME/$file" ]; then
rm "$HOME/$file"
log "Unlinked $text_bold$HOME/$file$text_reset"
# Remove base directory if empty
if ! [ "$(ls -A $(dirname $HOME/$file))" ]; then
rmdir "$(dirname $HOME/$file)"
log "Removed empty directory $text_bold$(dirname $HOME/$file)$text_reset"
fi
fi
# Link files
else
# Check if target is a link
if [ -L "$HOME/$file" ]; then
@ -60,7 +117,7 @@ for file in "${files[@]}"; do
# Link file
ln -s "$dotfiles/machines/$HOSTNAME/$file" "$HOME/$file"
log "Linked $text_bold$dotfiles/$file$text_reset to $text_bold$HOME/$file$text_reset"
fi
fi
done