#!/usr/bin/env bash # # autostow.sh # # Stow automatic symlinking script # # Invokes stow for every folder within this repository, and that's it. stow_dirs() { for d in */; do printf "stowing %s\n" "$d" stow -S -t ~ "$d" done } unstow_dirs() { for d in */; do printf "unstowing %s\n" "$d" stow -D -t ~ "$d" done } 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" exit 1 fi } usage() { printf "%s\n" \ "" \ " autostow.sh - Automatically stow your dotfiles." \ " Uses GNU stow to set up automatic links to any dotfiles in subdirectories of this directory." \ "" \ " Usage: stow.sh -dhs" \ "" \ " Options:" \ "" \ " -h Print out this help." \ "" \ " -s Install dotfiles, by symlinking any directory found next to stow.sh using GNU stow." \ "" \ " -d Remove dotfiles, by unlinking any directory found next to stow.sh using GNU stow." \ "" \ "" } main() { case "$1" in -s | --stow) have_stow printf "Creating dotfile symlinks ........................\n" stow_dirs printf "Done creating symlinks ...........................\n" exit 0 ;; -d | --delete) have_stow printf "Removing dotfile symlinks ........................\n" unstow_dirs printf "Done removing symlinks ...........................\n" exit 0 ;; -h | --help | *) usage exit 0 ;; esac shift } main "$@"