#!/usr/bin/env bash set -e projects_dir=$HOME/Projects # All depth-2 directories without @ are included unconditionally projects=() for dir in "$projects_dir"/*/*/; do [ -d "$dir" ] || continue relative="${dir#$projects_dir/}" relative="${relative%/}" [[ "$relative" != *@* ]] && projects+=("$relative") done # For @ directories, only include those with .git if command -v fd &>/dev/null; then while IFS= read -r line; do projects+=("$line") done < <(fd -H '^\.git$' "$projects_dir" | grep '@' | sed -E -e "s|^$projects_dir/||" -e 's|/\.git/?$||') else while IFS= read -r line; do projects+=("$line") done < <(find "$projects_dir" \( -name 'node_modules' -o -name '.git' \) \ -prune -name '.git' -print | grep '@' | sed -E -e "s|^$projects_dir/||" -e 's|/\.git/?$||') fi project=$( printf '%s\n' "${projects[@]}" | sort -u | fzf --layout=reverse --info=hidden --border=rounded --cycle ) tmux new-window -n "$project" -c "$projects_dir/$project" ~/.local/share/tmux/layouts/window-auto