Files
homelabstack/scripts/deck-sgdb-art.ps1
T
ginnoir 91d6724175 feat(deck): add SteamGridDB batch art scripts and skill
scripts/deck-sgdb-art.py  — runs on Deck; fetches hero, wide capsule,
and portrait/poster art from SGDB for all RomM-synced shortcuts.
scripts/deck-sgdb-art.ps1 — Windows wrapper; handles SSH ASKPASS
upload and execution.
.claude/skills/deck-sgdb/ — Claude skill documenting invocation,
file naming conventions, appid formula, and known gotchas.
2026-06-07 18:17:45 -05:00

54 lines
2.2 KiB
PowerShell

#!/usr/bin/env pwsh
# scripts/deck-sgdb-art.ps1
#
# Upload deck-sgdb-art.py to the Steam Deck and run it.
# Handles the Windows SSH ASKPASS dance (no sshpass/plink on Windows).
#
# Prerequisites:
# * Steam Deck sshd running: ssh into Deck → sudo systemctl start sshd
# * Password for deck user in Obsidian vault (Homelab/ROM Library.md, Access section)
# * Tailscale connected (uses 100.96.86.40 by default; swap for 192.168.1.132 on LAN)
#
# Usage:
# .\scripts\deck-sgdb-art.ps1 # fetch all types (hero, wide, poster)
# .\scripts\deck-sgdb-art.ps1 --types hero,wide # hero + wide only
# .\scripts\deck-sgdb-art.ps1 --types poster # portrait capsules only
# .\scripts\deck-sgdb-art.ps1 --clean # remove art for unmatched ROM hacks
# .\scripts\deck-sgdb-art.ps1 --dry-run # preview without downloading
#
# All extra arguments are forwarded verbatim to deck-sgdb-art.py.
param(
[string]$DeckHost = '100.96.86.40',
[string]$DeckUser = 'deck',
[string]$DeckPass = 'd0fet0th3x',
[Parameter(ValueFromRemainingArguments)]
[string[]]$ScriptArgs
)
$ErrorActionPreference = 'Stop'
# --- ASKPASS setup (required on Windows — no sshpass available) ---------------
$askpass = "$env:TEMP\deck-askpass.cmd"
Set-Content -Path $askpass -Value "@echo $DeckPass" -Encoding ASCII
$env:SSH_ASKPASS = $askpass
$env:SSH_ASKPASS_REQUIRE = 'force'
$sshOpts = '-o StrictHostKeyChecking=no -o ConnectTimeout=10 -o ServerAliveInterval=30 -o ServerAliveCountMax=20'
# --- Upload the Python script -------------------------------------------------
$scriptSrc = Join-Path $PSScriptRoot 'deck-sgdb-art.py'
if (-not (Test-Path $scriptSrc)) {
Write-Error "deck-sgdb-art.py not found at $scriptSrc"
exit 1
}
Write-Host "Uploading deck-sgdb-art.py to ${DeckUser}@${DeckHost}..."
Get-Content $scriptSrc -Raw | ssh $sshOpts.Split() "$DeckUser@$DeckHost" "cat > /tmp/deck-sgdb-art.py && echo 'uploaded OK'"
# --- Run it -------------------------------------------------------------------
$argsStr = if ($ScriptArgs) { $ScriptArgs -join ' ' } else { '' }
Write-Host "Running: python3 /tmp/deck-sgdb-art.py $argsStr`n"
ssh $sshOpts.Split() "$DeckUser@$DeckHost" "python3 /tmp/deck-sgdb-art.py $argsStr"