#!/bin/sh # shellcheck disable=2016 if [ "$#" -ne 0 ]; then path="$1" else PROJECT_DIR="$HOME/src" DIRS="$HOME/.dotfiles" for entry in "$PROJECT_DIR"/*; do if [ -d "$entry" ]; then DIRS="$DIRS $entry" fi done DIRS="$(printf %s\\n "$DIRS" | xargs -I{} -d ' ' sh -c 'path="{}" session_file="$XDG_DATA_HOME/nvim/sessions/$(echo "$path" | sed "s|/|%|g").vim" if [ -f "$session_file" ]; then stat -c %Y:"$path" "$session_file" elif git -C "$path" rev-parse HEAD >/dev/null 2>&1; then git -C "$path" --no-pager log -1 --all --format="%at:$path" 2>/dev/null elif [ -e "$path/.git" ]; then stat -c %Y:"$path" "$path"/.git else stat -c %Y:"$path" "$path" fi' | sort -r | cut -d':' -f2)" output="$(printf %s\\n "$DIRS" | fzf-tmux -p -- --print-query -d/ --with-nth -2.. \ --preview="$FZF_PREVIEW_COMMAND || printf 'Create new project:\n %s' {q} | sed 's|^ \([^/~][^/]*\)\$| $HOME/\1|' | sed 's/^ //'" | tr -s '\n' ':')" query="$(printf %s\\n "$output" | cut -d':' -f1 | sed "s|^\(..*\)\$|$HOME/\1|")" selection="$(printf %s\\n "$output" | cut -d':' -f2)" path="${selection:-$query}" fi if [ -z "$path" ]; then exit 0 elif [ ! -d "$path" ]; then mkdir -p "$path" fi name=$(basename "$path" | tr . _) if [ -z "$TMUX" ] && pgrep tmux; then tmux new-session -s "$name" -c "$path" exit 0 fi if ! tmux has-session -t="$name" 2>/dev/null; then tmux new-session -ds "$name" -c "$path" fi tmux switch-client -t "$name"