From dba47b8e20984f02dd3ec98011244c6b14004da6 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Mon, 30 Dec 2019 11:00:00 +0100 Subject: [PATCH] Allow autostow.sh to selectively ignore directories By default autostow.sh ignores assets/ and bootstrap/ directories. This behavior can be changed through the `AUTOSTOW_IGNORED_DIRS` environment variable. It should contain the name of the directories to ignore, separated by a `:`. --- bootstrap/.config/bootstrap/autostow.sh | 75 +++++++++++++++++-------- 1 file changed, 51 insertions(+), 24 deletions(-) diff --git a/bootstrap/.config/bootstrap/autostow.sh b/bootstrap/.config/bootstrap/autostow.sh index fbc9746..4f3f866 100755 --- a/bootstrap/.config/bootstrap/autostow.sh +++ b/bootstrap/.config/bootstrap/autostow.sh @@ -6,8 +6,43 @@ # # Invokes stow for every folder within this repository, and that's it. +ignore="${AUTOSTOW_IGNORED_DIRS:-"bootstrap:assets"}" + +main() { + case "$1" in + -s | --stow) + have_stow + echo "Creating dotfile symlinks ................................................." + stow_dirs + echo "Done creating symlinks ...................................................." + exit 0 + ;; + -d | --delete) + have_stow + echo "Removing dotfile symlinks ................................................." + unstow_dirs + echo "Done removing symlinks ...................................................." + exit 0 + ;; + -v | --version) + printf "System bootstrap script.\n\n©Marty Oehme\n\nVersion: 0.2\n" + ;; + -h | --help | *) + usage + exit 0 + ;; + esac + shift +} + stow_dirs() { for d in */; do + + if is_ignored "$d"; then + printf "ignoring %s\n" "$d" + continue + fi + printf "stowing %s\n" "$d" stow -S -t ~ "$d" done @@ -15,11 +50,27 @@ stow_dirs() { unstow_dirs() { for d in */; do + + if is_ignored "$d"; then + printf "ignoring %s\n" "$d" + continue + fi + printf "unstowing %s\n" "$d" stow -D -t ~ "$d" done } +is_ignored() { + IFS=":" + for ign in $ignore; do + if [ "$ign" == "$1" ] || [ "$ign/" == "$1" ]; then + return 0 + fi + done + return 1 +} + have_stow() { if ! type stow >/dev/null 2>&1; then printf "GNU stow needs to be installed for this script to function. Please install stow through your package manager.\n" @@ -46,28 +97,4 @@ usage() { "" } -main() { - case "$1" in - -s | --stow) - have_stow - echo "Creating dotfile symlinks ................................................." - stow_dirs - echo "Done creating symlinks ...................................................." - exit 0 - ;; - -d | --delete) - have_stow - echo "Removing dotfile symlinks ................................................." - unstow_dirs - echo "Done removing symlinks ...................................................." - exit 0 - ;; - -h | --help | *) - usage - exit 0 - ;; - esac - shift -} - main "$@"