{ writeShellApplication, tmux, procps, lib, symlinkJoin, }: let tmux-register-session = writeShellApplication { name = "__tmux-register-session"; runtimeInputs = [tmux]; text = '' last=/tmp/TMUX_LAST # bail if tmux not running if ! pgrep tmux >/dev/null 2>&1; then exit 1 fi this="$(tmux display-message -p '#S')" if [ ! -f "$last" ] || [ "$(cat "$last")" != "$this" ]; then echo "$this" >"$last" fi ''; }; tmux-maybe-create = writeShellApplication { name = "__tmux-maybe-create"; runtimeInputs = [procps tmux]; text = '' session_name="$1" session_dir="$2" if ! pgrep tmux >/dev/null 2>&1 || ! tmux has -t="$session_name" 2>/dev/null; then tmux new-session -ds "$session_name" -c "$session_dir" fi ''; }; tmux-attach-or-switch = writeShellApplication { name = "__tmux-attach-or-switch"; runtimeInputs = [tmux]; text = '' session_name="$1" TMUX=''${TMUX:-} if [ -z "$TMUX" ]; then tmux attach-session -t "$session_name" else tmux switch-client -t "$session_name" fi ''; }; tmux-last = writeShellApplication { name = "tmux-last"; text = '' tmux_last=/tmp/TMUX_LAST if [ ! -f $tmux_last ]; then echo "Last session is not yet set" return 1 fi session_name="$(cat $tmux_last)" session_path="$session_name" if [ ! -d "$session_path" ]; then session_path="/tmp" fi # bail if not in tmux, nothing to register ${lib.getExe tmux-register-session} || : ${lib.getExe tmux-maybe-create} "$session_name" "$session_path" ${lib.getExe tmux-attach-or-switch} "$session_name" ''; }; in symlinkJoin { name = "tmux-sessionizer"; paths = [ tmux-register-session tmux-maybe-create tmux-attach-or-switch tmux-last ]; }