186 lines
4.8 KiB
PowerShell
Raw Normal View History

# TypeDialog Installation Script for Windows
# Installs typedialog binaries and configuration
param(
[string]$InstallDir = "$env:USERPROFILE\.local\bin",
[string]$ConfigDir = "$env:USERPROFILE\.config\typedialog",
[string]$Version = "latest"
)
$ErrorActionPreference = "Stop"
$GitHubRepo = "anthropics/typedialog"
# Function: Print info message
function Write-Info {
param([string]$Message)
Write-Host "[INFO] $Message" -ForegroundColor Cyan
}
# Function: Print error message
function Write-Err {
param([string]$Message)
Write-Host "[ERROR] $Message" -ForegroundColor Red
}
# Function: Print success message
function Write-Success {
param([string]$Message)
Write-Host "[✓] $Message" -ForegroundColor Green
}
# Function: Detect platform
function Get-Platform {
$arch = $env:PROCESSOR_ARCHITECTURE
switch ($arch) {
"AMD64" { return "windows-x86_64" }
"ARM64" { return "windows-aarch64" }
default {
Write-Err "Unsupported architecture: $arch"
exit 1
}
}
}
# Function: Create directories
function New-DirectoryStructure {
param([string]$InstallDir, [string]$ConfigDir)
Write-Info "Creating directories..."
if (-not (Test-Path $InstallDir)) {
New-Item -ItemType Directory -Path $InstallDir -Force | Out-Null
}
if (-not (Test-Path $ConfigDir)) {
New-Item -ItemType Directory -Path $ConfigDir -Force | Out-Null
}
Write-Success "Directories created"
}
# Function: Download release
function Get-Release {
param([string]$Platform, [string]$Version)
$DownloadUrl = "https://github.com/$GitHubRepo/releases/download/$Version/typedialog-$Platform.zip"
$TempFile = [System.IO.Path]::GetTempFileName()
Write-Info "Downloading: $DownloadUrl"
try {
Invoke-WebRequest -Uri $DownloadUrl -OutFile $TempFile -ErrorAction Stop
Write-Success "Download complete"
return $TempFile
}
catch {
Write-Err "Download failed: $_"
exit 1
}
}
# Function: Extract archive
function Expand-Release {
param([string]$Archive)
$ExtractDir = New-Item -ItemType Directory -Path (Join-Path $env:TEMP "typedialog-extract") -Force | Select-Object -ExpandProperty FullName
Write-Info "Extracting archive..."
try {
Expand-Archive -Path $Archive -DestinationPath $ExtractDir -Force
Write-Success "Extraction complete"
return $ExtractDir
}
catch {
Write-Err "Extraction failed: $_"
exit 1
}
}
# Function: Install binaries
function Install-Binaries {
param([string]$ExtractDir, [string]$InstallDir)
$Binaries = @("typedialog.exe", "typedialog-tui.exe", "typedialog-web.exe")
$BinDir = Join-Path $ExtractDir "bin"
foreach ($binary in $Binaries) {
$BinaryPath = Join-Path $BinDir $binary
if (Test-Path $BinaryPath) {
Copy-Item -Path $BinaryPath -Destination $InstallDir -Force
Write-Success "Installed: $binary"
}
}
}
# Function: Install configurations
function Install-Configs {
param([string]$ExtractDir, [string]$ConfigDir)
$ConfigSrc = Join-Path $ExtractDir "config"
if (Test-Path $ConfigSrc) {
Copy-Item -Path "$ConfigSrc\*" -Destination $ConfigDir -Recurse -Force
Write-Success "Configurations installed"
}
}
# Function: Update PATH
function Update-Path {
param([string]$InstallDir)
$CurrentPath = [Environment]::GetEnvironmentVariable("PATH", "User")
if ($CurrentPath -notlike "*$InstallDir*") {
$NewPath = "$CurrentPath;$InstallDir"
[Environment]::SetEnvironmentVariable("PATH", $NewPath, "User")
Write-Info "Updated PATH with $InstallDir"
}
}
# Function: Verify installation
function Test-Installation {
$ExePath = Join-Path $env:USERPROFILE ".local\bin\typedialog.exe"
if (Test-Path $ExePath) {
Write-Success "TypeDialog installed successfully"
return $true
}
else {
Write-Err "Installation verification failed"
return $false
}
}
# Main entry point
function Main {
Write-Host "TypeDialog Installation" -ForegroundColor Yellow
Write-Host "=======================" -ForegroundColor Yellow
$Platform = Get-Platform
Write-Info "Detected platform: $Platform"
New-DirectoryStructure -InstallDir $InstallDir -ConfigDir $ConfigDir
$Archive = Get-Release -Platform $Platform -Version $Version
$ExtractDir = Expand-Release -Archive $Archive
Install-Binaries -ExtractDir $ExtractDir -InstallDir $InstallDir
Install-Configs -ExtractDir $ExtractDir -ConfigDir $ConfigDir
Update-Path -InstallDir $InstallDir
if (Test-Installation) {
Write-Success "Installation complete!"
Write-Info "Install directory: $InstallDir"
Write-Info "Config directory: $ConfigDir"
}
else {
exit 1
}
}
Main