Created
January 6, 2026 00:52
-
-
Save tarikbc/4d8837d5d0c76549dbb27d46052978d6 to your computer and use it in GitHub Desktop.
Creates another instance of cursor so you can have multiple accounts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # Script to clone a Cursor instance with separate profile | |
| # Usage: ./clone-cursor-instance.sh <instance_name> | |
| # Example: ./clone-cursor-instance.sh personal | |
| set -e | |
| # Colors for output | |
| RED='\033[0;31m' | |
| GREEN='\033[0;32m' | |
| YELLOW='\033[1;33m' | |
| BLUE='\033[0;34m' | |
| NC='\033[0m' # No Color | |
| # Check if instance name is provided | |
| if [ -z "$1" ]; then | |
| echo -e "${RED}Error: Instance name required${NC}" | |
| echo "Usage: $0 <instance_name>" | |
| echo "Example: $0 personal" | |
| exit 1 | |
| fi | |
| INSTANCE_NAME="$1" | |
| APP_NAME="Cursor_${INSTANCE_NAME}.app" | |
| PROFILE_DIR="$HOME/.cursor-profile-${INSTANCE_NAME}" | |
| ALIAS_NAME="cursor${INSTANCE_NAME}" | |
| LAUNCH_SCRIPT="$HOME/launch-cursor-${INSTANCE_NAME}.sh" | |
| echo -e "${BLUE}========================================${NC}" | |
| echo -e "${BLUE}Cursor Instance Cloner${NC}" | |
| echo -e "${BLUE}========================================${NC}" | |
| echo "" | |
| echo -e "Instance name: ${GREEN}${INSTANCE_NAME}${NC}" | |
| echo -e "App name: ${GREEN}${APP_NAME}${NC}" | |
| echo -e "Profile directory: ${GREEN}${PROFILE_DIR}${NC}" | |
| echo -e "Alias: ${GREEN}${ALIAS_NAME}${NC}" | |
| echo "" | |
| # Step 1: Check if original Cursor.app exists | |
| echo -e "${YELLOW}[1/7]${NC} Checking for Cursor.app..." | |
| if [ ! -d "/Applications/Cursor.app" ]; then | |
| echo -e "${RED}Error: /Applications/Cursor.app not found${NC}" | |
| exit 1 | |
| fi | |
| echo -e "${GREEN}✓${NC} Found Cursor.app" | |
| # Step 2: Duplicate the application | |
| echo -e "${YELLOW}[2/7]${NC} Duplicating Cursor.app to ${APP_NAME}..." | |
| if [ -d "/Applications/${APP_NAME}" ]; then | |
| echo -e "${YELLOW}Warning: ${APP_NAME} already exists. Skipping duplication.${NC}" | |
| else | |
| cp -R "/Applications/Cursor.app" "/Applications/${APP_NAME}" | |
| echo -e "${GREEN}✓${NC} Application duplicated" | |
| fi | |
| # Step 3: Create profile directories | |
| echo -e "${YELLOW}[3/7]${NC} Creating profile directories..." | |
| mkdir -p "${PROFILE_DIR}/User" | |
| mkdir -p "${PROFILE_DIR}/extensions" | |
| echo -e "${GREEN}✓${NC} Profile directories created" | |
| # Step 4: Copy existing settings (optional) | |
| echo -e "${YELLOW}[4/7]${NC} Copying existing Cursor settings..." | |
| if [ -d "$HOME/Library/Application Support/Cursor/User" ]; then | |
| cp -R "$HOME/Library/Application Support/Cursor/User/"* "${PROFILE_DIR}/User/" 2>/dev/null || true | |
| echo -e "${GREEN}✓${NC} Settings copied" | |
| else | |
| echo -e "${YELLOW}⚠${NC} No existing settings found (fresh installation)" | |
| fi | |
| # Step 5: Create launch script | |
| echo -e "${YELLOW}[5/7]${NC} Creating launch script..." | |
| cat > "${LAUNCH_SCRIPT}" << EOF | |
| #!/bin/bash | |
| /Applications/${APP_NAME}/Contents/MacOS/Cursor --user-data-dir=\$HOME/.cursor-profile-${INSTANCE_NAME} --extensions-dir=\$HOME/.cursor-profile-${INSTANCE_NAME}/extensions | |
| EOF | |
| chmod +x "${LAUNCH_SCRIPT}" | |
| echo -e "${GREEN}✓${NC} Launch script created: ${LAUNCH_SCRIPT}" | |
| # Step 6: Add alias to shell config | |
| echo -e "${YELLOW}[6/7]${NC} Adding alias to shell configuration..." | |
| ALIAS_LINE="alias ${ALIAS_NAME}='/Applications/${APP_NAME}/Contents/MacOS/Cursor --user-data-dir=\$HOME/.cursor-profile-${INSTANCE_NAME} --extensions-dir=\$HOME/.cursor-profile-${INSTANCE_NAME}/extensions'" | |
| # Detect shell and config file | |
| SHELL_CONFIG="" | |
| SHELL_NAME="" | |
| if [ -n "$ZSH_VERSION" ]; then | |
| SHELL_CONFIG="$HOME/.zshrc" | |
| SHELL_NAME="zsh" | |
| elif [ -n "$BASH_VERSION" ]; then | |
| # Check for .bash_profile, .bashrc, or .profile | |
| if [ -f "$HOME/.bash_profile" ]; then | |
| SHELL_CONFIG="$HOME/.bash_profile" | |
| elif [ -f "$HOME/.bashrc" ]; then | |
| SHELL_CONFIG="$HOME/.bashrc" | |
| else | |
| SHELL_CONFIG="$HOME/.profile" | |
| fi | |
| SHELL_NAME="bash" | |
| else | |
| # Fallback: detect from $SHELL environment variable | |
| case "$SHELL" in | |
| */zsh) | |
| SHELL_CONFIG="$HOME/.zshrc" | |
| SHELL_NAME="zsh" | |
| ;; | |
| */bash) | |
| if [ -f "$HOME/.bash_profile" ]; then | |
| SHELL_CONFIG="$HOME/.bash_profile" | |
| elif [ -f "$HOME/.bashrc" ]; then | |
| SHELL_CONFIG="$HOME/.bashrc" | |
| else | |
| SHELL_CONFIG="$HOME/.profile" | |
| fi | |
| SHELL_NAME="bash" | |
| ;; | |
| */fish) | |
| SHELL_CONFIG="$HOME/.config/fish/config.fish" | |
| SHELL_NAME="fish" | |
| ;; | |
| *) | |
| SHELL_CONFIG="$HOME/.profile" | |
| SHELL_NAME="unknown" | |
| ;; | |
| esac | |
| fi | |
| echo -e "Detected shell: ${GREEN}${SHELL_NAME}${NC}" | |
| echo -e "Config file: ${GREEN}${SHELL_CONFIG}${NC}" | |
| # Add alias to config file | |
| if grep -q "alias ${ALIAS_NAME}=" "${SHELL_CONFIG}" 2>/dev/null; then | |
| echo -e "${YELLOW}⚠${NC} Alias '${ALIAS_NAME}' already exists in ${SHELL_CONFIG}" | |
| else | |
| # Create config file if it doesn't exist | |
| touch "${SHELL_CONFIG}" | |
| echo "" >> "${SHELL_CONFIG}" | |
| echo "# Cursor ${INSTANCE_NAME} instance alias" >> "${SHELL_CONFIG}" | |
| # Fish shell uses different syntax | |
| if [ "$SHELL_NAME" = "fish" ]; then | |
| mkdir -p "$HOME/.config/fish" | |
| echo "alias ${ALIAS_NAME} '/Applications/${APP_NAME}/Contents/MacOS/Cursor --user-data-dir=\$HOME/.cursor-profile-${INSTANCE_NAME} --extensions-dir=\$HOME/.cursor-profile-${INSTANCE_NAME}/extensions'" >> "${SHELL_CONFIG}" | |
| else | |
| echo "${ALIAS_LINE}" >> "${SHELL_CONFIG}" | |
| fi | |
| echo -e "${GREEN}✓${NC} Alias added to ${SHELL_CONFIG}" | |
| fi | |
| # Step 7: Reload instructions | |
| echo -e "${YELLOW}[7/7]${NC} Reloading shell configuration..." | |
| if [ "$SHELL_NAME" = "fish" ]; then | |
| echo -e "${GREEN}✓${NC} Complete! Run 'source ~/.config/fish/config.fish' or restart your terminal" | |
| elif [ "$SHELL_NAME" = "bash" ]; then | |
| echo -e "${GREEN}✓${NC} Complete! Run 'source ${SHELL_CONFIG}' or restart your terminal" | |
| else | |
| echo -e "${GREEN}✓${NC} Complete! Run 'source ${SHELL_CONFIG}' or restart your terminal" | |
| fi | |
| # Print summary | |
| echo "" | |
| echo -e "${BLUE}========================================${NC}" | |
| echo -e "${GREEN}Setup Complete!${NC}" | |
| echo -e "${BLUE}========================================${NC}" | |
| echo "" | |
| echo -e "${GREEN}✓${NC} Application: /Applications/${APP_NAME}" | |
| echo -e "${GREEN}✓${NC} Profile: ${PROFILE_DIR}" | |
| echo -e "${GREEN}✓${NC} Launch script: ${LAUNCH_SCRIPT}" | |
| echo -e "${GREEN}✓${NC} Terminal alias: ${ALIAS_NAME}" | |
| echo "" | |
| echo -e "${YELLOW}How to use:${NC}" | |
| echo -e " • Terminal: ${GREEN}${ALIAS_NAME}${NC}" | |
| echo -e " • Script: ${GREEN}${LAUNCH_SCRIPT}${NC}" | |
| echo "" | |
| echo -e "${YELLOW}Next steps (Optional - Create Automator App):${NC}" | |
| echo -e " 1. Open ${GREEN}Automator${NC}" | |
| echo -e " 2. Click ${GREEN}New Document${NC} → Select ${GREEN}Application${NC}" | |
| echo -e " 3. Search for ${GREEN}'Run Shell Script'${NC} in the actions library" | |
| echo -e " 4. Drag ${GREEN}'Run Shell Script'${NC} to the workflow area" | |
| echo -e " 5. Paste this command:" | |
| echo -e " ${BLUE}${LAUNCH_SCRIPT}${NC}" | |
| echo -e " 6. Save as ${GREEN}Cursor ${INSTANCE_NAME}.app${NC} in /Applications or ~/Applications" | |
| echo -e " 7. Optional: Change the icon" | |
| echo -e " • Right-click the app → ${GREEN}Get Info${NC}" | |
| echo -e " • Find a .icns file or copy icon from original Cursor.app" | |
| echo -e " • Drag the icon to the small icon in the Get Info window" | |
| echo -e " 8. Add to Dock by dragging the app" | |
| echo "" | |
| echo -e "${BLUE}========================================${NC}" | |
| echo -e "Each instance has separate licenses, settings, and extensions!" | |
| echo -e "${BLUE}========================================${NC}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment