#!/bin/sh # Manage stowed programs isstowed() { f="$(find "/usr/local/stow/$1" -type f -print -quit)" f2="$(echo "$f" | sed -e 's;^/usr/local/stow/'"$1"'/;/usr/local/;')" [ "$(realpath "$f2" 2>/dev/null)" = "$f" ] } if arg --list "$@" || arg -l "$@"; then for pack in /usr/local/stow/*; do if isstowed "$pack"; then printf "\x1b[1m+ %s\x1b[0m\n" "$pack" else printf "\x1b[2m- %s\x1b[0m\n" "$pack" fi done else package=$(ls /usr/local/stow | fzy -l 20 -p "Select a stow package: " -q "$1") || exit 1 if isstowed "$package"; then printf "\x1b[1m%s\x1b[0m is currently stowed. Do you want to \x1b[1m(u)\x1b[0mnstow it, " "$package" printf "\x1b[1m(r)\x1b[0mestow it, or do \x1b[1m(n)\x1b[0mothing? [u/r/n] " read -r choice if [ "$choice" = "u" ]; then sudo stow -d /usr/local/stow -D "$package" && printf "Unstowed \x1b[1m%s\x1b[0m!\n" "$package" elif [ "$choice" = "r" ]; then sudo stow -d /usr/local/stow -R "$package" && printf "Restowed \x1b[1m%s\x1b[0m!\n" "$package" fi else printf "\x1b[1m%s\x1b[0m is not currently stowed. Do you want to stow it? [Y/n] " "$package" read -r confirm if [ "$confirm" != "n" ]; then sudo stow -d /usr/local/stow "$package" && printf "Stowed \x1b[1m%s\x1b[0m!\n" "$package" fi fi fi