tmux Project Launcher
A bash script to launch tmux sessions with predefined window layouts per project.
Setup
mkdir -p ~/.tmux-projects
Launcher Script
Create ~/bin/tmux-start:
#!/usr/bin/env bash
CONFIG_DIR="$HOME/.tmux-projects"
if [ -z "$1" ]; then
echo "Usage: tmux-start <project-name>"
exit 1
fi
CONFIG_FILE="$CONFIG_DIR/$1.conf"
if [ ! -f "$CONFIG_FILE" ]; then
echo "Config not found: $CONFIG_FILE"
exit 1
fi
# Load config
source "$CONFIG_FILE"
# If session exists, attach
tmux has-session -t "$SESSION" 2>/dev/null
if [ $? -eq 0 ]; then
tmux attach -t "$SESSION"
exit 0
fi
# Create first window
FIRST_WINDOW="${WINDOWS[0]}"
IFS=":" read -r NAME DIR CMD <<< "$FIRST_WINDOW"
tmux new-session -d -s "$SESSION" -n "$NAME" -c "$DIR"
[ -n "$CMD" ] && tmux send-keys -t "$SESSION:0" "$CMD" C-m
# Create remaining windows
for ((i=1; i<${#WINDOWS[@]}; i++)); do
IFS=":" read -r NAME DIR CMD <<< "${WINDOWS[$i]}"
tmux new-window -t "$SESSION:$i" -n "$NAME" -c "$DIR"
[ -n "$CMD" ] && tmux send-keys -t "$SESSION:$i" "$CMD" C-m
done
tmux select-window -t "$SESSION:0"
tmux attach -t "$SESSION"
Make it executable and add to PATH:
chmod +x ~/bin/tmux-start
echo 'export PATH=$PATH:~/bin' >> ~/.zshrc
Project Configuration
Replace myproject with your project name. Format: "name:directory:command"
hx ~/.tmux-projects/myproject.conf
SESSION="myproject"
BRAIN_DIR="$HOME/brain"
PROJECT_DIR="$HOME/projects/myproject"
WINDOWS=(
"brain:$BRAIN_DIR:"
"project:$PROJECT_DIR:"
"server:$PROJECT_DIR:npm run dev"
"logs:$PROJECT_DIR:tail -f logs/app.log"
"editor:$PROJECT_DIR:nvim"
)
Usage
tmux-start myproject