186 lines
4.8 KiB
PowerShell
186 lines
4.8 KiB
PowerShell
|
|
# 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
|