Compare commits

..
52 Commits
Author SHA1 Message Date
Mohammad FaizandGitHub f7361fdb72 fix: repair popup install binding, dialog titles, presets switch, radio groups, JSON, tests (#4893)
* fix: repair popup install binding, dialog titles, presets switch, radio groups, JSON, tests

- Invoke-WPFInstall: add param block so the right-click app popup binds
  -PackagesToInstall. It previously dropped the argument into $args and
  installed the whole selected list instead of the clicked app (or warned
  that nothing was selected).
- Replace undefined $AppTitle with "WinUtil" in Install/UnInstall warning
  boxes, matching the XAML window title and sibling dialogs.
- tweaks.json: remove stray nested "link" inside the WPFToggleScrollbars
  registry entry (dead property; registry entries expose only the six
  consumed fields).
- Invoke-WPFPresets: fix dead switch cases to the wildcard-pattern
  convention so selectedFeatures/selectedToggles clear correctly.
- Invoke-WPFUIElements: store the group StackPanel in radioButtonGroups so
  grouped radio buttons share one container (else branch was unreachable).
- sanity.Tests.ps1: pass the Windows PowerShell parser script via
  -EncodedCommand; -Command string marshaling corrupted backticks/quotes and
  produced false parse failures.
- install-workflow.Tests.ps1: remove the AppTitle workaround and update
  title assertions to "WinUtil"; drop orphaned cleanup lines.
- Add CHANGES.md with technical and plain-language explanations.

Verified: each bug reproduced against HEAD, fixes demonstrated to change
behavior, full Pester suite 471/471.

* Delete

* test: cover the explicit popup install parameter path

Add a regression test invoking Invoke-WPFInstall -PackagesToInstall with a
package different from the default sync.selectedApps selection and assert
the runspace receives the explicit object, mirroring the Initialize-WPFUI
popup call shape. Existing default-path coverage is unchanged.
2026-08-03 12:03:03 -05:00
Sean (ANGRYxScotsman)andGitHub f3cf1587e0 Import YouTubeEmbed in tweaks guide (#4907)
Add the `YouTubeEmbed` component import to `docs/src/content/docs/guides/tweaks.mdx` so the guide can use embedded YouTube content without missing-component build issues.
2026-08-03 11:57:01 -05:00
91ffd3af30 Refactor UI checkbox and toggle state synchronization (#4885)
Co-authored-by: vyas-devgna <vyas-devgna@users.noreply.github.com>
2026-08-03 11:38:26 -05:00
Sean (ANGRYxScotsman)andGitHub 1ef581026f Fix image paths in GitHub markdown docs (#4905)
Update image links in `.github/CONTRIBUTING.md` and `.github/READMEITALIAN.md` from `../docs/...` to `/docs/...` so screenshots resolve correctly when viewed from the `.github` directory context on GitHub.
2026-08-03 11:37:32 -05:00
Sean (ANGRYxScotsman)andGitHub 89fd09fc0e fix(docs): add mobile navigation to the splash homepage (#4904)
The homepage uses Starlight's splash template, which has no sidebar and
therefore never gets Starlight's own mobile menu toggle - on narrow
viewports there was no way to reach any nav link at all. Add a small
toggle + panel in the header (only rendered on pages without a sidebar)
exposing the same links as the desktop nav, and group it with the
search icon so mobile actions sit together instead of spread across
the header.

Also add the Store and Forums links to the real sidebar config so
they're reachable on mobile on every other page too (previously only
in the desktop-only top nav), and pull both URLs from a shared
site-links.ts so the sidebar config and header can't drift apart.
2026-08-03 11:36:46 -05:00
056a819470 Refresh Applications tab screenshots and reorder docs to match the app (#4903)
* Update Applications tab screenshots

Replace outdated install/uninstall/show-installed screenshots and add
new ones for upgrade-all, clear-selection, selected-apps counter, and
collapse/expand categories.

* Update Applications guide with new screenshots and sections

Point each tab at its refreshed screenshot, reorder tabs to match the
sidebar button order in the app, and document the Upgrade All,
Selected Apps counter, and Collapse/Expand Categories controls.

* Add missing Updates tab screenshot

The image was referenced by the Updates guide but was never checked
into the repo.

* Reorder screenshots to follow their intro paragraph

Move the tab screenshot below the introductory text on the Tweaks and
Updates guide pages, matching the paragraph-then-screenshot layout
used elsewhere in the docs.

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2026-08-03 11:36:03 -05:00
Sean (ANGRYxScotsman)andGitHub e96f990c60 Fix alignment issues, update links, and enhance documentation (#4898)
* Fix the same arrow-icon alignment issue on the "Read the Docs" button

Same root cause as the hero/final-CTA buttons: the label was plain
markdown text, which MDX wrapped in a <p>, and the icon was missing
the size/nudge applied elsewhere. Match it to the other two buttons.

* Rename known-issues page slug to knownissues

Update the sidebar config, nav dropdown, and every internal link that
pointed at /known-issues/ to match.

* Fix image paths in root-level markdown to match the new docs site

The Hugo docs site (docs/assets/images/...) has been replaced by the
Astro site (docs/src/assets/...); update CONTRIBUTING.md,
READMEITALIAN.md, and README.md to point at the new asset locations.

* Remove unused houston.webp asset

Leftover Starlight default-theme asset with no references anywhere
in the docs site.

* Fix docs site reference in generator docs

Updates `tools/devdocs-generator.md` to describe link generation correctly: links now point to the Astro/Starlight documentation site instead of the old Hugo site.

* Point docs homepage CTAs to guides hub

Updates the docs landing page CTA links to use `/guides/` instead of `/guides/getting-started/` in the hero action and both “Get Started”/“Read the Docs” buttons, routing users to the guides index.

* Add reusable YouTube embeds to docs guides

Introduces a new `YouTubeEmbed.astro` component for responsive 16:9 video embeds using the privacy-enhanced `youtube-nocookie.com` domain. The User Guide index and Tweaks guide now import and use this component instead of plain YouTube links, and the component includes styling that overrides Starlight’s iframe reset so embedded videos render at the correct size.

* Fix YouTube embed iframe height via not-content

Add the `not-content` class to the embed wrapper so Starlight's markdown reset no longer overrides `iframe { height: auto }`. Drop the `@layer starlight.core` wrapper and `!important` overrides that were compensating for the same issue.

* Clarify docs comments across Astro components

Adds and refines inline comments in the docs site config, custom Starlight components, and theme styles to better explain layout structure, navigation dropdown behavior, hero composition, and theme initialization. Also normalizes a few multi-line comments into single-line form for readability without changing functionality.

* Set secondary docs button background color

Update `.wu-btn-secondary` in the docs theme to use `var(--sl-color-gray-6)` instead of a transparent background, improving button visibility and contrast while keeping existing border and hover behavior.

* Move User Guides into docs dropdown

Updates the docs header navigation so the “User Guides” link is grouped under the existing “Documentation” dropdown instead of appearing as a separate top-level nav item. This keeps related documentation links together and simplifies the top navigation.

* Fix hero margin and center trust section

Remove the automatic 1.5rem top margin Starlight adds between the hero and the content column. Also flex-center the trust section so its content is properly aligned.

* Disable edit links in generated dev docs

Update `tools/devdocs-generator.ps1` to include `editUrl: false` in the frontmatter for generated tweak and feature docs pages. This prevents Starlight from showing edit links on these auto-generated pages.

* Move docs update PRs to pre-release flow

The docs Pages workflow is simplified to only build and deploy the docs site: it now triggers only on docs changes, drops extra permissions/default shell settings, and removes the dev-docs generation + auto-PR steps. The pre-release workflow now owns that automation by expanding its PR step to include generated code-reference docs alongside JSON link updates, with updated commit/title/body text and a documentation label.

* Shorten generated docs source note

Simplify the autogenerated DevDocs notice so generated pages only warn against direct edits while still linking back to the source file.

* Improve docs header dropdown behavior

Reworked the header nav dropdown triggers to use native `<details>/<summary>` instead of buttons, then updated menu visibility logic to use `details[open]` for no-JS support on touch and keyboard while preserving hover behavior. Also renamed the “Developer Docs” link to “Code Reference” and tightened related CSS comments.

* Refresh contribution and docs workflow docs

Updated contributor-facing docs to use consistent Markdown admonition blocks, cleaned Mermaid fence formatting, and fixed minor wording/capitalization in contribution steps. Clarified `devdocs-generator` behavior so workflow ownership is explicit: generation now documented as part of `pre-release.yaml` (via docs-update PR), while `docs.yaml` is documented as build/deploy only.

* Fix contributing guide grammar

Correct the "it's" to "its" typo in both contributing guides so the pull request guidance is consistent across the GitHub and docs versions.
2026-08-03 10:23:31 -05:00
Chris TitusandGitHub e591161dac Update sponsors in README (#4900) 2026-08-01 10:46:40 -05:00
Chris TitusandGitHub d98f8a9916 Update README.md 2026-07-31 15:32:15 -05:00
Chris TitusandGitHub 144d516751 chore: Update generated dev docs (#4895) 2026-07-31 15:29:34 -05:00
Sean (ANGRYxScotsman)andGitHub 6f0629207a Gave the docs steroids. sorry for the big pr. (#4892)
* Scaffold Astro + Starlight docs site

Bootstraps a new docs-astro project to replace the Hugo-based docs,
using Astro's Starlight framework with the content collection schema
and sidebar navigation configured for WinUtil's docs structure.

* Add WinUtil-branded Starlight theme

Restyles Starlight's default look with a dark-by-default grayscale
palette and WinUtil's brand blue (#0567ff, from the app logo) as the
single accent, Geist for UI text, and JetBrains Mono for code. Also
overrides the default theme provider so first-time visitors land on
dark mode instead of following OS preference.

* Add custom Hero and CornerCard components

Hero overrides Starlight's default hero with a full-bleed grid/glow
background, a browser-chrome-framed screenshot, and a badge row driven
by frontmatter data. CornerCard is a bordered feature card with corner
brackets, used for the landing page's feature grid.

* Migrate docs content from Hugo to Astro/Starlight

Ports the landing page, user guide sections, FAQ, known issues,
contributing guide, and a sample generated tweak reference page from
the Hugo site, converting Hugo shortcodes and GFM alert syntax to
their Starlight/MDX equivalents.

* Use Windows-style caption buttons in hero window chrome

Swap the macOS traffic-light dots for a minimize/maximize/close
button group, since WinUtil is a Windows tool.

* Use Windows-style caption glyph for terminal code blocks

Replace Expressive Code's default macOS dots on terminal-framed code
blocks with a right-aligned Windows minimize/maximize/close icon,
matching the hero window chrome.

* Archive the Hugo docs site as docs-old

* Promote Astro/Starlight docs from docs-astro to docs

* Show the launch command as a copyable code block on the docs homepage

* Add docs codeowner for seanh1995

* Register custom Header component for Starlight docs site

* Add custom navbar links to Astro docs, matching the old Hugo site's top nav

* Point dev docs generator at the Astro/Starlight docs site

Output moves from docs/content/dev (Hugo) to
docs/src/content/docs/code-reference (Astro/Starlight): .mdx instead
of .md, Starlight-style title="..." code fence labels instead of
Hugo's filename/linenos shortcode, and a ":::note" aside linking back
to each entry's source file. Frontmatter description is now pulled
from the JSON Description field. Also fixes a pre-existing bug where
the embedded JSON snippets were always missing their own closing
brace.

* Add seanh1995 as codeowner for the dev docs generator

* Wire up Code Reference section in docs sidebar

Adds an Architecture & Design page plus autogenerated Tweaks/Features
Reference groups pointing at docs/src/content/docs/code-reference, and
fixes the editLink base URL to the promoted docs/ path.

* Port architecture doc to code-reference and drop stale hyperv sample

Moves the Hugo-era architecture doc into
docs/src/content/docs/code-reference/architecture.mdx: drops the
Hugo-only weight/toc frontmatter, converts the embedded code fences to
Starlight's title="..." syntax, and repoints the "Related
Documentation" links at this site's actual slugs. Also removes the
hand-written reference/tweaks/hyperv.mdx placeholder now that the
generator produces the real page under code-reference/features.

* Keep pre-conversion backup of devdocs-generator.ps1

Snapshot of the script before it was pointed at the Astro/Starlight
docs site, for reference.

* updated workflow

* Update CODEOWNERS

* Hide edit-page link on the docs landing page

The splash-template landing page isn't a source doc meant to be edited
via GitHub like the rest of the guides, so skip showing the link.

* Add site footer with copyright line, matching the old Hugo docs

The Hugo site rendered "© {year} Chris Titus Tech. All rights
reserved." in its footer; Starlight's default footer had no
equivalent. Override it to append the same copyright line below the
existing edit-link/pagination row, and collapse that row entirely
when it has nothing in it (e.g. pages with editUrl disabled and no
prev/next) instead of leaving an empty gap.

* Fix vertical alignment and size of the arrow icon in hero/CTA buttons

The right-arrow icon read as floating above the button label's
baseline. Root cause was partly a genuine optical mismatch (fixed with
a small position nudge scoped to just the arrow icon, so it doesn't
also shift the unaffected GitHub icon) and partly the final CTA's copy
getting wrapped in a <p> by MDX's markdown parser, which behaved
slightly differently under the flex layout than the Hero component's
plain text node. Switching the CTA button's label to a JS string
expression avoids the wrapper and keeps both buttons' markup, and
rendering, identical.

* Use the dark fork-button screenshot in the contributing guide

Drop the unused light-mode variant and point the guide at
Fork-Button-Dark.png instead.

* Remove old Hugo docs site and pre-conversion backup files

The docs have moved to the Astro/Starlight site; the Hugo site
(docs-old/), its workflow backup, and the devdocs-generator.ps1
pre-conversion snapshot are no longer needed.

* keeping ai happy

* Bump sharp to 0.35.3 in docs site
2026-07-31 15:29:00 -05:00
Kobi HikriandGitHub 5f37ef4a80 ci: read the PR body from env instead of interpolating it into the shell (#4880) 2026-07-28 14:11:17 -05:00
OmarandGitHub d790118546 Add DNS-over-HTTPS (DoH) support (#4856)
* feat: Add DoH templates for DNS providers in configuration

* feat: Implement DoH support for DNS configuration and management

* feat(pester): enhance DNS tests to include DoH server address handling and template application

* fix: address codex feedback

* fix: update existing DoH server entries

* fix: enable DoH auto-upgrade

* fix: handle DNS setup failures

* fix: remove DoH state on DHCP reset
2026-07-28 14:09:44 -05:00
OmarGitHubChris Tituscoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
5ebb24b107 Refactor Win11 Creator ISO workflow (#4862)
* refactor: simplify Win11 Creator ISO workflow

Keep no-driver ISO generation on the fast copy-only path.

Inject exported drivers with one selected-index WIM mount, one Add-Driver pass, and one commit.

Limit WinPE staging to boot-storage drivers and improve workflow validation coverage.

* refactor: stage Win11 setup script fallback

Copy the prepared setup script payloads into sources/$//Setup/Scripts so setup media does not depend solely on answer-file extension extraction.

Keep the existing autounattend execution path unchanged and cover the fallback files in the Win11 Creator tests.

* refactor: address codex feedback

* refactor: run ISO verification in runspace

Rename the ISO logger to Write-WinUtilISOLog so the shared runspace pool imports it automatically. Run Mount & Verify off the WPF thread with dispatcher-safe UI updates, and add Pester coverage for the runspace and logger contract.

* refactor: address ISO review feedback

Keep the selected ISO stable during background verification. Apply ContentDeliveryManager settings to both the first account and the default profile. Block FAT32 USB creation when install.esd exceeds the supported file size.

* refactor: address ISO setup edge cases

Set BypassNRO before OOBE so local account setup is available during Windows Setup.

Detect registered DISM mounts during driver-injection cleanup so partial mount failures are discarded.

* refactor: address ISO review edge cases

Use the actual FAT32 file limit for install.esd USB checks.

Disable ISO modification while mount verification is running.

Apply unsupported-hardware notice suppression to the first user profile.

* refactor: stage ISO setup safeguards earlier

Set device encryption and reserved-storage registry guards before OOBE.

Enable the OEM configuration-set fallback when setup scripts are staged there.

* Update functions/private/Invoke-WinUtilISOUSB.ps1

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: Chris Titus <contact@christitus.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-07-28 14:08:56 -05:00
Chris TitusandGitHub fae58d73c4 Update sponsors in README (#4881) 2026-07-28 11:10:13 -05:00
Chris TitusandGitHub 9e2989964e Update sponsors in README (#4878) 2026-07-27 11:14:18 -05:00
OmarandGitHub 50be7390e5 fix: restore WindowStyle to SingleBorderWindow for proper window framing (#4868) 2026-07-22 12:42:25 -05:00
Chris TitusandGitHub 8ab02ae756 chore: Update generated dev docs (#4873) 2026-07-22 12:42:13 -05:00
OmarandGitHub 7d1a03dcc9 bugfix(tweaks): fix OneDrive uninstall path (#4864)
* bugfix(tweaks): fix OneDrive uninstall path

* bugfix(tweaks): use SystemRoot for OneDrive path
2026-07-22 12:41:48 -05:00
Paweł GwozdowskiandGitHub 5a4c9c883d Revert "Rework contributing.md (#4567)" (#4855) 2026-07-22 12:34:14 -05:00
Chris Titus 5c104d02e2 Update automated update PR workflows and filter release notes 2026-07-16 13:39:33 -05:00
Chris TitusandGitHub 06f33e88ba Fix Show Installed Apps reliability and selection (#4850)
* Fix Windows PowerShell runspace cleanup callback

* Fix installed app package ID matching

* Synchronize installed app selection UI

* Streamline installed app detection

* Avoid installed app UI runspace deadlock
2026-07-16 13:30:12 -05:00
b9dee86694 refactor: style and align Install tab filter chips (#4848)
* refactor: implement FilterChipStyle for Install tab category filters

- Created a dedicated FilterChipStyle style block with custom padding, cursor, and height definitions

- Applied FilterChipStyle to all category filter buttons

- Added a new 'Filters' TextBlock section title aligned with the sidebar actions

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Chris Titus <contact@christitus.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-16 10:37:25 -05:00
OmarandGitHub 3d1904ebbe fix: wrap Tweaks header buttons to prevent layout clipping (#4847) 2026-07-16 10:29:16 -05:00
Chris TitusandGitHub 70f1c50bdd chore: Update generated dev docs (#4846) 2026-07-15 23:37:16 -05:00
2e5df82979 Update sponsors in README (#4820)
Co-authored-by: ChrisTitusTech <7896101+ChrisTitusTech@users.noreply.github.com>
2026-07-15 23:37:06 -05:00
Chris TitusandGitHub 29595f90e2 Fix progress, update profiles, and documentation links (#4845)
* Improve O&O ShutUp10++ download flow

* Refine Windows Update profile behavior and docs

* Fix documentation link regressions

* Restore updates when applying recommended profile
2026-07-15 23:36:46 -05:00
Chris TitusandGitHub 9ed06e793a Replace install progress overlay with shared indicator (#4844)
* Use shared progress for app workflows

* Remove legacy install progress overlay

* Document shared app progress indicator

* Address progress review feedback

* Track all Win11 ISO progress

* Restore Win11 Creator work on relaunch
2026-07-15 22:35:58 -05:00
51cb3811dd Add category search chips to Install tab for improved filtering (#4826)
* Add Quick Category Search Chips to Install tab

Add category shortcut chips on the Install tab that insert the category
name into the existing search box. Append each app's category as a
description tag so the existing description search filters by category.
Reuses the standard button style and existing search; no search, install,
or preset logic is changed.

* Fix install category chip filtering

* Fix category filter refresh behavior

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-15 20:54:22 -05:00
975616b58f Fix search bar overflowing behind icon buttons at narrow window sizes (#4831)
* fix(search): make search bar stretch instead of overflowing at narrow window sizes

* fix(ui): sync runtime MinWidth override with XAML value

Add_Loaded was hardcoding $sync.Form.MinWidth back to 1000 after
load, overriding the 1150 set in inputXML.xaml and letting the
window shrink below the space the search bar/toolbar layout needs.

* fix(ui): address responsive search review feedback

* fix(ui): enforce usable toolbar width

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-15 20:41:41 -05:00
11783c75a8 fix(dns): scope leaked ToggleButton style and theme the ComboBox dropdown popup (#4835)
Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-15 17:09:10 -05:00
13a18eeeb2 Add maximaze button (#4841)
* Add maximize button logic and update assets

* Add maximize button with theming

* delelte logo

* Center and restyle the window control buttons

* Fix window state test setup

---------

Co-authored-by: aran628 <aran2014+@gmail.com>
Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-15 16:59:51 -05:00
Chris TitusandGitHub 822003d87f Fix AppX detection and add package restore support (#4842)
* Fix installed AppX package detection

* Add AppX package restore workflow

* Add AppX operation progress feedback

* Fix AppX operation launch race

* Handle AppX workflow failures
2026-07-15 15:57:56 -05:00
c8c3c7869f Add window-level progress indicator for Run Tweaks and Undo (#4830)
* feat(tweaks): add window-level progress indicator for Run Tweaks and Undo

* Hide completed tweaks progress on next action

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-15 14:17:42 -05:00
Paweł GwozdowskiandGitHub 157a66b14d Update Invoke-WPFUIElements.ps1 (#4824) 2026-07-13 13:20:53 -05:00
9791386f53 fix: resolve silent failures in AppX removal and PS7 DISM bugs (#4822)
* fix: resolve silent failures in AppX removal and PS7 DISM bugs

- Fixed a bug where Remove-AppxPackage failed silently in PowerShell 7 due to pipeline binding issues. We now explicitly loop through Get-AppxPackage results and pass PackageFullName directly.
- Added wildcard matching to Get-AppxPackage and Get-AppxProvisionedPackage to reliably locate packages regardless of short name vs family name variations.
- Offloaded Get-AppxProvisionedPackage and Remove-AppxProvisionedPackage execution to Windows PowerShell 5.1 (powershell.exe) to bypass PowerShell 7 DISM COM exceptions ("Class not registered") and performance hangs.
- Deduplicated AppX removal logic by calling Remove-WinUtilAPPX directly from Invoke-WPFAppxRemoval instead of copying the implementation.

* refactor(Remove-WinUtilAPPX): use script block to improve readability

* feat: enhance AppX removal process and add provisioned package removal function

* fix(tests): update AppX removal tests

This also adds tests for the new Remove-WinUtilProvisionedAPPX functionality

* Move AppX removal under Tweaks

* Address AppX removal review feedback

* Complete AppX removal error handling

* Prevent AppX cleanup confirmation prompts

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-13 13:16:35 -05:00
Chris TitusandGitHub c8e756dc11 chore: Update generated dev docs (#4838) 2026-07-13 11:40:20 -05:00
Sean (ANGRYxScotsman)andGitHub 9e21c8f4a7 Updated ConsumerFeatures description and small dev doc edit (#4817)
* Update tweaks.json

* Update _index.md

* Update _index.md
2026-07-13 11:39:49 -05:00
Chris TitusandGitHub 8cd8679512 chore: Update generated dev docs (#4837) 2026-07-13 11:37:52 -05:00
ac11c73b64 feat(legacy-panels): add Firewall, Security, Programs, and Mouse to L… (#4809)
* feat(legacy-panels): add Firewall, Security, Programs, and Mouse to Legacy Windows Panels

- Added `firewall.cpl`, `wscui.cpl`, `appwiz.cpl`, and `main.cpl` to `config/feature.json`

* chore(legacy-panels): alphabetize panel entries

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-13 11:37:22 -05:00
KarimandGitHub 9d67514bf9 feat(apps): add gsudo (#4810)
- Added gsudo to the Pro Tools category to provide a native sudo equivalent for Windows terminals.
2026-07-13 10:26:44 -05:00
Chris TitusandGitHub fea9f4e869 chore: Update generated dev docs (#4836) 2026-07-13 10:26:33 -05:00
1aa0dd90ef prevent-automatic-download-of-applications-associated-with-device-metadata (#4827)
* add tweak

* add devdocs

* add devdocs

---------

Co-authored-by: matthewkasiski <matt@matthewkasiski.me>
2026-07-13 10:25:58 -05:00
Yayo RazoandGitHub 90a19685f5 fix(install): use correctly-scoped $app instead of undefined $Apps in app entry rendering (#4834) 2026-07-13 04:23:24 -05:00
007995c112 Improve install app card UI (#4771)
Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-11 11:21:59 -05:00
Chris Titus 0dcd361c51 Remove slash commands for contributors 2026-07-09 14:25:50 -05:00
eduardodepaivaandGitHub aeaef46e30 Fix names in applications.json. (#4819) 2026-07-08 10:25:15 -05:00
Ivan LepekhaandGitHub e0dfeb4f4d Remove Lightshot entry from applications.json (#4808)
Removed Lightshot application entry from applications.json
2026-07-04 09:52:55 -05:00
Chris Titus 1c7ee06bbe chore: skip automated updates in changelog 2026-07-04 00:58:24 -05:00
ed6de94c46 Update sponsors in README (#4544)
Co-authored-by: ChrisTitusTech <7896101+ChrisTitusTech@users.noreply.github.com>
2026-07-04 00:52:10 -05:00
Chris TitusandGitHub 640b02868a fix(iso): resolve windows update re-enabling failures on first boot (#4807)
* fix iso update service reenable

* test allow font scale sync state
2026-07-04 00:50:45 -05:00
29b269201d Add font scaling keyboard and mouse shortcuts (#4781)
* Add font scaling shortcuts

* Fix font scaling shortcut modifiers

---------

Co-authored-by: Chris Titus <contact@christitus.com>
2026-07-04 00:32:39 -05:00
272 changed files with 14585 additions and 3359 deletions
+5 -1
View File
@@ -1,2 +1,6 @@
# Chris rules EVERYTHING (including paths listed below)
* @ChrisTitusTech
* @ChrisTitusTech
# Seanh1917 (ANGRYxScotsmans) is the docs guy
docs/ @ChrisTitusTech @seanh1995
tools/devdocs-generator.* @ChrisTitusTech @seanh1995
+85 -116
View File
@@ -1,149 +1,118 @@
## Contributing Code
# How to Contribute?
### Before You Start
## Testing
- Keep each pull request focused on a single feature or fix.
- Avoid unnecessary formatting changes or large unrelated edits.
- Document what changed and why in your PR description.
* Test the latest changes to WinUtil by running the pre-release and reporting issues you are encountering to help us continually improve WinUtil!
---
#### **Run the latest pre-release**
## Basic Git Workflow
### 1. Fork the Repository
Go to the ChrisTitusTech/winutil repository on GitHub and click the Fork button in the top right corner.
<img width="171" height="50" alt="{650A4723-F38A-44A4-9820-D232BC87C8A0}" src="https://github.com/user-attachments/assets/a214f27c-2fee-444a-920f-d87b14f5896f" />
---
### 2. Clone Your Fork
```powershell
git clone https://github.com/YOUR_USERNAME/winutil.git
cd winutil
```ps1
irm https://christitus.com/windev | iex
```
---
> [!CAUTION]
> **Keep in mind:** This is a pre-release and should be treated as such. It exists for developers to test the utility and report or fix bugs before they get added to the stable release. Don't use it in production!
### 3. Create a Branch
## Issues
Never work directly on `main`.
* If you encounter any challenges or problems with the script, I kindly request that you submit them via the "Issues" tab on the GitHub repository. By filling out the provided template, you can provide specific details about the issue, allowing me (and others in the community) to promptly address any bugs or consider feature requests.
Create a branch related to your change:
## Contribute Code
```powershell
git checkout -b feature-name
* Pull requests are now handled directly on the **MAIN branch**. This was done since we can now select specific releases to launch via releases in GitHub.
* If you're doing code changes, then you can submit a PR to the `main` branch.
> [!IMPORTANT]
> Do not use a code formatter, make massive amounts of line changes, or make multiple feature changes. EACH FEATURE CHANGE SHOULD BE ITS OWN PULL REQUEST!
>
> Do not open a pull request that adds support for other languages to WinUtil for now, until we decide how we want to move forward with language support.
* When creating pull requests, it is essential to thoroughly document all changes made. This includes, but is not limited to, documenting any additions made to the `tweaks` section and corresponding `undo tweak`, so users are able to remove the newly added tweaks if necessary, and comprehensive documentation is required for all code changes. Document your changes and briefly explain why you made your changes in your Pull Request Description. Failure to adhere to this format may result in the denial of the pull request. Additionally, any code lacking sufficient documentation may also be denied.
* By following these guidelines, we can maintain a high standard of quality and ensure that the codebase remains organized and well-documented.
> [!NOTE]
> When creating a function, please include "WPF" or "WinUtil" in the file name so it can be loaded into the runspace.
## Walk through
* This is a guide for beginners. If you are still having issues, look at the following official GitHub documentation:
* [Commit through WEB](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits)
* [Commit through GitHub Desktop](https://docs.github.com/en/desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop#about-commits)
* [Create a Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
### Overview
```mermaid
%%{init: {"flowchart": {"curve": "cardinal"}} }%%
graph TD
A[Fork Project] --> B[Clone Repository];
B --> C[Create New Branch];
C --> D[Make Changes];
D --> G[Test Changes];
G --> H{Tests Passed?};
H -->|Yes| E[Commit Changes];
H -->|No| J[Fix Issues];
J --> G;
E --> F[Push Branch];
F --> K[Create Pull Request];
K --> L[Fill out PR template];
classDef default stroke:#333,stroke-width:4px,font-size:12pt;
```
Example:
> [!NOTE]
> This is a diagram to guide you through the process. It may vary depending on the type of change you're making.
```powershell
git checkout -b add-firefox-tweak
```
### Fork the Repo
* Fork the WinUtil Repository [here](https://github.com/ChrisTitusTech/winutil) to create a copy that will be available in your repository list.
---
![Fork Image](/docs/src/assets/contributing/Fork-Button-Dark.png)
### 4. Edit the Code
### Clone the Fork
> [!TIP]
> While you can make your changes directly through the Web, we recommend cloning the repo to your device using the application GitHub Desktop (available in WinUtil) to test your fork easily.
Open the project in your preferred text editor and make your changes.
* Install GitHub Desktop if it is not already installed.
* Log in using the same GitHub account you used to fork WinUtil.
* Choose the fork under "Your Repositories" and press "clone {repo name}"
* Create a new branch and name it something relatable to your changes.
Keep changes small and focused.
* Now you can modify WinUtil to your liking using your preferred text editor.
---
### 5. Test Your Changes
### Testing your changes
Open Powershell as Administrator.
* To test to see if your changes work as intended, run the following commands in a PowerShell terminal as admin:
Go to the project folder:
* Change the directory where you are running the commands to the forked project.
* `cd {path to the folder with the compile.ps1}`
* Run the following command to compile and run WinUtil:
* `.\Compile.ps1 -run`
```powershell
cd path\to\winutil
```
![Compile](/docs/src/assets/contributing/Complie.png)
Run:
```powershell
.\Compile.ps1 -Run
```
Open PowerShell as Administrator.
Verify:
* After seeing that your changes work properly, feel free to commit the changes to the repository and make a PR. For help on that, follow the documentation below.
- WinUtil launches correctly
- Your feature works
- Nothing else breaks
If something fails, fix it before committing.
### Committing the changes
* Before committing your changes, please discard changes made to the `winutil.ps1` file, like the following:
---
![Push Commit Image](/docs/src/assets/contributing/Discard-GHD.png)
### 6. Review Your Changes
* Now, commit your changes once you are happy with the result.
Check what changed:
![Commit Image](/docs/src/assets/contributing/Commit-GHD.png)
```powershell
git status
```
* Push the changes to upload them to your fork on GitHub.
Review the diff:
![Push Commit Image](/docs/src/assets/contributing/Push-Commit.png)
```powershell
git diff
```
Make sure you did not accidentally modify unrelated files.
---
### 7. Commit Your Changes
Stage files:
```powershell
git add .
```
Commit them:
```powershell
git commit -m "Add feature description"
```
Example:
```powershell
git commit -m "Add Firefox package tweak"
```
---
### 8. Push Your Branch
```powershell
git push origin branch-name
```
Example:
```powershell
git push origin add-firefox-tweak
```
---
### 9. Open a Pull Request
Go to your fork on GitHub.
GitHub will show a button to create a pull request.
<img width="1009" height="71" alt="{C8C6A3CC-79D4-44FD-A54C-4C5717F12730}" src="https://github.com/user-attachments/assets/0419d193-d4e7-47c0-87cf-b986742201a0" />
Before submitting:
- Explain what changed
- Explain why you changed it
- Make sure unrelated files are not included
Once submitted, maintainers will review your PR.
### Making a PR
* To make a PR on your repo under a new branch linking to the main branch, a button will show and say Preview and Create pull request. Click that button and fill in all the information that is provided on the template. Once all the information is filled in correctly, check your PR to make sure there is no WinUtil.ps1 file attached to the PR. Once everything is good, make the PR and wait for Chris (the maintainer) to accept or deny your PR. Once it is accepted by Chris, you will be able to see your changes in the "/windev" build.
* If you do not see your feature in the main "/win" build, that is fine. All new changes go into the /windev build to make sure everything is working OK before going fully public.
* Congratulations! You just submitted your first PR. Thank you so much for contributing to WinUtil.
+1 -1
View File
@@ -7,7 +7,7 @@
Questa utility è una raccolta di attività Windows che eseguo personalmente su ogni sistema che utilizzo. È progettata per snellire le *installazioni*, rimuovere i componenti superflui tramite *ottimizzazioni*, risolvere problemi tramite la *configurazione*, e riparare *aggiornamenti* di Windows. Sono estremamente selettivo riguardo ai contributi per mantenere questo progetto pulito ed efficiente.
![screen-install](/docs/assets/images/Title-Screen.png)
![screen-install](/docs/src/assets/branding/title-screen.png)
## 💡 Come usarlo
+2 -2
View File
@@ -1,4 +1,4 @@
name: Auto-merge Docs PRs
name: Auto-merge Automated Update PRs
on:
pull_request:
@@ -8,7 +8,7 @@ on:
jobs:
auto-merge:
if: github.event.pull_request.head.ref == 'docs-update' && (github.event.pull_request.user.login == 'ChrisTitusTech' || github.event.pull_request.user.login == 'github-actions[bot]')
if: (github.event.pull_request.head.ref == 'docs-update' || github.event.pull_request.head.ref == 'sponsors-update') && (github.event.pull_request.user.login == 'ChrisTitusTech' || github.event.pull_request.user.login == 'github-actions[bot]')
runs-on: ubuntu-latest
permissions:
pull-requests: write
@@ -18,10 +18,11 @@ jobs:
- name: Extract Discussion Number & Close If any Were Found
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_BODY: ${{ github.event.pull_request.body }}
if: github.event.pull_request.merged == true
id: extract-discussion
run: |
pr_body="${{ github.event.pull_request.body }}"
pr_body="$PR_BODY"
discussion_ids=$(echo "$pr_body" | grep -oP '(?i)(resolve|fix|close)[s|d]? #\K[0-9]+')
if [ -z "$discussion_ids" ]; then
+4 -76
View File
@@ -1,4 +1,4 @@
name: Deploy Hugo site to Pages
name: Deploy Astro site to Pages
on:
push:
@@ -6,106 +6,34 @@ on:
- main
paths:
- "docs/**"
- "config/tweaks.json"
- "config/feature.json"
- "functions/**"
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
pull-requests: write
concurrency:
group: "pages"
cancel-in-progress: false
defaults:
run:
shell: bash
jobs:
build:
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
run: |
Set-Location tools
./devdocs-generator.ps1
- name: Create Pull Request
id: cpr
uses: peter-evans/create-pull-request@v8
- name: Install, build, and upload your site
uses: withastro/action@v6
with:
token: ${{ secrets.AUTO_MERGE }}
commit-message: 'chore: Update generated dev docs'
title: 'chore: Update Generated Dev Docs'
body: 'Automated update of generated documentation from JSON sources'
branch: docs-update
delete-branch: true
add-paths: |
docs/content/dev/
config/tweaks.json
config/feature.json
labels: |
automated
documentation
- name: Check outputs
run: |
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
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'
@@ -1,77 +0,0 @@
name: Issue slash commands
on:
issue_comment:
types: [created, edited]
jobs:
issueCommands:
# Skip this job if the comment was created/edited on a PR
if: ${{ !github.event.issue.pull_request }}
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: none
contents: read
steps:
- name: Process slash command
uses: actions/github-script@v9
with:
script: |
const allowedUsers = ["ChrisTitusTech", "og-mrk", "Marterich", "MyDrift-user", "Real-MullaC", "CodingWonders", "GabiNun2", "FluffyPunk"];
const commenter = context.payload.comment.user.login;
// Authorization check first — before any parsing of comment content
if (!allowedUsers.includes(commenter)) {
console.log(`User ${commenter} is not in the allowlist. Skipping.`);
return;
}
// Read comment body as data, never interpolated into shell
const body = context.payload.comment.body;
const issueNumber = context.issue.number;
const owner = context.repo.owner;
const repo = context.repo.repo;
// /label 'name' or /label name
const labelMatch = body.match(/\/label\s+'([^']+)'|\/label\s+(\S+?)(?:\s|$)/);
if (labelMatch) {
const labelName = (labelMatch[1] || labelMatch[2]).trim();
console.log(`Adding label: ${labelName}`);
await github.rest.issues.addLabels({
owner, repo, issue_number: issueNumber,
labels: [labelName],
});
}
// /unlabel 'name' or /unlabel name
const unlabelMatch = body.match(/\/unlabel\s+'([^']+)'|\/unlabel\s+(\S+?)(?:\s|$)/);
if (unlabelMatch) {
const labelName = (unlabelMatch[1] || unlabelMatch[2]).trim();
console.log(`Removing label: ${labelName}`);
await github.rest.issues.removeLabel({
owner, repo, issue_number: issueNumber,
name: labelName,
});
}
// /close (optionally with 'not planned')
if (body.includes('/close')) {
const stateReason = body.includes('not planned') ? 'not_planned' : 'completed';
console.log(`Closing issue (reason: ${stateReason})`);
await github.rest.issues.update({
owner, repo, issue_number: issueNumber,
state: 'closed',
state_reason: stateReason,
});
}
// /open or /reopen
if (body.includes('/open') || body.includes('/reopen')) {
console.log('Reopening issue');
await github.rest.issues.update({
owner, repo, issue_number: issueNumber,
state: 'open',
});
}
+22 -5
View File
@@ -31,21 +31,23 @@ jobs:
Set-ExecutionPolicy Bypass -Scope Process -Force; ./Compile.ps1
continue-on-error: false # Directly fail the job on error, removing the need for a separate check
- name: Create Pull Request for Updated JSON Links
- name: Create Pull Request for Updated Docs and JSON Links
id: cpr
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.AUTO_MERGE }}
commit-message: 'chore: Update documentation links in JSON configs'
title: 'chore: Update documentation links in JSON configs'
body: 'Automated update of documentation links in JSON configs from pre-release build'
commit-message: 'chore: Update generated dev docs and JSON links'
title: 'chore: Update generated dev docs and JSON links'
body: 'Automated update of generated documentation and JSON config links from pre-release build'
branch: docs-update
delete-branch: true
add-paths: |
docs/src/content/docs/code-reference/
config/tweaks.json
config/feature.json
labels: |
automated
documentation
skip-changelog
- name: Check outputs
@@ -109,6 +111,21 @@ jobs:
config-name: release-drafter.yml
version: ${{ env.VERSION }}
- name: Remove Automated Updates from Release Notes
id: filter_notes
shell: pwsh
env:
RELEASE_NOTES: ${{ steps.generate_notes.outputs.body }}
run: |
$filteredNotes = ($env:RELEASE_NOTES -split '\r?\n' | Where-Object {
$_ -notmatch '(?i)Update (Generated Dev Docs|Sponsors)'
}) -join "`n"
$delimiter = [guid]::NewGuid().ToString()
"body<<$delimiter" >> $env:GITHUB_OUTPUT
$filteredNotes >> $env:GITHUB_OUTPUT
$delimiter >> $env:GITHUB_OUTPUT
- name: Create and Upload Release
id: create_release
uses: softprops/action-gh-release@v3
@@ -116,7 +133,7 @@ jobs:
tag_name: ${{ env.VERSION }}
name: Pre-Release ${{ env.VERSION }}
body: |
${{ steps.generate_notes.outputs.body }}
${{ steps.filter_notes.outputs.body }}
![GitHub Downloads (specific asset, specific tag)](https://img.shields.io/github/downloads/ChrisTitusTech/winutil/${{ env.VERSION }}/winutil.ps1)
append_body: false
+4 -2
View File
@@ -26,13 +26,15 @@ jobs:
id: cpr
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.AUTO_MERGE }}
commit-message: 'Update sponsors in README'
title: 'chore: Update Sponsors README'
body: 'Automated update of sponsors section'
branch: sponsors-update
delete-branch: true
labels: automated
labels: |
automated
skip-changelog
- name: Check outputs
run: |
+4 -4
View File
@@ -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/
+1
View File
@@ -189,5 +189,6 @@ When the user corrects an agent approach, add or tighten one concrete rule here
- When the active log file is owned by `Start-Transcript`, do not call `Add-Content` against that file; write to host output so the transcript captures the line in the same log file without recording a terminating-error diagnostic.
- Log install/uninstall package names and package-manager IDs before queuing background runspace work; do not rely on runspace host output for the package identity.
- For Win11 Creator, start each new ISO modification in a fresh `WinUtil_Win11ISO_*` temp directory; existing-work detection is only for resuming/exporting already modified media.
- For Win11 Creator driver injection, keep offline WIM servicing to one mount, one `/Add-Driver`, and one commit; do not export editions or run unrelated WIM cleanup, and reject damaged metadata before ISO export.
- For Script Analyzer cleanup, fix actionable source warnings first and do not globally suppress accepted convention warnings such as plural names, `ShouldProcess` on UI helpers, `$global:sync`, or compile-time cross-file false positives.
- For DNS DHCP reset, keep the cmdlet reset and explicitly set IPv4 and IPv6 DNS source to DHCP.
+3 -2
View File
@@ -6,7 +6,8 @@
A curated compilation of Windows system tasks streamline **installs**, debloat with **tweaks**, troubleshoot with **config**, and configure **Windows updates**. Run it fresh on every new Windows install.
![Title Screen](/docs/assets/images/Title-Screen.png)
![Title Screen](docs/src/assets/branding/title-screen.png)
---
@@ -77,7 +78,7 @@ See https://github.com/ChrisTitusTech/winutil/blob/main/.github/CONTRIBUTING.md
These are the sponsors that help keep this project alive with monthly contributions.
<!-- sponsors --><a href="https://github.com/dwelfusius"><img src="https:&#x2F;&#x2F;github.com&#x2F;dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https:&#x2F;&#x2F;github.com&#x2F;mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https:&#x2F;&#x2F;github.com&#x2F;jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https:&#x2F;&#x2F;github.com&#x2F;robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/paulsheets"><img src="https:&#x2F;&#x2F;github.com&#x2F;paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https:&#x2F;&#x2F;github.com&#x2F;djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https:&#x2F;&#x2F;github.com&#x2F;anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https:&#x2F;&#x2F;github.com&#x2F;FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https:&#x2F;&#x2F;github.com&#x2F;DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https:&#x2F;&#x2F;github.com&#x2F;DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https:&#x2F;&#x2F;github.com&#x2F;KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/andrewpayne68"><img src="https:&#x2F;&#x2F;github.com&#x2F;andrewpayne68.png" width="60px" alt="User avatar: Andrew P" /></a><!-- sponsors -->
<!-- sponsors --><a href="https://github.com/ysaito8015"><img src="https:&#x2F;&#x2F;github.com&#x2F;ysaito8015.png" width="60px" alt="User avatar: Yusuke Saito" /></a><a href="https://github.com/dwelfusius"><img src="https:&#x2F;&#x2F;github.com&#x2F;dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https:&#x2F;&#x2F;github.com&#x2F;mews-se.png" width="60px" alt="User avatar: Martin" /></a><a href="https://github.com/jdiegmueller"><img src="https:&#x2F;&#x2F;github.com&#x2F;jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https:&#x2F;&#x2F;github.com&#x2F;robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/paulsheets"><img src="https:&#x2F;&#x2F;github.com&#x2F;paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https:&#x2F;&#x2F;github.com&#x2F;djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https:&#x2F;&#x2F;github.com&#x2F;anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https:&#x2F;&#x2F;github.com&#x2F;FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https:&#x2F;&#x2F;github.com&#x2F;DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https:&#x2F;&#x2F;github.com&#x2F;DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https:&#x2F;&#x2F;github.com&#x2F;KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/andrewpayne68"><img src="https:&#x2F;&#x2F;github.com&#x2F;andrewpayne68.png" width="60px" alt="User avatar: Andrew P" /></a><a href="https://github.com/seanh1995"><img src="https:&#x2F;&#x2F;github.com&#x2F;seanh1995.png" width="60px" alt="User avatar: Sean (ANGRYxScotsman)" /></a><a href="https://github.com/Abs313a"><img src="https:&#x2F;&#x2F;github.com&#x2F;Abs313a.png" width="60px" alt="User avatar: Abs" /></a><!-- sponsors -->
---
+12 -12
View File
@@ -530,6 +530,15 @@
"winget": "TechPowerUp.GPU-Z",
"foss": false
},
"gsudo": {
"category": "Pro Tools",
"choco": "gsudo",
"content": "gsudo",
"description": "gsudo is a sudo equivalent for Windows. It allows you to run commands with elevated administrative privileges directly within the current console window.",
"link": "https://github.com/gerardog/gsudo",
"winget": "gerardog.gsudo",
"foss": true
},
"helium": {
"category": "Browsers",
"choco": "helium",
@@ -719,15 +728,6 @@
"winget": "XBMCFoundation.Kodi",
"foss": true
},
"lightshot": {
"category": "Multimedia Tools",
"choco": "lightshot",
"content": "Lightshot",
"description": "The fastest way to take a customizable screenshot.",
"link": "https://app.prntscr.com/",
"winget": "Skillbrains.Lightshot",
"foss": false
},
"lazygit": {
"category": "Development",
"choco": "lazygit",
@@ -1207,7 +1207,7 @@
"processmonitor": {
"category": "Microsoft Tools",
"choco": "procexp",
"content": "SysInternals Process Monitor",
"content": "Process Monitor",
"description": "SysInternals Process Monitor is an advanced monitoring tool that shows real-time file system, registry, and process/thread activity.",
"link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon",
"winget": "Microsoft.Sysinternals.ProcessMonitor",
@@ -1396,7 +1396,7 @@
"tcpview": {
"category": "Microsoft Tools",
"choco": "tcpview",
"content": "SysInternals TCPView",
"content": "TCPView",
"description": "SysInternals TCPView is a network monitoring tool that displays a detailed list of all TCP and UDP endpoints on your system.",
"link": "https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview",
"winget": "Microsoft.Sysinternals.TCPView",
@@ -1513,7 +1513,7 @@
"ungoogled": {
"category": "Browsers",
"choco": "ungoogled-chromium",
"content": "Ungoogled",
"content": "Ungoogled Chromium",
"description": "Ungoogled Chromium is a version of Chromium without Google's integration for enhanced privacy and control.",
"link": "https://github.com/Eloston/ungoogled-chromium",
"winget": "eloston.ungoogled-chromium",
+60 -30
View File
@@ -4,203 +4,232 @@
"Content": "Feedback Hub",
"Description": "Allows users to submit bug reports, feature suggestions, and diagnostic data directly to Microsoft.",
"Panel": "0",
"PackageId": "Microsoft.WindowsFeedbackHub"
"PackageId": "Microsoft.WindowsFeedbackHub",
"StoreId": "9NBLGGH4R32N"
},
"WPFAppxMicrosoft_GetHelp": {
"Category": "Microsoft Apps",
"Content": "Get Help",
"Description": "Provides access to automated troubleshooting guides, support documentation, and direct Microsoft customer assistance.",
"Panel": "0",
"PackageId": "Microsoft.GetHelp"
"PackageId": "Microsoft.GetHelp",
"StoreId": "9PKDZBMV1H3T"
},
"WPFAppxMicrosoft_OutlookForWindows": {
"Category": "Microsoft Apps",
"Content": "Outlook for Windows",
"Description": "Provides modern email management, calendar scheduling, and contact organization features.",
"Panel": "0",
"PackageId": "Microsoft.OutlookForWindows"
"PackageId": "Microsoft.OutlookForWindows",
"StoreId": "9NRX63209R7B"
},
"WPFAppxMSTeams": {
"Category": "Microsoft Apps",
"Content": "Microsoft Teams",
"Description": "Facilitates instant messaging, video conferencing, file sharing, and workspace collaboration.",
"Panel": "0",
"PackageId": "MSTeams"
"PackageId": "MSTeams",
"StoreId": "XP8BT8DW290MPQ"
},
"WPFAppxClipchamp_Clipchamp": {
"Category": "Utilities & Productivity",
"Content": "Clipchamp",
"Description": "Provides a user-friendly video editor with built-in templates, effects, and timeline editing tools.",
"Panel": "0",
"PackageId": "Clipchamp.Clipchamp"
"PackageId": "Clipchamp.Clipchamp",
"StoreId": "9P1J8S7CCWWT"
},
"WPFAppxMicrosoft_MicrosoftOfficeHub": {
"Category": "Microsoft Apps",
"Content": "Microsoft 365",
"Description": "Serves as a centralized launcher and dashboard for accessing cloud-based Microsoft 365 apps and recent documents.",
"Panel": "0",
"PackageId": "Microsoft.MicrosoftOfficeHub"
"PackageId": "Microsoft.MicrosoftOfficeHub",
"StoreId": "9WZDNCRD29V9"
},
"WPFAppxMicrosoft_ZuneMusic": {
"Category": "Utilities & Productivity",
"Content": "Media Player",
"Description": "Plays local audio and video files with modern playlist management and casting capabilities.",
"Panel": "0",
"PackageId": "Microsoft.ZuneMusic"
"PackageId": "Microsoft.ZuneMusic",
"StoreId": "9WZDNCRFJ3PT"
},
"WPFAppxMicrosoft_BingSearch": {
"Category": "Bing & Web Services",
"Content": "Bing Search",
"Description": "Integrates Microsoft Bing search capabilities and web services directly into the operating system.",
"Panel": "1",
"PackageId": "Microsoft.BingSearch"
"PackageId": "Microsoft.BingSearch",
"StoreId": "9NZBF4GT040C"
},
"WPFAppxMicrosoftCorporationII_QuickAssist": {
"Category": "Utilities & Productivity",
"Content": "Quick Assist",
"Description": "Enables secure remote technical support and screen sharing over an internet connection.",
"Panel": "0",
"PackageId": "MicrosoftCorporationII.QuickAssist"
"PackageId": "MicrosoftCorporationII.QuickAssist",
"StoreId": "9P7BP5VNWKX5"
},
"WPFAppxMicrosoft_WindowsDevHome": {
"Category": "Developer Tools",
"Content": "Dev Home",
"Description": "Provides a specialized dashboard for software developer environment setups, repository syncing, and hardware widgets.",
"Panel": "1",
"PackageId": "Microsoft.Windows.DevHome"
"PackageId": "Microsoft.Windows.DevHome",
"StoreId": "9N8MHTPHNGVV"
},
"WPFAppxMicrosoft_WindowsCrossDevice": {
"Category": "Microsoft Ecosystem",
"Content": "Mobile Devices",
"Description": "Manages system-level background connectivity with paired mobile devices. Removing this may disable cross-device features such as phone screen mirroring, file transfer, and mobile hotspot handoff integrated into Windows Settings.",
"Panel": "0",
"PackageId": "MicrosoftWindows.CrossDevice"
"PackageId": "MicrosoftWindows.CrossDevice",
"StoreId": "9NTXGKQ8P7N0"
},
"WPFAppxMicrosoft_Todos": {
"Category": "Utilities & Productivity",
"Content": "To Do",
"Description": "Creates, tracks, and synchronizes personal tasks, smart lists, and daily reminders.",
"Panel": "0",
"PackageId": "Microsoft.Todos"
"PackageId": "Microsoft.Todos",
"StoreId": "9NBLGGH5R558"
},
"WPFAppxMicrosoft_PowerAutomateDesktop": {
"Category": "Developer Tools",
"Content": "Power Automate",
"Description": "Automates repetitive workflows and desktop tasks using low-code visual scripting.",
"Panel": "1",
"PackageId": "Microsoft.PowerAutomateDesktop"
"PackageId": "Microsoft.PowerAutomateDesktop",
"StoreId": "9NFTCH6J7FHV"
},
"WPFAppxMicrosoft_YourPhone": {
"Category": "Microsoft Ecosystem",
"Content": "Phone Link",
"Description": "Synchronizes text messages, phone notifications, photos, and calls from a mobile device to the desktop.",
"Panel": "0",
"PackageId": "Microsoft.YourPhone"
"PackageId": "Microsoft.YourPhone",
"StoreId": "9NMPJ99VJBWV"
},
"WPFAppxMicrosoft_MicrosoftStickyNotes": {
"Category": "Utilities & Productivity",
"Content": "Sticky Notes",
"Description": "Creates quick, floating text notes on the desktop that automatically sync across devices.",
"Panel": "0",
"PackageId": "Microsoft.MicrosoftStickyNotes"
"PackageId": "Microsoft.MicrosoftStickyNotes",
"StoreId": "9NBLGGH4QGHW"
},
"WPFAppxMicrosoft_WindowsSoundRecorder": {
"Category": "Utilities & Productivity",
"Content": "Sound Recorder",
"Description": "Records and trims live audio inputs with simple microphone adjustment controls.",
"Panel": "0",
"PackageId": "Microsoft.WindowsSoundRecorder"
"PackageId": "Microsoft.WindowsSoundRecorder",
"StoreId": "9WZDNCRFHWKN"
},
"WPFAppxMicrosoft_WindowsAlarms": {
"Category": "Utilities & Productivity",
"Content": "Clock",
"Description": "Features world clocks, alarms, countdown timers, stopwatches, and dedicated focus session tracking.",
"Panel": "0",
"PackageId": "Microsoft.WindowsAlarms"
"PackageId": "Microsoft.WindowsAlarms",
"StoreId": "9WZDNCRFJ3PR"
},
"WPFAppxMicrosoft_Paint": {
"Category": "Utilities & Productivity",
"Content": "Paint",
"Description": "Provides built-in digital sketching, basic image editing, and pixel-level graphic manipulation tools.",
"Panel": "0",
"PackageId": "Microsoft.Paint"
"PackageId": "Microsoft.Paint",
"StoreId": "9PCFS5B6T72H"
},
"WPFAppxMicrosoft_WindowsNotepad": {
"Category": "Utilities & Productivity",
"Content": "Notepad",
"Description": "Provides a lightweight text editor with multi-tab support for plain text files and code snippets.",
"Panel": "0",
"PackageId": "Microsoft.WindowsNotepad"
"PackageId": "Microsoft.WindowsNotepad",
"StoreId": "9MSMLRH6LZF3"
},
"WPFAppxMicrosoft_ScreenSketch": {
"Category": "Utilities & Productivity",
"Content": "Snipping Tool",
"Description": "Captures screenshots or screen recordings with built-in markup, image cropping, and optical character recognition (OCR).",
"Panel": "0",
"PackageId": "Microsoft.ScreenSketch"
"PackageId": "Microsoft.ScreenSketch",
"StoreId": "9MZ95KL8MR0L"
},
"WPFAppxMicrosoft_Copilot": {
"Category": "Bing & Web Services",
"Content": "Copilot",
"Description": "Launches the Microsoft AI companion for contextual answers, creative writing assistance, and intelligent web search.",
"Panel": "1",
"PackageId": "Microsoft.Copilot"
"PackageId": "Microsoft.Copilot",
"StoreId": "9NHT9RB2F4HD"
},
"WPFAppxMicrosoft_WindowsCalculator": {
"Category": "Utilities & Productivity",
"Content": "Calculator",
"Description": "Performs standard arithmetic, scientific operations, programming calculations, and unit conversions.",
"Panel": "0",
"PackageId": "Microsoft.WindowsCalculator"
"PackageId": "Microsoft.WindowsCalculator",
"StoreId": "9WZDNCRFHVN5"
},
"WPFAppxMicrosoft_WindowsCamera": {
"Category": "Utilities & Productivity",
"Content": "Camera",
"Description": "Captures photographs and records video files via connected webcams or imaging hardware.",
"Panel": "0",
"PackageId": "Microsoft.WindowsCamera"
"PackageId": "Microsoft.WindowsCamera",
"StoreId": "9WZDNCRFJBBG"
},
"WPFAppxMicrosoft_WindowsPhotos": {
"Category": "Utilities & Productivity",
"Content": "Photos",
"Description": "Organizes, views, and crops local images with basic color adjustment and album creation tools.",
"Panel": "0",
"PackageId": "Microsoft.Windows.Photos"
"PackageId": "Microsoft.Windows.Photos",
"StoreId": "9WZDNCRFJBH4"
},
"WPFAppxMicrosoft_BingNews": {
"Category": "Bing & Web Services",
"Content": "News",
"Description": "Aggregates breaking news headlines, personalized article feeds, and world current events.",
"Panel": "1",
"PackageId": "Microsoft.BingNews"
"PackageId": "Microsoft.BingNews",
"StoreId": "9WZDNCRFHVFW"
},
"WPFAppxMicrosoft_BingWeather": {
"Category": "Bing & Web Services",
"Content": "Weather",
"Description": "Displays local real-time weather tracking, radar maps, and historical meteorological forecasts.",
"Panel": "1",
"PackageId": "Microsoft.BingWeather"
"PackageId": "Microsoft.BingWeather",
"StoreId": "9WZDNCRFJ3Q2"
},
"WPFAppxMicrosoft_GamingApp": {
"Category": "Xbox & Gaming",
"Content": "Xbox App",
"Description": "Serves as the primary gaming library manager, social community interface, and PC Game Pass dashboard.",
"Panel": "1",
"PackageId": "Microsoft.GamingApp"
"PackageId": "Microsoft.GamingApp",
"StoreId": "9MV0B5HZVK9Z"
},
"WPFAppxMicrosoft_XboxGamingOverlay": {
"Category": "Xbox & Gaming",
"Content": "Xbox Game Bar",
"Description": "Provides customizable in-game status widgets, audio balancing sliders, system monitoring tools, and gameplay recording.",
"Panel": "1",
"PackageId": "Microsoft.XboxGamingOverlay"
"PackageId": "Microsoft.XboxGamingOverlay",
"StoreId": "9NZKPSTSNW4P"
},
"WPFAppxMicrosoft_XboxIdentityProvider": {
"Category": "Xbox & Gaming",
"Content": "Xbox Identity Provider",
"Description": "Manages Xbox network user authentication and background account validation for connected titles. Warning: removing this may break Microsoft account sign-in for non-Xbox games and apps that rely on this authentication pipeline.",
"Panel": "1",
"PackageId": "Microsoft.XboxIdentityProvider"
"PackageId": "Microsoft.XboxIdentityProvider",
"StoreId": "9WZDNCRD1HKW"
},
"WPFAppxMicrosoft_XboxSpeechToTextOverlay": {
"Category": "Xbox & Gaming",
@@ -221,7 +250,8 @@
"Content": "Start Experiences App",
"Description": "Powers the Windows Widgets board, delivering a personalized feed of news, weather, sports, and finance content.",
"Panel": "1",
"PackageId": "Microsoft.StartExperiencesApp"
"PackageId": "Microsoft.StartExperiencesApp",
"StoreId": "9PC1H9VN18CM"
},
"WPFAppxMicrosoft_MicrosoftSolitaireCollection": {
"Category": "Xbox & Gaming",
+16 -8
View File
@@ -3,48 +3,56 @@
"Primary": "8.8.8.8",
"Secondary": "8.8.4.4",
"Primary6": "2001:4860:4860::8888",
"Secondary6": "2001:4860:4860::8844"
"Secondary6": "2001:4860:4860::8844",
"DohTemplate": "https://dns.google/dns-query"
},
"Cloudflare":{
"Primary": "1.1.1.1",
"Secondary": "1.0.0.1",
"Primary6": "2606:4700:4700::1111",
"Secondary6": "2606:4700:4700::1001"
"Secondary6": "2606:4700:4700::1001",
"DohTemplate": "https://cloudflare-dns.com/dns-query"
},
"Cloudflare_Malware":{
"Primary": "1.1.1.2",
"Secondary": "1.0.0.2",
"Primary6": "2606:4700:4700::1112",
"Secondary6": "2606:4700:4700::1002"
"Secondary6": "2606:4700:4700::1002",
"DohTemplate": "https://security.cloudflare-dns.com/dns-query"
},
"Cloudflare_Malware_Adult":{
"Primary": "1.1.1.3",
"Secondary": "1.0.0.3",
"Primary6": "2606:4700:4700::1113",
"Secondary6": "2606:4700:4700::1003"
"Secondary6": "2606:4700:4700::1003",
"DohTemplate": "https://family.cloudflare-dns.com/dns-query"
},
"Open_DNS":{
"Primary": "208.67.222.222",
"Secondary": "208.67.220.220",
"Primary6": "2620:119:35::35",
"Secondary6": "2620:119:53::53"
"Secondary6": "2620:119:53::53",
"DohTemplate": "https://doh.opendns.com/dns-query"
},
"Quad9":{
"Primary": "9.9.9.9",
"Secondary": "149.112.112.112",
"Primary6": "2620:fe::fe",
"Secondary6": "2620:fe::9"
"Secondary6": "2620:fe::9",
"DohTemplate": "https://dns.quad9.net/dns-query"
},
"AdGuard_Ads_Trackers":{
"Primary": "94.140.14.14",
"Secondary": "94.140.15.15",
"Primary6": "2a10:50c0::ad1:ff",
"Secondary6": "2a10:50c0::ad2:ff"
"Secondary6": "2a10:50c0::ad2:ff",
"DohTemplate": "https://dns.adguard-dns.com/dns-query"
},
"AdGuard_Ads_Trackers_Malware_Adult":{
"Primary": "94.140.14.15",
"Secondary": "94.140.15.16",
"Primary6": "2a10:50c0::bad1:ff",
"Secondary6": "2a10:50c0::bad2:ff"
"Secondary6": "2a10:50c0::bad2:ff",
"DohTemplate": "https://family.adguard-dns.com/dns-query"
}
}
+86 -42
View File
@@ -9,7 +9,7 @@
"NetFx3"
],
"InvokeScript": [],
"link": "https://winutil.christitus.com/dev/features/features/dotnet"
"link": "https://winutil.christitus.com/code-reference/features/features/dotnet"
},
"WPFFixesNTPPool": {
"Content": "NTP Server - Enable",
@@ -19,7 +19,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFFixesNTPPool",
"link": "https://winutil.christitus.com/dev/features/fixes/ntppool"
"link": "https://winutil.christitus.com/code-reference/features/fixes/ntppool"
},
"WPFFeatureshyperv": {
"Content": "Hyper-V - Enable",
@@ -29,7 +29,7 @@
"feature": [
"Microsoft-Hyper-V-All"
],
"link": "https://winutil.christitus.com/dev/features/features/hyperv"
"link": "https://winutil.christitus.com/code-reference/features/features/hyperv"
},
"WPFFeatureslegacymedia": {
"Content": "Legacy Media Components (WMP, DirectPlay) - Enable",
@@ -43,7 +43,7 @@
"LegacyComponents"
],
"InvokeScript": [],
"link": "https://winutil.christitus.com/dev/features/features/legacymedia"
"link": "https://winutil.christitus.com/code-reference/features/features/legacymedia"
},
"WPFFeaturewsl": {
"Content": "Windows Subsystem for Linux (WSL) - Enable",
@@ -55,7 +55,7 @@
"Microsoft-Windows-Subsystem-Linux"
],
"InvokeScript": [],
"link": "https://winutil.christitus.com/dev/features/features/wsl"
"link": "https://winutil.christitus.com/code-reference/features/features/wsl"
},
"WPFFeaturenfs": {
"Content": "Network File System (NFS) - Enable",
@@ -74,7 +74,7 @@
"nfsadmin client start",
"nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i"
],
"link": "https://winutil.christitus.com/dev/features/features/nfs"
"link": "https://winutil.christitus.com/code-reference/features/features/nfs"
},
"WPFFeatureRegBackup": {
"Content": "Registry Backup (Daily Task 12:30am) - Enable",
@@ -91,7 +91,7 @@
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'
"
],
"link": "https://winutil.christitus.com/dev/features/features/regbackup"
"link": "https://winutil.christitus.com/code-reference/features/features/regbackup"
},
"WPFFeatureEnableLegacyRecovery": {
"Content": "Legacy F8 Boot Recovery - Enable",
@@ -102,7 +102,7 @@
"InvokeScript": [
"bcdedit /set bootmenupolicy legacy"
],
"link": "https://winutil.christitus.com/dev/features/features/enablelegacyrecovery"
"link": "https://winutil.christitus.com/code-reference/features/features/enablelegacyrecovery"
},
"WPFFeatureDisableLegacyRecovery": {
"Content": "Legacy F8 Boot Recovery - Disable",
@@ -113,7 +113,7 @@
"InvokeScript": [
"bcdedit /set bootmenupolicy standard"
],
"link": "https://winutil.christitus.com/dev/features/features/disablelegacyrecovery"
"link": "https://winutil.christitus.com/code-reference/features/features/disablelegacyrecovery"
},
"WPFFeaturesSandbox": {
"Content": "Windows Sandbox - Enable",
@@ -123,7 +123,7 @@
"feature": [
"Containers-DisposableClientVM"
],
"link": "https://winutil.christitus.com/dev/features/features/sandbox"
"link": "https://winutil.christitus.com/code-reference/features/features/sandbox"
},
"WPFFeatureInstall": {
"Content": "Install Features",
@@ -132,7 +132,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFFeatureInstall",
"link": "https://winutil.christitus.com/dev/features/features/install"
"link": "https://winutil.christitus.com/code-reference/features/features/install"
},
"WPFPanelAutologin": {
"Content": "AutoLogon - Run",
@@ -141,7 +141,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFPanelAutologin",
"link": "https://winutil.christitus.com/dev/features/fixes/autologin"
"link": "https://winutil.christitus.com/code-reference/features/fixes/autologin"
},
"WPFFixesUpdate": {
"Content": "Windows Update - Reset",
@@ -150,7 +150,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFFixesUpdate",
"link": "https://winutil.christitus.com/dev/features/fixes/update"
"link": "https://winutil.christitus.com/code-reference/features/fixes/update"
},
"WPFFixesNetwork": {
"Content": "Network - Reset",
@@ -159,7 +159,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFFixesNetwork",
"link": "https://winutil.christitus.com/dev/features/fixes/network"
"link": "https://winutil.christitus.com/code-reference/features/fixes/network"
},
"WPFPanelDISM": {
"Content": "System Corruption Scan - Run",
@@ -168,7 +168,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFSystemRepair",
"link": "https://winutil.christitus.com/dev/features/fixes/dism"
"link": "https://winutil.christitus.com/code-reference/features/fixes/dism"
},
"WPFFixesWinget": {
"Content": "WinGet - Reinstall",
@@ -177,18 +177,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFFixesWinget",
"link": "https://winutil.christitus.com/dev/features/fixes/winget"
},
"WPFPanelControl": {
"Content": "Control Panel",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"control"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/control"
"link": "https://winutil.christitus.com/code-reference/features/fixes/winget"
},
"WPFPanelComputer": {
"Content": "Computer Management",
@@ -199,7 +188,29 @@
"InvokeScript": [
"compmgmt.msc"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/computer"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/computer"
},
"WPFPanelControl": {
"Content": "Control Panel",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"control"
],
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/control"
},
"WPFPanelMouse": {
"Content": "Mouse Properties",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"main.cpl"
],
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/mouse"
},
"WPFPanelNetwork": {
"Content": "Network Connections",
@@ -210,7 +221,7 @@
"InvokeScript": [
"ncpa.cpl"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/network"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/network"
},
"WPFPanelPower": {
"Content": "Power Panel",
@@ -221,7 +232,7 @@
"InvokeScript": [
"powercfg.cpl"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/power"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/power"
},
"WPFPanelPrinter": {
"Content": "Printer Panel",
@@ -232,7 +243,18 @@
"InvokeScript": [
"Start-Process 'shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}'"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/printer"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/printer"
},
"WPFPanelPrograms": {
"Content": "Programs and Features",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"appwiz.cpl"
],
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/programs"
},
"WPFPanelRegion": {
"Content": "Region",
@@ -243,18 +265,18 @@
"InvokeScript": [
"intl.cpl"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/region"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/region"
},
"WPFPanelRestore": {
"Content": "Windows Restore",
"WPFPanelSecurity": {
"Content": "Security and Maintenance",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"rstrui.exe"
"wscui.cpl"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/restore"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/security"
},
"WPFPanelSound": {
"Content": "Sound Settings",
@@ -265,7 +287,7 @@
"InvokeScript": [
"mmsys.cpl"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/sound"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/sound"
},
"WPFPanelSystem": {
"Content": "System Properties",
@@ -276,7 +298,7 @@
"InvokeScript": [
"sysdm.cpl"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/system"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/system"
},
"WPFPanelTimedate": {
"Content": "Time and Date",
@@ -287,7 +309,29 @@
"InvokeScript": [
"timedate.cpl"
],
"link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/timedate"
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/timedate"
},
"WPFPanelFirewall": {
"Content": "Windows Defender Firewall",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"firewall.cpl"
],
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/firewall"
},
"WPFPanelRestore": {
"Content": "Windows Restore",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"rstrui.exe"
],
"link": "https://winutil.christitus.com/code-reference/features/legacy-windows-panels/restore"
},
"WPFWinUtilInstallPSProfile": {
"Content": "CTT PowerShell Profile - Install",
@@ -296,7 +340,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WinUtilInstallPSProfile",
"link": "https://winutil.christitus.com/dev/features/powershell-profile-powershell-7--only/installpsprofile"
"link": "https://winutil.christitus.com/code-reference/features/powershell-profile-powershell-7--only/installpsprofile"
},
"WPFWinUtilUninstallPSProfile": {
"Content": "CTT PowerShell Profile - Remove",
@@ -305,7 +349,7 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WinUtilUninstallPSProfile",
"link": "https://winutil.christitus.com/dev/features/powershell-profile-powershell-7--only/uninstallpsprofile"
"link": "https://winutil.christitus.com/code-reference/features/powershell-profile-powershell-7--only/uninstallpsprofile"
},
"WPFWinUtilSSHServer": {
"Content": "OpenSSH Server - Enable",
@@ -314,6 +358,6 @@
"Type": "Button",
"ButtonWidth": "300",
"function": "Invoke-WPFSSHServer",
"link": "https://winutil.christitus.com/dev/features/remote-access/sshserver"
"link": "https://winutil.christitus.com/code-reference/features/remote-access/sshserver"
}
}
+7 -10
View File
@@ -1,9 +1,10 @@
{
"shared": {
"AppEntryWidth": "200",
"AppEntryFontSize": "11",
"AppEntryMargin": "1,0,1,0",
"AppEntryBorderThickness": "0",
"AppEntryWidth": "220",
"AppEntryFontSize": "13.2",
"AppEntryIconSize": "28",
"AppEntryMargin": "3",
"AppEntryBorderThickness": "1",
"CustomDialogFontSize": "12",
"CustomDialogFontSizeHeader": "14",
"CustomDialogLogoSize": "25",
@@ -24,7 +25,7 @@
"IconFontSize": "14",
"IconButtonSize": "35",
"SettingsIconFontSize": "18",
"CloseIconFontSize": "18",
"CloseIconFontSize": "12",
"GroupBorderBackgroundColor": "#232629",
"ButtonFontSize": "12",
"ButtonFontFamily": "Arial",
@@ -45,7 +46,6 @@
"AppInstallUnselectedColor": "#F7F7F7",
"AppInstallHighlightedColor": "#CFCFCF",
"AppInstallSelectedColor": "#C2C2C2",
"AppInstallOverlayBackgroundColor": "#6A6D72",
"ComboBoxForegroundColor": "#232629",
"ComboBoxBackgroundColor": "#F7F7F7",
"LabelboxForegroundColor": "#232629",
@@ -59,7 +59,6 @@
"ScrollBarDraggingColor": "#6A6D72",
"ProgressBarForegroundColor": "#2E77FF",
"ProgressBarBackgroundColor": "Transparent",
"ProgressBarTextColor": "#232629",
"ButtonInstallBackgroundColor": "#F7F7F7",
"ButtonTweaksBackgroundColor": "#F7F7F7",
"ButtonConfigBackgroundColor": "#F7F7F7",
@@ -87,7 +86,6 @@
"AppInstallUnselectedColor": "#232629",
"AppInstallHighlightedColor": "#3C3C3C",
"AppInstallSelectedColor": "#4C4C4C",
"AppInstallOverlayBackgroundColor": "#2E3135",
"ComboBoxForegroundColor": "#F7F7F7",
"ComboBoxBackgroundColor": "#1E3747",
"LabelboxForegroundColor": "#5BDCFF",
@@ -99,9 +97,8 @@
"ScrollBarBackgroundColor": "#2E3135",
"ScrollBarHoverColor": "#3B4252",
"ScrollBarDraggingColor": "#5E81AC",
"ProgressBarForegroundColor": "#222222",
"ProgressBarForegroundColor": "#6EFF72",
"ProgressBarBackgroundColor": "Transparent",
"ProgressBarTextColor": "#232629",
"ButtonInstallBackgroundColor": "#222222",
"ButtonTweaksBackgroundColor": "#333333",
"ButtonConfigBackgroundColor": "#444444",
+85 -70
View File
@@ -27,7 +27,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/activity"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/activity"
},
"WPFTweaksHiber": {
"Content": "Hibernation - Disable",
@@ -56,7 +56,7 @@
"UndoScript": [
"powercfg.exe /hibernate on"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/hiber"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/hiber"
},
"WPFTweaksWidget": {
"Content": "Widgets - Remove",
@@ -75,7 +75,7 @@
Write-Host \"Removed widgets\"
"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/widget"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/widget"
},
"WPFTweaksRevertStartMenu": {
"Content": "Start Menu Previous Layout - Enable",
@@ -91,7 +91,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/revertstartmenu"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/revertstartmenu"
},
"WPFTweaksDisableStoreSearch": {
"Content": "Microsoft Store Recommended Search Results - Disable",
@@ -104,7 +104,7 @@
"UndoScript": [
"icacls \"$Env:LocalAppData\\Packages\\Microsoft.WindowsStore_8wekyb3d8bbwe\\LocalState\\store.db\" /grant Everyone:F"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/disablestoresearch"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/disablestoresearch"
},
"WPFTweaksLocation": {
"Content": "Location Tracking - Disable",
@@ -141,7 +141,7 @@
"OriginalValue": "1"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/location"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/location"
},
"WPFTweaksServices": {
"Content": "Services - Set to Manual",
@@ -181,7 +181,7 @@
Set-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Control\" -Name SvcHostSplitThresholdInKB -Value $Memory
"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/services"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/services"
},
"WPFTweaksBraveDebloat": {
"Content": "Brave Browser - Debloat",
@@ -274,7 +274,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/bravedebloat"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/bravedebloat"
},
"WPFTweaksDisableWarningForUnsignedRdp": {
"Content": "RDP Unsigned File Warnings - Disable",
@@ -297,7 +297,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablewarningforunsignedrdp"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/disablewarningforunsignedrdp"
},
"WPFTweaksEdgeDebloat": {
"Content": "Microsoft Edge - Debloat",
@@ -425,11 +425,11 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/edgedebloat"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/edgedebloat"
},
"WPFTweaksConsumerFeatures": {
"Content": "ConsumerFeatures - Disable",
"Description": "Windows will not automatically install any games, third-party apps, or application links from the Windows Store for the signed-in user. Some default Apps will be inaccessible (e.g. Phone Link).",
"Description": "Stops promoted app installs and reduces app suggestions from Microsoft Store content.",
"category": "Essential Tweaks",
"panel": "1",
"registry": [
@@ -441,7 +441,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/consumerfeatures"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/consumerfeatures"
},
"WPFTweaksTelemetry": {
"Content": "Telemetry - Disable",
@@ -566,7 +566,7 @@
[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')
"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/telemetry"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/telemetry"
},
"WPFTweaksDeliveryOptimization": {
"Content": "Delivery Optimization - Disable",
@@ -582,7 +582,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/deliveryoptimization"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/deliveryoptimization"
},
"WPFTweaksRemoveEdge": {
"Content": "Microsoft Edge - Remove",
@@ -608,7 +608,7 @@
winget install Microsoft.Edge --source winget
"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeedge"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/removeedge"
},
"WPFTweaksDisableBitLocker": {
"Content": "BitLocker - Disable",
@@ -621,7 +621,7 @@
"UndoScript": [
"Enable-BitLocker -MountPoint $Env:SystemDrive"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/disablebitlocker"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/disablebitlocker"
},
"WPFTweaksUTC": {
"Content": "Date & Time - Set Time to UTC",
@@ -637,7 +637,7 @@
"OriginalValue": "0"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/utc"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/utc"
},
"WPFTweaksRemoveOneDrive": {
"Content": "Microsoft OneDrive - Remove",
@@ -650,7 +650,7 @@
icacls $Env:OneDrive /deny \"Administrators:(D,DC)\"
Write-Host \"Uninstalling OneDrive...\"
Start-Process '$Env:SystemRoot\\System32\\OneDriveSetup.exe' -ArgumentList '/uninstall' -Wait
Start-Process -FilePath (Join-Path $Env:SystemRoot \"System32\\OneDriveSetup.exe\") -ArgumentList '/uninstall' -Wait
# Some of OneDrive files use explorer, and OneDrive uses FileCoAuth
Write-Host \"Removing leftover OneDrive Files...\"
@@ -681,7 +681,7 @@
Set-Service -Name OneSyncSvc -StartupType Automatic
"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeonedrive"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/removeonedrive"
},
"WPFTweaksRemoveHomeAndGallery": {
"Content": "File Explorer Home and Gallery - Disable",
@@ -711,7 +711,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removehomeandgallery"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/removehomeandgallery"
},
"WPFTweaksDisplay": {
"Content": "Visual Effects - Set to Best Performance",
@@ -810,7 +810,7 @@
"UndoScript": [
"Remove-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\""
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/display"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/display"
},
"WPFTweaksReservedStorage": {
"Content": "Disable Reserved Storage",
@@ -823,7 +823,7 @@
"UndoScript": [
"DISM /Online /Set-ReservedStorageState /State:Enabled"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/reservedstorage"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/reservedstorage"
},
"WPFTweaksRestorePoint": {
"Content": "Restore Point - Create",
@@ -850,7 +850,7 @@
Write-Host \"System Restore Point Created Successfully\" -ForegroundColor Green
"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/restorepoint"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/restorepoint"
},
"WPFTweaksEndTaskOnTaskbar": {
"Content": "End Task With Right Click - Enable",
@@ -866,7 +866,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/endtaskontaskbar"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/endtaskontaskbar"
},
"WPFTweaksStorage": {
"Content": "Storage Sense - Disable",
@@ -882,7 +882,7 @@
"OriginalValue": "1"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/storage"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/storage"
},
"WPFTweaksWindowsAI": {
"Content": "Windows AI - Disable And Remove",
@@ -926,7 +926,7 @@
Write-Host \"Windows AI Disabled\"
"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/windowsai"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/windowsai"
},
"WPFTweaksWPBT": {
"Content": "Windows Platform Binary Table (WPBT) - Disable",
@@ -942,7 +942,23 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/wpbt"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/wpbt"
},
"WPFTweaksPreventDeviceMetadataFromNetwork": {
"Content": "Prevent Device Companion Apps",
"Description": "Prevents additional software from being installed when plugging in devices (e.g. Ads when plugging in a monitor). Poses potential security risk.",
"category": "Essential Tweaks",
"panel": "1",
"registry": [
{
"Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Device Metadata",
"Name": "PreventDeviceMetadataFromNetwork",
"Value": "1",
"Type": "DWord",
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/preventdevicemetadatafromnetwork"
},
"WPFTweaksRazerBlock": {
"Content": "Razer Software Auto-Install - Disable",
@@ -983,7 +999,7 @@
icacls \"$Env:SystemRoot\\Installer\\Razer\" /remove:d Everyone
"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/razerblock"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/razerblock"
},
"WPFTweaksDisableNotifications": {
"Content": "System Tray Notifications & Calendar - Disable",
@@ -1006,7 +1022,7 @@
"OriginalValue": "1"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablenotifications"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/disablenotifications"
},
"WPFTweaksBlockAdobeNet": {
"Content": "Adobe URL Block List - Enable",
@@ -1032,7 +1048,7 @@
Write-Host 'Removed Adobe url block list from host file'
"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/blockadobenet"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/blockadobenet"
},
"WPFTweaksRightClickMenu": {
"Content": "Right-Click Menu Previous Layout - Enable",
@@ -1048,7 +1064,7 @@
"UndoScript": [
"Remove-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\" -Recurse"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/rightclickmenu"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/rightclickmenu"
},
"WPFTweaksDiskCleanup": {
"Content": "Disk Cleanup - Run",
@@ -1061,7 +1077,7 @@
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/diskcleanup"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/diskcleanup"
},
"WPFTweaksDeleteTempFiles": {
"Content": "Temporary Files - Remove",
@@ -1074,7 +1090,7 @@
Remove-Item -Path \"$Env:SystemRoot\\Temp\\*\" -Recurse -Force
"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/deletetempfiles"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/deletetempfiles"
},
"WPFTweaksIPv46": {
"Content": "IPv6 - Set IPv4 as Preferred",
@@ -1090,7 +1106,7 @@
"OriginalValue": "0"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/ipv46"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/ipv46"
},
"WPFTweaksTeredo": {
"Content": "Teredo - Disable",
@@ -1112,7 +1128,7 @@
"UndoScript": [
"netsh interface teredo set state default"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/teredo"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/teredo"
},
"WPFTweaksDisableIPv6": {
"Content": "IPv6 - Disable",
@@ -1134,7 +1150,7 @@
"UndoScript": [
"Enable-NetAdapterBinding -Name * -ComponentID ms_tcpip6"
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disableipv6"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/disableipv6"
},
"WPFTweaksDisableBGapps": {
"Content": "Background Apps - Disable",
@@ -1150,7 +1166,7 @@
"OriginalValue": "0"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablebgapps"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/disablebgapps"
},
"WPFTweaksDisableFSO": {
"Content": "Fullscreen Optimizations - Disable",
@@ -1166,7 +1182,7 @@
"OriginalValue": "0"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablefso"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/disablefso"
},
"WPFTweaksDisableExplorerAutoDiscovery": {
"Content": "File Explorer Automatic Folder Discovery - Disable",
@@ -1221,7 +1237,7 @@
Write-Host Please sign out and back in, or restart your computer to apply the changes!
"
],
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/disableexplorerautodiscovery"
"link": "https://winutil.christitus.com/code-reference/tweaks/essential-tweaks/disableexplorerautodiscovery"
},
"WPFToggleDetailedBSoD": {
"Content": "BSoD Verbose Mode",
@@ -1247,7 +1263,7 @@
"DefaultState": "false"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/detailedbsod"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/detailedbsod"
},
"WPFToggleBatteryPercentage": {
"Content": "System Tray Battery Percentage",
@@ -1265,7 +1281,7 @@
"DefaultState": "false"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/batterypercentage"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/batterypercentage"
},
"WPFToggleDarkMode": {
"Content": "Dark Theme for Windows",
@@ -1307,7 +1323,7 @@
}
"
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/darkmode"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/darkmode"
},
"WPFToggleShowExt": {
"Content": "File Explorer File Extensions",
@@ -1335,7 +1351,7 @@
Invoke-WinUtilExplorerUpdate -action \"restart\"
"
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/showext"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/showext"
},
"WPFToggleHiddenFiles": {
"Content": "File Explorer Hidden Files",
@@ -1363,7 +1379,7 @@
Invoke-WinUtilExplorerUpdate -action \"restart\"
"
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/hiddenfiles"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/hiddenfiles"
},
"WPFToggleVerboseLogon": {
"Content": "Logon Verbose Mode",
@@ -1381,7 +1397,7 @@
"DefaultState": "false"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/verboselogon"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/verboselogon"
},
"WPFToggleNewOutlook": {
"Content": "Microsoft Outlook New Version",
@@ -1423,7 +1439,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/newoutlook"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/newoutlook"
},
"WPFToggleScrollbars": {
"Content": "Scrollbars Always Visible",
@@ -1438,11 +1454,10 @@
"Value": "0",
"Type": "DWord",
"OriginalValue": "1",
"DefaultState": "false",
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/scrollbars"
"DefaultState": "false"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/scrollbars"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/scrollbars"
},
"WPFToggleMultiplaneOverlay": {
"Content": "Multiplane Overlay",
@@ -1468,7 +1483,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/multiplaneoverlay"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/multiplaneoverlay"
},
"WPFToggleMouseAcceleration": {
"Content": "Mouse Acceleration",
@@ -1502,7 +1517,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/mouseacceleration"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/mouseacceleration"
},
"WPFToggleNumLock": {
"Content": "Num Lock on Startup",
@@ -1528,7 +1543,7 @@
"DefaultState": "false"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/numlock"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/numlock"
},
"WPFToggleWindowSnapping": {
"Content": "Window Snapping",
@@ -1546,7 +1561,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/windowsnapping"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/windowsnapping"
},
"WPFToggleStandbyFix": {
"Content": "S0 Sleep Network Connectivity",
@@ -1564,7 +1579,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/standbyfix"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/standbyfix"
},
"WPFToggleS3Sleep": {
"Content": "S3 Sleep",
@@ -1582,7 +1597,7 @@
"DefaultState": "false"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/s3sleep"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/s3sleep"
},
"WPFToggleHideSettingsHome": {
"Content": "Settings Home Page",
@@ -1600,7 +1615,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/hidesettingshome"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/hidesettingshome"
},
"WPFToggleBingSearch": {
"Content": "Start Menu Bing Search",
@@ -1618,7 +1633,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/bingsearch"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/bingsearch"
},
"WPFToggleLoginBlur": {
"Content": "Logon Screen Acrylic Blur",
@@ -1636,7 +1651,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/loginblur"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/loginblur"
},
"WPFTweaksDisableLockscreen": {
"Content": "Lock Screen - Disable",
@@ -1653,7 +1668,7 @@
"OriginalValue": "<RemoveEntry>"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/disablelockscreen"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/disablelockscreen"
},
"WPFToggleStartMenuRecommendations": {
"Content": "Start Menu Recommendations",
@@ -1697,7 +1712,7 @@
Invoke-WinUtilExplorerUpdate -action \"restart\"
"
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/startmenurecommendations"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/startmenurecommendations"
},
"WPFToggleStickyKeys": {
"Content": "Sticky Keys",
@@ -1715,7 +1730,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/stickykeys"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/stickykeys"
},
"WPFToggleTaskbarAlignment": {
"Content": "Taskbar Centered Icons",
@@ -1743,7 +1758,7 @@
Invoke-WinUtilExplorerUpdate -action \"restart\"
"
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbaralignment"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/taskbaralignment"
},
"WPFToggleTaskbarSearch": {
"Content": "Taskbar Search Icon",
@@ -1761,7 +1776,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbarsearch"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/taskbarsearch"
},
"WPFToggleTaskView": {
"Content": "Taskbar Task View Icon",
@@ -1779,7 +1794,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskview"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/taskview"
},
"WPFToggleGameMode": {
"Content": "Game Mode",
@@ -1805,7 +1820,7 @@
"DefaultState": "true"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/gamemode"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/gamemode"
},
"WPFToggleLongPaths": {
"Content": "Enable Long Paths",
@@ -1823,14 +1838,14 @@
"DefaultState": "false"
}
],
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/longpaths"
"link": "https://winutil.christitus.com/code-reference/tweaks/customize-preferences/longpaths"
},
"WPFOOSUbutton": {
"Content": "O&O ShutUp10++ - Run",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Type": "Button",
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/oosubutton"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/oosubutton"
},
"WPFchangedns": {
"Content": "DNS - Set to:",
@@ -1838,7 +1853,7 @@
"panel": "1",
"Type": "Combobox",
"ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult",
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/changedns"
"link": "https://winutil.christitus.com/code-reference/tweaks/z--advanced-tweaks---caution/changedns"
},
"WPFAddUltPerf": {
"Content": "Ultimate Performance Profile - Enable",
@@ -1846,7 +1861,7 @@
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"link": "https://winutil.christitus.com/dev/tweaks/performance-plans---not-for-laptops/addultperf"
"link": "https://winutil.christitus.com/code-reference/tweaks/performance-plans---not-for-laptops/addultperf"
},
"WPFRemoveUltPerf": {
"Content": "Ultimate Performance Profile - Disable",
@@ -1854,6 +1869,6 @@
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"link": "https://winutil.christitus.com/dev/tweaks/performance-plans---not-for-laptops/removeultperf"
"link": "https://winutil.christitus.com/code-reference/tweaks/performance-plans---not-for-laptops/removeultperf"
}
}
+21
View File
@@ -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
+49
View File
@@ -0,0 +1,49 @@
# Starlight Starter Kit: Basics
[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](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 [Starlights docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat).
-6
View File
@@ -1,6 +0,0 @@
---
title: '{{ replace .File.ContentBaseName "-" " " | title }}'
description: ""
date: '{{ .Date }}'
draft: true
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

+70
View File
@@ -0,0 +1,70 @@
// @ts-check
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import { siteLinks } from './src/site-links.ts';
// 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' },
],
// Global theme overrides (colors, fonts, landing-page section styles).
customCss: ['./src/styles/theme.css'],
// Custom component overrides, all under src/components/.
components: {
ThemeProvider: './src/components/ThemeProvider.astro',
Header: './src/components/Header.astro',
Hero: './src/components/Hero.astro',
Footer: './src/components/Footer.astro',
},
editLink: {
baseUrl: 'https://github.com/ChrisTitusTech/winutil/edit/main/docs/',
},
// Sidebar groups, top to bottom: User Guide, Code Reference, Help.
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: 'knownissues' },
{ label: 'Contributing', slug: 'contributing' },
{ label: siteLinks.forums.label, link: siteLinks.forums.href, attrs: { target: '_blank', rel: 'noreferrer' } },
],
},
{ label: siteLinks.store.label, link: siteLinks.store.href, attrs: { target: '_blank', rel: 'noreferrer' } },
],
}),
],
});
-153
View File
@@ -1,153 +0,0 @@
---
toc: true
---
## Contributing Code
### Before You Start
- Keep each pull request focused on a single feature or fix.
- Avoid unnecessary formatting changes or large unrelated edits.
- Document what changed and why in your PR description.
---
## Basic Git Workflow
### 1. Fork the Repository
Go to the ChrisTitusTech/winutil repository on GitHub and click the Fork button in the top right corner.
<img width="171" height="50" alt="{650A4723-F38A-44A4-9820-D232BC87C8A0}" src="https://github.com/user-attachments/assets/a214f27c-2fee-444a-920f-d87b14f5896f" />
---
### 2. Clone Your Fork
```bash
git clone https://github.com/YOUR_USERNAME/winutil.git
cd winutil
```
---
### 3. Create a Branch
Never work directly on `main`.
Create a branch related to your change:
```bash
git checkout -b feature-name
```
Example:
```bash
git checkout -b add-firefox-tweak
```
---
### 4. Edit the Code
Open the project in your preferred text editor and make your changes.
Keep changes small and focused.
---
### 5. Test Your Changes
Open PowerShell as Administrator.
Go to the project folder:
```powershell
cd path\to\winutil
```
Run:
```powershell
.\Compile.ps1 -Run
```
Verify:
- WinUtil launches correctly
- Your feature works
- Nothing else breaks
If something fails, fix it before committing.
---
### 6. Review Your Changes
Check what changed:
```bash
git status
```
Review the diff:
```bash
git diff
```
Make sure you did not accidentally modify unrelated files.
---
### 7. Commit Your Changes
Stage files:
```bash
git add .
```
Commit them:
```bash
git commit -m "Add feature description"
```
Example:
```bash
git commit -m "Add Firefox package tweak"
```
---
### 8. Push Your Branch
```bash
git push origin branch-name
```
Example:
```bash
git push origin add-firefox-tweak
```
---
### 9. Open a Pull Request
Go to your fork on GitHub.
GitHub will show a button to create a pull request.
<img width="1009" height="71" alt="{C8C6A3CC-79D4-44FD-A54C-4C5717F12730}" src="https://github.com/user-attachments/assets/0419d193-d4e7-47c0-87cf-b986742201a0" />
Before submitting:
- Explain what changed
- Explain why you changed it
- Make sure unrelated files are not included
Once submitted, maintainers will review your PR.
-28
View File
@@ -1,28 +0,0 @@
---
title: Welcome to WinUtil Documentation!
toc: false
width: full
---
<div style="display: flex; justify-content: center; align-items: center; width: 100%; flex-wrap: wrap; gap: 5px;margin-top:30px;" >
<a href="https://github.com/ChrisTitusTech/winutil/releases/latest"><img src="https://img.shields.io/github/v/release/ChrisTitusTech/winutil?color=%230567ff&label=Latest%20Release&style=for-the-badge" alt="Version" style="height: 28px; width: auto; min-width: 10px; object-fit: contain; margin: 0;"></a>
<img src="https://img.shields.io/github/downloads/ChrisTitusTech/winutil/winutil.ps1?label=Total%20Downloads&style=for-the-badge" alt="GitHub Downloads" style="height: 28px; width: auto; min-width: 10px; object-fit: contain; margin: 0;">
<a href="https://discord.gg/RUbZUZyByQ"><img src="https://dcbadge.limes.pink/api/server/https://discord.gg/RUbZUZyByQ" alt="Discord Community Server" style="height: 28px; width: auto; min-width: 10px; object-fit: contain; margin: 0;"></a>
</div>
Welcome to the official documentation for WinUtil, your go-to utility for optimizing and managing your Windows environment. Whether youre 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.
-52
View File
@@ -1,52 +0,0 @@
---
title: Developer Reference
weight: 3
toc: false
---
> [!NOTE]
> This section contains technical documentation for developers. 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" >}}
@@ -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"
],
```
@@ -1,7 +0,0 @@
---
title: "Features"
weight: 1
toc: false
---
{{< autolinks section="dev/features/features" >}}
@@ -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"
],
```
@@ -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
}
```
@@ -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."
}
```
@@ -1,7 +0,0 @@
---
title: "Fixes"
weight: 2
toc: false
---
{{< autolinks section="dev/features/fixes" >}}
@@ -1,16 +0,0 @@
---
title: "Control Panel"
description: ""
---
```json {filename="config/feature.json",linenos=inline,linenostart=182}
"WPFPanelControl": {
"Content": "Control Panel",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"control"
],
```
@@ -1,16 +0,0 @@
---
title: "Power Panel"
description: ""
---
```json {filename="config/feature.json",linenos=inline,linenostart=215}
"WPFPanelPower": {
"Content": "Power Panel",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"powercfg.cpl"
],
```
@@ -1,16 +0,0 @@
---
title: "Region"
description: ""
---
```json {filename="config/feature.json",linenos=inline,linenostart=237}
"WPFPanelRegion": {
"Content": "Region",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"intl.cpl"
],
```
@@ -1,16 +0,0 @@
---
title: "Sound Settings"
description: ""
---
```json {filename="config/feature.json",linenos=inline,linenostart=259}
"WPFPanelSound": {
"Content": "Sound Settings",
"category": "Legacy Windows Panels",
"panel": "2",
"Type": "Button",
"ButtonWidth": "300",
"InvokeScript": [
"mmsys.cpl"
],
```
@@ -1,7 +0,0 @@
---
title: "Legacy Windows Panels"
weight: 3
toc: false
---
{{< autolinks section="dev/features/legacy-windows-panels" >}}
@@ -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
}
```
@@ -1,7 +0,0 @@
---
title: "Powershell Profile Powershell 7+ Only"
weight: 5
toc: false
---
{{< autolinks section="dev/features/powershell-profile-powershell-7--only" >}}
@@ -1,7 +0,0 @@
---
title: "Remote Access"
weight: 4
toc: false
---
{{< autolinks section="dev/features/remote-access" >}}
-25
View File
@@ -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" >}}
@@ -1,9 +0,0 @@
---
title: "Customize Preferences"
weight: 3
toc: false
---
### Customize Preferences
{{< autolinks section="dev/tweaks/customize-preferences" >}}
@@ -1,9 +0,0 @@
---
title: "Essential Tweaks"
weight: 1
toc: false
---
### Essential Tweaks
{{< autolinks section="dev/tweaks/essential-tweaks" >}}
@@ -1,9 +0,0 @@
---
title: "Performance Plans"
weight: 4
toc: false
---
### Performance Plans
{{< autolinks section="dev/tweaks/performance-plans" >}}
-21
View File
@@ -1,21 +0,0 @@
---
title: "Tweaks"
weight: 2
toc: false
---
### 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" >}}
@@ -1,19 +0,0 @@
---
title: "O&O ShutUp10++ - Run"
description: ""
---
```powershell {filename="functions/public/Invoke-WPFOOSU.ps1",linenos=inline,linenostart=1}
function Invoke-WPFOOSU {
try {
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe -OutFile "$winutildir\ooshutup10.exe"
Start-Process -FilePath "$winutildir\ooshutup10.exe"
$ProgressPreference = 'Continue'
} catch {
Write-Error "Couldn't download O&O ShutUp10. Please make sure you have an active Internet connection."
}
}
```
@@ -1,9 +0,0 @@
---
title: "Advanced Tweaks (CAUTION)"
weight: 2
toc: false
---
### Advanced Tweaks (CAUTION)
{{< autolinks section="dev/tweaks/z--advanced-tweaks---caution" >}}
@@ -1,57 +0,0 @@
---
title: Applications
weight: 3
prev: /userguide/getting-started/
next: /userguide/tweaks/
---
Use the Applications tab to install, upgrade, uninstall, and review supported apps from one place. WinUtil relies on package manager support for these actions, so the available results depend on what WinGet can detect and manage on your system.
{{< tabs >}}
{{< tab name="Installation & Updates" selected=true >}}
* Choose the applications you want to install or upgrade.
* For programs not currently installed, this action will install them.
* For programs already installed, this action will update them to the latest version.
* Click the `Install/Upgrade Selected` button to start the installation or upgrade process.
{{< image src="images/install-pics/installation" alt="Install or upgrade selected applications" >}}
{{< /tab >}}
{{< tab name="Upgrade All" >}}
* Simply press the `Upgrade All` button.
* This upgrades every supported installed program without individual selection.
{{< image src="images/install-pics/install-apps" alt="Upgrade all applications" >}}
{{< /tab >}}
{{< tab name="Uninstall" >}}
* Select the programs you wish to uninstall.
* Click the `Uninstall Selected` button to remove them.
{{< image src="images/install-pics/uninstall-apps" alt="Uninstall selected applications" >}}
{{< /tab >}}
{{< tab name="Show Installed Apps" >}}
* Click the `Show Installed Apps` button.
* This scans for and selects installed applications supported by WinGet.
{{< image src="images/install-pics/show-installed-apps" alt="Show installed apps" >}}
{{< /tab >}}
{{< tab name="Clear Selection" >}}
* Click the `Clear Selection` button.
* This clears all current selections.
{{< image src="images/install-pics/clear-selection-apps" alt="Clear app selections" >}}
{{< /tab >}}
{{< /tabs >}}
> [!TIP]
> If you have trouble finding an application, press `Ctrl + F` and search for its name. The list filters as you type.
> [!NOTE]
> `Show Installed Apps` only selects software that WinGet can identify. Apps installed outside supported package sources may not appear.
> [!IMPORTANT]
> Before uninstalling or upgrading apps, close any running programs first. Some packages may still prompt for input or fail if their source is unavailable.
@@ -1,256 +0,0 @@
---
title: Getting Started
weight: 2
prev: /userguide/
next: /userguide/application/
---
## Welcome to Winutil!
Winutil helps you install apps, apply system tweaks, run common fixes, and manage Windows settings from one place. This guide covers the safest way to get started and the first actions most users take.
## System Requirements
Before running Winutil, ensure your system meets these requirements:
> [!IMPORTANT]
> Windows 10 is not supported by Winutil. Windows 10 reached the end of support on **October 14, 2025**.
- **Operating System**: Windows 11
- **PowerShell**: Version 5.1 or later (included by default in Windows 11)
- **Administrator Access**: Required for system-level changes
- **Internet Connection**: Required for downloading applications and updates
- **.NET Framework**: Version 4.5 or later (usually pre-installed)
## Installation
Winutil doesn't require traditional installation. It runs directly from PowerShell as a script.
### Step 1: Open PowerShell as Administrator
There are several ways to open PowerShell with admin rights:
**Method 1: Start Menu (Recommended)**
1. Right-click the Windows Start button
2. Select "Terminal (Admin)"
**Method 2: Search Method**
1. Press the `Windows` key
2. Type "PowerShell" or "Terminal"
3. Press `Ctrl + Shift + Enter` to launch as administrator
4. Or right-click and select "Run as administrator"
**Method 3: Run Dialog**
1. Press `Windows + R`
2. Type `powershell`
3. Press `Ctrl + Shift + Enter`
### Step 2: Run the Launch Command
With PowerShell running as Administrator, run one of the following commands depending on the release channel you want.
**Stable release (recommended)**
```powershell
irm "https://christitus.com/win" | iex
```
**Development branch (bleeding edge — for testing only)**
```powershell
irm "https://christitus.com/windev" | iex
```
> [!NOTE]
> - The `irm` command downloads the script, and `iex` executes it. This is safe when downloading from the official source.
> - The development branch may contain experimental changes and should only be used for testing on non-production systems.
### Step 3: Wait for Winutil to Load
The first time you run Winutil, it may take a few moments to:
- Download the latest version
- Initialize the interface
- Load all features and settings
## First Time Setup
### Understanding the Interface
Winutil opens with a clean, tabbed interface:
**Main Tabs**:
- **Install**: Browse and install applications
- **Tweaks**: Apply system optimizations and customizations
- **Config**: Access system tools and utilities
- **Updates**: Manage Windows updates
- **Win11 Creator**: Build a customized Windows 11 ISO from an official Microsoft image.
## Your First Actions
Here are some recommended first steps for new users:
### 1. Create a Restore Point
Before making any changes, create a system restore point:
1. Go to the **Tweaks** tab
2. Find "Create Restore Point" under Essential Tweaks
3. Check the box and click **Run Tweaks**
This gives you a rollback point if needed.
### 2. Install Essential Applications
1. Navigate to the **Install** tab
2. Browse categories or use the search bar
3. Check the applications you want to install
4. Click "Install/Upgrade Selected" at the bottom
### 3. Apply Basic Tweaks
For a better Windows experience with minimal risk:
1. Go to the **Tweaks** tab
2. Select the **Standard** preset for a balanced configuration
3. Review the selected tweaks
4. Click **Run Tweaks**
> [!NOTE]
> Some tweaks, fixes, and update changes may require a restart or sign-out before the full effect is visible.
## Common Tasks
### Installing Applications
**Single Application**:
1. Open the **Install** tab
2. Search for the application name
3. Check the box next to it
4. Click "Install/Upgrade Selected"
**Multiple Applications**:
1. Check multiple application boxes
2. All checked apps will install in sequence
3. Progress is shown in the bottom panel
### Applying Tweaks
**Essential Tweaks** (Safe for all users):
1. Go to the **Tweaks** tab
2. Select from the Essential Tweaks section
3. Click **Run Tweaks**
**Advanced Tweaks** (Use with caution):
1. Only modify if you understand the implications
2. Always create a restore point first
3. Review documentation for each tweak
**Undoing Tweaks**:
1. Select the same tweaks you applied
2. Click **Undo Selected Tweaks**
3. The system reverts to the previous state
### Using Quick Fixes
For common Windows issues:
1. Go to the **Config** tab
2. Navigate to the **Fixes** section
3. Select the appropriate fix:
- **Reset Network**: Fixes network connectivity issues
- **Reset Windows Update**: Resolves update problems
- **System Corruption Scan**: Repairs corrupted system files
- **WinGet Reinstall**: Fixes package manager issues
### Changing DNS Servers
For improved privacy and speed:
1. Go to the **Tweaks** tab
2. Find the DNS section
3. Select a provider:
- **Cloudflare**: Fast and privacy-focused
- **Google**: Reliable and widely used
- **Quad9**: Security-focused with malware blocking
- **AdGuard**: Blocks ads and trackers
4. Click **Apply**
## Understanding Presets
Winutil offers several preset configurations:
- **Minimal**: Minimal changes that keep most Windows features
- **Standard**: A good middle ground for most users
- **Advanced**: Selects a focused set of safer advanced tweaks.
## Safety Tips
**DO**:
- Create restore points before major changes
- Read tweak descriptions before applying
- Start with Essential Tweaks
- Keep Windows up to date
- Back up important data
**DON'T**:
- Apply all tweaks at once without understanding them
- Skip creating restore points
- Use Advanced Tweaks without research
- Disable security features unless necessary
- Run on production systems without testing
## Troubleshooting First Run
### Script Won't Download
If the launch command fails:
- Make sure PowerShell or Terminal is running as Administrator.
- Confirm the PC has internet access and can reach `christitus.com`.
- Retry from a normal PowerShell session rather than a restricted enterprise shell profile.
- If the command starts and then closes immediately, reopen Terminal as Administrator and run it again so you can read the error output.
If it still fails, check the [Known Issues](/knownissues/) page.
## Next Steps
Now that you're set up, explore these guides:
- [Applications Guide](../application/) - Learn about installing, upgrading, and uninstalling software
- [Tweaks Guide](../tweaks/) - Understand system optimizations
- [FAQ](/faq/) - Common questions and answers
## Getting Help
If you need assistance:
- **Documentation**: Browse this documentation site
- **Known Issues**: Check the [Known Issues](/knownissues/) page
- **Discord**: Join the [community Discord server](https://discord.gg/RUbZUZyByQ)
- **GitHub Issues**: Report bugs on [GitHub](https://github.com/ChrisTitusTech/winutil/issues)
- **YouTube**: Watch [video tutorials](https://www.youtube.com/watch?v=6UQZ5oQg8XA)
## Quick Reference Card
| Task | Location | Action |
| ---- | -------- | ------ |
| Install or upgrade apps | Install tab | Check boxes -> Install/Upgrade Selected |
| Uninstall apps | Install tab | Check boxes -> Uninstall Selected |
| Apply tweaks | Tweaks tab | Select tweaks -> Run Tweaks |
| Undo tweaks | Tweaks tab | Select tweaks -> Undo Selected Tweaks |
| Create restore point | Tweaks tab | Essential Tweaks section |
| Fix network | Config tab | Fixes -> Reset Network |
| Change DNS | Tweaks tab | DNS section |
| Open Control Panel | Config tab | Legacy Windows Panels |
-36
View File
@@ -1,36 +0,0 @@
---
title: Updates
weight: 6
prev: /userguide/features/
next: /userguide/automation/
---
WinUtil provides three update modes so you can choose how aggressively Windows Update is managed on your system:
Changing modes adjusts system-wide Windows Update behavior. After switching modes, give Windows a moment to apply the policy and plan for a restart if the new state does not appear immediately.
{{< image src="images/updates-tab-new" alt="Updates tab in WinUtil" >}}
- **Default (Out of the Box) Settings**: Restores standard Windows Update behavior
- **Security (Recommended) Settings**: Prioritizes stability while still receiving security updates
- **Disable ALL Updates**: Turns off Windows Update entirely and should only be used with extreme caution
### Default (Out of Box) Settings
- **What it does**: Restores the default Windows Update configuration.
- **Best for**: Systems where you want Windows to manage updates normally.
- **Notes**: This removes custom update settings previously applied by WinUtil. If update errors continue, use the reset option in the **Config** tab to restore Microsoft Update services to their default state.
### Security (Recommended) Settings
- **What it does**: Applies a more conservative update strategy designed for most users.
- **Feature updates**: Delayed by **365 days** to reduce the chance of disruption from major Windows changes.
- **Security updates**: Delayed by **4 days** to allow time for early issues to surface while still keeping the system protected.
- **Why use it**: This mode offers the best balance between security and stability, which is why it is the recommended option for most PCs.
### Disable ALL Updates (NOT RECOMMENDED!)
- **What it does**: Disables all Windows updates.
- **Best for**: Highly controlled or special-purpose systems where updates must remain off temporarily.
- **Warning**: This leaves the system without security patches and significantly increases security risk.
- **Recommendation**: Avoid this mode unless you fully understand the tradeoffs and have a specific reason to use it.
-5
View File
@@ -1,5 +0,0 @@
module github.com/ChrisTitusTech/WinUtil
go 1.26
require github.com/imfing/hextra v0.12.3 // indirect
-2
View File
@@ -1,2 +0,0 @@
github.com/imfing/hextra v0.12.3 h1:DZHY2rUWYteyzjlHi9r4n7Bb5e2Q+6LXe4C1Dqn0ZjM=
github.com/imfing/hextra v0.12.3/go.mod h1:vi+yhpq8YPp/aghvJlNKVnJKcPJ/VyAEcfC1BSV9ARo=
-140
View File
@@ -1,140 +0,0 @@
baseURL = "https://winutil.christitus.com/"
languageCode = "en-us"
title = "WinUtil Documentation"
enableGitInfo = true
canonifyURLs = true
[[module.mounts]]
source = "assets"
target = "assets"
[[module.imports]]
path = "github.com/imfing/hextra"
[[menu.main]]
identifier = "userguide"
name = "User Guides"
pageRef = "/userguide"
weight = 1
[[menu.main]]
identifier = "documentation"
name = "Developer Documentation"
weight = 2
[[menu.main]]
identifier = "contribution-guides"
name = "Contribution Guides"
pageRef = "CONTRIBUTING.md"
weight = 1
parent = "documentation"
[[menu.main]]
identifier = "developer-documentation"
name = "Developer Docs"
pageRef = "/dev"
weight = 2
parent = "documentation"
[[menu.main]]
identifier = "help"
name = "Help"
weight = 3
[[menu.main]]
identifier = "faq"
name = "FAQ"
pageRef = "faq.md"
weight = 1
parent = "help"
[[menu.main]]
identifier = "known-issues"
name = "Known Issues"
pageRef = "KnownIssues.md"
weight = 2
parent = "help"
[[menu.main]]
identifier = "forums"
name = "Forums"
url = "https://forum.christitus.com/"
weight = 3
parent = "help"
[[menu.main]]
name = "Store"
url = "https://christitus.com/downloads/"
weight = 5
[[menu.main]]
name = "Search"
weight = 6
[menu.main.params]
type = "search"
[[menu.main]]
name = "GitHub"
weight = 7
url = "https://github.com/christitustech/winutil"
[menu.main.params]
icon = "github"
[params]
description = "Chris Titus Tech's Windows Utility - Install Programs, Tweaks, Fixes, and Updates"
displayUpdatedDate = true
dateFormat = "January 2, 2006"
[params.navbar]
displayTitle = false
displayLogo = true
[params.navbar.logo]
path = "navlogo.png"
dark = "navlogo.png"
link = "/"
width = 150
height = 50
[params.theme]
default = "system"
displayToggle = true
[params.page]
width = "wide"
[params.footer]
enable = true
displayCopyright = true
displayPoweredBy = false
width = "normal"
[params.highlight.copy]
enable = true
display = "hover"
[menu]
[[menu.sidebar]]
name = "Links"
weight = 1
[menu.sidebar.params]
type = "separator"
[[menu.sidebar]]
name = "GitHub Repo ↗"
url = "https://github.com/ChrisTitusTech/winutil"
weight = 2
[[menu.sidebar]]
name = "Discord Server ↗"
url = "https://discord.gg/RUbZUZyByQ"
weight = 3
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
-23
View File
@@ -1,23 +0,0 @@
copyright: "&copy; <script>document.write(new Date().getFullYear())</script>&nbsp;<a href='https://christitus.com'>Chris Titus Tech</a>. All rights reserved."
backToTop: "Scroll to top"
changeLanguage: "Change language"
changeTheme: "Change theme"
copy: "Copy"
copied: "Copied!"
copyAsMarkdown: "Copy as Markdown"
copyPage: "Copy Page"
copyCode: "Copy code"
dark: "Dark"
editThisPage: "Edit this page on GitHub →"
lastUpdated: "Last updated on"
light: "Light"
next: "Next"
noResultsFound: "No results found."
onThisPage: "On this page"
poweredBy: "Powered by Chris Titus Tech"
previous: "Prev"
readMore: "Read more →"
searchPlaceholder: "Search..."
system: "System"
tags: "Tags"
viewAsMarkdown: "View as Markdown"
-17
View File
@@ -1,17 +0,0 @@
{{- $section := .Get "section" | lower -}}
{{- $pages := slice -}}
{{- range .Site.RegularPages -}}
{{- if in .RelPermalink $section -}}
{{- $pageTitle := .Title -}}
{{- if eq $pageTitle "" -}}
{{- $pageTitle = .File.BaseFileName | humanize | title -}}
{{- end -}}
{{- $pageDesc := .Description -}}
{{- $pages = $pages | append (dict "title" $pageTitle "description" $pageDesc "url" .RelPermalink) -}}
{{- end -}}
{{- end -}}
<ul>
{{- range sort $pages "title" "asc" }}
<li><a href="{{ .url }}">{{ .title }}</a>{{ with .description }} - {{ . }}{{ end }}</li>
{{- end }}
</ul>
-114
View File
@@ -1,114 +0,0 @@
{{/*Retrive Passed Shortcode Parameters*/}}
{{ $src := .Get "src" }}
{{ $alt := .Get "alt" }}
{{/*Define sizes*/}}
{{ $Small := 200 }}
{{ $Medium := 600 }}
{{ $Large := 1000 }}
{{/*Define Image variables as global variables to make them easily accessible in this shortcode*/}}
{{ $DarkImage := "" }} {{ $DarkSmallImage := "" }} {{ $DarkMediumImage := "" }} {{ $DarkLargeImage := "" }}
{{ $LightImage := "" }} {{ $LightSmallImage := "" }} {{ $LightMediumImage := "" }} {{ $LightLargeImage := "" }}
{{ $SingleImage := "" }} {{ $SingleSmallImage := "" }} {{ $SingleMediumImage := "" }} {{ $SingleLargeImage := "" }}
{{/*Find images and update the previous Single,Dark,Light Images variables*/}}
{{ with resources.GetMatch (print $src ".jpg") }} {{ $SingleImage = . }} {{ end }}
{{ with resources.GetMatch (print $src "-Dark" ".jpg") }} {{ $DarkImage = . }} {{ end }}
{{ with resources.GetMatch (print $src "-Light" ".jpg") }} {{ $LightImage = . }} {{ end }}
{{ with resources.GetMatch (print $src ".png") }} {{ $SingleImage = . }} {{ end }}
{{ with resources.GetMatch (print $src "-Dark" ".png") }} {{ $DarkImage = . }} {{ end }}
{{ with resources.GetMatch (print $src "-Light" ".png") }} {{ $LightImage = . }} {{ end }}
{{/*Applying Image Processing*/}}
{{ with $SingleImage }}
{{ with .Resize (printf "%dx%d webp q50" .Width .Height) }}
{{ $SingleImage = . }}
{{ end }}
{{ end }}
{{ with $DarkImage }}
{{ with .Resize (printf "%dx%d webp q50" .Width .Height) }}
{{ $DarkImage = . }}
{{ end }}
{{ end }}
{{ with $LightImage }}
{{ with .Resize (printf "%dx%d webp q50" .Width .Height) }}
{{ $LightImage = . }}
{{ end }}
{{ end }}
{{/*Make different sized versions to images if applicable*/}}
{{ with $SingleImage }}
{{ if gt (.Width) ($Small) }}
{{ with .Resize (printf "%dx" $Small) }}
{{ $SingleSmallImage = . }}
{{ end }}
{{ end }}
{{ if gt (.Width) ($Medium) }}
{{ with .Resize (printf "%dx" $Medium) }}
{{ $SingleMediumImage = . }}
{{ end }}
{{ end }}
{{ if gt (.Width) ($Large) }}
{{ with .Resize (printf "%dx" $Large) }}
{{ $SingleLargeImage = . }}
{{ end }}
{{ end }}
{{ end }}
{{ with $DarkImage }}
{{ if gt (.Width) ($Small) }}
{{ with .Resize (printf "%dx" $Small) }}
{{ $DarkSmallImage = . }}
{{ end }}
{{ end }}
{{ if gt (.Width) ($Medium) }}
{{ with .Resize (printf "%dx" $Medium) }}
{{ $DarkMediumImage = . }}
{{ end }}
{{ end }}
{{ if gt (.Width) ($Large) }}
{{ with .Resize (printf "%dx" $Large) }}
{{ $DarkLargeImage = . }}
{{ end }}
{{ end }}
{{ end }}
{{ with $LightImage }}
{{ if gt (.Width) ($Small) }}
{{ with .Resize (printf "%dx" $Small) }}
{{ $LightSmallImage = . }}
{{ end }}
{{ end }}
{{ if gt (.Width) ($Medium) }}
{{ with .Resize (printf "%dx" $Medium) }}
{{ $LightMediumImage = . }}
{{ end }}
{{ end }}
{{ if gt (.Width) ($Large) }}
{{ with .Resize (printf "%dx" $Large) }}
{{ $LightLargeImage = . }}
{{ end }}
{{ end }}
{{ end }}
{{ if $SingleImage }}
<picture>
{{ with $SingleSmallImage }}<source media='(max-width: {{ printf "%dpx" $Small}})' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $SingleMediumImage }}<source media='(min-width: {{ printf "%dpx" $Small}}) and (max-width: {{ printf "%dpx" $Medium}})' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $SingleLargeImage }}<source media='(min-width: {{ printf "%dpx" $Medium}}) and (max-width: {{ printf "%dpx" $Large}})' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $SingleImage }}<img loading="lazy" src="{{ .RelPermalink }}" Width="{{ .Width }}" height="{{ .Height }}" {{ with $alt }}alt="{{.}}"{{ else }}alt=""{{ end }}/>{{ end }}
</picture>
{{ else }}
<picture>
{{ with $DarkSmallImage }}<source media='(max-width: {{ printf "%dpx" $Small}}) and (prefers-color-scheme: dark)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $DarkMediumImage }}<source media='(min-width: {{ printf "%dpx" $Small}}) and (max-width: {{ printf "%dpx" $Medium}}) and (prefers-color-scheme: dark)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $DarkLargeImage }}<source media='(min-width: {{ printf "%dpx" $Medium}}) and (max-width: {{ printf "%dpx" $Large}}) and (prefers-color-scheme: dark)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $DarkImage }}<source media='(prefers-color-scheme: dark)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $LightSmallImage }}<source media='(max-width: {{ printf "%dpx" $Small}}) and (prefers-color-scheme: light)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $LightMediumImage }}<source media='(min-width: {{ printf "%dpx" $Small}}) and (max-width: {{ printf "%dpx" $Medium}}) and (prefers-color-scheme: light)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $LightLargeImage }}<source media='(min-width: {{ printf "%dpx" $Medium}}) and (max-width: {{ printf "%dpx" $Large}}) and (prefers-color-scheme: light)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $LightImage }}<source media='(prefers-color-scheme: light)' srcset='{{ .RelPermalink }}'>{{ end }}
{{ with $LightImage }}<img loading="lazy" src="{{ .RelPermalink }}" Width="{{ .Width }}" height="{{ .Height }}" {{ with $alt }}alt="{{.}}"{{ else }}alt=""{{ end }}/>
{{ else with $DarkImage }}<img loading="lazy" src="{{ .RelPermalink }}" Width="{{ .Width }}" height="{{ .Height }}" {{ with $alt }}alt="{{.}}"{{ else }}alt=""{{ end }}/>{{ end }}
</picture>
{{ end }}
+6950
View File
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
{
"name": "docs-astro",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/starlight": "^0.41.5",
"@fontsource-variable/jetbrains-mono": "^5.3.0",
"@fontsource/geist-sans": "^5.3.0",
"astro": "^7.0.2",
"sharp": "^0.35.3"
}
}

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Before

Width:  |  Height:  |  Size: 173 KiB

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

+127
View File
@@ -0,0 +1,127 @@
---
// Feature card with small corner brackets instead of a shadow/colored border.
import { Icon } from '@astrojs/starlight/components';
import type { ComponentProps } from 'astro/types';
interface Props {
icon: ComponentProps<typeof Icon>['name'];
title: string;
}
const { icon, title } = Astro.props;
---
<div class="wu-corner-card">
{/* Corner brackets decoration. */}
<span class="wu-corner-marks" aria-hidden="true">
<span class="mark top-left" /><span class="mark top-right" /><span class="mark bottom-left" /><span
class="mark bottom-right"
/>
</span>
{/* Icon badge + heading + description. */}
<div class="wu-corner-card-icon">
<Icon name={icon} size="1.25rem" />
</div>
<h3><slot name="title">{title}</slot></h3>
<div class="wu-corner-card-desc"><slot /></div>
</div>
<style>
@layer starlight.core {
.wu-corner-card {
position: relative;
display: flex;
flex-direction: column;
gap: 0.75rem;
padding: 1.5rem;
border: 1px solid var(--sl-color-hairline-light);
background-color: var(--sl-color-bg);
}
/* Corner brackets decoration (four small L-shaped marks). */
.wu-corner-marks {
position: absolute;
inset: 0;
pointer-events: none;
opacity: 0.5;
}
.mark {
position: absolute;
background: var(--sl-color-gray-4);
}
.mark.top-left,
.mark.top-right {
top: -1px;
height: 1px;
width: 0.9rem;
}
.mark.bottom-left,
.mark.bottom-right {
bottom: -1px;
height: 1px;
width: 0.9rem;
}
.mark.top-left,
.mark.bottom-left {
left: -1px;
}
.mark.top-right,
.mark.bottom-right {
right: -1px;
}
.mark.top-left::after,
.mark.top-right::after,
.mark.bottom-left::after,
.mark.bottom-right::after {
content: '';
position: absolute;
background: var(--sl-color-gray-4);
width: 1px;
height: 0.9rem;
}
.mark.top-left::after,
.mark.top-right::after {
top: 0;
}
.mark.bottom-left::after,
.mark.bottom-right::after {
bottom: 0;
}
.mark.top-left::after,
.mark.bottom-left::after {
left: 0;
}
.mark.top-right::after,
.mark.bottom-right::after {
right: 0;
}
/* Icon badge + heading + description. */
.wu-corner-card-icon {
display: flex;
align-items: center;
justify-content: center;
width: 2.5rem;
height: 2.5rem;
border-radius: var(--wu-radius-sm);
background-color: var(--sl-color-gray-6);
color: var(--sl-color-accent);
}
.wu-corner-card h3 {
margin: 0;
font-size: var(--sl-text-lg);
font-weight: 600;
color: var(--sl-color-white);
}
.wu-corner-card-desc {
font-size: var(--sl-text-sm);
line-height: var(--sl-line-height);
color: var(--sl-color-gray-3);
}
.wu-corner-card-desc :global(p) {
margin: 0;
}
}
</style>
+90
View File
@@ -0,0 +1,90 @@
---
import EditLink from 'virtual:starlight/components/EditLink';
import LastUpdated from 'virtual:starlight/components/LastUpdated';
import Pagination from 'virtual:starlight/components/Pagination';
import config from 'virtual:starlight/user-config';
import { Icon } from '@astrojs/starlight/components';
const year = new Date().getFullYear();
---
<footer class="sl-flex">
{/* Edit link + last-updated timestamp, and prev/next pagination. */}
<div class="meta sl-flex">
<EditLink />
<LastUpdated />
</div>
<Pagination />
{/* "Built with Starlight" credit (only shown if Starlight's `credits` config is enabled). */}
{
config.credits && (
<a class="kudos sl-flex" href="https://starlight.astro.build">
<Icon name={'starlight'} /> {Astro.locals.t('builtWithStarlight.label')}
</a>
)
}
{/* Copyright line. */}
<div class="site-footer-copyright">© {year} <a href="https://christitus.com">Chris Titus Tech</a>. All rights reserved.</div>
</footer>
<style>
@layer starlight.core {
/* Footer layout: stacked meta row + pagination. */
footer {
flex-direction: column;
gap: 1.5rem;
}
.meta {
gap: 0.75rem 3rem;
justify-content: space-between;
flex-wrap: wrap;
margin-top: 3rem;
font-size: var(--sl-text-sm);
color: var(--sl-color-gray-3);
}
.meta > :global(p:only-child) {
margin-inline-start: auto;
}
/* "Built with Starlight" credit link. */
.kudos {
align-items: center;
gap: 0.5em;
margin: 1.5rem auto;
font-size: var(--sl-text-xs);
text-decoration: none;
color: var(--sl-color-gray-3);
}
.kudos:hover {
color: var(--sl-color-white);
}
}
@layer starlight.components {
.kudos :global(svg) {
color: var(--sl-color-orange);
}
}
/* Collapse the meta/pagination rows entirely when they have nothing in them (e.g. editUrl: false and no prev/next), instead of leaving an empty gap. */
footer .meta:empty,
footer :global(.pagination-links):empty {
display: none;
margin: 0;
}
/* Site-wide copyright line, matching the previous Hugo docs site's footer. The divider above it comes from Starlight's own .content-panel border. */
.site-footer-copyright {
font-size: var(--sl-text-xs);
color: var(--sl-color-gray-3);
}
.site-footer-copyright a {
color: inherit;
text-decoration: underline;
}
.site-footer-copyright a:hover {
color: var(--sl-color-white);
}
</style>
+331
View File
@@ -0,0 +1,331 @@
---
import config from 'virtual:starlight/user-config';
import LanguageSelect from 'virtual:starlight/components/LanguageSelect';
import Search from 'virtual:starlight/components/Search';
import SiteTitle from 'virtual:starlight/components/SiteTitle';
import SocialIcons from 'virtual:starlight/components/SocialIcons';
import ThemeSelect from 'virtual:starlight/components/ThemeSelect';
import { Icon } from '@astrojs/starlight/components';
import { siteLinks } from '../site-links';
// Render the `Search` component if Pagefind is enabled or the default search component has been overridden.
const shouldRenderSearch =
config.pagefind || config.components.Search !== '@astrojs/starlight/components/Search.astro';
// Pages with a sidebar already have Starlight's own mobile menu toggle; only splash pages need this one.
const { hasSidebar } = Astro.locals.starlightRoute;
---
<div class="header">
{/* Site title. */}
<div class="title-wrapper sl-flex">
<SiteTitle />
</div>
<div class="mobile-actions sl-flex">
{/* Search box. */}
<div class="sl-flex print:hidden">
{shouldRenderSearch && <Search />}
</div>
{
!hasSidebar && (
<div class="site-nav-toggle sl-flex md:sl-hidden print:hidden">
<button type="button" aria-expanded="false" aria-controls="site-nav-panel" aria-label="Site navigation">
<Icon name="bars" class="open-menu" />
<Icon name="close" class="close-menu" />
</button>
<div id="site-nav-panel" class="site-nav-panel">
<div class="site-nav-panel-group">
<p class="site-nav-panel-heading">Documentation</p>
<a href="/guides/">User Guides</a>
<a href="/contributing/">Contribution Guides</a>
<a href="/code-reference/architecture/">Code Reference</a>
</div>
<div class="site-nav-panel-group">
<p class="site-nav-panel-heading">Help</p>
<a href="/faq/">FAQ</a>
<a href="/knownissues/">Known Issues</a>
<a href={siteLinks.forums.href} target="_blank" rel="noreferrer">{siteLinks.forums.label}</a>
</div>
<a class="site-nav-panel-link" href={siteLinks.store.href} target="_blank" rel="noreferrer">{siteLinks.store.label}</a>
</div>
</div>
)
}
</div>
{/* Right-side group: nav links, social icons, theme/language pickers. */}
<div class="sl-hidden md:sl-flex print:hidden right-group">
<nav class="site-nav" aria-label="Top">
{/* "Documentation" dropdown. */}
<div class="site-nav-dropdown">
<details name="site-nav-dropdown">
<summary class="site-nav-link">Documentation</summary>
</details>
<div class="site-nav-menu">
<a href="/guides/">User Guides</a>
<a href="/contributing/">Contribution Guides</a>
<a href="/code-reference/architecture/">Code Reference</a>
</div>
</div>
{/* "Help" dropdown. */}
<div class="site-nav-dropdown">
<details name="site-nav-dropdown">
<summary class="site-nav-link">Help</summary>
</details>
<div class="site-nav-menu">
<a href="/faq/">FAQ</a>
<a href="/knownissues/">Known Issues</a>
<a href={siteLinks.forums.href} target="_blank" rel="noreferrer">{siteLinks.forums.label}</a>
</div>
</div>
<a class="site-nav-link" href={siteLinks.store.href} target="_blank" rel="noreferrer">{siteLinks.store.label}</a>
</nav>
<div class="sl-flex social-icons">
<SocialIcons />
</div>
<ThemeSelect />
<LanguageSelect />
</div>
</div>
<script>
const toggle = document.querySelector<HTMLElement>('.site-nav-toggle');
const btn = toggle?.querySelector('button');
if (toggle && btn) {
const setExpanded = (expanded: boolean) => btn.setAttribute('aria-expanded', String(expanded));
btn.addEventListener('click', () => setExpanded(btn.getAttribute('aria-expanded') !== 'true'));
toggle.addEventListener('keyup', (e) => {
if (e.code === 'Escape') {
setExpanded(false);
btn.focus();
}
});
// Collapse the panel if the viewport grows past the mobile breakpoint.
matchMedia('(min-width: 50em)').addEventListener('change', () => setExpanded(false));
}
</script>
<style>
@layer starlight.core {
/* Header shell: title, search, right-side nav group. */
.header {
display: flex;
gap: var(--sl-nav-gap);
justify-content: space-between;
align-items: center;
height: 100%;
}
.title-wrapper {
/* Clips long titles instead of overflowing onto the search/menu buttons; padding/negative margin avoids clipping the focus ring. */
overflow: clip;
padding: 0.25rem;
margin: -0.25rem;
min-width: 0;
}
.mobile-actions {
align-items: center;
gap: 0.75rem;
}
/* Right-side group: nav + social icons, divided by a hairline. */
.right-group,
.social-icons {
gap: 1rem;
align-items: center;
}
.social-icons::after {
content: '';
height: 2rem;
border-inline-end: 1px solid var(--sl-color-hairline-light);
}
@media (min-width: 50rem) {
:global(:root[data-has-sidebar]) {
--__sidebar-pad: calc(2 * var(--sl-nav-pad-x));
}
:global(:root:not([data-has-toc])) {
--__toc-width: 0rem;
}
/* Columns: site title */
.header {
--__sidebar-width: max(0rem, var(--sl-content-inline-start, 0rem) - var(--sl-nav-pad-x));
--__main-column-fr: calc(
(
100% + var(--__sidebar-pad, 0rem) - var(--__toc-width, var(--sl-sidebar-width)) -
(2 * var(--__toc-width, var(--sl-nav-pad-x))) - var(--sl-content-inline-start, 0rem) -
var(--sl-content-width)
) / 2
);
display: grid;
grid-template-columns:
minmax(
calc(var(--__sidebar-width) + max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))),
auto
)
1fr
auto;
align-content: center;
}
}
}
/* Top nav links + dropdowns. */
.site-nav {
display: flex;
align-items: center;
gap: 1.25rem;
padding-inline-end: 1.25rem;
border-inline-end: 1px solid var(--sl-color-hairline-light);
}
/* Top nav trigger: shared style for plain links and dropdown triggers. */
.site-nav-link {
font-size: var(--sl-text-sm);
font-weight: 500;
color: var(--sl-color-gray-2);
background: none;
border: none;
padding: 0;
font-family: inherit;
cursor: pointer;
white-space: nowrap;
text-decoration: none;
}
.site-nav-link:hover {
color: var(--sl-color-white);
}
/* Extends the hoverable box down to the menu, closing the dead zone between trigger and menu. */
.site-nav-dropdown {
position: relative;
padding-bottom: 0.75rem;
margin-bottom: -0.75rem;
}
/* No box of its own; only the <summary> lays out. Its `open` state (no JS) is read by .site-nav-menu below. */
.site-nav-dropdown > details {
display: contents;
}
.site-nav-dropdown > details > summary {
display: inline-flex;
align-items: center;
list-style: none;
}
.site-nav-dropdown > details > summary::-webkit-details-marker {
display: none;
}
/* Dropdown menu panel: shown on hover (mouse) or when the sibling <details> is toggled open (touch/keyboard). */
.site-nav-menu {
display: none;
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
min-width: 11rem;
padding: 0.5rem;
flex-direction: column;
gap: 0.125rem;
background: var(--sl-color-bg-nav);
border: 1px solid var(--sl-color-hairline-light);
border-radius: var(--wu-radius-sm, 0.5rem);
box-shadow: var(--sl-shadow-lg);
z-index: 10;
}
.site-nav-dropdown:hover .site-nav-menu,
.site-nav-dropdown:has(details[open]) .site-nav-menu {
display: flex;
}
.site-nav-menu a {
padding: 0.4rem 0.6rem;
border-radius: var(--wu-radius-sm, 0.5rem);
font-size: var(--sl-text-sm);
color: var(--sl-color-gray-2);
text-decoration: none;
white-space: nowrap;
}
.site-nav-menu a:hover {
color: var(--sl-color-white);
background: var(--sl-color-gray-6);
}
/* Mobile equivalent of the site-nav, shown via a toggle button since the desktop nav is hidden below `md`. */
.site-nav-toggle button {
display: flex;
align-items: center;
justify-content: center;
width: 2.25rem;
height: 2.25rem;
border: 0;
border-radius: var(--wu-radius-sm, 0.5rem);
padding: 0;
background: none;
color: var(--sl-color-gray-2);
cursor: pointer;
}
.site-nav-toggle button:hover {
color: var(--sl-color-white);
}
.site-nav-toggle button svg {
width: 1.25rem;
height: 1.25rem;
}
.site-nav-toggle button[aria-expanded='true'] .open-menu,
.site-nav-toggle button:not([aria-expanded='true']) .close-menu {
display: none;
}
.site-nav-panel {
display: none;
position: fixed;
inset-inline: 0;
top: var(--sl-nav-height);
z-index: var(--sl-z-index-menu);
flex-direction: column;
gap: 0.25rem;
max-height: calc(100vh - var(--sl-nav-height));
overflow-y: auto;
padding: 1rem var(--sl-nav-pad-x) 1.5rem;
background: var(--sl-color-bg-nav);
border-bottom: 1px solid var(--sl-color-hairline-shade);
}
.site-nav-toggle button[aria-expanded='true'] ~ .site-nav-panel {
display: flex;
}
.site-nav-panel-link {
padding: 0.5rem 0.25rem;
font-size: var(--sl-text-sm);
font-weight: 500;
color: var(--sl-color-gray-2);
text-decoration: none;
}
.site-nav-panel-link:hover {
color: var(--sl-color-white);
}
.site-nav-panel-group {
display: flex;
flex-direction: column;
border-top: 1px solid var(--sl-color-hairline-light);
padding-top: 0.5rem;
}
.site-nav-panel-heading {
margin: 0 0 0.25rem;
padding: 0 0.25rem;
font-size: var(--sl-text-xs);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.02em;
color: var(--sl-color-gray-3);
}
.site-nav-panel-group a {
padding: 0.5rem 0.25rem;
font-size: var(--sl-text-sm);
color: var(--sl-color-gray-2);
text-decoration: none;
}
.site-nav-panel-group a:hover {
color: var(--sl-color-white);
}
</style>
+301
View File
@@ -0,0 +1,301 @@
---
// Custom hero override: eyebrow, heading, tagline, actions, badges, screenshot.
import { Image } from 'astro:assets';
import { Icon } from '@astrojs/starlight/components';
// Matches Starlight's internal PAGE_TITLE_ID (used by the skip-to-content link).
const PAGE_TITLE_ID = '_top';
// Resolve hero content: Starlight's built-in hero fields plus our custom schema extensions.
const { data } = Astro.locals.starlightRoute.entry;
const { title = data.title, tagline, image, actions = [] } = data.hero || {};
const { heroEyebrow, heroCaption, heroBadges = [] } = data;
let heroImage: ImageMetadata | undefined;
if (image && 'file' in image) heroImage = image.file;
---
<section class="wu-hero">
{/* Full-bleed grid/glow background layer. */}
<div class="wu-hero-grid" aria-hidden="true"></div>
<div class="wu-hero-glow" aria-hidden="true"></div>
<div class="wu-hero-inner">
{/* Copy column: eyebrow, heading, tagline, actions, caption. */}
<div class="wu-hero-copy">
{heroEyebrow && <p class="wu-eyebrow">{heroEyebrow}</p>}
<h1 id={PAGE_TITLE_ID} data-page-title set:html={title} />
{tagline && <p class="wu-hero-tagline" set:html={tagline} />}
{
actions.length > 0 && (
<div class="wu-hero-actions">
{actions.map(({ icon, link: href, text, variant = 'primary' }) => (
<a href={href} class:list={['wu-btn', variant === 'primary' ? 'wu-btn-primary' : 'wu-btn-secondary']}>
{text}
{icon?.name && (
<Icon
name={icon.name}
size="1.5em"
class:list={[(icon.name === 'right-arrow' || icon.name === 'left-arrow') && 'wu-icon-arrow']}
/>
)}
</a>
))}
</div>
)
}
{heroCaption && <p class="wu-hero-caption">{heroCaption}</p>}
</div>
{/* Screenshot framed as a fake browser/app window. */}
{
heroImage && (
<div class="wu-hero-media">
<div class="wu-window">
<div class="wu-window-bar">
<span class="wu-window-title">winutil.ps1</span>
<div class="wu-caption-buttons">
<span class="wu-cap-btn wu-cap-min" aria-hidden="true">
<svg viewBox="0 0 10 10"><path d="M0 5h10" /></svg>
</span>
<span class="wu-cap-btn wu-cap-max" aria-hidden="true">
<svg viewBox="0 0 10 10"><rect x="0.5" y="0.5" width="9" height="9" /></svg>
</span>
<span class="wu-cap-btn wu-cap-close" aria-hidden="true">
<svg viewBox="0 0 10 10"><path d="M0 0l10 10M10 0L0 10" /></svg>
</span>
</div>
</div>
<Image src={heroImage} alt={image?.alt || ''} width={1200} loading="eager" decoding="async" />
</div>
</div>
)
}
</div>
{/* Badge row (shields.io / dcbadge images) below the two-column layout. */}
{
heroBadges.length > 0 && (
<div class="wu-hero-bottom">
<div class="wu-badges">
{heroBadges.map(({ src, alt, href }) =>
href ? (
<a href={href}>
<img src={src} alt={alt} />
</a>
) : (
<img src={src} alt={alt} />
)
)}
</div>
</div>
)
}
</section>
<style>
@layer starlight.core {
/* Outer hero shell; pulled up to close Starlight's fixed 1.5rem ContentPanel padding. */
.wu-hero {
position: relative;
border-bottom: 1px solid var(--sl-color-hairline-light);
margin-inline: calc(-1 * var(--sl-content-pad-x));
padding-inline: var(--sl-content-pad-x);
margin-top: -1.5rem;
padding-top: 1.5rem;
}
/* Full-bleed grid/glow background, forced behind all hero content via negative z-index. */
.wu-hero-grid,
.wu-hero-glow {
position: absolute;
z-index: -1;
top: 0;
bottom: 0;
left: 50%;
width: 100vw;
margin-left: -50vw;
pointer-events: none;
}
.wu-hero-grid {
background-image:
linear-gradient(90deg, var(--sl-color-hairline-light) 1px, transparent 1px),
linear-gradient(var(--sl-color-hairline-light) 1px, transparent 1px);
background-size: 40px 40px;
mask-image: radial-gradient(at top, #000 60%, transparent 100%);
-webkit-mask-image: radial-gradient(at top, #000 60%, transparent 100%);
opacity: 0.6;
}
.wu-hero-glow {
background: radial-gradient(
ellipse at center,
hsl(var(--wu-accent-h) 100% 61% / 0.14) 0%,
hsl(var(--wu-accent-h) 100% 61% / 0.05) 28%,
transparent 68%
);
}
/* Two-column layout: copy left, screenshot right (stacked on mobile). */
.wu-hero-inner {
position: relative;
z-index: 1;
display: grid;
gap: 3rem;
padding-block: 3rem 2rem;
}
/* Hero copy: eyebrow, heading, tagline, actions, caption. */
.wu-hero-copy {
text-align: center;
}
.wu-eyebrow {
margin: 0 0 1rem;
font-size: var(--sl-text-sm);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--sl-color-accent);
}
.wu-hero-copy h1 {
margin: 0;
font-size: clamp(var(--sl-text-4xl), calc(0.25rem + 5vw), var(--sl-text-6xl));
font-weight: 700;
line-height: 1.1;
letter-spacing: -0.02em;
color: var(--sl-color-white);
}
.wu-hero-tagline {
margin: 1.5rem auto 0;
max-width: 40rem;
font-size: var(--sl-text-lg);
line-height: var(--sl-line-height);
color: var(--sl-color-gray-2);
}
.wu-hero-actions {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.75rem;
margin-top: 2.5rem;
}
.wu-hero-caption {
margin: 1.5rem 0 0;
font-size: var(--sl-text-sm);
color: var(--sl-color-gray-3);
}
/* Screenshot framed in a fake browser window (traffic-light dots + title bar). */
.wu-hero-media {
display: flex;
justify-content: center;
}
.wu-window {
width: 100%;
max-width: 56rem;
overflow: hidden;
border-radius: var(--wu-radius-lg);
border: 1px solid var(--sl-color-hairline-light);
background: var(--sl-color-gray-6);
box-shadow: 0 25px 50px -12px hsl(0 0% 0% / 0.5);
}
/* Window chrome: title bar + traffic-light buttons. */
.wu-window-bar {
display: flex;
align-items: center;
gap: 0.4rem;
padding-inline-start: 0.85rem;
border-bottom: 1px solid var(--sl-color-hairline-light);
background: var(--sl-color-black);
}
.wu-window-title {
font-size: var(--sl-text-xs);
color: var(--sl-color-gray-3);
flex: 1;
}
.wu-caption-buttons {
display: flex;
height: 2.1rem;
}
.wu-cap-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.75rem;
height: 100%;
color: var(--sl-color-gray-3);
}
.wu-cap-btn svg {
width: 0.65rem;
height: 0.65rem;
fill: none;
stroke: currentColor;
stroke-width: 1;
}
.wu-cap-max svg {
fill: none;
}
.wu-cap-close svg {
fill: none;
}
.wu-cap-btn:hover {
background: var(--sl-color-gray-5);
}
.wu-cap-close:hover {
background: #e81123;
color: white;
}
.wu-window :global(img) {
display: block;
width: 100%;
height: auto;
}
/* Badge row below the two-column layout, centered full-width. */
.wu-hero-bottom {
position: relative;
z-index: 1;
display: flex;
justify-content: center;
padding-bottom: 2.5rem;
}
.wu-hero-bottom .wu-badges {
margin: 0;
}
/* Desktop breakpoint: side-by-side columns, left-aligned copy. */
@media (min-width: 50rem) {
.wu-hero-inner {
grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
align-items: center;
gap: 2rem;
padding-block: 5rem 3rem;
}
.wu-hero-copy {
text-align: left;
}
.wu-hero-tagline {
margin-inline: 0;
}
.wu-hero-actions {
justify-content: flex-start;
}
.wu-hero-bottom {
padding-bottom: 3rem;
}
}
}
</style>
+38
View File
@@ -0,0 +1,38 @@
---
// Overrides Starlight's default ThemeProvider: dark by default regardless of OS preference, unless the visitor has explicitly picked a theme before.
import { Icon } from '@astrojs/starlight/components';
---
<script is:inline>
window.StarlightThemeProvider = (() => {
// Apply the resolved theme to <html> immediately, before paint, to avoid a flash of the wrong theme.
const storedTheme =
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
const theme = storedTheme || 'dark';
document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark';
// Re-syncs each theme-select picker's icon + value after the visitor changes theme.
return {
updatePickers(theme = storedTheme || 'auto') {
document.querySelectorAll('starlight-theme-select').forEach((picker) => {
const select = picker.querySelector('select');
if (select) select.value = theme;
/** @type {HTMLTemplateElement | null} */
const tmpl = document.querySelector(`#theme-icons`);
const newIcon = tmpl && tmpl.content.querySelector('.' + theme);
if (newIcon) {
const oldIcon = picker.querySelector('svg.label-icon');
if (oldIcon) {
oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes);
}
}
});
},
};
})();
</script>
<template id="theme-icons">
<Icon name="sun" class="light" />
<Icon name="moon" class="dark" />
<Icon name="laptop" class="auto" />
</template>
+39
View File
@@ -0,0 +1,39 @@
---
// Responsive 16:9 YouTube embed using the privacy-enhanced (nocookie) domain.
interface Props {
id: string;
title: string;
}
const { id, title } = Astro.props;
---
<div class="wu-video-embed not-content">
<iframe
src={`https://www.youtube-nocookie.com/embed/${id}`}
title={title}
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen
></iframe>
</div>
<style>
/* `not-content` on the wrapper opts it out of Starlight's markdown reset, which otherwise forces `iframe { height: auto }`. */
.wu-video-embed {
position: relative;
width: 100%;
aspect-ratio: 16 / 9;
margin: 1.5rem 0;
border: 1px solid var(--sl-color-hairline-light);
background-color: var(--sl-color-black);
}
.wu-video-embed iframe {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
border: 0;
}
</style>
+29
View File
@@ -0,0 +1,29 @@
import { defineCollection } from 'astro:content';
import { z } from 'astro/zod';
import { docsLoader } from '@astrojs/starlight/loaders';
import { docsSchema } from '@astrojs/starlight/schema';
export const collections = {
docs: defineCollection({
loader: docsLoader(),
schema: docsSchema({
extend: () =>
z.object({
// Small uppercase kicker line above the hero heading, e.g. "Open Source Windows Setup Utility".
heroEyebrow: z.string().optional(),
// Muted one-liner below the hero actions, e.g. "Self-hosted. Script-powered. No installer.".
heroCaption: z.string().optional(),
// Badge images (shields.io, dcbadge, etc.) shown in a row at the bottom of the hero.
heroBadges: z
.array(
z.object({
src: z.string(),
alt: z.string(),
href: z.string().optional(),
})
)
.optional(),
}),
}),
}),
};
@@ -1,7 +1,6 @@
---
title: Architecture & Design
weight: 1
toc: true
description: How WinUtil's GUI, functions, and JSON configuration files fit together, plus a deep dive into the Win11 Creator subsystem.
---
## Overview
@@ -342,7 +341,7 @@ Update UI
### applications.json Structure
```json {filename="config/applications.json"}
```json title="config/applications.json"
{
"WPFInstall<AppName>": {
"category": "Browsers",
@@ -365,7 +364,7 @@ Update UI
### tweaks.json Structure
```json {filename="config/tweaks.json"}
```json title="config/tweaks.json"
{
"WPFTweaksTelemetry": {
"Content": "Disable Telemetry",
@@ -504,7 +503,7 @@ $sync.form.Dispatcher.Invoke([action]{
### Adding a New Application
1. Edit `config/applications.json`:
```json {filename="config/applications.json"}
```json title="config/applications.json"
{
"WPFInstallNewApp": {
"category": "Utilities",
@@ -522,7 +521,7 @@ $sync.form.Dispatcher.Invoke([action]{
### Adding a New Tweak
1. Edit `config/tweaks.json`:
```json {filename="config/tweaks.json"}
```json title="config/tweaks.json"
{
"WPFTweaksNewTweak": {
"Content": "New Tweak",
@@ -654,10 +653,10 @@ Outputs `winutil.ps1` in the root directory.
## Related Documentation
- [Contributing Guide](../../contributing/) - How to contribute code
- [User Guide](../../userguide/) - End-user documentation
- [Win11 Creator Guide](../../userguide/win11creator/) - Building customized Windows 11 ISOs
- [FAQ](../../faq/) - Common questions
- [Contributing Guide](/contributing/) - How to contribute code
- [User Guide](/guides/) - End-user documentation
- [Win11 Creator Guide](/guides/win11creator/) - Building customized Windows 11 ISOs
- [FAQ](/faq/) - Common questions
## Additional Resources
@@ -1,9 +1,13 @@
---
title: "Legacy F8 Boot Recovery - Disable"
description: ""
description: "Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes."
---
```json {filename="config/feature.json",linenos=inline,linenostart=107}
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"WPFFeatureDisableLegacyRecovery": {
"Content": "Legacy F8 Boot Recovery - Disable",
"Description": "Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.",
@@ -13,4 +17,5 @@ description: ""
"InvokeScript": [
"bcdedit /set bootmenupolicy standard"
],
}
```
@@ -1,9 +1,13 @@
---
title: "Legacy F8 Boot Recovery - Enable"
description: ""
description: "Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes."
---
```json {filename="config/feature.json",linenos=inline,linenostart=96}
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"WPFFeatureEnableLegacyRecovery": {
"Content": "Legacy F8 Boot Recovery - Enable",
"Description": "Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.",
@@ -13,4 +17,5 @@ description: ""
"InvokeScript": [
"bcdedit /set bootmenupolicy legacy"
],
}
```
@@ -1,9 +1,13 @@
---
title: "Registry Backup (Daily Task 12:30am) - Enable"
description: ""
description: "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803."
---
```json {filename="config/feature.json",linenos=inline,linenostart=79}
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"WPFFeatureRegBackup": {
"Content": "Registry Backup (Daily Task 12:30am) - Enable",
"Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.",
@@ -19,4 +23,5 @@ description: ""
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'
"
],
}
```
@@ -0,0 +1,20 @@
---
title: "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."
---
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"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"
],
}
```
@@ -1,9 +1,13 @@
---
title: ".NET Framework (Versions 2, 3, 4) - Enable"
description: ""
description: ".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications."
---
```json {filename="config/feature.json",linenos=inline,linenostart=2}
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"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.",
@@ -14,4 +18,5 @@ description: ""
"NetFx3"
],
"InvokeScript": [],
}
```
@@ -0,0 +1,20 @@
---
title: "Hyper-V - Enable"
description: "Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines."
---
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"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"
],
}
```
@@ -1,9 +1,13 @@
---
title: "Legacy Media Components (WMP, DirectPlay) - Enable"
description: ""
description: "Enables legacy programs from previous versions of Windows."
---
```json {filename="config/feature.json",linenos=inline,linenostart=34}
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"WPFFeatureslegacymedia": {
"Content": "Legacy Media Components (WMP, DirectPlay) - Enable",
"Description": "Enables legacy programs from previous versions of Windows.",
@@ -16,4 +20,5 @@ description: ""
"LegacyComponents"
],
"InvokeScript": [],
}
```
@@ -1,9 +1,13 @@
---
title: "Network File System (NFS) - Enable"
description: ""
description: "Network File System (NFS) is a mechanism for storing files on a network."
---
```json {filename="config/feature.json",linenos=inline,linenostart=60}
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"WPFFeaturenfs": {
"Content": "Network File System (NFS) - Enable",
"Description": "Network File System (NFS) is a mechanism for storing files on a network.",
@@ -21,4 +25,5 @@ description: ""
"nfsadmin client start",
"nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i"
],
}
```
@@ -1,9 +1,13 @@
---
title: "Windows Subsystem for Linux (WSL) - Enable"
description: ""
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."
---
```json {filename="config/feature.json",linenos=inline,linenostart=48}
:::note
This page is generated from [`config/feature.json`](https://github.com/ChrisTitusTech/winutil/blob/main/config/feature.json). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```json title="config/feature.json"
"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.",
@@ -14,4 +18,5 @@ description: ""
"Microsoft-Windows-Subsystem-Linux"
],
"InvokeScript": [],
}
```
@@ -0,0 +1,15 @@
---
title: "AutoLogon - Run"
description: ""
---
:::note
This page is generated from [`functions/public/Invoke-WPFPanelAutologin.ps1`](https://github.com/ChrisTitusTech/winutil/blob/main/functions/public/Invoke-WPFPanelAutologin.ps1). Edit the source file and regenerate the docs rather than editing this file directly.
:::
```powershell title="functions/public/Invoke-WPFPanelAutologin.ps1"
function Invoke-WPFPanelAutologin {
Invoke-WebRequest -Uri https://live.sysinternals.com/Autologon.exe -OutFile "$winutildir\autologin.exe"
Start-Process -FilePath "$winutildir\autologin.exe" -ArgumentList /accepteula
}
```

Some files were not shown because too many files have changed in this diff Show More