Save and restore vs code settings

Save vs code settings to current folder (optionally provider save targer folder path)

param(
    [string]$destinationPath = "."
)

# Resolve full path
$destinationPath = Resolve-Path -Path $destinationPath

# Define the source directory
$sourcePath = "$env:APPDATA\Code\User"

# Ensure the destination folder exists
if (!(Test-Path -Path $destinationPath)) {
    New-Item -ItemType Directory -Path $destinationPath | Out-Null
}

# Copy settings.json, keybindings.json, and snippets if they exist
$files = @("settings.json", "keybindings.json")
$snippetsPath = "$sourcePath\snippets"

foreach ($file in $files) {
    $filePath = "$sourcePath\$file"
    if (Test-Path -Path $filePath) {
        Copy-Item -Path $filePath -Destination $destinationPath -Force
        Write-Host "Copied $file to $destinationPath"
    } else {
        Write-Host "$file not found, skipping..."
    }
}

# Copy the snippets folder if it exists
if (Test-Path -Path $snippetsPath) {
    Copy-Item -Path $snippetsPath -Destination $destinationPath -Recurse -Force
    Write-Host "Copied snippets folder to $destinationPath"
} else {
    Write-Host "Snippets folder not found, skipping..."
}

Write-Host "VS Code settings backup completed in $destinationPath"

Restore code settings from current folder (optionally provide settings source folder path)

param(
    [string]$sourcePath = "."
)

# Resolve full path for source
$sourcePath = Resolve-Path -Path $sourcePath

# Define VS Code settings directory
$destinationPath = "$env:APPDATA\Code\User"

# Define backup directory
$backupPath = "$sourcePath\backup"

# Ensure the destination exists
if (!(Test-Path -Path $destinationPath)) {
    Write-Host "VS Code settings folder not found at $destinationPath. Exiting..."
    exit 1
}

# Create a backup folder in the current location
if (!(Test-Path -Path $backupPath)) {
    New-Item -ItemType Directory -Path $backupPath | Out-Null
}

# Backup existing settings
$files = @("settings.json", "keybindings.json")
$snippetsPath = "$destinationPath\snippets"

foreach ($file in $files) {
    $filePath = "$destinationPath\$file"
    if (Test-Path -Path $filePath) {
        Copy-Item -Path $filePath -Destination $backupPath -Force
        Write-Host "Backed up $file to $backupPath"
    }
}

# Backup snippets if they exist
if (Test-Path -Path $snippetsPath) {
    Copy-Item -Path $snippetsPath -Destination $backupPath -Recurse -Force
    Write-Host "Backed up snippets to $backupPath"
}

# Restore settings from source path
foreach ($file in $files) {
    $filePath = "$sourcePath\$file"
    if (Test-Path -Path $filePath) {
        Copy-Item -Path $filePath -Destination $destinationPath -Force
        Write-Host "Restored $file from $sourcePath to $destinationPath"
    } else {
        Write-Host "$file not found in $sourcePath, skipping..."
    }
}

# Restore snippets if they exist
$sourceSnippetsPath = "$sourcePath\snippets"
if (Test-Path -Path $sourceSnippetsPath) {
    Copy-Item -Path $sourceSnippetsPath -Destination $destinationPath -Recurse -Force
    Write-Host "Restored snippets from $sourcePath to $destinationPath"
}

Write-Host "VS Code settings restore completed!"