Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

WinInit

CI statusVersion badgeBuilt with PowerShellMIT License

Windows Initialization & Customization Script
18 Modules | Full Automation | Zero Interaction

Quick StartFeaturesModulesConfigurationProfilesUsage

Quick Start

One-liner (paste into an elevated PowerShell window):

irm https://raw.githubusercontent.com/supermarsx/wininit/main/install.ps1 | iex

Or clone and run manually:

git clone https://github.com/supermarsx/wininit.git
cd wininit
.\launch.bat

Features

  • 53+ applications installed automatically via winget, Chocolatey, and Scoop
  • 70+ UWP bloatware packages removed (including promoted third-party apps)
  • 500+ registry tweaks across privacy, performance, UX, and security
  • 30+ junk services disabled (telemetry, Fax, Xbox, Retail Demo, etc.)
  • 20+ telemetry domains blocked via hosts file (optional)
  • 18 modular stages -- skip any module, run any subset
  • 6 built-in profiles -- developer, security, minimal, creative, office, full
  • TOML configuration -- fine-grained control without editing scripts
  • Automatic version bumping -- CI stamps VERSION, the release badge, and this README from one script
  • Uptime-safe Windows Update defaults -- notify/manual installs, no forced restart deadlines, feature-release pinning
  • Checkpoint/Resume -- survives reboots and Ctrl+C interruptions
  • Full rollback -- every change is recorded; undo.ps1 reverts them
  • Risk indicators -- every tweak tagged [S]afe, [M]oderate, or [A]ggressive
  • Progress dashboard -- weighted ETA, per-module timing, error tracking
  • Dry-run mode -- preview all changes without touching the system
  • Community modules -- drop custom .ps1 scripts into modules/community/
  • JUnit XML test output -- CI-ready test suite with 200+ assertions
  • Zero interaction -- runs fully unattended from start to finish

Modules

#ModuleDescription
01Package ManagersInstalls and configures winget, Scoop, and Chocolatey
02Applications53+ apps: browsers, editors, IDEs, media, utilities, dev toolchains
03Desktop EnvironmentDark mode, taskbar cleanup, Explorer tweaks, wallpaper, file associations
04OneDrive RemovalComplete OneDrive uninstall, folder cleanup, Explorer sidebar removal
05PerformanceDisables SysMain, Game Bar, tips, animations; enables hardware scheduling
06DebloatRemoves 70+ pre-installed UWP apps and prevents reinstallation
07Privacy40+ privacy tweaks: telemetry, ads, tracking, Cortana, Copilot, Recall
08Quality of LifeNumLock, locale, sticky keys, terminal defaults, keyboard layout
09ServicesDisables 30+ unnecessary services (Fax, Xbox, Insider, biometrics)
10Network PerformanceNagle's algorithm, SSD trim, IRPStack, TCP/IP tuning
11Visual UXTransparency, Start menu layout, icon spacing, font smoothing
12Security HardeningSMBv1 removal, Hyper-V, Windows Sandbox, UTF-8, BitLocker readiness
13Browser ExtensionsPre-configures Firefox, Chrome, and Edge with privacy extensions
14Dev ToolsNode.js, Rust, Go, Python, CUDA, SQL tools, gRPC, Kubernetes, Docker
15Portable ToolsDownloads CLI tools to C:\bin and C:\apps (jq, fzf, ripgrep, etc.)
16Unix EnvironmentCygwin, Perl, Python venv, Go workspace, Unix-style PATH
17VS Code SetupExtensions, settings, Nerd Fonts, terminal theme, Oh My Posh
18Final ConfigUptime-safe Windows Update policy, System Restore point, cleanup, startup optimization

Configuration

WinInit reads config.toml in the project root. Every setting has a sensible default.

[general]
profile = "developer"# developer | security | minimal | creative | office | fulldry_run = falselog_level = "INFO"# DEBUG | INFO | WARN | ERROR
[modules]
# Set to false to skip a module"01-PackageManagers" = true"02-Applications" = true"03-DesktopEnvironment" = true"04-OneDriveRemoval" = true"05-Performance" = true"06-Debloat" = true"07-Privacy" = true"08-QualityOfLife" = true"09-Services" = true"10-NetworkPerformance" = true"11-VisualUX" = true"12-SecurityHardening" = true"13-BrowserExtensions" = true"14-DevTools" = true"15-PortableTools" = true"16-UnixEnvironment" = true"17-VSCodeSetup" = true"18-FinalConfig" = true
[apps]
skip = [] # Winget IDs to skip: ["Blender.Blender", "OBSProject.OBSStudio"]
[privacy]
level = "strict"# standard | strict | paranoidblock_telemetry_hosts = false
[updates]
# Windows Update policy: "notify" = AUOptions 2, "auto_download" = AUOptions 3windows_update_install_mode = "notify"pin_current_feature_release = truetarget_release_version = ""# Empty = pin to the current DisplayVersion# Optional package-maintenance task for update.ps1enable_scheduled_updates = falseupdate_interval_days = 7scheduled_update_time = "4:00AM"

[updates] controls two different things: Windows Update policy for the OS itself, and the optional scheduled task that runs update.ps1 for package-manager maintenance. The default profile favors uptime on long-running boxes: no forced restart deadlines, no scheduled OS install window, and no automatic WinInit update task unless you opt in.

Priority order: CLI flags > config.toml > profile defaults > built-in defaults.

Profiles

Profiles are JSON files in the profiles/ directory. Each one enables or disables modules and sets a privacy level.

ProfileDescriptionModules EnabledPrivacy Level
fullEverything enabled -- all modules, all apps18/18strict
developerFull dev environment with all toolchains18/18strict
securityPentesting and hardening with maximum privacy17/18paranoid
creativeDesign and media: Blender, Krita, OBS13/18standard
officeProductivity: browsers, office tools, essentials13/18standard
minimalLightweight: package managers, debloat, privacy6/18standard

Use a profile via CLI or config:

.\init.ps1 -Profile minimal

Or set it in config.toml:

[general]
profile = "security"

Usage

# Full run using config.toml settings
.\init.ps1
# Use a specific profile
.\init.ps1 -Profile minimal
# Preview all changes without modifying the system
.\init.ps1 -DryRun
# Skip specific modules by number
.\init.ps1 -SkipModules 14,16# Run only specific modules
.\init.ps1 -OnlyModules 01,06,07# Resume after interruption or reboot
.\init.ps1 -Resume
# Update mode -- just upgrade all installed packages
.\init.ps1 -Update
# Manual app updates
.\update.ps1
# Preview what undo would revert
.\undo.ps1 -DryRun
# Revert all recorded changes
.\undo.ps1
# Revert only registry changes
.\undo.ps1 -OnlyTypes registry
# Show help
.\init.ps1 -Help

Safety Indicators

Every tweak is tagged with a risk level so you know exactly what is happening:

TagLevelMeaning
[S]SafeCosmetic or easily reversible (dark mode, icons)
[M]ModerateFunctional change that may affect features
[A]AggressiveDisables security features or modifies kernel-level settings

The final summary shows a breakdown:

 --- Risk Summary ---
Total tweaks applied: 147
[S] Safe (cosmetic / reversible): 112
[M] Moderate (functional / feature changes): 28
[A] Aggressive (security / kernel-level): 7

Reboot Resilience

WinInit saves a checkpoint after each module completes. If the system reboots (e.g., after enabling Hyper-V) or the script is interrupted:

  1. A checkpoint.json file records the last completed module
  2. A RunOnce registry key is set to resume after reboot
  3. Running .\init.ps1 -Resume picks up where it left off

The checkpoint includes the module index, timestamp, username, and any extra state needed for continuation.

Undo / Rollback

Every change WinInit makes is recorded in rollback.json. The standalone undo.ps1 script can revert them:

# See what would be reverted
.\undo.ps1 -DryRun
# Revert everything
.\undo.ps1
# Revert only specific types
.\undo.ps1 -OnlyTypes registry
.\undo.ps1 -OnlyTypes service

Supported rollback types:

  • Registry -- restores previous values or removes keys that were created
  • Services -- restores original startup types and running states
  • Apps -- notes which apps were installed (manual removal guidance)
  • Features -- notes which Windows features were enabled/disabled

undo.ps1 is fully self-contained and does not depend on lib/common.ps1.

Community Modules

Extend WinInit with your own scripts. Drop .ps1 files into modules/community/:

# modules/community/my-tools.ps1# Install My Tools - Custom development additionsWrite-Section"My Custom Tools"Install-App-Name "Neovim"-WingetId "Neovim.Neovim"-ChocoId "neovim"-ScoopId "neovim"Install-App-Name "Alacritty"-WingetId "Alacritty.Alacritty"-ScoopId "alacritty"Write-Log"Custom tools installed""OK"

Community modules:

  • Run after all 18 built-in modules
  • Are scanned for dangerous operations before execution (disk formatting, system file deletion, insecure downloads are blocked)
  • Have access to all WinInit helper functions (Write-Log, Install-App, Set-RegistrySafe, etc.)
  • Are sorted alphabetically by filename

See modules/community/README.md for the full guide and a template.

What Gets Installed

53+ applications by category (click to expand)

Browsers

  • Google Chrome, Mozilla Firefox, Ungoogled Chromium

Communication

  • WhatsApp, Telegram

Development - Editors and IDEs

  • Visual Studio Code, Visual Studio 2026 Community, Android Studio

Development - Toolchains

  • VS Build Tools (MSVC, ATL, MFC, Clang), CMake, Ninja, LLVM

Development - Languages and Runtimes

  • Node.js (LTS), Rust (rustup), Go, Python 3, .NET SDK

Development - Database

  • SQL Server tools, DBeaver, Redis, PostgreSQL client

Development - Containers and Cloud

  • Docker Desktop, Kubernetes (kubectl, helm, k9s), Terraform

Media and Creative

  • Blender, Krita, OBS Studio, GIMP, Inkscape, Audacity

Utilities

  • 7-Zip, Everything, KeePassXC, WinSCP, PuTTY, WinMerge

System Tools

  • Process Explorer, Autoruns, HWiNFO, CrystalDiskInfo, TreeSize

Networking

  • Wireshark, Nmap, WireGuard, Tailscale

Portable CLI Tools (in C:\bin)

  • jq, fzf, ripgrep, fd, bat, delta, eza, zoxide, duf, glow, hexyl, hyperfine, tokei, bottom, procs, sd, choose, xh, doggo, bandwhich

Privacy and Security

Module 07 (Privacy) applies 40+ tweaks across these categories:

  • Wi-Fi Sense, clipboard cloud sync, Timeline
  • Windows telemetry (AllowTelemetry=0, DiagTrack disabled)
  • Advertising ID, ad tracking, location, sensors
  • Camera and microphone app defaults (set to Deny)
  • Inking, typing, and handwriting data collection
  • Cortana, web search, Connected Search
  • Windows Copilot, Windows Recall (AI features)
  • Error Reporting (WerSvc disabled)
  • Feedback notifications and frequency
  • Tailored experiences, tips, Spotlight
  • Optional: 20+ telemetry domains blocked via hosts file

Module 12 (Security Hardening) enables:

  • SMBv1 protocol removal
  • Hyper-V and Windows Sandbox
  • Windows Subsystem for Linux (WSL2)
  • System-wide UTF-8 encoding
  • BitLocker readiness checks
  • Credential Guard configuration

Comparison

FeatureWinInitWinUtilWin11DebloatSophia Script
Fully unattendedYesNo (GUI)PartialNo (prompts)
App installation (50+)YesYesNoNo
Dev toolchain setupYesNoNoNo
TOML config fileYesNoNoNo
Profile systemYesNoNoYes
Checkpoint/resumeYesNoNoNo
Full rollback (undo.ps1)YesNoNoPartial
Risk-level indicatorsYesNoNoNo
Progress dashboard + ETAYesYesNoNo
Community modulesYesNoNoNo
Portable CLI toolsYesNoNoNo
JUnit test outputYesNoNoNo

Running Tests

WinInit includes a comprehensive test suite with 200+ assertions:

# Run all test files
.\tests\Run-AllTests.ps1
# Run with JUnit XML output (for CI)
.\tests\Run-AllTests.ps1 -JUnit results.xml
# Run a specific test file
.\tests\Test-Config.ps1
.\tests\Test-Privacy.ps1-Suite hosts
# Dry-run mode (skip tests requiring admin)
.\tests\Run-AllTests.ps1 -DryRun

Test files:

  • Test-Common.ps1 -- 49 functions in lib/common.ps1
  • Test-Init.ps1 -- Preflight logic and cross-module consistency
  • Test-Modules.ps1 -- All 18 module files: structure, syntax, dependencies
  • Test-Config.ps1 -- TOML parser, profiles, CLI flag merging
  • Test-Infrastructure.ps1 -- Checkpoint, rollback, safety, dashboard systems
  • Test-Privacy.ps1 -- Privacy module: categories, registry paths, risk levels

CI integration: the test runner returns a non-zero exit code on failure and supports -JUnit for XML report generation. A GitHub Actions workflow can run .\tests\Run-AllTests.ps1 -JUnit results.xml -DryRun on every push.

Requirements

RequirementDetails
OSWindows 10 version 2004+ (Build 19041) or Windows 11
PrivilegesAdministrator (elevated PowerShell)
PowerShell5.1+ (ships with Windows 10/11)
Disk Space10 GB+ free on the system drive
InternetRequired for downloads (winget, Chocolatey, GitHub, etc.)
Architecturex64 (AMD64) or ARM64

Project Structure

wininit/
init.ps1 Main orchestrator script
launch.bat Elevated launcher (right-click > Run as Admin)
config.toml User configuration (TOML format)
undo.ps1 Standalone rollback script
install.ps1 Quick installer (one-liner bootstrap)
lib/
common.ps1 Shared library (49 functions)
safety.ps1 Risk level tagging system
checkpoint.ps1 Checkpoint/resume system
rollback.ps1 Change recording for undo
dashboard.ps1 Progress dashboard and ETA
community.ps1 Community module loader
modules/
01-PackageManagers.ps1 ... 18-FinalConfig.ps1
community/ Drop custom modules here
profiles/
developer.json, security.json, minimal.json,
creative.json, office.json, full.json
tests/
Run-AllTests.ps1 Test runner (discovers Test-*.ps1)
Test-Common.ps1 Test-Init.ps1 Test-Modules.ps1
Test-Config.ps1 Test-Infrastructure.ps1 Test-Privacy.ps1

License

Released under the MIT License. See license.md for details.

Releases

Sponsor this project

Used by

Contributors

Languages