47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# Credit to ThePrimeagen.
 | 
						|
 | 
						|
set -o nounset
 | 
						|
set -o pipefail
 | 
						|
 | 
						|
if [[ $# -eq 1 ]]; then
 | 
						|
  selected=$1
 | 
						|
else
 | 
						|
  # Get the session name from fuzzy-finding list of directories and generating a
 | 
						|
  # tmux-safe version.
 | 
						|
  items+=$(find "${HOME}/Code" -mindepth 3 -maxdepth 3 -type d ! -name .git -not -path "${HOME}/Code/tmp/*")
 | 
						|
  items+=" "
 | 
						|
  items+=$(find "${HOME}/Code/tmp" -mindepth 1 -maxdepth 1 -type d)
 | 
						|
 | 
						|
  selected=$(echo "${items}" | sort | fzf --reverse)
 | 
						|
fi
 | 
						|
 | 
						|
if [[ -z "${selected}" ]]; then
 | 
						|
  exit 0
 | 
						|
fi
 | 
						|
 | 
						|
session_name=$(basename "${selected}" | sed 's/\./-/g')
 | 
						|
session_path="${selected}"
 | 
						|
 | 
						|
# Git worktrees.
 | 
						|
if [[ -e "${selected}/main" ]]; then
 | 
						|
  session_path="${selected}/main"
 | 
						|
fi
 | 
						|
 | 
						|
if tmux has-session -t "${session_name}" 2> /dev/null; then
 | 
						|
  tmux attach -t "${session_name}"
 | 
						|
fi
 | 
						|
 | 
						|
# If a .tmux file exists, run it with the generated session name and path.
 | 
						|
if [[ -e "${session_path}/.tmux" ]]; then
 | 
						|
  "${session_path}/.tmux" "${session_name}" "${session_path}"
 | 
						|
  exit
 | 
						|
elif [[ -e "${session_path}/.ignored/.tmux" ]]; then
 | 
						|
  "${session_path}/.ignored/.tmux" "${session_name}" "${session_path}"
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
tmux new-session -d -s "${session_name}" -c "${session_path}"
 | 
						|
 | 
						|
tmux switch-client -t "${session_name}" || tmux attach -t "${session_name}"
 |