diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 52fce025..ebe925d6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,6 @@ # Chris rules EVERYTHING (including paths listed below) -* @ChrisTitusTech \ No newline at end of file +* @ChrisTitusTech + +# Seanh1917 (ANGRYxScotsmans) is the docs guy +docs/ @ChrisTitusTech @seanh1995 +tools/devdocs-generator.* @ChrisTitusTech @seanh1995 \ No newline at end of file diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 77a7e9cc..798b223d 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -1,4 +1,4 @@ -name: Deploy Hugo site to Pages +name: Deploy Astro site to Pages on: push: @@ -30,23 +30,13 @@ jobs: if: github.repository == 'ChrisTitusTech/winutil' runs-on: ubuntu-latest env: - HUGO_VERSION: 0.156.0 - HUGO_ENVIRONMENT: production TZ: America/Chicago steps: - - name: Install Hugo CLI - run: | - wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ - && sudo dpkg -i ${{ runner.temp }}/hugo.deb - name: Checkout uses: actions/checkout@v7 with: - submodules: recursive fetch-depth: 0 persist-credentials: false - - name: Setup Pages - id: pages - uses: actions/configure-pages@v6 - name: Generate Dev Docs from JSON shell: pwsh @@ -65,7 +55,7 @@ jobs: branch: docs-update delete-branch: true add-paths: | - docs/content/dev/ + docs/src/content/docs/code-reference/ config/tweaks.json config/feature.json labels: | @@ -78,35 +68,10 @@ jobs: echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" - - name: Install Node.js dependencies - run: "cd docs && [[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" - - name: Cache Restore - id: cache-restore - uses: actions/cache/restore@v6 + - name: Install, build, and upload your site + uses: withastro/action@v6 with: - path: | - ${{ runner.temp }}/hugo_cache - key: hugo-${{ github.run_id }} - restore-keys: hugo- - - name: Build with Hugo - run: | - hugo \ - --gc \ - --minify \ - --cleanDestinationDir \ - --source docs \ - --cacheDir "${{ runner.temp }}/hugo_cache" - - name: Cache Save - id: cache-save - uses: actions/cache/save@v6 - with: - path: | - ${{ runner.temp }}/hugo_cache - key: ${{ steps.cache-restore.outputs.cache-primary-key }} - - name: Upload artifact - uses: actions/upload-pages-artifact@v5 - with: - path: ./docs/public + path: docs deploy: if: github.repository == 'ChrisTitusTech/winutil' diff --git a/.gitignore b/.gitignore index 038c7354..712df037 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ desktop.ini .vscode/ .idea/ -# hugo files -docs/public/ -docs/.hugo_build.lock -docs/resources/ +# hugo files (archived docs) +docs-old/public/ +docs-old/.hugo_build.lock +docs-old/resources/ diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..6240da8b --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,21 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..1b7f5c3d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,49 @@ +# Starlight Starter Kit: Basics + +[](https://starlight.astro.build) + +``` +npm create astro@latest -- --template starlight +``` + +> π§βπ **Seasoned astronaut?** Delete this file. Have fun! + +## π Project Structure + +Inside of your Astro + Starlight project, you'll see the following folders and files: + +``` +. +βββ public/ +βββ src/ +β βββ assets/ +β βββ content/ +β β βββ docs/ +β βββ content.config.ts +βββ astro.config.mjs +βββ package.json +βββ tsconfig.json +``` + +Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. + +Images can be added to `src/assets/` and embedded in Markdown with a relative link. + +Static assets, like favicons, can be placed in the `public/` directory. + +## π§ Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | + +## π Want to learn more? + +Check out [Starlightβs docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat). diff --git a/docs/archetypes/default.md b/docs/archetypes/default.md deleted file mode 100644 index 3e72f68c..00000000 --- a/docs/archetypes/default.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: '{{ replace .File.ContentBaseName "-" " " | title }}' -description: "" -date: '{{ .Date }}' -draft: true ---- diff --git a/docs/assets/images/Fork-Button-Light.png b/docs/assets/images/Fork-Button-Light.png deleted file mode 100644 index 11d56fea..00000000 Binary files a/docs/assets/images/Fork-Button-Light.png and /dev/null differ diff --git a/docs/assets/images/updates-tab-new.png b/docs/assets/images/updates-tab-new.png deleted file mode 100644 index e88eea0a..00000000 Binary files a/docs/assets/images/updates-tab-new.png and /dev/null differ diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs new file mode 100644 index 00000000..63201b5b --- /dev/null +++ b/docs/astro.config.mjs @@ -0,0 +1,64 @@ +// @ts-check +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; + +// https://astro.build/config +export default defineConfig({ + site: 'https://winutil.christitus.com/', + integrations: [ + starlight({ + title: 'WinUtil', + description: "Chris Titus Tech's Windows Utility β install apps, apply tweaks, run fixes, and manage Windows from one place.", + logo: { + src: './src/assets/branding/navlogo.png', + replacesTitle: true, + }, + favicon: '/favicon.svg', + social: [ + { icon: 'github', label: 'GitHub', href: 'https://github.com/ChrisTitusTech/winutil' }, + { icon: 'discord', label: 'Discord', href: 'https://discord.gg/RUbZUZyByQ' }, + ], + customCss: ['./src/styles/theme.css'], + components: { + ThemeProvider: './src/components/ThemeProvider.astro', + Hero: './src/components/Hero.astro', + Header: './src/components/Header.astro', + Footer: './src/components/Footer.astro', + }, + editLink: { + baseUrl: 'https://github.com/ChrisTitusTech/winutil/edit/main/docs/', + }, + sidebar: [ + { + label: 'User Guide', + items: [ + { label: 'Overview', slug: 'guides' }, + { label: 'Getting Started', slug: 'guides/getting-started' }, + { label: 'Applications', slug: 'guides/application' }, + { label: 'Tweaks', slug: 'guides/tweaks' }, + { label: 'Features', slug: 'guides/features' }, + { label: 'Updates', slug: 'guides/updates' }, + { label: 'Automation', slug: 'guides/automation' }, + { label: 'Win11 Creator', slug: 'guides/win11creator' }, + ], + }, + { + label: 'Code Reference', + items: [ + { label: 'Architecture & Design', slug: 'code-reference/architecture' }, + { label: 'Tweaks Reference', items: [{ autogenerate: { directory: 'code-reference/tweaks' } }] }, + { label: 'Features Reference', items: [{ autogenerate: { directory: 'code-reference/features' } }] }, + ], + }, + { + label: 'Help', + items: [ + { label: 'FAQ', slug: 'faq' }, + { label: 'Known Issues', slug: 'known-issues' }, + { label: 'Contributing', slug: 'contributing' }, + ], + }, + ], + }), + ], +}); diff --git a/docs/content/_index.md b/docs/content/_index.md deleted file mode 100644 index a37da09e..00000000 --- a/docs/content/_index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Welcome to WinUtil Documentation! -toc: false -width: full ---- - -
- -Welcome to the official documentation for WinUtil, your go-to utility for optimizing and managing your Windows environment. Whether youβre an IT professional, power user, or regular user, WinUtil provides a comprehensive set of tools to enhance your Windows experience. - -{{< image src="images/Title-Screen" alt="WinUtil title screen" >}} - -## Running the latest release of WinUtil - -* You will first need to start a PowerShell terminal **as Admin**. -* Now you can run the following command: - -``` -irm "https://christitus.com/win" | iex -``` - - -> [!IMPORTANT] -> WinUtil is updated frequently as of the time of writing. Consequently, features and functionalities may evolve, and the documentation may not always reflect the most current images or information. diff --git a/docs/content/dev/_index.md b/docs/content/dev/_index.md deleted file mode 100644 index 4d48a6c6..00000000 --- a/docs/content/dev/_index.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Developer Reference -weight: 3 -toc: false ---- - -> [!NOTE] -> This section contains code-only references. For end-user documentation, see the [User Guide](../userguide/). - -## Architecture - -- [Architecture & Design](architecture/) - Code structure, data flow, and how Winutil works internally - -## Tweaks - -### Essential Tweaks - -{{< autolinks section="dev/tweaks/essential-tweaks" >}} - -### Advanced Tweaks (CAUTION) - -{{< autolinks section="dev/tweaks/z--advanced-tweaks---caution" >}} - -### Customize Preferences - -{{< autolinks section="dev/tweaks/customize-preferences" >}} - -### Performance Plans - -{{< autolinks section="dev/tweaks/performance-plans" >}} - -## Features - -### Fixes - -{{< autolinks section="dev/features/fixes" >}} - -### Legacy Windows Panels - -{{< autolinks section="dev/features/legacy-windows-panels" >}} - -### Features - -{{< autolinks section="dev/features/features" >}} - -### Remote Access - -{{< autolinks section="dev/features/remote-access" >}} - -### Powershell Profile Powershell 7+ Only - -{{< autolinks section="dev/features/powershell-profile-powershell-7--only" >}} diff --git a/docs/content/dev/features/Features/DisableLegacyRecovery.md b/docs/content/dev/features/Features/DisableLegacyRecovery.md deleted file mode 100644 index e268e966..00000000 --- a/docs/content/dev/features/Features/DisableLegacyRecovery.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Legacy F8 Boot Recovery - Disable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=107} - "WPFFeatureDisableLegacyRecovery": { - "Content": "Legacy F8 Boot Recovery - Disable", - "Description": "Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.", - "category": "Features", - "panel": "1", - "feature": [], - "InvokeScript": [ - "bcdedit /set bootmenupolicy standard" - ], -``` diff --git a/docs/content/dev/features/Features/EnableLegacyRecovery.md b/docs/content/dev/features/Features/EnableLegacyRecovery.md deleted file mode 100644 index f146818a..00000000 --- a/docs/content/dev/features/Features/EnableLegacyRecovery.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Legacy F8 Boot Recovery - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=96} - "WPFFeatureEnableLegacyRecovery": { - "Content": "Legacy F8 Boot Recovery - Enable", - "Description": "Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.", - "category": "Features", - "panel": "1", - "feature": [], - "InvokeScript": [ - "bcdedit /set bootmenupolicy legacy" - ], -``` diff --git a/docs/content/dev/features/Features/RegBackup.md b/docs/content/dev/features/Features/RegBackup.md deleted file mode 100644 index 4fda2145..00000000 --- a/docs/content/dev/features/Features/RegBackup.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Registry Backup (Daily Task 12:30am) - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=79} - "WPFFeatureRegBackup": { - "Content": "Registry Backup (Daily Task 12:30am) - Enable", - "Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.", - "category": "Features", - "panel": "1", - "feature": [], - "InvokeScript": [ - " - New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager' -Name 'EnablePeriodicBackup' -Type DWord -Value 1 -Force - New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager' -Name 'BackupCount' -Type DWord -Value 2 -Force - $action = New-ScheduledTaskAction -Execute 'schtasks' -Argument '/run /i /tn \"\\Microsoft\\Windows\\Registry\\RegIdleBackup\"' - $trigger = New-ScheduledTaskTrigger -Daily -At 00:30 - Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System' - " - ], -``` diff --git a/docs/content/dev/features/Features/Sandbox.md b/docs/content/dev/features/Features/Sandbox.md deleted file mode 100644 index d41ea73f..00000000 --- a/docs/content/dev/features/Features/Sandbox.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Windows Sandbox - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=118} - "WPFFeaturesSandbox": { - "Content": "Windows Sandbox - Enable", - "Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.", - "category": "Features", - "panel": "1", - "feature": [ - "Containers-DisposableClientVM" - ], -``` diff --git a/docs/content/dev/features/Features/_index.md b/docs/content/dev/features/Features/_index.md deleted file mode 100644 index 99a10baa..00000000 --- a/docs/content/dev/features/Features/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Features" -weight: 1 -toc: false ---- - -{{< autolinks section="dev/features/features" >}} diff --git a/docs/content/dev/features/Features/dotnet.md b/docs/content/dev/features/Features/dotnet.md deleted file mode 100644 index e854ddc0..00000000 --- a/docs/content/dev/features/Features/dotnet.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: ".NET Framework (Versions 2, 3, 4) - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=2} - "WPFFeaturesdotnet": { - "Content": ".NET Framework (Versions 2, 3, 4) - Enable", - "Description": ".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.", - "category": "Features", - "panel": "1", - "feature": [ - "NetFx4-AdvSrvs", - "NetFx3" - ], - "InvokeScript": [], -``` diff --git a/docs/content/dev/features/Features/hyperv.md b/docs/content/dev/features/Features/hyperv.md deleted file mode 100644 index 5cb158a3..00000000 --- a/docs/content/dev/features/Features/hyperv.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Hyper-V - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=24} - "WPFFeatureshyperv": { - "Content": "Hyper-V - Enable", - "Description": "Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines.", - "category": "Features", - "panel": "1", - "feature": [ - "Microsoft-Hyper-V-All" - ], -``` diff --git a/docs/content/dev/features/Features/legacymedia.md b/docs/content/dev/features/Features/legacymedia.md deleted file mode 100644 index 0c797cd2..00000000 --- a/docs/content/dev/features/Features/legacymedia.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Legacy Media Components (WMP, DirectPlay) - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=34} - "WPFFeatureslegacymedia": { - "Content": "Legacy Media Components (WMP, DirectPlay) - Enable", - "Description": "Enables legacy programs from previous versions of Windows.", - "category": "Features", - "panel": "1", - "feature": [ - "WindowsMediaPlayer", - "MediaPlayback", - "DirectPlay", - "LegacyComponents" - ], - "InvokeScript": [], -``` diff --git a/docs/content/dev/features/Features/nfs.md b/docs/content/dev/features/Features/nfs.md deleted file mode 100644 index 5a301818..00000000 --- a/docs/content/dev/features/Features/nfs.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "Network File System (NFS) - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=60} - "WPFFeaturenfs": { - "Content": "Network File System (NFS) - Enable", - "Description": "Network File System (NFS) is a mechanism for storing files on a network.", - "category": "Features", - "panel": "1", - "feature": [ - "ServicesForNFS-ClientOnly", - "ClientForNFS-Infrastructure", - "NFS-Administration" - ], - "InvokeScript": [ - "nfsadmin client stop", - "Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default' -Name 'AnonymousUID' -Type DWord -Value 0", - "Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default' -Name 'AnonymousGID' -Type DWord -Value 0", - "nfsadmin client start", - "nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i" - ], -``` diff --git a/docs/content/dev/features/Features/wsl.md b/docs/content/dev/features/Features/wsl.md deleted file mode 100644 index c50ffaca..00000000 --- a/docs/content/dev/features/Features/wsl.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Windows Subsystem for Linux (WSL) - Enable" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=48} - "WPFFeaturewsl": { - "Content": "Windows Subsystem for Linux (WSL) - Enable", - "Description": "Windows Subsystem for Linux is an optional feature of Windows that allows Linux programs to run natively on Windows without the need for a separate virtual machine or dual booting.", - "category": "Features", - "panel": "1", - "feature": [ - "VirtualMachinePlatform", - "Microsoft-Windows-Subsystem-Linux" - ], - "InvokeScript": [], -``` diff --git a/docs/content/dev/features/Fixes/Autologin.md b/docs/content/dev/features/Fixes/Autologin.md deleted file mode 100644 index 36cbb016..00000000 --- a/docs/content/dev/features/Fixes/Autologin.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "AutoLogon - Run" -description: "" ---- - -```powershell {filename="functions/public/Invoke-WPFPanelAutologin.ps1",linenos=inline,linenostart=1} -function Invoke-WPFPanelAutologin { - Invoke-WebRequest -Uri https://live.sysinternals.com/Autologon.exe -OutFile "$winutildir\autologin.exe" - Start-Process -FilePath "$winutildir\autologin.exe" -ArgumentList /accepteula -} -``` diff --git a/docs/content/dev/features/Fixes/DISM.md b/docs/content/dev/features/Fixes/DISM.md deleted file mode 100644 index b262a640..00000000 --- a/docs/content/dev/features/Fixes/DISM.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "System Corruption Scan - Run" -description: "" ---- - -```powershell {filename="functions/public/Invoke-WPFSystemRepair.ps1",linenos=inline,linenostart=1} -function Invoke-WPFSystemRepair { - <# - .SYNOPSIS - Checks for system corruption using SFC, and DISM - Checks for disk failure using Chkdsk - - .DESCRIPTION - 1. Chkdsk - Checks for disk errors, which can cause system file corruption and notifies of early disk failure - 2. SFC - scans protected system files for corruption and fixes them - 3. DISM - Repair a corrupted Windows operating system image - #> - - Start-Process cmd.exe -ArgumentList "/c chkdsk /scan /perf" -NoNewWindow -Wait - Start-Process cmd.exe -ArgumentList "/c sfc /scannow" -NoNewWindow -Wait - Start-Process cmd.exe -ArgumentList "/c dism /online /cleanup-image /restorehealth" -NoNewWindow -Wait - - Write-Host "==> Finished System Repair" - Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" -} -``` diff --git a/docs/content/dev/features/Fixes/NTPPool.md b/docs/content/dev/features/Fixes/NTPPool.md deleted file mode 100644 index d3e8990b..00000000 --- a/docs/content/dev/features/Fixes/NTPPool.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "NTP Server - Enable" -description: "" ---- - -```powershell {filename="functions/public/Invoke-WPFFixesNTPPool.ps1",linenos=inline,linenostart=1} -function Invoke-WPFFixesNTPPool { - <# - .SYNOPSIS - Configures Windows to use pool.ntp.org for NTP synchronization - - .DESCRIPTION - Replaces the default Windows NTP server (time.windows.com) with - pool.ntp.org for improved time synchronization accuracy and reliability. - #> - - Start-Service w32time - w32tm /config /update /manualpeerlist:"pool.ntp.org,0x8" /syncfromflags:MANUAL - - Restart-Service w32time - w32tm /resync - - Write-Host "=================================" - Write-Host "-- NTP Configuration Complete ---" - Write-Host "=================================" -} -``` diff --git a/docs/content/dev/features/Fixes/Network.md b/docs/content/dev/features/Fixes/Network.md deleted file mode 100644 index ef633a43..00000000 --- a/docs/content/dev/features/Fixes/Network.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Network - Reset" -description: "" ---- - -```powershell {filename="functions/public/Invoke-WPFFixesNetwork.ps1",linenos=inline,linenostart=1} -function Invoke-WPFFixesNetwork { - netsh winsock reset - netsh int ip reset - Write-Host "Network Configuration has been Reset. Please restart your computer." -} -``` diff --git a/docs/content/dev/features/Fixes/Update.md b/docs/content/dev/features/Fixes/Update.md deleted file mode 100644 index 42a0bfea..00000000 --- a/docs/content/dev/features/Fixes/Update.md +++ /dev/null @@ -1,233 +0,0 @@ ---- -title: "Windows Update - Reset" -description: "" ---- - -```powershell {filename="functions/public/Invoke-WPFFixesUpdate.ps1",linenos=inline,linenostart=1} -function Invoke-WPFFixesUpdate { - - <# - - .SYNOPSIS - Performs various tasks in an attempt to repair Windows Update - - .DESCRIPTION - 1. (Aggressive Only) Scans the system for corruption using the Invoke-WPFSystemRepair function - 2. Stops Windows Update Services - 3. Remove the QMGR Data file, which stores BITS jobs - 4. (Aggressive Only) Renames the DataStore and CatRoot2 folders - DataStore - Contains the Windows Update History and Log Files - CatRoot2 - Contains the Signatures for Windows Update Packages - 5. Renames the Windows Update Download Folder - 6. Deletes the Windows Update Log - 7. (Aggressive Only) Resets the Security Descriptors on the Windows Update Services - 8. Reregisters the BITS and Windows Update DLLs - 9. Removes the WSUS client settings - 10. Resets WinSock - 11. Gets and deletes all BITS jobs - 12. Sets the startup type of the Windows Update Services then starts them - 13. Forces Windows Update to check for updates - - .PARAMETER Aggressive - If specified, the script will take additional steps to repair Windows Update that are more dangerous, take a significant amount of time, or are generally unnecessary - - #> - - param($Aggressive = $false) - - Write-Progress -Id 0 -Activity "Repairing Windows Update" -PercentComplete 0 - Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" - Write-Host "Starting Windows Update Repair..." - # Wait for the first progress bar to show, otherwise the second one won't show - Start-Sleep -Milliseconds 200 - - if ($Aggressive) { - Invoke-WPFSystemRepair - } - - - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Stopping Windows Update Services..." -PercentComplete 10 - # Stop the Windows Update Services - Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping BITS..." -PercentComplete 0 - Stop-Service -Name BITS -Force - Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping wuauserv..." -PercentComplete 20 - Stop-Service -Name wuauserv -Force - Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping appidsvc..." -PercentComplete 40 - Stop-Service -Name appidsvc -Force - Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping cryptsvc..." -PercentComplete 60 - Stop-Service -Name cryptsvc -Force - Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Completed" -PercentComplete 100 - - - # Remove the QMGR Data file - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Renaming/Removing Files..." -PercentComplete 20 - Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing QMGR Data files..." -PercentComplete 0 - Remove-Item "$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat" -ErrorAction SilentlyContinue - - - if ($Aggressive) { - # Rename the Windows Update Log and Signature Folders - Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Log, Download, and Signature Folder..." -PercentComplete 20 - Rename-Item $env:systemroot\SoftwareDistribution\DataStore DataStore.bak -ErrorAction SilentlyContinue - Rename-Item $env:systemroot\System32\Catroot2 catroot2.bak -ErrorAction SilentlyContinue - } - - # Rename the Windows Update Download Folder - Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Download Folder..." -PercentComplete 20 - Rename-Item $env:systemroot\SoftwareDistribution\Download Download.bak -ErrorAction SilentlyContinue - - # Delete the legacy Windows Update Log - Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing the old Windows Update log..." -PercentComplete 80 - Remove-Item $env:systemroot\WindowsUpdate.log -ErrorAction SilentlyContinue - Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Completed" -PercentComplete 100 - - - if ($Aggressive) { - # Reset the Security Descriptors on the Windows Update Services - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting the WU Service Security Descriptors..." -PercentComplete 25 - Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the BITS Security Descriptor..." -PercentComplete 0 - Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "bits", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)" -Wait - Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the wuauserv Security Descriptor..." -PercentComplete 50 - Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "wuauserv", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)" -Wait - Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Completed" -PercentComplete 100 - } - - - # Reregister the BITS and Windows Update DLLs - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Reregistering DLLs..." -PercentComplete 40 - $oldLocation = Get-Location - Set-Location $env:systemroot\system32 - $i = 0 - $DLLs = @( - "atl.dll", "urlmon.dll", "mshtml.dll", "shdocvw.dll", "browseui.dll", - "jscript.dll", "vbscript.dll", "scrrun.dll", "msxml.dll", "msxml3.dll", - "msxml6.dll", "actxprxy.dll", "softpub.dll", "wintrust.dll", "dssenh.dll", - "rsaenh.dll", "gpkcsp.dll", "sccbase.dll", "slbcsp.dll", "cryptdlg.dll", - "oleaut32.dll", "ole32.dll", "shell32.dll", "initpki.dll", "wuapi.dll", - "wuaueng.dll", "wuaueng1.dll", "wucltui.dll", "wups.dll", "wups2.dll", - "wuweb.dll", "qmgr.dll", "qmgrprxy.dll", "wucltux.dll", "muweb.dll", "wuwebv.dll" - ) - foreach ($dll in $DLLs) { - Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Registering $dll..." -PercentComplete ($i / $DLLs.Count * 100) - $i++ - Start-Process -NoNewWindow -FilePath "regsvr32.exe" -ArgumentList "/s", $dll - } - Set-Location $oldLocation - Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Completed" -PercentComplete 100 - - - # Remove the WSUS client settings - if (Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate") { - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Removing WSUS client settings..." -PercentComplete 60 - Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -PercentComplete 0 - Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "AccountDomainSid", "/f" -RedirectStandardError "NUL" - Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "PingID", "/f" -RedirectStandardError "NUL" - Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "SusClientId", "/f" -RedirectStandardError "NUL" - Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -Status "Completed" -PercentComplete 100 - } - - # Remove Group Policy Windows Update settings - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Removing Group Policy Windows Update settings..." -PercentComplete 60 - Write-Progress -Id 7 -ParentId 0 -Activity "Removing Group Policy Windows Update settings" -PercentComplete 0 - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -ErrorAction SilentlyContinue - Write-Host "Defaulting driver offering through Windows Update..." - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontSearchWindowsUpdate" -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DriverUpdateWizardWuSearchEnabled" -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -ErrorAction SilentlyContinue - Write-Host "Defaulting Windows Update automatic restart..." - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -ErrorAction SilentlyContinue - Write-Host "Clearing ANY Windows Update Policy settings..." - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -ErrorAction SilentlyContinue - Remove-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKCU:\Software\Microsoft\WindowsSelfHost" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKCU:\Software\Policies" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\Microsoft\Policies" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\Microsoft\WindowsSelfHost" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\Policies" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Policies" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue - Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue - Start-Process -NoNewWindow -FilePath "secedit" -ArgumentList "/configure", "/cfg", "$env:windir\inf\defltbase.inf", "/db", "defltbase.sdb", "/verbose" -Wait - Start-Process -NoNewWindow -FilePath "cmd.exe" -ArgumentList "/c RD /S /Q $env:WinDir\System32\GroupPolicyUsers" -Wait - Start-Process -NoNewWindow -FilePath "cmd.exe" -ArgumentList "/c RD /S /Q $env:WinDir\System32\GroupPolicy" -Wait - Start-Process -NoNewWindow -FilePath "gpupdate" -ArgumentList "/force" -Wait - Write-Progress -Id 7 -ParentId 0 -Activity "Removing Group Policy Windows Update settings" -Status "Completed" -PercentComplete 100 - - - # Reset WinSock - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting WinSock..." -PercentComplete 65 - Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Resetting WinSock..." -PercentComplete 0 - Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" - Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" - Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" - Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Completed" -PercentComplete 100 - - - # Get and delete all BITS jobs - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Deleting BITS jobs..." -PercentComplete 75 - Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Deleting BITS jobs..." -PercentComplete 0 - Get-BitsTransfer | Remove-BitsTransfer - Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Completed" -PercentComplete 100 - - - # Change the startup type of the Windows Update Services and start them - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Starting Windows Update Services..." -PercentComplete 90 - Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting BITS..." -PercentComplete 0 - Get-Service BITS | Set-Service -StartupType Manual -PassThru | Start-Service - Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting wuauserv..." -PercentComplete 25 - Get-Service wuauserv | Set-Service -StartupType Manual -PassThru | Start-Service - Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting AppIDSvc..." -PercentComplete 50 - # The AppIDSvc service is protected, so the startup type has to be changed in the registry - Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\AppIDSvc" -Name "Start" -Value "3" # Manual - Start-Service AppIDSvc - Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting CryptSvc..." -PercentComplete 75 - Get-Service CryptSvc | Set-Service -StartupType Manual -PassThru | Start-Service - Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Completed" -PercentComplete 100 - - - # Force Windows Update to check for updates - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Forcing discovery..." -PercentComplete 95 - Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Forcing discovery..." -PercentComplete 0 - try { - (New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow() - } catch { - Set-WinUtilTaskbaritem -state "Error" -overlay "warning" - Write-Warning "Failed to create Windows Update COM object: $_" - } - Start-Process -NoNewWindow -FilePath "wuauclt" -ArgumentList "/resetauthorization", "/detectnow" - Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Completed" -PercentComplete 100 - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Completed" -PercentComplete 100 - - Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" - - $ButtonType = [System.Windows.MessageBoxButton]::OK - $MessageboxTitle = "Reset Windows Update " - $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer") - $MessageIcon = [System.Windows.MessageBoxImage]::Information - - [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) - Write-Host "===============================================" - Write-Host "-- Reset All Windows Update Settings to Stock -" - Write-Host "===============================================" - - # Remove the progress bars - Write-Progress -Id 0 -Activity "Repairing Windows Update" -Completed - Write-Progress -Id 1 -Activity "Scanning for corruption" -Completed - Write-Progress -Id 2 -Activity "Stopping Services" -Completed - Write-Progress -Id 3 -Activity "Renaming/Removing Files" -Completed - Write-Progress -Id 4 -Activity "Resetting the WU Service Security Descriptors" -Completed - Write-Progress -Id 5 -Activity "Reregistering DLLs" -Completed - Write-Progress -Id 6 -Activity "Removing Group Policy Windows Update settings" -Completed - Write-Progress -Id 7 -Activity "Resetting WinSock" -Completed - Write-Progress -Id 8 -Activity "Deleting BITS jobs" -Completed - Write-Progress -Id 9 -Activity "Starting Windows Update Services" -Completed - Write-Progress -Id 10 -Activity "Forcing discovery" -Completed -} -``` diff --git a/docs/content/dev/features/Fixes/Winget.md b/docs/content/dev/features/Fixes/Winget.md deleted file mode 100644 index fa32076d..00000000 --- a/docs/content/dev/features/Fixes/Winget.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: "WinGet - Reinstall" -description: "" ---- - -```powershell {filename="functions/public/Invoke-WPFFixesWinget.ps1",linenos=inline,linenostart=1} -function Invoke-WPFFixesWinget { - - <# - - .SYNOPSIS - Fixes WinGet by running `choco install winget` - .DESCRIPTION - BravoNorris for the fantastic idea of a button to reinstall WinGet - #> - # Install Choco if not already present - try { - Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" - Write-Host "==> Starting WinGet Repair" - Install-WinUtilWinget - } catch { - Write-Error "Failed to install WinGet: $_" - Set-WinUtilTaskbaritem -state "Error" -overlay "warning" - } finally { - Write-Host "==> Finished WinGet Repair" - Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" - } - -} -``` diff --git a/docs/content/dev/features/Fixes/_index.md b/docs/content/dev/features/Fixes/_index.md deleted file mode 100644 index 76f58da0..00000000 --- a/docs/content/dev/features/Fixes/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Fixes" -weight: 2 -toc: false ---- - -{{< autolinks section="dev/features/fixes" >}} diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Computer.md b/docs/content/dev/features/Legacy-Windows-Panels/Computer.md deleted file mode 100644 index 4aa6f849..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Computer.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Computer Management" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=182} - "WPFPanelComputer": { - "Content": "Computer Management", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "compmgmt.msc" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Control.md b/docs/content/dev/features/Legacy-Windows-Panels/Control.md deleted file mode 100644 index bc6cfe98..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Control.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Control Panel" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=193} - "WPFPanelControl": { - "Content": "Control Panel", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "control" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Firewall.md b/docs/content/dev/features/Legacy-Windows-Panels/Firewall.md deleted file mode 100644 index f7c17eba..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Firewall.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Windows Defender Firewall" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=314} - "WPFPanelFirewall": { - "Content": "Windows Defender Firewall", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "firewall.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Mouse.md b/docs/content/dev/features/Legacy-Windows-Panels/Mouse.md deleted file mode 100644 index 6f54d745..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Mouse.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Mouse Properties" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=204} - "WPFPanelMouse": { - "Content": "Mouse Properties", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "main.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Network.md b/docs/content/dev/features/Legacy-Windows-Panels/Network.md deleted file mode 100644 index fbd5af48..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Network.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Network Connections" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=215} - "WPFPanelNetwork": { - "Content": "Network Connections", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "ncpa.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Power.md b/docs/content/dev/features/Legacy-Windows-Panels/Power.md deleted file mode 100644 index cf902a2e..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Power.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Power Panel" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=226} - "WPFPanelPower": { - "Content": "Power Panel", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "powercfg.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Printer.md b/docs/content/dev/features/Legacy-Windows-Panels/Printer.md deleted file mode 100644 index 77b4436d..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Printer.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Printer Panel" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=237} - "WPFPanelPrinter": { - "Content": "Printer Panel", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "Start-Process 'shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}'" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Programs.md b/docs/content/dev/features/Legacy-Windows-Panels/Programs.md deleted file mode 100644 index 74bcd5fa..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Programs.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Programs and Features" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=248} - "WPFPanelPrograms": { - "Content": "Programs and Features", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "appwiz.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Region.md b/docs/content/dev/features/Legacy-Windows-Panels/Region.md deleted file mode 100644 index 0b22cf3d..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Region.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Region" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=259} - "WPFPanelRegion": { - "Content": "Region", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "intl.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Restore.md b/docs/content/dev/features/Legacy-Windows-Panels/Restore.md deleted file mode 100644 index 4150356a..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Restore.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Windows Restore" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=325} - "WPFPanelRestore": { - "Content": "Windows Restore", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "rstrui.exe" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Security.md b/docs/content/dev/features/Legacy-Windows-Panels/Security.md deleted file mode 100644 index cfcd78f6..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Security.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Security and Maintenance" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=270} - "WPFPanelSecurity": { - "Content": "Security and Maintenance", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "wscui.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Sound.md b/docs/content/dev/features/Legacy-Windows-Panels/Sound.md deleted file mode 100644 index 1dfd0bac..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Sound.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Sound Settings" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=281} - "WPFPanelSound": { - "Content": "Sound Settings", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "mmsys.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/System.md b/docs/content/dev/features/Legacy-Windows-Panels/System.md deleted file mode 100644 index 31e2b3c5..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/System.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "System Properties" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=292} - "WPFPanelSystem": { - "Content": "System Properties", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "sysdm.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/Timedate.md b/docs/content/dev/features/Legacy-Windows-Panels/Timedate.md deleted file mode 100644 index 2f281556..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/Timedate.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Time and Date" -description: "" ---- - -```json {filename="config/feature.json",linenos=inline,linenostart=303} - "WPFPanelTimedate": { - "Content": "Time and Date", - "category": "Legacy Windows Panels", - "panel": "2", - "Type": "Button", - "ButtonWidth": "300", - "InvokeScript": [ - "timedate.cpl" - ], -``` diff --git a/docs/content/dev/features/Legacy-Windows-Panels/_index.md b/docs/content/dev/features/Legacy-Windows-Panels/_index.md deleted file mode 100644 index b09a97bc..00000000 --- a/docs/content/dev/features/Legacy-Windows-Panels/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Legacy Windows Panels" -weight: 3 -toc: false ---- - -{{< autolinks section="dev/features/legacy-windows-panels" >}} diff --git a/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/InstallPSProfile.md b/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/InstallPSProfile.md deleted file mode 100644 index c9d8734c..00000000 --- a/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/InstallPSProfile.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "CTT PowerShell Profile - Install" -description: "" ---- - -```powershell {filename="functions/private/Invoke-WinUtilInstallPSProfile.ps1",linenos=inline,linenostart=1} -function Invoke-WinUtilInstallPSProfile { - if (-not (Get-Command wt)) { - Write-Host "Windows Terminal not found. Installing..." - Install-WinUtilWinget - winget install Microsoft.WindowsTerminal --source winget --silent - } - - if (-not (Get-Command pwsh)) { - Write-Host "PowerShell 7 not found. Installing..." - Install-WinUtilWinget - winget install Microsoft.PowerShell --source winget --installer-type wix --silent - } - - wt new-tab pwsh -NoExit -Command "irm https://github.com/ChrisTitusTech/powershell-profile/raw/main/setup.ps1 | iex" -} -``` diff --git a/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/UninstallPSProfile.md b/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/UninstallPSProfile.md deleted file mode 100644 index 276d7165..00000000 --- a/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/UninstallPSProfile.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "CTT PowerShell Profile - Remove" -description: "" ---- - -```powershell {filename="functions/private/Invoke-WinUtilUninstallPSProfile.ps1",linenos=inline,linenostart=1} -function Invoke-WinUtilUninstallPSProfile { - - if (Test-Path ($Profile + ".bak")) { - Move-Item -Path ($Profile + ".bak") -Destination $Profile - } else { - Remove-Item -Path $Profile - } - - Write-Host "Successfully uninstalled CTT PowerShell Profile." -ForegroundColor Green -} -``` diff --git a/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/_index.md b/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/_index.md deleted file mode 100644 index c31e1e8b..00000000 --- a/docs/content/dev/features/Powershell-Profile-Powershell-7--Only/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Powershell Profile Powershell 7+ Only" -weight: 5 -toc: false ---- - -{{< autolinks section="dev/features/powershell-profile-powershell-7--only" >}} diff --git a/docs/content/dev/features/Remote-Access/SSHServer.md b/docs/content/dev/features/Remote-Access/SSHServer.md deleted file mode 100644 index 6a635196..00000000 --- a/docs/content/dev/features/Remote-Access/SSHServer.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: "OpenSSH Server - Enable" -description: "" ---- - -```powershell {filename="functions/public/Invoke-WPFSSHServer.ps1",linenos=inline,linenostart=1} -function Invoke-WPFSSHServer { - <# - - .SYNOPSIS - Invokes the OpenSSH Server install in a runspace - - #> - - Invoke-WPFRunspace -ScriptBlock { - - Invoke-WinUtilSSHServer - - Write-Host "=======================================" - Write-Host "-- OpenSSH Server installed! ---" - Write-Host "=======================================" - } -} -``` diff --git a/docs/content/dev/features/Remote-Access/_index.md b/docs/content/dev/features/Remote-Access/_index.md deleted file mode 100644 index e557a9e3..00000000 --- a/docs/content/dev/features/Remote-Access/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Remote Access" -weight: 4 -toc: false ---- - -{{< autolinks section="dev/features/remote-access" >}} diff --git a/docs/content/dev/features/_index.md b/docs/content/dev/features/_index.md deleted file mode 100644 index 1680214a..00000000 --- a/docs/content/dev/features/_index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "Features" -weight: 1 -toc: false ---- - -### Fixes - -{{< autolinks section="dev/features/fixes" >}} - -### Legacy Windows Panels - -{{< autolinks section="dev/features/legacy-windows-panels" >}} - -### Features - -{{< autolinks section="dev/features/features" >}} - -### Remote Access - -{{< autolinks section="dev/features/remote-access" >}} - -### Powershell Profile Powershell 7+ Only - -{{< autolinks section="dev/features/powershell-profile-powershell-7--only" >}} diff --git a/docs/content/dev/tweaks/Customize-Preferences/BatteryPercentage.md b/docs/content/dev/tweaks/Customize-Preferences/BatteryPercentage.md deleted file mode 100644 index 8ba29709..00000000 --- a/docs/content/dev/tweaks/Customize-Preferences/BatteryPercentage.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "System Tray Battery Percentage" -description: "" ---- - -```json {filename="config/tweaks.json",linenos=inline,linenostart=1268} - "WPFToggleBatteryPercentage": { - "Content": "System Tray Battery Percentage", - "Description": "Shows numeric battery percentage next to the battery icon in the system tray.", - "category": "Customize Preferences", - "panel": "2", - "Type": "Toggle", - "registry": [ - { - "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", - "Name": "IsBatteryPercentageEnabled", - "Value": "1", - "Type": "DWord", - "OriginalValue": "{heroEyebrow}
} + + {tagline && } + { + actions.length > 0 && ( +{heroCaption}
} +A fresh install works fine out of the box. Getting it configured the way you actually want takes an afternoon of registry edits, forum posts, and forgotten steps.
+Instead of stitching together installers, registry hacks, and forum wisdom, you manage the whole setup from one window.
+WinGet and Chocolatey install clean builds of your everyday apps, with no bundled toolbars or bundled offers.
+Essential and advanced tweaks for privacy, performance, and UI behavior are one click away, grouped by what they actually do.
+Nearly every tweak can be reverted from the same panel, so trying something risky doesn't mean a full reinstall.
+One-click repairs for networking, Windows Update, and WinGet handle the fixes people usually paste from a forum thread.
+Switch between full updates, security-only updates, or fully paused β and back again β without digging through Group Policy.
+Win11 Creator debloats and preconfigures an official Microsoft image, so new installs start from your baseline.
+Right-click the Start button and choose Terminal (Admin), or launch PowerShell and elevate manually.
+Downloads and starts the latest release.
+
+ Work through the Install, Tweaks, Config, and Updates tabs β everything is undoable.
+Registry edits and PowerShell one-liners work. WinUtil makes them repeatable.
+Get a script that installs, tweaks, fixes, and updates Windows from one window.
+ +Free and open source. No installer, no telemetry, no account required.
+ MDX wraps around icon+text content, so it never breaks the flex row. */
+.wu-btn > p,
+.wu-trust-item > p {
+ display: contents;
+}
+
+/* Cancels Starlight's automatic 1.5rem inter-block margin inside our own grids/rows (it otherwise lands on item 2+ of each row and breaks alignment). */
+.sl-markdown-content .wu-section,
+.sl-markdown-content .wu-solution-grid > *,
+.sl-markdown-content .wu-feature-grid > *,
+.sl-markdown-content .wu-timeline > *,
+.sl-markdown-content .wu-problem-list > *,
+.sl-markdown-content .wu-benefit-list > *,
+.sl-markdown-content .wu-trust-bar > *,
+.sl-markdown-content .wu-badges > *,
+.sl-markdown-content .wu-btn-row > * {
+ margin-top: 0;
+}
+
+/* Section shell: full-bleed hairline dividers, alternating tint, 72rem reading width. */
+.wu-section {
+ margin-inline: calc(-1 * var(--sl-content-pad-x));
+ padding-inline: var(--sl-content-pad-x);
+ border-bottom: 1px solid var(--sl-color-hairline-light);
+ padding-block: clamp(3rem, 4vw + 1.5rem, 5.5rem);
+}
+.wu-section--trust {
+ padding-block: 2rem;
+}
+.wu-section--tint {
+ background-color: var(--sl-color-gray-7, var(--sl-color-gray-6));
+}
+:root:not([data-theme='light']) .wu-section--tint {
+ background-color: color-mix(in srgb, var(--sl-color-gray-6) 60%, transparent);
+}
+.wu-section-inner {
+ max-width: 72rem;
+ margin-inline: auto;
+}
+.wu-text-narrow {
+ max-width: 44rem;
+ margin-inline: auto;
+}
+
+.wu-section-head {
+ max-width: 42rem;
+ margin: 0 auto 2.5rem;
+ text-align: center;
+}
+.wu-section-head h2 {
+ margin: 0;
+ font-size: var(--sl-text-3xl);
+ font-weight: 700;
+ letter-spacing: -0.01em;
+ color: var(--sl-color-white);
+}
+.wu-section-head p {
+ margin: 0.75rem 0 0;
+ font-size: var(--sl-text-lg);
+ color: var(--sl-color-gray-3);
+}
+.wu-section-head.wu-align-left {
+ text-align: left;
+ margin-inline: 0;
+ max-width: none;
+}
+
+/* Shields.io / dcbadge release, download, and Discord badges. */
+.wu-badges {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ align-items: center;
+ gap: 0.5rem;
+ margin-bottom: 1.5rem;
+}
+.wu-badges img {
+ height: 1.75rem;
+ width: auto;
+ display: block;
+}
+
+/* Trust bar: icon + label chips under the hero. */
+.wu-trust-bar {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ align-items: center;
+ gap: 0.75rem 1.25rem;
+}
+.wu-trust-item {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ font-size: var(--sl-text-sm);
+ font-weight: 500;
+ color: var(--sl-color-gray-3);
+}
+.wu-trust-item svg {
+ color: var(--sl-color-accent);
+ width: 1rem;
+ height: 1rem;
+}
+
+/* Problem list: bullet-circle + text, left aligned. */
+.wu-problem-list {
+ display: flex;
+ flex-direction: column;
+ gap: 1.1rem;
+ margin: 2.5rem 0 0;
+ padding: 0;
+ list-style: none;
+}
+.wu-problem-list li {
+ display: flex;
+ align-items: flex-start;
+ gap: 1rem;
+ color: var(--sl-color-gray-3);
+}
+.wu-problem-list .wu-bullet {
+ flex: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 1.5rem;
+ height: 1.5rem;
+ margin-top: 0.15rem;
+ border-radius: 999px;
+ background: var(--sl-color-gray-6);
+}
+.wu-problem-list .wu-bullet svg {
+ width: 0.85rem;
+ height: 0.85rem;
+ color: var(--sl-color-gray-3);
+}
+
+/* Solution grid: icon-in-box above title + description. */
+.wu-solution-grid {
+ display: grid;
+ gap: 2rem;
+ margin-top: 3rem;
+}
+.wu-solution {
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+}
+.wu-solution-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 2.5rem;
+ height: 2.5rem;
+ border-radius: var(--wu-radius-sm);
+ background: var(--sl-color-gray-6);
+ color: var(--sl-color-accent);
+}
+.wu-solution h3 {
+ margin: 0;
+ font-size: var(--sl-text-lg);
+ font-weight: 600;
+ color: var(--sl-color-white);
+}
+.wu-solution p {
+ margin: 0;
+ font-size: var(--sl-text-sm);
+ line-height: var(--sl-line-height);
+ color: var(--sl-color-gray-3);
+}
+
+/* Feature grid: wraps