aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tmux/.local/bin/tmux-sessionizer
blob: 30b547ed421e58f9ff22cb63661f4e6793fa1387 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env bash

if [ "$#" -eq 1 ]; then
	selected="$1"
else
	selected=$(
		find ~/src ~/.dotfiles -maxdepth 2 -type d,f -path '*/.git' -printf '%h\n' -prune |
			xargs -I{} sh -c 'git -C "{}" rev-parse HEAD &>/dev/null &&
                git -C "{}" --no-pager log -1 --all --format="%at:{}" 2>/dev/null ||
                stat -c %Y:"{}" "{}"/.git' | sort -r | cut -d':' -f2- |
			fzf-tmux -p -- -d/ --with-nth -2.. --preview="exa --tree --icons --git-ignore {}"
	)
fi

if [ -z "$selected" ]; then
	exit 0
fi

selected_name=$(basename "$selected" | tr . _)
tmux_running=$(pgrep tmux)

if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then
	tmux new-session -s "$selected_name" -c "$selected"
	exit 0
fi

if ! tmux has-session -t="$selected_name" 2>/dev/null; then
	tmux new-session -ds "$selected_name" -c "$selected"
fi

tmux switch-client -t "$selected_name"