# Create a Tmux Dev Layout with editor, ai, and terminal # Usage: tdl [] tdl() { [[ -z $1 ]] && { echo "Usage: tdl []"; return 1; } [[ -z $TMUX ]] && { echo "You must start tmux to use tdl."; return 1; } local current_dir="${PWD}" local editor_pane ai_pane ai2_pane local ai="$1" local ai2="$2" # Use TMUX_PANE for the pane we're running in (stable even if active window changes) editor_pane="$TMUX_PANE" # Name the current window after the base directory name tmux rename-window -t "$editor_pane" "$(basename "$current_dir")" # Split window vertically - top 85%, bottom 15% (target editor pane explicitly) tmux split-window -v -p 15 -t "$editor_pane" -c "$current_dir" # Split editor pane horizontally - AI on right 30% (capture new pane ID directly) ai_pane=$(tmux split-window -h -p 30 -t "$editor_pane" -c "$current_dir" -P -F '#{pane_id}') # If second AI provided, split the AI pane vertically if [[ -n $ai2 ]]; then ai2_pane=$(tmux split-window -v -t "$ai_pane" -c "$current_dir" -P -F '#{pane_id}') tmux send-keys -t "$ai2_pane" "$ai2" C-m fi # Run ai in the right pane tmux send-keys -t "$ai_pane" "$ai" C-m # Run nvim in the left pane tmux send-keys -t "$editor_pane" "$EDITOR ." C-m # Select the nvim pane for focus tmux select-pane -t "$editor_pane" } # Create multiple tdl windows with one per subdirectory in the current directory # Usage: tdlm [] tdlm() { [[ -z $1 ]] && { echo "Usage: tdlm []"; return 1; } [[ -z $TMUX ]] && { echo "You must start tmux to use tdlm."; return 1; } local ai="$1" local ai2="$2" local base_dir="$PWD" local first=true # Rename the session to the current directory name (replace dots/colons which tmux disallows) tmux rename-session "$(basename "$base_dir" | tr '.:' '--')" for dir in "$base_dir"/*/; do [[ -d $dir ]] || continue local dirpath="${dir%/}" if $first; then # Reuse the current window for the first project tmux send-keys -t "$TMUX_PANE" "cd '$dirpath' && tdl $ai $ai2" C-m first=false else local pane_id=$(tmux new-window -c "$dirpath" -P -F '#{pane_id}') tmux send-keys -t "$pane_id" "tdl $ai $ai2" C-m fi done } # Create a multi-pane swarm layout with the same command started in each pane (great for AI) # Usage: tsl tsl() { [[ -z $1 || -z $2 ]] && { echo "Usage: tsl "; return 1; } [[ -z $TMUX ]] && { echo "You must start tmux to use tsl."; return 1; } local count="$1" local cmd="$2" local current_dir="${PWD}" local -a panes tmux rename-window -t "$TMUX_PANE" "$(basename "$current_dir")" panes+=("$TMUX_PANE") while (( ${#panes[@]} < count )); do local new_pane local split_target="${panes[-1]}" new_pane=$(tmux split-window -h -t "$split_target" -c "$current_dir" -P -F '#{pane_id}') panes+=("$new_pane") tmux select-layout -t "${panes[0]}" tiled done for pane in "${panes[@]}"; do tmux send-keys -t "$pane" "$cmd" C-m done tmux select-pane -t "${panes[0]}" }