diff --git a/README.md b/README.md index f867b05..2958432 100644 --- a/README.md +++ b/README.md @@ -46,10 +46,7 @@ home-manager switch --flake github:Logan-Lin/nix-config#yanlin │ ├── p10k.zsh # Powerlevel10k theme configuration │ └── projects.nix # Project shortcuts configuration └── scripts/ # Utility scripts - ├── project-launcher.sh # Universal project launcher - └── templates/ # Tmux session templates - ├── basic.sh # Basic development template - └── research.sh # Research workflow template + └── project-launcher.sh # Dynamic project launcher with window configuration ``` ## 🔄 Core Workflow @@ -156,23 +153,39 @@ proj # List all available projects nix-config # Launch nix-config project tmux session ``` -#### Template Types: -- **Basic**: Single directory (nvim + git + shell) -- **Research**: Code directory + separate paper directory + optional remote server - - **Remote Server Window**: Dual horizontal panes for parallel remote work - - **Automatic Connection**: SSH to configured server with automatic directory navigation - - **Reconnect Alias**: Type `r` in any remote pane to easily reconnect +#### Window-Based Configuration: +Projects are configured with flexible window groups, allowing multiple working directories and customized window types per project. + +**Window Types:** +- **nvim**: Code editing with Neovim (created by default) +- **ai**: AI assistant with three-pane layout +- **git**: Git management with lazygit +- **shell**: Plain shell window +- **remote**: SSH connection with dual panes **Example Configuration:** ```nix -research-project = { - template = "research"; - name = "Research Project"; - codePath = "~/Projects/research-code"; - paperPath = "~/Projects/research-paper"; - description = "Academic research project"; - server = "dev-server"; # SSH host from ~/.ssh/config - remoteDir = "~/research"; # Remote directory path +blog = { + session = "blog"; + description = "Personal blog project"; + windows = [ + { + name = "code"; + path = "~/Projects/personal-blog"; + ai = true; + git = true; + remote = { + server = "personal-vps"; # SSH host from ~/.ssh/config + remoteDir = "~/blog"; # Remote directory path + }; + } + { + name = "content"; + path = "~/Projects/personal-blog/content"; + ai = true; + git = true; + } + ]; }; ``` diff --git a/config/projects.nix b/config/projects.nix index 3e4e437..da93d63 100644 --- a/config/projects.nix +++ b/config/projects.nix @@ -1,83 +1,178 @@ { projects = { nix-config = { - template = "basic"; - name = "nix"; - codePath = "/Users/yanlin/.config/nix"; + session = "nix"; description = "Nix configuration"; + windows = [ + { + name = "nix"; + path = "/Users/yanlin/.config/nix"; + ai = true; + git = true; + shell = true; + } + ]; }; homelab = { - template = "basic"; - name = "homelab"; - codePath = "/Users/yanlin/Documents/Projects/Homelab-deploy"; + session = "homelab"; description = "Homelab Deployment"; + windows = [ + { + name = "homelab"; + path = "/Users/yanlin/Documents/Projects/Homelab-deploy"; + ai = true; + git = true; + shell = true; + } + ]; }; note = { - template = "basic"; - name = "note"; - codePath = "/Users/yanlin/Obsidian/Personal"; + session = "note"; description = "Obsidian notes"; + windows = [ + { + name = "note"; + path = "/Users/yanlin/Obsidian/Personal"; + ai = true; + git = true; + shell = false; + } + ]; }; acapro = { - template = "basic"; - name = "aca-programs"; - codePath = "/Users/yanlin/Documents/Programs"; + session = "aca-programs"; description = "Academic programs"; + windows = [ + { + name = "pro"; + path = "/Users/yanlin/Documents/Programs"; + ai = true; + git = true; + shell = false; + } + ]; }; blog = { - template = "research"; - name = "blog"; - codePath = "/Users/yanlin/Documents/Projects/personal-blog"; - paperPath = "/Users/yanlin/Documents/Projects/personal-blog/content"; + session = "blog"; description = "Personal blog project"; - server = "personal-vps"; - remoteDir = "~/blog"; + windows = [ + { + name = "code"; + path = "/Users/yanlin/Documents/Projects/personal-blog"; + ai = true; + git = true; + shell = true; + } + { + name = "content"; + path = "/Users/yanlin/Documents/Projects/personal-blog/content"; + ai = true; + git = false; + } + ]; }; homepage = { - template = "basic"; - name = "homepage"; - codePath = "/Users/yanlin/Documents/Projects/Homepage/"; + session = "homepage"; description = "Personal Homepage"; + windows = [ + { + name = "homepage"; + path = "/Users/yanlin/Documents/Projects/Homepage/"; + ai = true; + git = true; + shell = true; + } + ]; }; mdshortcut = { - template = "research"; - name = "MDShortcut"; - codePath = "/Users/yanlin/Documents/Projects/Material Design Shortcut/MDShortcut-code"; - paperPath = "/Users/yanlin/Documents/Projects/Material Design Shortcut/MDShortcut-paper"; + session = "MDShortcut"; description = "Material design shortcut"; - server = "aicloud"; - remoteDir = "~/MDS"; + windows = [ + { + name = "code"; + path = "/Users/yanlin/Documents/Projects/Material Design Shortcut/MDShortcut-code"; + ai = true; + git = true; + remote = { + server = "aicloud"; + remoteDir = "~/MDS"; + }; + shell = true; + } + { + name = "paper"; + path = "/Users/yanlin/Documents/Projects/Material Design Shortcut/MDShortcut-paper"; + ai = true; + git = true; + shell = false; + } + ]; }; daki3 = { - template = "research"; - name = "DAKI3"; - codePath = "/Users/yanlin/Documents/Projects/AI systems & infrastructure/Codes"; - paperPath = "/Users/yanlin/Documents/Projects/AI systems & infrastructure/Slides"; + session = "DAKI3"; description = "DAKI3 course"; + windows = [ + { + name = "code"; + path = "/Users/yanlin/Documents/Projects/AI systems & infrastructure/Codes"; + ai = true; + git = true; + shell = true; + } + { + name = "slides"; + path = "/Users/yanlin/Documents/Projects/AI systems & infrastructure/Slides"; + ai = true; + git = true; + shell = false; + } + ]; }; matmeet = { - template = "basic"; - name = "MaterialMeet"; - codePath = "/Users/yanlin/Documents/Projects/Material Project Group Meeting"; + session = "MaterialMeet"; description = "Material Meeting Slides"; + windows = [ + { + name = "slides"; + path = "/Users/yanlin/Documents/Projects/Material Project Group Meeting"; + ai = true; + git = true; + shell = false; + } + ]; }; ddm = { - template = "research"; - name = "DiffDisMatter"; - codePath = "/Users/yanlin/Documents/Projects/Inverse Design of Disordered Materials/DiffDisMatter-dev"; - paperPath = "/Users/yanlin/Documents/Projects/Inverse Design of Disordered Materials/mc-denoising-paper"; + session = "DiffDisMatter"; description = "Inverse material design"; - server = "aicloud"; - remoteDir = "~/DiffDisMatter"; + windows = [ + { + name = "code"; + path = "/Users/yanlin/Documents/Projects/Inverse Design of Disordered Materials/DiffDisMatter-dev"; + ai = true; + git = true; + shell = true; + remote = { + server = "aicloud"; + remoteDir = "~/DiffDisMatter"; + }; + } + { + name = "paper"; + path = "/Users/yanlin/Documents/Projects/Inverse Design of Disordered Materials/mc-denoising-paper"; + ai = true; + git = true; + shell = false; + } + ]; }; }; diff --git a/scripts/project-launcher.sh b/scripts/project-launcher.sh index 77c67bb..4b3567f 100755 --- a/scripts/project-launcher.sh +++ b/scripts/project-launcher.sh @@ -1,12 +1,11 @@ #!/bin/bash -# Universal project launcher - reads project config and launches appropriate template +# Universal project launcher - reads project config and launches dynamic windows # Usage: project-launcher.sh PROJECT_NAME PROJECT_NAME="$1" CONFIG_DIR="$(dirname "$0")/../config" PROJECTS_JSON="$CONFIG_DIR/projects.json" -TEMPLATES_DIR="$(dirname "$0")/templates" # Check if tmux session is running is_session_running() { @@ -25,15 +24,15 @@ if [ -z "$PROJECT_NAME" ]; then fi # Parse and display projects with descriptions - jq -r '.projects | to_entries[] | "\(.key)|\(.value.description)|\(.value.template)|\(.value.name)"' "$PROJECTS_JSON" 2>/dev/null | \ - while IFS='|' read -r name desc template session_name; do + jq -r '.projects | to_entries[] | "\(.key)|\(.value.description)|\(.value.session)"' "$PROJECTS_JSON" 2>/dev/null | \ + while IFS='|' read -r name desc session_name; do # Check if session is running and format accordingly if is_session_running "$session_name"; then - printf " \033[1;32m%-12s\033[0m \033[2m[%-8s]\033[0m %s\033[1;32m • Running\033[0m\n" \ - "$name" "$template" "$desc" + printf " \033[1;32m%-12s\033[0m %s\033[1;32m • Running\033[0m\n" \ + "$name" "$desc" else - printf " \033[1;32m%-12s\033[0m \033[2m[%-8s]\033[0m %s\n" \ - "$name" "$template" "$desc" + printf " \033[1;32m%-12s\033[0m %s\n" \ + "$name" "$desc" fi done @@ -62,13 +61,18 @@ if [ "$PROJECT_CONFIG" = "null" ]; then exit 1 fi -TEMPLATE=$(echo "$PROJECT_CONFIG" | jq -r '.template') -SESSION_NAME=$(echo "$PROJECT_CONFIG" | jq -r '.name') -CODE_PATH=$(echo "$PROJECT_CONFIG" | jq -r '.codePath') -CONTENT_PATH=$(echo "$PROJECT_CONFIG" | jq -r '.contentPath // empty') -PAPER_PATH=$(echo "$PROJECT_CONFIG" | jq -r '.paperPath // empty') -SERVER=$(echo "$PROJECT_CONFIG" | jq -r '.server // empty') -REMOTE_DIR=$(echo "$PROJECT_CONFIG" | jq -r '.remoteDir // empty') +SESSION_NAME=$(echo "$PROJECT_CONFIG" | jq -r '.session') +DESCRIPTION=$(echo "$PROJECT_CONFIG" | jq -r '.description // empty') + +# Check if session already exists and attach if it does +if is_session_running "$SESSION_NAME"; then + printf "\033[1;32mAttaching to existing session: %s\033[0m\n" "$SESSION_NAME" + tmux attach-session -t "$SESSION_NAME" + exit 0 +fi + +# Update papis cache +papis cache reset > /dev/null 2>&1 # Create directories if they don't exist create_directory() { @@ -87,55 +91,118 @@ create_directory() { fi } -# Ensure required directories exist -create_directory "$CODE_PATH" "code" -create_directory "$CONTENT_PATH" "content" -create_directory "$PAPER_PATH" "paper" +# Get windows configuration +WINDOWS=$(echo "$PROJECT_CONFIG" | jq -c '.windows[]' 2>/dev/null) -# Record directories in zoxide for smart navigation -[ -n "$CODE_PATH" ] && [ "$CODE_PATH" != "null" ] && [ -d "$CODE_PATH" ] && zoxide add "$CODE_PATH" 2>/dev/null || true -[ -n "$CONTENT_PATH" ] && [ "$CONTENT_PATH" != "null" ] && [ -d "$CONTENT_PATH" ] && zoxide add "$CONTENT_PATH" 2>/dev/null || true -[ -n "$PAPER_PATH" ] && [ "$PAPER_PATH" != "null" ] && [ -d "$PAPER_PATH" ] && zoxide add "$PAPER_PATH" 2>/dev/null || true - -# Check if session already exists and attach if it does -if is_session_running "$SESSION_NAME"; then - printf "\033[1;32mAttaching to existing session: %s\033[0m\n" "$SESSION_NAME" - tmux attach-session -t "$SESSION_NAME" - exit 0 +if [ -z "$WINDOWS" ]; then + echo "Error: No windows configured for project '$PROJECT_NAME'" + exit 1 fi -# Update papis cache -papis cache reset > /dev/null 2>&1 +# Get the first window configuration to create the session +FIRST_WINDOW=$(echo "$WINDOWS" | head -n 1) +FIRST_WINDOW_NAME=$(echo "$FIRST_WINDOW" | jq -r '.name') +FIRST_WINDOW_PATH=$(echo "$FIRST_WINDOW" | jq -r '.path') -# Create remote directory if server connection is configured -if [ -n "$SERVER" ] && [ -n "$REMOTE_DIR" ]; then - printf "\033[2mEnsuring remote directory exists: %s:%s\033[0m\n" "$SERVER" "$REMOTE_DIR" - if ssh "$SERVER" "mkdir -p \"$REMOTE_DIR\"" 2>/dev/null; then - printf "\033[2mRemote directory ready: %s:%s\033[0m\n" "$SERVER" "$REMOTE_DIR" - else - echo "Warning: Could not create or verify remote directory: $SERVER:$REMOTE_DIR" - echo "Please check SSH connection and permissions." +# Create directory for first window +create_directory "$FIRST_WINDOW_PATH" "$FIRST_WINDOW_NAME" + +# Record directory in zoxide for smart navigation +[ -n "$FIRST_WINDOW_PATH" ] && [ "$FIRST_WINDOW_PATH" != "null" ] && [ -d "$FIRST_WINDOW_PATH" ] && zoxide add "$FIRST_WINDOW_PATH" 2>/dev/null || true + +# Create session with first window +tmux new-session -d -s "$SESSION_NAME" -c "$FIRST_WINDOW_PATH" + +# Initialize window counter +WINDOW_INDEX=1 + +# Process each window configuration +while IFS= read -r window_config; do + WINDOW_NAME=$(echo "$window_config" | jq -r '.name') + WINDOW_PATH=$(echo "$window_config" | jq -r '.path') + + # Create directory if it doesn't exist (for subsequent windows) + if [ "$WINDOW_INDEX" -gt 1 ]; then + create_directory "$WINDOW_PATH" "$WINDOW_NAME" + # Record directory in zoxide for smart navigation + [ -n "$WINDOW_PATH" ] && [ "$WINDOW_PATH" != "null" ] && [ -d "$WINDOW_PATH" ] && zoxide add "$WINDOW_PATH" 2>/dev/null || true fi -fi - -# Launch appropriate template -case "$TEMPLATE" in - "basic") - exec "$TEMPLATES_DIR/basic.sh" "$SESSION_NAME" "$CODE_PATH" - ;; - "research") - if [ -z "$PAPER_PATH" ]; then - echo "Error: Research template requires paperPath" - exit 1 - fi - if [ -n "$SERVER" ] && [ -n "$REMOTE_DIR" ]; then - exec "$TEMPLATES_DIR/research.sh" "$SESSION_NAME" "$CODE_PATH" "$PAPER_PATH" "$SERVER" "$REMOTE_DIR" + + # Check window options + NVIM_ENABLED=$(echo "$window_config" | jq -r '.nvim // true') + AI_ENABLED=$(echo "$window_config" | jq -r '.ai // false') + GIT_ENABLED=$(echo "$window_config" | jq -r '.git // false') + SHELL_ENABLED=$(echo "$window_config" | jq -r '.shell // false') + REMOTE_CONFIG=$(echo "$window_config" | jq -r '.remote // empty') + + # Create nvim window (default behavior unless explicitly disabled) + if [ "$NVIM_ENABLED" != "false" ]; then + if [ "$WINDOW_INDEX" = 1 ]; then + # First window - rename the existing session window + tmux rename-window -t "$SESSION_NAME:$WINDOW_INDEX" "${WINDOW_NAME}-nvim" else - exec "$TEMPLATES_DIR/research.sh" "$SESSION_NAME" "$CODE_PATH" "$PAPER_PATH" + # Subsequent windows - create new window + tmux new-window -t "$SESSION_NAME:$WINDOW_INDEX" -n "${WINDOW_NAME}-nvim" -c "$WINDOW_PATH" fi - ;; - *) - echo "Error: Unknown template '$TEMPLATE'" - exit 1 - ;; -esac + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX" "nvim" C-m + sleep 0.5 # Brief delay to ensure nvim loads + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX" " e" + WINDOW_INDEX=$((WINDOW_INDEX + 1)) + fi + + # Create AI window if enabled + if [ "$AI_ENABLED" = "true" ]; then + tmux new-window -t "$SESSION_NAME:$WINDOW_INDEX" -n "${WINDOW_NAME}-ai" -c "$WINDOW_PATH" + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX" "claude -c" C-m + tmux split-window -t "$SESSION_NAME:$WINDOW_INDEX" -h -c "$WINDOW_PATH" + tmux split-window -t "$SESSION_NAME:$WINDOW_INDEX.2" -v -c "$WINDOW_PATH" + tmux select-pane -t "$SESSION_NAME:$WINDOW_INDEX.1" + WINDOW_INDEX=$((WINDOW_INDEX + 1)) + fi + + # Create git window if enabled + if [ "$GIT_ENABLED" = "true" ]; then + tmux new-window -t "$SESSION_NAME:$WINDOW_INDEX" -n "${WINDOW_NAME}-git" -c "$WINDOW_PATH" + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX" "lazygit" C-m + tmux setw -t "$SESSION_NAME:$WINDOW_INDEX" monitor-activity off + WINDOW_INDEX=$((WINDOW_INDEX + 1)) + fi + + # Create shell window if enabled + if [ "$SHELL_ENABLED" = "true" ]; then + tmux new-window -t "$SESSION_NAME:$WINDOW_INDEX" -n "${WINDOW_NAME}-shell" -c "$WINDOW_PATH" + WINDOW_INDEX=$((WINDOW_INDEX + 1)) + fi + + # Create remote window if configured + if [ -n "$REMOTE_CONFIG" ] && [ "$REMOTE_CONFIG" != "null" ]; then + SERVER=$(echo "$REMOTE_CONFIG" | jq -r '.server // empty') + REMOTE_DIR=$(echo "$REMOTE_CONFIG" | jq -r '.remoteDir // empty') + + if [ -n "$SERVER" ] && [ -n "$REMOTE_DIR" ]; then + # Ensure remote directory exists + printf "\033[2mEnsuring remote directory exists: %s:%s\033[0m\n" "$SERVER" "$REMOTE_DIR" + if ssh "$SERVER" "mkdir -p \"$REMOTE_DIR\"" 2>/dev/null; then + printf "\033[2mRemote directory ready: %s:%s\033[0m\n" "$SERVER" "$REMOTE_DIR" + else + echo "Warning: Could not create or verify remote directory: $SERVER:$REMOTE_DIR" + echo "Please check SSH connection and permissions." + fi + + tmux new-window -t "$SESSION_NAME:$WINDOW_INDEX" -n "${WINDOW_NAME}-remote" -c "$WINDOW_PATH" + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX" "alias r='ssh $SERVER -t \"cd $REMOTE_DIR && exec \\\$SHELL\"'" C-m + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX" "ssh $SERVER -t 'cd $REMOTE_DIR && exec \$SHELL'" C-m + tmux split-window -t "$SESSION_NAME:$WINDOW_INDEX" -h -c "$WINDOW_PATH" + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX.2" "alias r='ssh $SERVER -t \"cd $REMOTE_DIR && exec \\\$SHELL\"'" C-m + tmux send-keys -t "$SESSION_NAME:$WINDOW_INDEX.2" "ssh $SERVER -t 'cd $REMOTE_DIR && exec \$SHELL'" C-m + tmux select-pane -t "$SESSION_NAME:$WINDOW_INDEX.1" + WINDOW_INDEX=$((WINDOW_INDEX + 1)) + fi + fi +done <<< "$WINDOWS" + +# Select the first window +tmux select-window -t "$SESSION_NAME:1" + +# Attach to session +tmux attach-session -t "$SESSION_NAME" \ No newline at end of file diff --git a/scripts/templates/basic.sh b/scripts/templates/basic.sh deleted file mode 100755 index 2f6f3eb..0000000 --- a/scripts/templates/basic.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# Basic development template - single directory with nvim, ai, git, shell -# Usage: basic.sh SESSION_NAME CODE_PATH - -SESSION_NAME="$1" -CODE_PATH="$2" - -if [ -z "$SESSION_NAME" ] || [ -z "$CODE_PATH" ]; then - echo "Usage: $0 SESSION_NAME CODE_PATH" - exit 1 -fi - -tmux new-session -d -s $SESSION_NAME -c "$CODE_PATH" - -# Record directory in zoxide for smart navigation -zoxide add "$CODE_PATH" 2>/dev/null || true -tmux rename-window -t $SESSION_NAME:1 "nvim" -tmux send-keys -t $SESSION_NAME:1 "nvim" C-m -sleep 0.5 # Brief delay to ensure nvim loads -tmux send-keys -t $SESSION_NAME:1 " e" -tmux new-window -t $SESSION_NAME:2 -n "ai" -c "$CODE_PATH" -tmux send-keys -t $SESSION_NAME:2 "claude -c" C-m -tmux split-window -t $SESSION_NAME:2 -h -c "$CODE_PATH" -tmux split-window -t $SESSION_NAME:2.2 -v -c "$CODE_PATH" -tmux select-pane -t $SESSION_NAME:2.1 -tmux new-window -t $SESSION_NAME:3 -n "git" -c "$CODE_PATH" -tmux send-keys -t $SESSION_NAME:3 "lazygit" C-m -tmux setw -t $SESSION_NAME:3 monitor-activity off -tmux new-window -t $SESSION_NAME:4 -n "shell" -c "$CODE_PATH" - -tmux select-window -t $SESSION_NAME:1 - -tmux attach-session -t $SESSION_NAME \ No newline at end of file diff --git a/scripts/templates/research.sh b/scripts/templates/research.sh deleted file mode 100755 index 0b569b9..0000000 --- a/scripts/templates/research.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -# Research workflow template - code + separate paper directory + optional remote server -# Usage: research.sh SESSION_NAME CODE_PATH PAPER_PATH [SERVER] [REMOTE_DIR] - -SESSION_NAME="$1" -CODE_PATH="$2" -PAPER_PATH="$3" -SERVER="$4" -REMOTE_DIR="$5" - -if [ -z "$SESSION_NAME" ] || [ -z "$CODE_PATH" ] || [ -z "$PAPER_PATH" ]; then - echo "Usage: $0 SESSION_NAME CODE_PATH PAPER_PATH [SERVER] [REMOTE_DIR]" - exit 1 -fi - -# Create windows for code -tmux new-session -d -s $SESSION_NAME -c "$CODE_PATH" - -# Record directories in zoxide for smart navigation -zoxide add "$CODE_PATH" 2>/dev/null || true -zoxide add "$PAPER_PATH" 2>/dev/null || true -tmux rename-window -t $SESSION_NAME:1 "code" -tmux send-keys -t $SESSION_NAME:1 "nvim" C-m -sleep 0.5 # Brief delay to ensure nvim loads -tmux send-keys -t $SESSION_NAME:1 " e" -tmux new-window -t $SESSION_NAME:2 -n "code-ai" -c "$CODE_PATH" -tmux send-keys -t $SESSION_NAME:2 "claude -c" C-m -tmux split-window -t $SESSION_NAME:2 -h -c "$CODE_PATH" -tmux split-window -t $SESSION_NAME:2.2 -v -c "$CODE_PATH" -tmux select-pane -t $SESSION_NAME:2.1 -tmux new-window -t $SESSION_NAME:3 -n "code-git" -c "$CODE_PATH" -tmux send-keys -t $SESSION_NAME:3 "lazygit" C-m -tmux setw -t $SESSION_NAME:3 monitor-activity off - -# Create windows for paper -tmux new-window -t $SESSION_NAME:4 -n "paper" -c "$PAPER_PATH" -tmux select-window -t $SESSION_NAME:4 -tmux send-keys -t $SESSION_NAME:4 "nvim" C-m -sleep 0.5 # Brief delay to ensure nvim loads -tmux send-keys -t $SESSION_NAME:4 " e" -tmux new-window -t $SESSION_NAME:5 -n "paper-ai" -c "$PAPER_PATH" -tmux send-keys -t $SESSION_NAME:5 "claude -c" C-m -tmux split-window -t $SESSION_NAME:5 -h -c "$PAPER_PATH" -tmux split-window -t $SESSION_NAME:5.2 -v -c "$PAPER_PATH" -tmux select-pane -t $SESSION_NAME:5.1 -tmux new-window -t $SESSION_NAME:6 -n "paper-git" -c "$PAPER_PATH" -tmux send-keys -t $SESSION_NAME:6 "lazygit" C-m -tmux setw -t $SESSION_NAME:6 monitor-activity off - -# Create remote server window if server details are provided -if [ -n "$SERVER" ] && [ -n "$REMOTE_DIR" ]; then - tmux new-window -t $SESSION_NAME:7 -n "remote" -c "$CODE_PATH" - tmux send-keys -t $SESSION_NAME:7 "alias r='ssh $SERVER -t \"cd $REMOTE_DIR && exec \\\$SHELL\"'" C-m - tmux send-keys -t $SESSION_NAME:7 "ssh $SERVER -t 'cd $REMOTE_DIR && exec \$SHELL'" C-m - tmux split-window -t $SESSION_NAME:7 -h -c "$CODE_PATH" - tmux send-keys -t $SESSION_NAME:7.2 "alias r='ssh $SERVER -t \"cd $REMOTE_DIR && exec \\\$SHELL\"'" C-m - tmux send-keys -t $SESSION_NAME:7.2 "ssh $SERVER -t 'cd $REMOTE_DIR && exec \$SHELL'" C-m - tmux select-pane -t $SESSION_NAME:7.1 -fi - -tmux select-window -t $SESSION_NAME:1 - -tmux attach-session -t $SESSION_NAME diff --git a/ude -c b/ude -c new file mode 100644 index 0000000..e69de29 diff --git a/zygit b/zygit new file mode 100644 index 0000000..e69de29