Automating Python Project Setup with Raycast Extension
            In an earlier post, I shared a shell script to quickly set up new Python projects. Now, I’ve taken it a step further by creating a Raycast extension, making it even easier to start a new Python project with just a few keystrokes (I wrote about another Raycast extension to display Spotify song info here).
Here's what this script does:
- Prompts for a project name as a command-line argument.
 - Creates a new project directory with the specified name.
 - Sets up a virtual environment within the project directory.
 - Installs required Python dependencies.
 - Creates sub-directories for source code, tests, and documentation.
 - Generates essential files like 
main.py,requirements.txt, andREADME.md. - Initializes a Git repository for version control.
 - Opens the 
main.pyfile in Visual Studio Code. 
I wanted to create a Raycast extension for this script so that I could start new Python projects without even opening the terminal. This makes the process much quicker and more streamlined.
Creating the Raycast Extension
- Set Up the Raycast Script:
- Open Raycast and go to the Extensions tab.
 - Click on "Create Script Command" and select "New Script Command."
 
 - Add the Following Script:
- Replace 
<YOUR_GITHUB_USERNAME>with your GitHub username. - Use the actual path to your project directory in the 
cdcommand. 
 - Replace 
 
#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title New Python Project
# @raycast.mode compact
# Optional parameters:
# @raycast.icon 🤖
# @raycast.packageName Python Projects
# @raycast.argument1 { "type": "text", "placeholder": "Project name" }
# Documentation:
# @raycast.author Amit Jotwani
# @raycast.authorURL https://twitter.com/amit
# Replace <YOUR_GITHUB_USERNAME> with your actual GitHub username
GITHUB_USERNAME="ajot"
# Get project name from the argument
project_name=$1
# Check if project name is provided
if [ -z "$project_name" ]; then
  echo "Error: Please provide a project name."
  exit 1
fi
# Create project directory
cd "$HOME/Dropbox/dev_projects/python_projects" || { echo "Error: Directory $HOME/Dropbox/dev_projects/python_projects does not exist."; exit 1; }
mkdir "$project_name"
cd "$project_name" || { echo "Error: Failed to navigate to project directory."; exit 1; }
# Initialize virtual environment
virtualenv -p python3 venv
source venv/bin/activate
# Install dependencies (e.g., requests and numpy)
# pip install numpy
# Create project structure
mkdir src tests docs
# Create main script
touch src/main.py
# Create requirements.txt file
touch requirements.txt
# Create README.md file
touch README.md
# Initialize version control (Git)
git init
# Create a new repository on GitHub
gh repo create "$project_name" --private
# Set up the remote repository
git remote add origin "https://github.com/$GITHUB_USERNAME/$project_name.git"
echo "Current working directory: $(pwd)"
echo "Git repository initialized and remote repository set up."
echo "Project setup complete. Happy coding!"
# Open main.py in Visual Studio Code in a new window, and bring main.py to focus
code --new-window . --goto src/main.py
Setting Up the Extension
- Save the script and make it executable by running 
chmod +x <script_name>.sh. - Open Raycast, go to "Extensions" and click "Import".
 - Select your script file and import it into Raycast.
 
Using the Extension
Now, whenever you need to start a new Python project, just use this Raycast command, enter the project name, and the automation will handle the rest.