borg.ps1
# borg.ps1 — Safe launcher, compatible with Windows PowerShell 5.1 # Use raw args instead of named parameters [string]$module = $null [string]$command = $null [string[]]$extraArgs = @() if ($args.Count -ge 1) { $module = $args[0] } if ($args.Count -ge 2) { $command = $args[1] } if ($args.Count -ge 3) { $extraArgs = $args[2..($args.Count - 1)] } # Check PowerShell version if ($PSVersionTable.PSVersion.Major -lt 7) { Write-Warning "BORG requires PowerShell 7.5.1 or later." Write-Host "" Write-Host "You are currently running: PowerShell $($PSVersionTable.PSVersion)" Write-Host "" Write-Host "To use BORG properly, please do one of the following:" Write-Host " • Type 'pwsh' in this terminal to switch to PowerShell 7" Write-Host " • OR configure your terminal to launch PowerShell 7 by default" Write-Host "" Write-Host "If PowerShell 7 is not yet installed, you can run this command:" Write-Host " winget install --id Microsoft.PowerShell -e" Write-Host "" Write-Host "After installing, start a new terminal or type 'pwsh' to re-enter." exit 1 } if (-not (Get-Command fzf -ErrorAction SilentlyContinue)) { Write-Warning "`fzf` is not installed. Run 'winget install fzf'." exit 1 } if (-not (Get-Command micro -ErrorAction SilentlyContinue)) { Write-Warning "`micro` editor is missing. Run 'winget install micro'." exit 1 } if (-not (Get-Command docker -ErrorAction SilentlyContinue)) { Write-Warning "Docker is not installed or not in PATH. Visit https://www.docker.com/products/docker-desktop to install it." exit 1 } try { docker info --format '{{.ServerVersion}}' | Out-Null } catch { Write-Warning "Docker daemon does not appear to be running. Start Docker Desktop and try again." exit 1 } # --version if ($args -contains '--version' -or $args -contains '-v') { $moduleName = 'Borg' $installed = (Get-Module $moduleName -ListAvailable | Sort-Object Version -Descending | Select-Object -First 1).Version $latest = (Find-Module $moduleName -ErrorAction SilentlyContinue).Version Write-Host "`n📦 BORG Version Info" -ForegroundColor Cyan Write-Host " • Installed: v$installed" if ($latest -and $latest -ne $installed) { Write-Host " • Latest: v$latest 🔔" -ForegroundColor Yellow Write-Host "`nRun 'borg update' to get the latest version." } else { Write-Host " • Latest: v$latest ✅" } exit } # update if ($args.Count -eq 1 -and $args[0] -eq 'update') { Write-Host "`n⬆️ Updating BORG module from PowerShell Gallery..." -ForegroundColor Cyan try { Update-Module -Name Borg -Force -Scope CurrentUser -ErrorAction Stop Write-Host "✅ Update complete. Please restart your terminal to use the new version." -ForegroundColor Green } catch { Write-Host "❌ Update failed: $_" -ForegroundColor Red } exit } function ResolveBorgAlias { param( [Parameter(Mandatory)] [string]$module, [string]$command ) $map = @{ "b" = "bookmark" "db" = "docker bash" "dr" = "docker restore" "dq" = "docker query" "dc" = "docker clean" "dl" = "docker download" "du" = "docker upload" "ds" = "docker switch" "dsnap" = "docker snapshot" "js" = "jump store" } $argsJoined = $module, $command $twoWords = if ($argsJoined.Count -ge 2) { "$($argsJoined[0]) $($argsJoined[1])".ToLower() } else { "" } $oneWord = if ($argsJoined.Count -ge 1) { $argsJoined[0].ToLower() } else { "" } if ($map.ContainsKey($twoWords)) { #Write-Host "✅ Matched 2-word alias: $twoWords → $($map[$twoWords])" $repl = $map[$twoWords] -split ' ' return $repl + $Args[2..($Args.Count - 1)] } if ($map.ContainsKey($oneWord)) { #Write-Host "✅ Matched 1-word alias: $oneWord → $($map[$oneWord])" $repl = $map[$oneWord] -split ' ' return $repl + $Args[1..($Args.Count - 1)] } #Write-Host "⚠️ No alias match for: $argsJoined" return $Args } $resolved = ResolveBorgAlias $module $command if ($resolved.Count -ge 2) { $module = $resolved[0] $command = $resolved[1] } # PowerShell 7+ confirmed — load main logic . "$PSScriptRoot\entry.ps1" -module $module -command $command -extraArgs $extraArgs |