diff --git a/project.sh b/project.sh index 277aede..0c30bce 100755 --- a/project.sh +++ b/project.sh @@ -4,23 +4,33 @@ set -e projects_dir=$HOME/Projects -# Find git repositories and worktrees +# 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 - projects=$( - fd -H '^\.git$' "$projects_dir" | - sed -E -e "s|^$projects_dir/||" -e 's|/\.git/?$||' | - sort -u - ) + 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 - projects=$( - find "$projects_dir" \( -name 'node_modules' -o -name '.git' \) -prune -name '.git' -print | - sed -E -e "s|^$projects_dir/||" -e 's|/\.git/?$||' | - sort -u - ) + 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=$( - echo "$projects" | + printf '%s\n' "${projects[@]}" | sort -u | fzf --layout=reverse --info=hidden --border=rounded --cycle )