#!/usr/bin/env bash # Uses skim as an application launcher. # # Requires: skim, lnch _do_sk() { sk --prompt='open > '; } case $OSTYPE in darwin*) apps=$(find -L {,~}/Applications -iname '*.app' -maxdepth 2 -type d 2>/dev/null) cmds=$(compgen -c 2>/dev/null) cmd=$(printf '%s\n' "${apps[@]}" "${cmds[@]}" | sort -u | _do_sk) if [[ -z $cmd ]]; then exit elif [[ $cmd == sk-* ]]; then $cmd else if [[ $cmd == *.app ]]; then open "$cmd" elif ! command -v lnch >/dev/null; then >&2 echo "lnch not installed, run 'go get github.com/oem/lnch'" exit 1 else # disowns the subprocess from the parent shell (i.e. if that shell # gets closed, the subprocess will survive). lnch "$cmd" fi fi ;; linux*) cmd=$(echo -n "$PATH" | xargs -d: -I{} -r -- find -L {} -maxdepth 1 -mindepth 1 -type f -executable -printf '%P\n' 2>/dev/null | sort -u | _do_sk) if [[ -z $cmd ]]; then exit elif [[ $cmd == sk-* ]]; then $cmd elif ! command -v lnch >/dev/null; then >&2 echo "lnch not installed, run 'go get github.com/oem/lnch'" exit 1 else # disowns the subprocess from the parent shell (i.e. if that shell gets # closed, the subprocess will survive). lnch "$cmd" # OPTIONAL: requires shell/+tmux if command -v tmux-session-name >/dev/null; then # If this was used from a scratch tmux terminal, close it [[ "$(tmux-session-name)" == scratch ]] && tmux kill-session -t scratch fi fi ;; esac