Webux Lab - Blog
Webux Lab Logo

Webux Lab

By Studio Webux

Search

By Tommy Gingras

Last update 2026-02-18

tmuxBash

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