Commit graph

40 commits

Author SHA1 Message Date
X9 Dev
d06af1a87f gui: auto-reboot after deployment with 60s countdown
All checks were successful
release / build-and-release (push) Successful in 22s
Summary screen shows countdown "Restart za Xs..." and reboots automatically.
Buttons: "Restartovat ted" (immediate) and "Zrusit restart" (cancel).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 14:30:15 +02:00
X9 Dev
2236fe48e9 feat: windows-update step handles multiple reboot rounds via scheduled task
All checks were successful
release / build-and-release (push) Successful in 22s
First pass runs during deployment (no reboot). Then registers X9-WindowsUpdate
scheduled task that fires on every logon, installs remaining updates, and
self-deletes when system is fully up to date - covers the typical 2-3 reboot
cycles needed on a fresh Windows install.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 14:25:50 +02:00
X9 Dev
b508ec4b3e feat: add Windows Update step (12) via PSWindowsUpdate module
All checks were successful
release / build-and-release (push) Successful in 23s
Installs NuGet provider + PSWindowsUpdate from PSGallery, then runs
Install-WindowsUpdate -AcceptAll -IgnoreReboot. No auto-reboot -
operator restarts manually after all steps complete.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 14:22:36 +02:00
X9 Dev
24882839f3 scripts: auto-create log directory in Write-Log
All checks were successful
release / build-and-release (push) Successful in 22s
C:\Windows\Setup\Scripts\ does not exist on a fresh Windows install.
Add New-Item -Force before Add-Content so the first log write creates
the directory automatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 14:20:14 +02:00
X9 Dev
0c4c8d82fa web: fix curl command – add https:// prefix (required on Windows)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 14:10:05 +02:00
X9 Dev
cf2037ae7d Replace Fyne GUI with Walk (Win32 native, no OpenGL)
All checks were successful
release / build-and-release (push) Successful in 22s
Walk uses Win32 controls directly — no GPU/OpenGL dependency — so the app
renders correctly on VMware ESXi, Hyper-V and any other VM. No MinGW needed
in CI; pure cross-compile with GOOS=windows.

- internal/gui/gui.go: rewrite with Walk declarative API (3 phases:
  form → live run → summary); load/save config via native FileDialog;
  Closing event cancels running scripts cleanly
- cmd/xetup/app.manifest: UAC requireAdministrator + ComCtl32 v6 +
  per-monitor DPI awareness (rsrc generates rsrc.syso in CI)
- .forgejo/workflows/release.yml: drop MinGW, add rsrc generation step
- go.mod/go.sum: remove Fyne and all its deps; only Walk (3 deps total)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 13:50:16 +02:00
X9 Dev
54ea9a1b0d gui: force software renderer for VM compatibility
All checks were successful
release / build-and-release (push) Successful in 8m25s
VMware SVGA II (ESXi) and similar virtual GPUs don't support the OpenGL
version Fyne needs - window opens but stays blank. Force FYNE_RENDERER=software
so Fyne uses CPU/GDI rendering instead. No visible difference for this UI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 12:47:28 +02:00
X9 Dev
0cc4779ed6 Replace bubbletea TUI with Fyne GUI
All checks were successful
release / build-and-release (push) Successful in 8m25s
- Drop bubbletea, huh, lipgloss and all their transitive deps
- Add fyne.io/fyne/v2 – native Windows GUI, dark theme
- New internal/gui/gui.go: 3-phase window (form → live run → summary)
  - Form: PC name, product key, profile, per-step checkboxes
  - Load config / Save config buttons for per-client presets
  - SPUSTIT button auto-saves to default config.json
  - Live run: virtualised log list, ZASTAVIT button
  - Summary: per-step status + elapsed time, ZAVRIT button
- cmd/xetup/main.go: pass cfgPath to gui.Run so save/load works
- CI: add mingw-w64-gcc, CGO_ENABLED=1, -H windowsgui flag

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 12:29:38 +02:00
X9 Dev
8c60b5c74e ci: set runner log level to info (was debug)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 12:07:05 +02:00
X9 Dev
7976ae7b62 Add Forgejo CI/CD: auto-build and publish xetup.exe on push
- Forgejo Actions workflow: builds Windows x64 exe on push to main
- Runner config: golang:1.24-alpine container on xetup Docker network
- docker-compose.yml: runner with docker socket + config mount
- nginx: /dl shortlink + /forgejo-api proxy for landing page

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 12:07:02 +02:00
X9 Dev
7850ee7f28 Fix embed.FS path separator on Windows
Use path.Join (always '/') for embed.FS reads, filepath.Join only for OS paths.
filepath.Join on Windows produces backslashes which embed.FS doesn't accept,
causing "failed to extract scripts" on startup.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 12:06:57 +02:00
X9 Dev
c3c8d8e501 Simplify install command to plain curl, add /dl shortlink
- nginx.conf: add /dl -> latest xetup.exe release redirect (update on each release)
- index.html: replace irm/iex command with 'curl -Lo xetup.exe xetup.x9.cz/dl'
  works with built-in curl.exe on Win10/11, no PowerShell execution policy needed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:30:22 +02:00
X9 Dev
82349dbe31 Add install command box and fix Forgejo API proxy on landing page
- nginx.conf: add /forgejo-api/ proxy location to xetup-forgejo:3000
- index.html: add install command box (irm xetup.x9.cz/get.ps1 | iex)
  with one-click copy button; remove broken API token from JS
- get.ps1: PowerShell installer that fetches latest release URL and runs exe

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:28:28 +02:00
X9 Dev
5b53b2a0d6 Add per-feature toggles to PS scripts and Go TUI
- 02-software.ps1: wrap wingetInstalls, pdfDefault, ateraAgent in Get-Feature guards
- 03-system-registry.ps1: add Get-Feature, restructure into 5 gated blocks
  (systemTweaks, edgePolicies, oneDriveUninstall, powercfg, proxyDisable)
- 04-default-profile.ps1: add Get-Feature, wrap taskbarTweaks, startMenuTweaks,
  explorerTweaks; add missing explorerTweaks code (ShowRecent, ShowFrequent, FullPath)
- 11-dell-update.ps1: add Get-Feature, split update run by drivers/bios feature flags
- runner.go: add Feature/StepFeatures/SelectableItem/AllSelectableItems for TUI
- config.go: add Features type and defaults for all 4 gated steps
- tui.go: use AllSelectableItems for MultiSelect, build Features map in startRun,
  remove unused stepFeaturesMap variable
- xetup.exe: Windows amd64 build

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:11:51 +02:00
X9 Dev
a10a3a8aa2 fix: move Dell Command | Update card to 'Stavajici kroky' section
Was incorrectly placed under 'Nove kroky (planovane)'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:51:33 +02:00
X9 Dev
be7a7236df feat: Dell Command | Update step (step 11) + download link on landing page
scripts/11-dell-update.ps1:
- Detects Dell via Win32_ComputerSystem.Manufacturer (skips silently on non-Dell)
- Installs Dell.CommandUpdate.Universal via winget (silent)
- Runs dcu-cli.exe /applyUpdates -silent -reboot=disable (all categories)
- BIOS/firmware staged, completes on restart after deployment
- Exit codes 0/1/5 all treated as success

Deploy-Windows.ps1:
- Added Step 11 - Dell Command | Update (dellUpdate=true default)

internal/runner/runner.go, internal/config/config.go:
- dellUpdate step registered in AllSteps() and DefaultConfig

web/spec/index.html:
- Step 11 card with flag-done rows, sidebar link, comment-widget issue #16
- STEP_SCRIPT map updated for step-dell

web/index.html:
- Dynamic download strip: fetches latest Forgejo release via API,
  shows Download xetup.exe with version + file size
- Updated Go TUI card text (no longer "zatim ve vyvoji")

web/data/descriptions.json: regenerated (13 scripts, 80 items)

Forgejo: issue #16 created, release v0.1.0 published with xetup.exe (5.2 MB)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:49:15 +02:00
X9 Dev
1198de3c49 feat: Go TUI launcher (xetup.exe) + spec page new-request section
- embed.go: root package exposes Scripts/Assets embed.FS
- internal/config: Config struct, Load/Save/Default
- internal/runner: Step list, Runner with context cancel, log streaming
- internal/tui: bubbletea model - huh form (phase 1) + live log view (phase 2) + summary (phase 3)
- cmd/xetup/main.go: main binary, extracts embedded content to tmpdir, runs TUI
- Builds to 5.2 MB xetup.exe (GOOS=windows GOARCH=amd64)

spec/index.html:
- arch-xetup section: mark 5 items flag-done (code now exists)
- Add "Nove nastaveni" section linked to Forgejo issue #15
- Add sidebar link for new-requests
- Add CSS + JS for request widget (loads/posts to issue #15 comments)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:35:22 +02:00
X9 Dev
0cb00c4a46 Remove flash/ directory - old flash2 tool, superseded by xetup.exe concept
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:16:57 +02:00
X9 Dev
3ce582c0fb Implement steps 09 (PC identity), 10 (network), taskbar profiles; cleanup
02-software: remove 'seznam neuplny' item (SW list is complete)
04-default-profile: add -ProfileType param; taskbar XML varies by profile
  (default=empty, admin=Explorer+PS+Edge, user=Explorer+Edge)
09-pc-identity: new script - Rename-Computer, computer description,
  C:\X9 dir structure, Desktop.ini + X9 icon for custom folder appearance
10-network: new script - Set-NetConnectionProfile Private, enable ICMP,
  enable Network Discovery (Set-NetFirewallRule + netsh fallback)
Deploy-Windows.ps1: -ProfileType param, steps 9+10 added, ProfileType
  threaded through to 04-default-profile.ps1
web/spec: steps 02/09/10/taskbar marked OK, remove noise rows

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:15:55 +02:00
X9 Dev
3a7c0afc43 Remove noise rows, implement powercfg + proxy, clean up Edge docs
01-bloatware: remove 'do not remove RDP/OneDrive' items from header
  (documenting what we don't do is noise)
web/spec step-01: remove two flag-warn rows

03-system-registry: implement powercfg (standby-ac 0, monitor-ac 60,
  standby-dc 30, monitor-dc 15) and proxy auto-detect disable (AutoDetect=0)
web/spec step-03: powercfg + proxy rows flag-todo -> flag-done, badge OK,
  remove old Edge policies note (already implemented)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:09:40 +02:00
X9 Dev
108a22e7cb Fix all remaining mustfix items + Edge policies
00-admin-account: empty password (SecureString), FullName via ADSI SetInfo()
07-backinfo: new script replacing 07-desktop-info - copies assets, sets
  registry OSName, creates Startup shortcut, launches BackInfo immediately
Deploy-Windows.ps1: step 7 now calls 07-backinfo.ps1 (desktopInfo->backinfo)
03-system-registry: full Edge policy set - favorites bar, Google search,
  show/hide toolbar buttons per spec, telemetry/content policies, removed
  old Edge policies TODO note
web/spec: step-00 OK, step-07 OK, step-03 Edge rows updated

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 09:45:49 +02:00
X9 Dev
f5a5de943a Implement Forgejo review changes: Atera, UCPD, PDF default, OA3, dedup
02-software: add Atera RMM agent install (Invoke-WebRequest + msiexec /qn),
stop UCPD driver before PDF association write, restart after; remove
reference to PDF-DefaultApp scheduled task in header

03-system-registry: correct OneDrive uninstall description - intentional
(pre-installed consumer version only, no policy key, M365 can reinstall)

04-default-profile: OneDrive RunOnce blocking removed, ShowRecent=0,
ShowFrequent=0, FullPath=1 in CabinetState already added in prior session

06-scheduled-tasks: PDF-DefaultApp task removed - PDF set once in step 02

08-activation: add OA3/BIOS embedded key check via SoftwareLicensingService
WMI; key priority: config.json > OA3 firmware > GVLK

web/spec: update all status badges, remove mustfix flags, deduplicate
OneDrive entries across steps 01/03/04, add OA3 row to step-08

web/data/descriptions.json: regenerated (65 items)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 09:29:32 +02:00
Filip Zubik
c8ff952bbb Add Claude Code memory and project context
- User profile, feedback preferences
- Project state and architecture decisions
- Technical findings (UCPD, Win11 compat, code analysis)
- Reference pointers to colleague specs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 19:43:39 +02:00
Filip Zubik
4611517a1d Add all project assets, docs, and review page
- BackInfo (exe + ini + ps1) in assets/
- X9 logo (ico + jpeg) in assets/Logo/
- Colleague specs and review results in docs/
- Interactive review page v2 (review.html)
- Updated CLAUDE.md with all decisions from 2026-04-15 session
- Updated .gitignore (flash.zip, W11.pdf)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 19:43:18 +02:00
Filip Zubik
fe63de3ed7 fix: clear wallpaper cache and add logging to DesktopInfo render
Windows reuses TranscodedWallpaper cache and ignores updated BMP
if the path stays the same. Clear cache before SystemParametersInfo
so wallpaper always reloads.

Add per-run logging to desktopinfo.log for diagnostics.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 14:33:47 +01:00
Filip Zubik
602e51aa5b fix: add 20s logon delay to DesktopInfo task
Without delay the task fires before network init, causing
Get-NetIPAddress to return nothing and IP showing as N/A.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 13:23:41 +01:00
Filip Zubik
926ca301b3 feat: redesign DesktopInfo to match BackInfo layout
Centered block on desktop: hostname large bold (36pt), then detail
lines in Segoe UI 14pt - user, OS (bold), CPU+RAM on one line,
IPs+domain on one line. Collects CPU count/speed, total RAM, all
IPv4 addresses, and domain/workgroup. Background #556364.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 05:59:20 +01:00
Filip Zubik
6d5d6083ff fix: keep mstsc (RDP client) enabled - not bloatware
Microsoft-RemoteDesktopConnection is required for Remote Desktop
connections and must not be disabled on business machines.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:09:20 +01:00
Filip Zubik
e78b6d23b8 fix: remove OneDrive policy block to allow M365 reinstall
DisableFileSyncNGSC=1 prevented OneDrive from launching after M365
installation. Keep uninstall for clean PCs but drop the policy key so
Office 365 can reinstall and run OneDrive without restrictions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:03:38 +01:00
Filip Zubik
7db5b4d1e8 Add jak_na_to.txt usage guide to flash folder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 09:40:48 +01:00
Filip Zubik
80a542252d Add config GUI, USB launcher, flash folder; fix bugs
- config-editor.hta: lightweight WYSIWYG HTA editor for config.json
  - Step on/off toggles with info tooltips
  - Editable software list (winget packages)
  - Settings: timezone, admin account, desktopInfo, PDF default
- Run.cmd: USB launcher with UAC auto-elevation and deployment menu
- flash/: minimal USB-ready subset (Deploy, scripts, config, GUI, launcher)
- config.json: add steps section for per-step enable/disable
- Deploy-Windows.ps1: read steps from config, CLI switches override
- 03-system-registry.ps1: add SearchOnTaskbarMode HKLM policy (Win11 search fix)
- 04-default-profile.ps1: fix systray - clear TrayNotify cache + proper Explorer restart
- 06-scheduled-tasks.ps1: fix Register-Task trigger array, ShowAllTrayIcons Win11 fix,
  PDF-DefaultApp runs as SYSTEM via HKCR (bypasses UserChoice Hash validation)
- 02-software.ps1: remove unreliable UserChoice ProgId write without Hash

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 09:35:42 +01:00
X9
79fcfea8df Fix search box and systray for Win10/Win11 compatibility
- Add Search subkey for Win10 search box hiding
- Clear TrayNotify icon streams as Win11 systray workaround
- Restart Explorer to apply taskbar changes in current session

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 21:46:40 +01:00
X9
29e25d5905 Add This PC desktop icon, hide Start menu recommendations, remove LinkedIn
- 04-default-profile.ps1 + 05-personalization.ps1: show This PC icon on
  desktop via HideDesktopIcons CLSID {20D04FE0...} = 0
- 03-system-registry.ps1: HideRecommendedSection = 1 hides Win11 Start
  menu Recommended section (HKLM policy)
- 04-default-profile.ps1: Start_TrackProgs = 0 and Start_TrackDocs = 0
  hide recently added/opened items from Start menu
- 01-bloatware.ps1: add 7EE7776C.LinkedInforWindows to removal list
- tests/Test-Deployment.ps1: add checks for all three new settings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-15 18:24:47 +01:00
X9
3a3513c3bc Fix TrustedInstaller-owned registry key write via token privileges
- 03-system-registry.ps1: replace .NET OpenSubKey approach with proper
  P/Invoke that enables SeTakeOwnershipPrivilege and SeRestorePrivilege
  before attempting to take ownership of TrustedInstaller-owned keys
  (e.g. HKLM\...\Communications\ConfigureChatAutoInstall)
- Remove SYSTEM scheduled task fallback (not needed with token approach)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 20:06:01 +01:00
X9
d853df0aa4 Fix Communications key ACL and Adobe path detection
- 03-system-registry.ps1: Set-Reg now has 3-tier retry: direct write,
  ACL manipulation, fallback to scheduled task running as SYSTEM (which
  has unrestricted registry access - handles TrustedInstaller-owned keys)
- 02-software.ps1: add Acrobat DC path (Acrobat.exe) before legacy
  AcroRd32.exe paths - winget installs Acrobat DC not Reader DC
- 06-scheduled-tasks.ps1: same Adobe path fix in PDF-DefaultApp script
- tests/Test-Deployment.ps1: Adobe check covers both Acrobat DC and
  Reader DC install paths

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 20:03:30 +01:00
X9
31646112bf Fix registry ACL errors in steps 3 and 4
- 03-system-registry.ps1: add Grant-RegWriteAccess helper; Set-Reg now
  retries with ACL fix when Set-ItemProperty throws SecurityException
  (e.g. HKLM\...\Communications owned by TrustedInstaller)
- 04-default-profile.ps1: add Grant-HiveWriteAccess helper; Set-ProfileReg
  retries with ACL fix on Default hive keys with restricted permissions
- Both scripts: add -ErrorAction Stop to Set-ItemProperty so errors are
  properly caught by try/catch instead of bypassing it

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 19:37:47 +01:00
X9
97bd9dfc76 Add admin account creation and Windows activation steps
- 00-admin-account.ps1: create/update adminx9, add to Administrators,
  hide from login screen via SpecialAccounts\UserList
- 08-activation.ps1: activate via config key or GVLK fallback matched
  by OS edition; supports optional KMS server; skips if already active
- config.json: add adminAccount block (password), activation block
  (productKey placeholder, kmsServer)
- Deploy-Windows.ps1: add Step 0a and Step 0b before bloatware removal
- Test-Deployment.ps1: add checks for admin account and activation
- SPEC.md: document new steps, close open question #4

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 19:15:30 +01:00
X9
30d930c667 Implement full deployment script suite (steps 1-7)
- Deploy-Windows.ps1: master script with Write-Log, Invoke-Step, summary report, DryRun support
- 01-bloatware.ps1: remove AppX packages, Windows Capabilities, Optional Features
- 02-software.ps1: winget installs from config.json, set Adobe Reader as default PDF app
- 03-system-registry.ps1: HKLM tweaks (NRO bypass, Teams, Widgets, Edge, OneDrive, GameDVR, Recall, timezone)
- 04-default-profile.ps1: NTUSER.DAT changes for taskbar, Explorer, Start menu, NumLock, Copilot
- 05-personalization.ps1: dark/light theme, accent color #223B47, transparency off, wallpaper
- 06-scheduled-tasks.ps1: ShowAllTrayIcons, PDF-DefaultApp, UnlockStartLayout tasks
- 07-desktop-info.ps1: DesktopInfo render script (System.Drawing BMP), scheduled task, deploy date registry
- tests/Test-Deployment.ps1: post-deployment verification, 30+ checks
- CLAUDE.md: add Czech communication preference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 09:44:38 +01:00
Filip Zubík
fb74a820dc Add CLAUDE.md, SPEC.md and bootstrap scripts 2026-03-13 16:35:31 +01:00
Filip Zubík
8e413ab06d Initial repo structure 2026-03-13 16:34:45 +01:00