Skip to content

Groups Reference

gsjonio edited this page Jul 15, 2026 · 4 revisions

Groups Reference

winforge organizes work into 7 modular groups. Each group installs programs, applies configuration, or both. Run one with -Group <name> or all by omitting the flag.

Group Purpose Contents
base Essential programs Firefox, Git, VLC, WinRAR, LibreOffice (5)
dev Development tools VS Code, GitHub Desktop, Claude, Python (4)
gaming Gaming & social Steam, Discord (2)
system System utilities NVIDIA App, AMD Radeon, CPU-Z, HWMonitor (4)
optimize System tuning Safe by default; -Profile safe/desktop/gaming (services, power, network, storage, visual)
customize UI customization 18 Windows Explorer / shell tweaks
shell Terminal enhancement Oh My Posh (half-life theme) + Fira Code
restore Undo changes Reverts services + policy keys to Windows defaults (explicit-only, -WhatIf)

Program groups (base / dev / gaming / system)

These install applications through the fallback chain (Winget → Chocolatey → custom URL). Detection is idempotent: already-installed apps are skipped.

Configuration groups (optimize / customize / shell)

These apply registry, service, and profile changes rather than installing apps:

  • optimize — privacy and performance tuning, safe by default. A -Profile (safe/desktop/gaming) sets how aggressive it is. See Optimization Details.
  • customize — File Explorer, taskbar, Start menu, dark mode, mouse/keyboard tweaks. See docs/CUSTOMIZE.md.
  • shell — PowerShell profile, Oh My Posh, Fira Code, PSReadLine, aliases. See Shell Enhancement.

Reversing changes (restore)

restore is not part of the default run. It puts services and policy keys back to Windows defaults — the escape hatch if optimize broke something.

.\setup.ps1 -Group restore -WhatIf   # preview
sudo .\setup.ps1 -Group restore      # apply

See docs/RESTORE.md.

Adding your own programs

Edit the relevant module in src/modules/ and add an entry to its $programs array:

@{
    Name       = "My App"
    WingetId   = "Publisher.MyApp"
    ChocoId    = "myapp"        # optional Chocolatey fallback
    Executable = "myapp"        # optional, used for detection
}

Program hashtable keys (consumed by Install-Program):

Key Required Purpose
Name yes Display name; used for detection and logging
WingetId yes winget package id (primary install method)
ChocoId no Chocolatey package id (fallback if winget fails)
Executable no Command probed on PATH for skip-if-installed detection
InstallerUrl no Direct installer URL (last-resort fallback, run silently)

Then validate detection without installing:

.\tools\validate.ps1 -Group <group> -ShowDetails

Clone this wiki locally