Compare commits
59 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5aa099f6e2 | |||
| 9d85eea4e5 | |||
| c765ffb317 | |||
| 82f51b4bf1 | |||
| d44c013464 | |||
| 753d47b9bc | |||
| 8034e85521 | |||
| a09736f9a8 | |||
| 24aaf9a3cf | |||
| f57b5f4ffa | |||
| 32d24c8024 | |||
| 743f9e3783 | |||
| 522c4471c0 | |||
| ea698f3791 | |||
| 8ffd15c9f3 | |||
| 6c1cb0caab | |||
| bcafbe6234 | |||
| fb54380b8b | |||
| 39f26133f4 | |||
| 09695f10aa | |||
| d1becc5310 | |||
| 543b8958ef | |||
| c39c54c7c1 | |||
| d8193fd8ac | |||
| 25adabd622 | |||
| 2d605f1875 | |||
| d46d324df8 | |||
| 3e16817640 | |||
| d0b91d190a | |||
| bdbfdb6681 | |||
| 0154b749a4 | |||
| e6e44e3e04 | |||
| e6d8fdff75 | |||
| 6ba184bdeb | |||
| 6d6defc206 | |||
| fa073f8475 | |||
| 63aecc0bee | |||
| a0887783f8 | |||
| f3880b66bb | |||
| aa636926fa | |||
| ec3166bdc6 | |||
| a3f57532b6 | |||
| 3a7851b0f4 | |||
| 6fa73db245 | |||
| 184fe22a35 | |||
| 9d4613d838 | |||
| 10d83c5b20 | |||
| 4065759ca0 | |||
| 97d5f7b850 | |||
| bf542af426 | |||
| ea9c7de722 | |||
| d2e5886b02 | |||
| d43c26e314 | |||
| 4297d69f2c | |||
| 36e4b27872 | |||
| ec5c7a4639 | |||
| f2ca10e8c9 | |||
| 51cf62cdba | |||
| 415d1864d7 |
@@ -9,6 +9,15 @@ body:
|
|||||||
- Remember, we only support Windows 11. If you encounter problems on Windows 10, please consider upgrading to Windows 11.
|
- Remember, we only support Windows 11. If you encounter problems on Windows 10, please consider upgrading to Windows 11.
|
||||||
- For general questions, join our Community-driven [Discord Server](https://discord.gg/RUbZUZyByQ).
|
- For general questions, join our Community-driven [Discord Server](https://discord.gg/RUbZUZyByQ).
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
id: read_issues
|
||||||
|
attributes:
|
||||||
|
label: "I have read the known issues"
|
||||||
|
description: "You [better do](https://winutil.christitus.com/knownissues/), cause your issue can be already there"
|
||||||
|
options:
|
||||||
|
- label: Yes, I did
|
||||||
|
required: true
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
id: affected_part
|
id: affected_part
|
||||||
attributes:
|
attributes:
|
||||||
@@ -29,8 +38,15 @@ body:
|
|||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: tweaks_applied
|
||||||
|
attributes:
|
||||||
|
label: List the tweaks you applied before the issue occurred.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: error_output
|
id: error_output
|
||||||
attributes:
|
attributes:
|
||||||
label: Paste the full error output (if available) or Screenshot.
|
label: Paste the full error output (if available) or Screenshot or Video.
|
||||||
placeholder: "Include any relevant logs or error messages."
|
placeholder: "Include any relevant logs or error messages."
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<!--Before you make this PR have you followed the docs here? - https://winutil.christitus.com/contributing/ -->
|
<!--Before you make this PR have you followed the docs here? - https://winutil.christitus.com/contributing/ -->
|
||||||
|
<!--Documentation is auto-generated from configs - no manual documentation updates needed -->
|
||||||
|
|
||||||
## Type of Change
|
## Type of Change
|
||||||
- [ ] New feature
|
- [ ] New feature
|
||||||
|
|||||||
@@ -15,101 +15,63 @@ jobs:
|
|||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- run: echo "command=false" >> $GITHUB_ENV
|
- 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;
|
||||||
|
|
||||||
- name: Check for /label command
|
// Authorization check first — before any parsing of comment content
|
||||||
id: check_label_command
|
if (!allowedUsers.includes(commenter)) {
|
||||||
run: |
|
console.log(`User ${commenter} is not in the allowlist. Skipping.`);
|
||||||
if [[ "${{ contains(github.event.comment.body, '/label') }}" == "true" ]]; then
|
return;
|
||||||
echo "command=true" >> $GITHUB_ENV
|
}
|
||||||
LABEL_NAME=$(echo "${{ github.event.comment.body }}" | awk -F"/label" '/\/label/ { match($2, /'\''([^'\'']*)'\''/, arr); if (arr[1] != "") print arr[1] }')
|
|
||||||
echo "label_command=true" >> $GITHUB_ENV
|
|
||||||
echo "label_name=${LABEL_NAME}" >> $GITHUB_ENV
|
|
||||||
else
|
|
||||||
echo "label_command=false" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check for /unlabel command
|
// Read comment body as data, never interpolated into shell
|
||||||
id: check_unlabel_command
|
const body = context.payload.comment.body;
|
||||||
run: |
|
const issueNumber = context.issue.number;
|
||||||
if [[ "${{ contains(github.event.comment.body, '/unlabel') }}" == "true" ]]; then
|
const owner = context.repo.owner;
|
||||||
echo "command=true" >> $GITHUB_ENV
|
const repo = context.repo.repo;
|
||||||
UNLABEL_NAME=$(echo "${{ github.event.comment.body }}" | awk -F"/unlabel" '/\/unlabel/ { match($2, /'\''([^'\'']*)'\''/, arr); if (arr[1] != "") print arr[1] }')
|
|
||||||
echo "unlabel_command=true" >> $GITHUB_ENV
|
|
||||||
echo "unlabel_name=${UNLABEL_NAME}" >> $GITHUB_ENV
|
|
||||||
else
|
|
||||||
echo "unlabel_command=false" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Check for /close command
|
// /label 'name' or /label name
|
||||||
id: check_close_command
|
const labelMatch = body.match(/\/label\s+'([^']+)'|\/label\s+(\S+?)(?:\s|$)/);
|
||||||
run: |
|
if (labelMatch) {
|
||||||
if [[ "${{ contains(github.event.comment.body, '/close') }}" == "true" ]]; then
|
const labelName = (labelMatch[1] || labelMatch[2]).trim();
|
||||||
echo "command=true" >> $GITHUB_ENV
|
console.log(`Adding label: ${labelName}`);
|
||||||
echo "close_command=true" >> $GITHUB_ENV
|
await github.rest.issues.addLabels({
|
||||||
echo "reopen_command=false" >> $GITHUB_ENV
|
owner, repo, issue_number: issueNumber,
|
||||||
else
|
labels: [labelName],
|
||||||
echo "close_command=false" >> $GITHUB_ENV
|
});
|
||||||
fi
|
}
|
||||||
|
|
||||||
- name: Check for /open or /reopen command
|
// /unlabel 'name' or /unlabel name
|
||||||
id: check_reopen_command
|
const unlabelMatch = body.match(/\/unlabel\s+'([^']+)'|\/unlabel\s+(\S+?)(?:\s|$)/);
|
||||||
run: |
|
if (unlabelMatch) {
|
||||||
if [[ "${{ contains(github.event.comment.body, '/open') }}" == "true" ]] || [[ "${{ contains(github.event.comment.body, '/reopen') }}" == "true" ]]; then
|
const labelName = (unlabelMatch[1] || unlabelMatch[2]).trim();
|
||||||
echo "command=true" >> $GITHUB_ENV
|
console.log(`Removing label: ${labelName}`);
|
||||||
echo "reopen_command=true" >> $GITHUB_ENV
|
await github.rest.issues.removeLabel({
|
||||||
echo "close_command=false" >> $GITHUB_ENV
|
owner, repo, issue_number: issueNumber,
|
||||||
else
|
name: labelName,
|
||||||
echo "reopen_command=false" >> $GITHUB_ENV
|
});
|
||||||
fi
|
}
|
||||||
|
|
||||||
- name: Check if the user is allowed
|
// /close (optionally with 'not planned')
|
||||||
id: check_user
|
if (body.includes('/close')) {
|
||||||
if: env.command == 'true'
|
const stateReason = body.includes('not planned') ? 'not_planned' : 'completed';
|
||||||
run: |
|
console.log(`Closing issue (reason: ${stateReason})`);
|
||||||
ALLOWED_USERS=("ChrisTitusTech" "og-mrk" "Marterich" "MyDrift-user" "Real-MullaC" "CodingWonders" "GabiNun")
|
await github.rest.issues.update({
|
||||||
if [[ " ${ALLOWED_USERS[@]} " =~ " ${{ github.event.comment.user.login }} " ]]; then
|
owner, repo, issue_number: issueNumber,
|
||||||
echo "user=true" >> $GITHUB_ENV
|
state: 'closed',
|
||||||
else
|
state_reason: stateReason,
|
||||||
exit 0
|
});
|
||||||
fi
|
}
|
||||||
|
|
||||||
- name: Close issue
|
// /open or /reopen
|
||||||
if: env.close_command == 'true'
|
if (body.includes('/open') || body.includes('/reopen')) {
|
||||||
env:
|
console.log('Reopening issue');
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
await github.rest.issues.update({
|
||||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
owner, repo, issue_number: issueNumber,
|
||||||
run: |
|
state: 'open',
|
||||||
echo Closing the issue...
|
});
|
||||||
if [[ "${{ contains(github.event.comment.body, 'not planned') }}" == "true" ]]; then
|
}
|
||||||
gh issue close $ISSUE_NUMBER --repo ${{ github.repository }} --reason 'not planned'
|
|
||||||
else
|
|
||||||
gh issue close $ISSUE_NUMBER --repo ${{ github.repository }}
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Reopen issue
|
|
||||||
if: env.reopen_command == 'true'
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
|
||||||
run: |
|
|
||||||
echo Reopening the issue...
|
|
||||||
gh issue reopen $ISSUE_NUMBER --repo ${{ github.repository }}
|
|
||||||
|
|
||||||
- name: Label issue
|
|
||||||
if: env.label_command == 'true'
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
|
||||||
run: |
|
|
||||||
echo Labeling the issue...
|
|
||||||
gh issue edit $ISSUE_NUMBER --repo ${{ github.repository }} --add-label "${{ env.label_name }}"
|
|
||||||
|
|
||||||
- name: Remove labels
|
|
||||||
if: env.unlabel_command == 'true'
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ISSUE_NUMBER: ${{ github.event.issue.number }}
|
|
||||||
run: |
|
|
||||||
echo Unlabeling the issue...
|
|
||||||
gh issue edit $ISSUE_NUMBER --repo ${{ github.repository }} --remove-label "${{ env.unlabel_name }}"
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ jobs:
|
|||||||
config/feature.json
|
config/feature.json
|
||||||
labels: |
|
labels: |
|
||||||
automated
|
automated
|
||||||
documentation
|
skip-changelog
|
||||||
|
|
||||||
- name: Check outputs
|
- name: Check outputs
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -11,9 +11,6 @@
|
|||||||
|
|
||||||
winutil.pdb
|
winutil.pdb
|
||||||
|
|
||||||
### Preprocessor Hashes ###
|
|
||||||
.preprocessor_hashes.json
|
|
||||||
|
|
||||||
### Windows ###
|
### Windows ###
|
||||||
|
|
||||||
# Folder config file
|
# Folder config file
|
||||||
@@ -54,8 +51,6 @@ winutil.ps1
|
|||||||
|
|
||||||
binary/
|
binary/
|
||||||
|
|
||||||
.preprocessor_hashes.json
|
|
||||||
|
|
||||||
# Hugo Files
|
# Hugo Files
|
||||||
docs/public/
|
docs/public/
|
||||||
docs/.hugo_build.lock
|
docs/.hugo_build.lock
|
||||||
|
|||||||
@@ -1,144 +1,50 @@
|
|||||||
param (
|
param (
|
||||||
[switch]$Run,
|
[switch]$Run
|
||||||
[string]$Arguments
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if ((Get-Item ".\winutil.ps1" -ErrorAction SilentlyContinue).IsReadOnly) {
|
$OFS = "`r`n" # Makes it so we dont need to add -Raw to every Get-Content command
|
||||||
Remove-Item ".\winutil.ps1" -Force
|
|
||||||
}
|
|
||||||
|
|
||||||
$OFS = "`r`n"
|
|
||||||
$scriptname = "winutil.ps1"
|
|
||||||
$workingdir = $PSScriptRoot
|
|
||||||
|
|
||||||
# Variable to sync between runspaces
|
# Variable to sync between runspaces
|
||||||
$sync = [Hashtable]::Synchronized(@{})
|
$sync = [Hashtable]::Synchronized(@{})
|
||||||
$sync.configs = @{}
|
$sync.configs = @{}
|
||||||
|
|
||||||
function Update-Progress {
|
# Create the script in memory.
|
||||||
param (
|
$script = [System.Collections.Generic.List[string]]::new()
|
||||||
[Parameter(Mandatory, position=0)]
|
|
||||||
[string]$StatusMessage,
|
|
||||||
|
|
||||||
[Parameter(Mandatory, position=1)]
|
$script.Add(
|
||||||
[ValidateRange(0,100)]
|
((Get-Content -Path scripts\start.ps1) -replace '#{replaceme}', (Get-Date -Format 'yy.MM.dd'))
|
||||||
[int]$Percent,
|
|
||||||
|
|
||||||
[Parameter(position=2)]
|
|
||||||
[string]$Activity = "Compiling"
|
|
||||||
)
|
|
||||||
|
|
||||||
Write-Progress -Activity $Activity -Status $StatusMessage -PercentComplete $Percent
|
|
||||||
}
|
|
||||||
|
|
||||||
Update-Progress "Pre-req: Running Preprocessor..." 0
|
|
||||||
|
|
||||||
# Dot source the 'Invoke-Preprocessing' Function from 'tools/Invoke-Preprocessing.ps1' Script
|
|
||||||
$preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1"
|
|
||||||
. $preprocessingFilePath
|
|
||||||
|
|
||||||
$excludedFiles = @()
|
|
||||||
|
|
||||||
# Add directories only if they exist
|
|
||||||
if (Test-Path '.\.git\') { $excludedFiles += '.\.git\' }
|
|
||||||
if (Test-Path '.\binary\') { $excludedFiles += '.\binary\' }
|
|
||||||
|
|
||||||
# Add files that should always be excluded
|
|
||||||
$excludedFiles += @(
|
|
||||||
'.\.gitignore',
|
|
||||||
'.\.gitattributes',
|
|
||||||
'.\.github\CODEOWNERS',
|
|
||||||
'.\LICENSE',
|
|
||||||
"$preprocessingFilePath",
|
|
||||||
'*.png',
|
|
||||||
'.\.preprocessor_hashes.json'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
$msg = "Pre-req: Code Formatting"
|
$script.Add((Get-ChildItem -Path functions -Recurse -File | Get-Content))
|
||||||
Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg
|
|
||||||
|
|
||||||
# Create the script in memory.
|
Get-ChildItem config | ForEach-Object {
|
||||||
Update-Progress "Pre-req: Allocating Memory" 0
|
$obj = Get-Content -Path $_.FullName | ConvertFrom-Json
|
||||||
$script_content = [System.Collections.Generic.List[string]]::new()
|
|
||||||
|
|
||||||
Update-Progress "Adding: Version" 10
|
if ($_.Name -eq "applications.json") {
|
||||||
$script_content.Add($(Get-Content "scripts\start.ps1").replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)"))
|
$fixed = [ordered]@{}
|
||||||
|
foreach ($p in $obj.PSObject.Properties) {
|
||||||
Update-Progress "Adding: Functions" 20
|
$fixed["WPFInstall$($p.Name)"] = $p.Value
|
||||||
Get-ChildItem "functions" -Recurse -File | ForEach-Object {
|
|
||||||
$script_content.Add($(Get-Content $psitem.FullName))
|
|
||||||
}
|
|
||||||
Update-Progress "Adding: Config *.json" 40
|
|
||||||
Get-ChildItem "config" | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object {
|
|
||||||
$json = (Get-Content $psitem.FullName -Raw)
|
|
||||||
$jsonAsObject = $json | ConvertFrom-Json
|
|
||||||
|
|
||||||
# Add 'WPFInstall' as a prefix to every entry-name in 'applications.json' file
|
|
||||||
if ($psitem.Name -eq "applications.json") {
|
|
||||||
foreach ($appEntryName in $jsonAsObject.PSObject.Properties.Name) {
|
|
||||||
$appEntryContent = $jsonAsObject.$appEntryName
|
|
||||||
$jsonAsObject.PSObject.Properties.Remove($appEntryName)
|
|
||||||
$jsonAsObject | Add-Member -MemberType NoteProperty -Name "WPFInstall$appEntryName" -Value $appEntryContent
|
|
||||||
}
|
}
|
||||||
|
$obj = [pscustomobject]$fixed
|
||||||
}
|
}
|
||||||
|
|
||||||
# Line 90 requires no whitespace inside the here-strings, to keep formatting of the JSON in the final script.
|
$json = $obj | ConvertTo-Json -Depth 10
|
||||||
$json = @"
|
|
||||||
$($jsonAsObject | ConvertTo-Json -Depth 3)
|
|
||||||
"@
|
|
||||||
|
|
||||||
$sync.configs.$($psitem.BaseName) = $json | ConvertFrom-Json
|
$sync.configs[$_.BaseName] = $obj
|
||||||
$script_content.Add($(Write-Output "`$sync.configs.$($psitem.BaseName) = @'`r`n$json`r`n'@ `| ConvertFrom-Json" ))
|
$script.Add("`$sync.configs.$($_.BaseName) = @'`r`n$json`r`n'@ | ConvertFrom-Json")
|
||||||
}
|
}
|
||||||
|
|
||||||
# Read the entire XAML file as a single string, preserving line breaks
|
# Read the entire XAML file as a single string, preserving line breaks
|
||||||
$xaml = Get-Content "$workingdir\xaml\inputXML.xaml" -Raw
|
$xaml = Get-Content -Path xaml\inputXML.xaml
|
||||||
|
$script.Add('$inputXML = @''' + "`n" + $xaml + "`n" + '''@')
|
||||||
|
|
||||||
Update-Progress "Adding: Xaml " 90
|
$autounattendXml = Get-Content -Path tools\autounattend.xml
|
||||||
|
$script.Add("`$WinUtilAutounattendXml = @'`r`n$autounattendXml`r`n'@")
|
||||||
|
|
||||||
# Add the XAML content to $script_content using a here-string
|
$script.Add((Get-Content -Path scripts\main.ps1))
|
||||||
$script_content.Add(@"
|
|
||||||
`$inputXML = @'
|
|
||||||
$xaml
|
|
||||||
'@
|
|
||||||
"@)
|
|
||||||
|
|
||||||
Update-Progress "Adding: autounattend.xml" 95
|
Set-Content -Path winutil.ps1 -Value $script
|
||||||
$autounattendRaw = Get-Content "$workingdir\tools\autounattend.xml" -Raw
|
|
||||||
# Strip XML comments (<!-- ... -->, including multi-line)
|
|
||||||
$autounattendRaw = [regex]::Replace($autounattendRaw, '<!--.*?-->', '', [System.Text.RegularExpressions.RegexOptions]::Singleline)
|
|
||||||
# Drop blank lines and trim trailing whitespace per line
|
|
||||||
$autounattendXml = ($autounattendRaw -split "`r?`n" |
|
|
||||||
Where-Object { $_.Trim() -ne '' } |
|
|
||||||
ForEach-Object { $_.TrimEnd() }) -join "`r`n"
|
|
||||||
$script_content.Add(@"
|
|
||||||
`$WinUtilAutounattendXml = @'
|
|
||||||
$autounattendXml
|
|
||||||
'@
|
|
||||||
"@)
|
|
||||||
|
|
||||||
$script_content.Add($(Get-Content "scripts\main.ps1"))
|
if ($Run) {
|
||||||
|
.\Winutil.ps1
|
||||||
Update-Progress "Removing temporary files" 99
|
|
||||||
Remove-Item "xaml\inputApp.xaml" -ErrorAction SilentlyContinue
|
|
||||||
Remove-Item "xaml\inputTweaks.xaml" -ErrorAction SilentlyContinue
|
|
||||||
Remove-Item "xaml\inputFeatures.xaml" -ErrorAction SilentlyContinue
|
|
||||||
|
|
||||||
Set-Content -Path "$scriptname" -Value ($script_content -join "`r`n") -Encoding ascii
|
|
||||||
Write-Progress -Activity "Compiling" -Completed
|
|
||||||
|
|
||||||
Update-Progress -Activity "Validating" -StatusMessage "Checking winutil.ps1 Syntax" -Percent 0
|
|
||||||
try {
|
|
||||||
Get-Command -Syntax .\winutil.ps1 | Out-Null
|
|
||||||
} catch {
|
|
||||||
Write-Warning "Syntax Validation for 'winutil.ps1' has failed"
|
|
||||||
Write-Host "$($Error[0])" -ForegroundColor Red
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
Write-Progress -Activity "Validating" -Completed
|
|
||||||
|
|
||||||
if ($run) {
|
|
||||||
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
|
|
||||||
.\Winutil.ps1 $Arguments
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ You'll see a new file named `winutil.ps1`, which was created by `Compile.ps1` sc
|
|||||||
|
|
||||||
These are the sponsors that help keep this project alive with monthly contributions.
|
These are the sponsors that help keep this project alive with monthly contributions.
|
||||||
|
|
||||||
<!-- sponsors --><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/partybrasil"><img src="https://github.com/partybrasil.png" width="60px" alt="User avatar: Miguel Diaz" /></a><a href="https://github.com/andrewpayne68"><img src="https://github.com/andrewpayne68.png" width="60px" alt="User avatar: Andrew P" /></a><a href="https://github.com/Di3Z1E"><img src="https://github.com/Di3Z1E.png" width="60px" alt="User avatar: Di3Z1E" /></a><a href="https://github.com/AbdulVakeel"><img src="https://github.com/AbdulVakeel.png" width="60px" alt="User avatar: Abdul Vakeel Software Engineer" /></a><!-- sponsors -->
|
<!-- sponsors --><a href="https://github.com/dwelfusius"><img src="https://github.com/dwelfusius.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/mews-se"><img src="https://github.com/mews-se.png" width="60px" alt="User avatar: Martin Stockzell" /></a><a href="https://github.com/jdiegmueller"><img src="https://github.com/jdiegmueller.png" width="60px" alt="User avatar: Jason A. Diegmueller" /></a><a href="https://github.com/robertsandrock"><img src="https://github.com/robertsandrock.png" width="60px" alt="User avatar: RMS" /></a><a href="https://github.com/paulsheets"><img src="https://github.com/paulsheets.png" width="60px" alt="User avatar: Paul" /></a><a href="https://github.com/djones369"><img src="https://github.com/djones369.png" width="60px" alt="User avatar: Dave J (WhamGeek)" /></a><a href="https://github.com/anthonymendez"><img src="https://github.com/anthonymendez.png" width="60px" alt="User avatar: Anthony Mendez" /></a><a href="https://github.com/FatBastard0"><img src="https://github.com/FatBastard0.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/DursleyGuy"><img src="https://github.com/DursleyGuy.png" width="60px" alt="User avatar: DursleyGuy" /></a><a href="https://github.com/DwayneTheRockLobster1"><img src="https://github.com/DwayneTheRockLobster1.png" width="60px" alt="User avatar: " /></a><a href="https://github.com/KieraKujisawa"><img src="https://github.com/KieraKujisawa.png" width="60px" alt="User avatar: Kiera Meredith" /></a><a href="https://github.com/andrewpayne68"><img src="https://github.com/andrewpayne68.png" width="60px" alt="User avatar: Andrew P" /></a><!-- sponsors -->
|
||||||
|
|
||||||
## 🏅 Thanks to all Contributors
|
## 🏅 Thanks to all Contributors
|
||||||
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
|
Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻.
|
||||||
|
|||||||
@@ -129,7 +129,7 @@
|
|||||||
"link": "https://winutil.christitus.com/dev/features/features/sandbox"
|
"link": "https://winutil.christitus.com/dev/features/features/sandbox"
|
||||||
},
|
},
|
||||||
"WPFFeatureInstall": {
|
"WPFFeatureInstall": {
|
||||||
"Content": "Run Features",
|
"Content": "Install Features",
|
||||||
"category": "Features",
|
"category": "Features",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
"link": "https://winutil.christitus.com/dev/features/features/install"
|
"link": "https://winutil.christitus.com/dev/features/features/install"
|
||||||
},
|
},
|
||||||
"WPFPanelAutologin": {
|
"WPFPanelAutologin": {
|
||||||
"Content": "Autologin - Enable",
|
"Content": "AutoLogon - Run",
|
||||||
"category": "Fixes",
|
"category": "Fixes",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"WPFTweaksDisableExplorerAutoDiscovery",
|
"WPFTweaksDisableExplorerAutoDiscovery",
|
||||||
"WPFTweaksWPBT",
|
"WPFTweaksWPBT",
|
||||||
"WPFTweaksDVR",
|
"WPFTweaksDVR",
|
||||||
|
"WPFTweaksDeBloat",
|
||||||
"WPFTweaksLocation",
|
"WPFTweaksLocation",
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
"WPFTweaksTelemetry",
|
"WPFTweaksTelemetry",
|
||||||
@@ -16,6 +17,7 @@
|
|||||||
],
|
],
|
||||||
"Minimal": [
|
"Minimal": [
|
||||||
"WPFTweaksConsumerFeatures",
|
"WPFTweaksConsumerFeatures",
|
||||||
|
"WPFTweaksDeBloat",
|
||||||
"WPFTweaksWPBT",
|
"WPFTweaksWPBT",
|
||||||
"WPFTweaksServices",
|
"WPFTweaksServices",
|
||||||
"WPFTweaksTelemetry"
|
"WPFTweaksTelemetry"
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
},
|
},
|
||||||
"WPFTweaksServices": {
|
"WPFTweaksServices": {
|
||||||
"Content": "Services - Set to Manual",
|
"Content": "Services - Set to Manual",
|
||||||
"Description": "Turns a bunch of system services to manual that don't need to be running all the time. This is pretty harmless as if the service is needed, it will simply start on demand.",
|
"Description": "Sets some services to Manual startup and adjusts the SvcHostSplitThresholdInKB registry value to better match system memory, which can significantly reduce the number of svchost.exe processes.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"service": [
|
"service": [
|
||||||
@@ -193,16 +193,6 @@
|
|||||||
"StartupType": "Manual",
|
"StartupType": "Manual",
|
||||||
"OriginalType": "Automatic"
|
"OriginalType": "Automatic"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Name": "RemoteAccess",
|
|
||||||
"StartupType": "Disabled",
|
|
||||||
"OriginalType": "Disabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "RemoteRegistry",
|
|
||||||
"StartupType": "Disabled",
|
|
||||||
"OriginalType": "Disabled"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Name": "StorSvc",
|
"Name": "StorSvc",
|
||||||
"StartupType": "Manual",
|
"StartupType": "Manual",
|
||||||
@@ -212,26 +202,6 @@
|
|||||||
"Name": "SharedAccess",
|
"Name": "SharedAccess",
|
||||||
"StartupType": "Disabled",
|
"StartupType": "Disabled",
|
||||||
"OriginalType": "Automatic"
|
"OriginalType": "Automatic"
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "TermService",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Manual"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "TroubleshootingSvc",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Manual"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "seclogon",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Manual"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "ssh-agent",
|
|
||||||
"StartupType": "Disabled",
|
|
||||||
"OriginalType": "Disabled"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
@@ -282,12 +252,61 @@
|
|||||||
"Value": "0",
|
"Value": "0",
|
||||||
"Type": "DWord",
|
"Type": "DWord",
|
||||||
"OriginalValue": "<RemoveEntry>"
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "BraveNewsDisabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "BraveTalkDisabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "TorDisabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "BraveP3AEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "UrlKeyedAnonymizedDataCollectionEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "SafeBrowsingExtendedReportingEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "MetricsReportingEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/bravedebloat"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/bravedebloat"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableWarningForUnsignedRdp": {
|
"WPFTweaksDisableWarningForUnsignedRdp": {
|
||||||
"Content": "Disable warnings for unsigned RDP files",
|
"Content": "RDP Unsigned File Warnings - Disable",
|
||||||
"Description": "Disables warnings shown when launching unsigned RDP files introduced with the latest Windows 10 and 11 updates.",
|
"Description": "Disables warnings shown when launching unsigned RDP files introduced with the latest Windows 10 and 11 updates.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
@@ -588,6 +607,19 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeedge"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeedge"
|
||||||
},
|
},
|
||||||
|
"WPFTweaksDisableBitLocker": {
|
||||||
|
"Content": "BitLocker - Disable",
|
||||||
|
"Description": "Disables BitLocker.",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"InvokeScript": [
|
||||||
|
"Disable-BitLocker -MountPoint $Env:SystemDrive"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"Enable-BitLocker -MountPoint $Env:SystemDrive"
|
||||||
|
],
|
||||||
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/disablebitlocker"
|
||||||
|
},
|
||||||
"WPFTweaksUTC": {
|
"WPFTweaksUTC": {
|
||||||
"Content": "Date & Time - Set Time to UTC",
|
"Content": "Date & Time - Set Time to UTC",
|
||||||
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux systems.",
|
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux systems.",
|
||||||
@@ -642,41 +674,28 @@
|
|||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeonedrive"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeonedrive"
|
||||||
},
|
},
|
||||||
"WPFTweaksRemoveHome": {
|
"WPFTweaksRemoveHome": {
|
||||||
"Content": "File Explorer Home - Disable",
|
"Content": "File Explorer Home and Gallery - Disable",
|
||||||
"Description": "Removes the Home from Explorer and sets This PC as default.",
|
"Description": "Removes the Home and Gallery from Explorer and sets This PC as default.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"InvokeScript": [
|
"registry": [
|
||||||
"
|
{
|
||||||
Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\"
|
"Path": "HKCU:\\Software\\Classes\\CLSID\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}",
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name LaunchTo -Value 1
|
"Name": "System.IsPinnedToNameSpaceTree",
|
||||||
"
|
"Value": "0",
|
||||||
],
|
"Type": "DWord",
|
||||||
"UndoScript": [
|
"OriginalValue": "<RemoveEntry>"
|
||||||
"
|
},
|
||||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\"
|
{
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name LaunchTo -Value 0
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
||||||
"
|
"Name": "LaunchTo",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removehome"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removehome"
|
||||||
},
|
},
|
||||||
"WPFTweaksRemoveGallery": {
|
|
||||||
"Content": "File Explorer Gallery - Disable",
|
|
||||||
"Description": "Removes the Gallery from Explorer and sets This PC as default.",
|
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
|
||||||
"panel": "1",
|
|
||||||
"InvokeScript": [
|
|
||||||
"
|
|
||||||
Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
|
|
||||||
"
|
|
||||||
],
|
|
||||||
"UndoScript": [
|
|
||||||
"
|
|
||||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
|
|
||||||
"
|
|
||||||
],
|
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removegallery"
|
|
||||||
},
|
|
||||||
"WPFTweaksDisplay": {
|
"WPFTweaksDisplay": {
|
||||||
"Content": "Visual Effects - Set to Best Performance",
|
"Content": "Visual Effects - Set to Best Performance",
|
||||||
"Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
|
"Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
|
||||||
@@ -801,8 +820,8 @@
|
|||||||
},
|
},
|
||||||
"WPFTweaksDeBloat": {
|
"WPFTweaksDeBloat": {
|
||||||
"Content": "Unwanted Pre-Installed Apps - Remove",
|
"Content": "Unwanted Pre-Installed Apps - Remove",
|
||||||
"Description": "This will remove a bunch of Windows pre-installed applications which most people dont want on there system.",
|
"Description": "This will remove a bunch of Windows pre-installed applications which most people dont want on their system.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"appx": [
|
"appx": [
|
||||||
"Microsoft.WindowsFeedbackHub",
|
"Microsoft.WindowsFeedbackHub",
|
||||||
@@ -838,7 +857,7 @@
|
|||||||
}
|
}
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/debloat"
|
"link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/debloat"
|
||||||
},
|
},
|
||||||
"WPFTweaksRestorePoint": {
|
"WPFTweaksRestorePoint": {
|
||||||
"Content": "Restore Point - Create",
|
"Content": "Restore Point - Create",
|
||||||
@@ -912,32 +931,45 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/storage"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/storage"
|
||||||
},
|
},
|
||||||
"WPFTweaksRemoveCopilot": {
|
"WPFTweaksWindowsAI": {
|
||||||
"Content": "Microsoft Copilot - Disable",
|
"Content": "Windows AI - Disable",
|
||||||
"Description": "Removes Copilot AppXPackages and related ai packages",
|
"Description": "Removes or disables all ai features and packages",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",
|
||||||
|
"Name": "SettingsPageVisibility",
|
||||||
|
"Value": "hide:aicomponents",
|
||||||
|
"Type": "String",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\WindowsNotepad",
|
||||||
|
"Name": "DisableAIFeatures",
|
||||||
|
"Value": 1,
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
}
|
||||||
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
"
|
"
|
||||||
Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers
|
|
||||||
Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers
|
|
||||||
|
|
||||||
$Appx = (Get-AppxPackage MicrosoftWindows.Client.CoreAI).PackageFullName
|
$Appx = (Get-AppxPackage MicrosoftWindows.Client.CoreAI).PackageFullName
|
||||||
$Sid = (Get-LocalUser $Env:UserName).Sid.Value
|
$Sid = (Get-LocalUser $Env:UserName).Sid.Value
|
||||||
|
|
||||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force
|
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force
|
||||||
|
|
||||||
|
Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers
|
||||||
|
Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers
|
||||||
Remove-AppxPackage $Appx
|
Remove-AppxPackage $Appx
|
||||||
|
|
||||||
Write-Host \"Copilot Removed\"
|
Set-Service -Name WSAIFabricSvc -StartupType Disabled
|
||||||
|
Disable-WindowsOptionalFeature -FeatureName Recall -Online
|
||||||
|
|
||||||
|
Write-Host \"Windows AI Disabled\"
|
||||||
"
|
"
|
||||||
],
|
],
|
||||||
"UndoScript": [
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/windowsai"
|
||||||
"
|
|
||||||
Write-Host \"Installing Copilot...\"
|
|
||||||
winget install --name Copilot --source msstore --accept-package-agreements --accept-source-agreements --silent
|
|
||||||
"
|
|
||||||
],
|
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removecopilot"
|
|
||||||
},
|
},
|
||||||
"WPFTweaksWPBT": {
|
"WPFTweaksWPBT": {
|
||||||
"Content": "Windows Platform Binary Table (WPBT) - Disable",
|
"Content": "Windows Platform Binary Table (WPBT) - Disable",
|
||||||
@@ -997,7 +1029,7 @@
|
|||||||
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/razerblock"
|
"link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/razerblock"
|
||||||
},
|
},
|
||||||
"WPFTweaksDisableNotifications": {
|
"WPFTweaksDisableNotifications": {
|
||||||
"Content": "Notification Tray & Calendar - Disable",
|
"Content": "System Tray Notifications & Calendar - Disable",
|
||||||
"Description": "Disables all Notifications INCLUDING Calendar.",
|
"Description": "Disables all Notifications INCLUDING Calendar.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
@@ -1233,6 +1265,24 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/detailedbsod"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/detailedbsod"
|
||||||
},
|
},
|
||||||
|
"WPFToggleBatteryPercentage": {
|
||||||
|
"Content": "System Tray Battery Percentage",
|
||||||
|
"Description": "If enabled, Shows numeric battery percentage next to the battery icon in the system tray.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
||||||
|
"Name": "IsBatteryPercentageEnabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>",
|
||||||
|
"DefaultState": "false"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/batterypercentage"
|
||||||
|
},
|
||||||
"WPFToggleDarkMode": {
|
"WPFToggleDarkMode": {
|
||||||
"Content": "Dark Theme for Windows",
|
"Content": "Dark Theme for Windows",
|
||||||
"Description": "Enable/Disable Dark Mode.",
|
"Description": "Enable/Disable Dark Mode.",
|
||||||
@@ -1390,6 +1440,25 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/newoutlook"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/newoutlook"
|
||||||
|
},
|
||||||
|
"WPFToggleScrollbars": {
|
||||||
|
"Content": "Scrollbars Always Visible",
|
||||||
|
"Description": "If enabled, scrollbars will always be visible. If disabled, Windows will automatically hide scrollbars when not in use.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Control Panel\\Accessibility",
|
||||||
|
"Name": "DynamicScrollbars",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "1",
|
||||||
|
"DefaultState": "false",
|
||||||
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/scrollbars"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/scrollbars"
|
||||||
},
|
},
|
||||||
"WPFToggleMultiplaneOverlay": {
|
"WPFToggleMultiplaneOverlay": {
|
||||||
"Content": "Multiplane Overlay",
|
"Content": "Multiplane Overlay",
|
||||||
@@ -1405,6 +1474,14 @@
|
|||||||
"Type": "DWord",
|
"Type": "DWord",
|
||||||
"OriginalValue": "5",
|
"OriginalValue": "5",
|
||||||
"DefaultState": "true"
|
"DefaultState": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\GraphicsDrivers",
|
||||||
|
"Name": "DisableOverlays",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "false"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/multiplaneoverlay"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/multiplaneoverlay"
|
||||||
@@ -1542,7 +1619,7 @@
|
|||||||
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/bingsearch"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/bingsearch"
|
||||||
},
|
},
|
||||||
"WPFToggleLoginBlur": {
|
"WPFToggleLoginBlur": {
|
||||||
"Content": "Acrylic Blur on Login Screen",
|
"Content": "Logon Screen Acrylic Blur",
|
||||||
"Description": "If disabled, the acrylic blur effect will be removed on the Windows 10/11 login screen background.",
|
"Description": "If disabled, the acrylic blur effect will be removed on the Windows 10/11 login screen background.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
@@ -1685,8 +1762,52 @@
|
|||||||
],
|
],
|
||||||
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskview"
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskview"
|
||||||
},
|
},
|
||||||
|
"WPFToggleGameMode": {
|
||||||
|
"Content": "Game Mode",
|
||||||
|
"Description": "If enabled, Windows prioritizes gaming performance by allocating system resources. Disable for audio/video production to prevent interference.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\GameBar",
|
||||||
|
"Name": "AllowAutoGameMode",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\GameBar",
|
||||||
|
"Name": "AutoGameModeEnabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "true"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/gamemode"
|
||||||
|
},
|
||||||
|
"WPFToggleLongPaths": {
|
||||||
|
"Content": "Enable Long Paths",
|
||||||
|
"Description": "Enables support for file paths longer than 260 characters.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\FileSystem",
|
||||||
|
"Name": "LongPathsEnabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "false"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/longpaths"
|
||||||
|
},
|
||||||
"WPFOOSUbutton": {
|
"WPFOOSUbutton": {
|
||||||
"Content": "OO Shutup 10 - Run",
|
"Content": "O&O ShutUp10++ - Run",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"Type": "Button",
|
"Type": "Button",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 196 KiB |
|
After Width: | Height: | Size: 198 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 170 KiB |
@@ -380,13 +380,6 @@ Update UI
|
|||||||
"Value": "0",
|
"Value": "0",
|
||||||
"OriginalValue": "1"
|
"OriginalValue": "1"
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"ScheduledTask": [
|
|
||||||
{
|
|
||||||
"Name": "Microsoft\\Windows\\Autochk\\Proxy",
|
|
||||||
"State": "Disabled",
|
|
||||||
"OriginalState": "Enabled"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -397,7 +390,6 @@ Update UI
|
|||||||
- `Description`: What it does
|
- `Description`: What it does
|
||||||
- `category`: Essential/Advanced/Customize
|
- `category`: Essential/Advanced/Customize
|
||||||
- `registry`: Registry changes to make
|
- `registry`: Registry changes to make
|
||||||
- `ScheduledTask`: Scheduled tasks to modify
|
|
||||||
- `service`: Services to change
|
- `service`: Services to change
|
||||||
- `OriginalValue/State`: For undo functionality
|
- `OriginalValue/State`: For undo functionality
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: "Autologin - Enable"
|
title: "AutoLogon - Run"
|
||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,18 @@ description: ""
|
|||||||
|
|
||||||
```powershell {filename="functions/private/Invoke-WinUtilInstallPSProfile.ps1",linenos=inline,linenostart=1}
|
```powershell {filename="functions/private/Invoke-WinUtilInstallPSProfile.ps1",linenos=inline,linenostart=1}
|
||||||
function Invoke-WinUtilInstallPSProfile {
|
function Invoke-WinUtilInstallPSProfile {
|
||||||
|
if (-not (Get-Command wt)) {
|
||||||
if (Test-Path $Profile) {
|
Write-Host "Windows Terminal not found installing..."
|
||||||
Rename-Item $Profile -NewName ($Profile + '.bak')
|
Install-WinUtilWinget
|
||||||
|
winget install Microsoft.WindowsTerminal --source winget --silent
|
||||||
}
|
}
|
||||||
|
|
||||||
Start-Process pwsh -ArgumentList '-Command "irm https://github.com/ChrisTitusTech/powershell-profile/raw/main/setup.ps1 | iex"'
|
if (-not (Get-Command pwsh)) {
|
||||||
|
Write-Host "Powershell 7 not found installing..."
|
||||||
|
Install-WinUtilWinget
|
||||||
|
winget install Microsoft.PowerShell --source winget --silent
|
||||||
|
}
|
||||||
|
|
||||||
|
wt new-tab pwsh -NoExit -Command "irm https://github.com/ChrisTitusTech/powershell-profile/raw/main/setup.ps1 | iex"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -5,12 +5,11 @@ description: ""
|
|||||||
|
|
||||||
```powershell {filename="functions/private/Invoke-WinUtilUninstallPSProfile.ps1",linenos=inline,linenostart=1}
|
```powershell {filename="functions/private/Invoke-WinUtilUninstallPSProfile.ps1",linenos=inline,linenostart=1}
|
||||||
function Invoke-WinUtilUninstallPSProfile {
|
function Invoke-WinUtilUninstallPSProfile {
|
||||||
if (Test-Path ($Profile + '.bak')) {
|
|
||||||
Remove-Item $Profile
|
if (Test-Path ($Profile + ".bak")) {
|
||||||
Rename-Item ($Profile + '.bak') -NewName $Profile
|
Move-Item -Path ($Profile + ".bak") -Destination $Profile
|
||||||
}
|
} else {
|
||||||
else {
|
Remove-Item -Path $Profile
|
||||||
Remove-Item $Profile
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Successfully uninstalled CTT PowerShell Profile." -ForegroundColor Green
|
Write-Host "Successfully uninstalled CTT PowerShell Profile." -ForegroundColor Green
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
title: "System Tray Battery Percentage"
|
||||||
|
description: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1268}
|
||||||
|
"WPFToggleBatteryPercentage": {
|
||||||
|
"Content": "System Tray Battery Percentage",
|
||||||
|
"Description": "If enabled, Shows numeric battery percentage next to the battery icon in the system tray.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
||||||
|
"Name": "IsBatteryPercentageEnabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>",
|
||||||
|
"DefaultState": "false"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
## Registry Changes
|
||||||
|
|
||||||
|
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
|
||||||
|
|
||||||
|
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
|
||||||
@@ -3,7 +3,7 @@ title: "Start Menu Bing Search"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1526}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1603}
|
||||||
"WPFToggleBingSearch": {
|
"WPFToggleBingSearch": {
|
||||||
"Content": "Start Menu Bing Search",
|
"Content": "Start Menu Bing Search",
|
||||||
"Description": "If enabled, Bing web search results will be included in your Start Menu search.",
|
"Description": "If enabled, Bing web search results will be included in your Start Menu search.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Dark Theme for Windows"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1236}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1286}
|
||||||
"WPFToggleDarkMode": {
|
"WPFToggleDarkMode": {
|
||||||
"Content": "Dark Theme for Windows",
|
"Content": "Dark Theme for Windows",
|
||||||
"Description": "Enable/Disable Dark Mode.",
|
"Description": "Enable/Disable Dark Mode.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "BSoD Verbose Mode"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1210}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1242}
|
||||||
"WPFToggleDetailedBSoD": {
|
"WPFToggleDetailedBSoD": {
|
||||||
"Content": "BSoD Verbose Mode",
|
"Content": "BSoD Verbose Mode",
|
||||||
"Description": "If enabled, you will see a detailed Blue Screen of Death (BSOD) with more information.",
|
"Description": "If enabled, you will see a detailed Blue Screen of Death (BSOD) with more information.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Cross-Device Resume"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1192}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1224}
|
||||||
"WPFToggleDisableCrossDeviceResume": {
|
"WPFToggleDisableCrossDeviceResume": {
|
||||||
"Content": "Cross-Device Resume",
|
"Content": "Cross-Device Resume",
|
||||||
"Description": "This tweak controls the Resume function in Windows 11 24H2 and later, which allows you to resume an activity from a mobile device and vice-versa.",
|
"Description": "This tweak controls the Resume function in Windows 11 24H2 and later, which allows you to resume an activity from a mobile device and vice-versa.",
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
title: "Game Mode"
|
||||||
|
description: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1765}
|
||||||
|
"WPFToggleGameMode": {
|
||||||
|
"Content": "Game Mode",
|
||||||
|
"Description": "If enabled, Windows prioritizes gaming performance by allocating system resources. Disable for audio/video production to prevent interference.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\GameBar",
|
||||||
|
"Name": "AllowAutoGameMode",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKCU:\\Software\\Microsoft\\GameBar",
|
||||||
|
"Name": "AutoGameModeEnabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "true"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
## Registry Changes
|
||||||
|
|
||||||
|
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
|
||||||
|
|
||||||
|
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
|
||||||
@@ -3,7 +3,7 @@ title: "File Explorer Hidden Files"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1306}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1356}
|
||||||
"WPFToggleHiddenFiles": {
|
"WPFToggleHiddenFiles": {
|
||||||
"Content": "File Explorer Hidden Files",
|
"Content": "File Explorer Hidden Files",
|
||||||
"Description": "If enabled, Hidden Files will be shown.",
|
"Description": "If enabled, Hidden Files will be shown.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Settings Home Page"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1508}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1585}
|
||||||
"WPFToggleHideSettingsHome": {
|
"WPFToggleHideSettingsHome": {
|
||||||
"Content": "Settings Home Page",
|
"Content": "Settings Home Page",
|
||||||
"Description": "Enable or disable the Home Page in the Windows Settings app.",
|
"Description": "Enable or disable the Home Page in the Windows Settings app.",
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: "Acrylic Blur on Login Screen"
|
title: "Logon Screen Acrylic Blur"
|
||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1544}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1621}
|
||||||
"WPFToggleLoginBlur": {
|
"WPFToggleLoginBlur": {
|
||||||
"Content": "Acrylic Blur on Login Screen",
|
"Content": "Logon Screen Acrylic Blur",
|
||||||
"Description": "If disabled, the acrylic blur effect will be removed on the Windows 10/11 login screen background.",
|
"Description": "If disabled, the acrylic blur effect will be removed on the Windows 10/11 login screen background.",
|
||||||
"category": "Customize Preferences",
|
"category": "Customize Preferences",
|
||||||
"panel": "2",
|
"panel": "2",
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
title: "Enable Long Paths"
|
||||||
|
description: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1791}
|
||||||
|
"WPFToggleLongPaths": {
|
||||||
|
"Content": "Enable Long Paths",
|
||||||
|
"Description": "Enables support for file paths longer than 260 characters.",
|
||||||
|
"category": "Customize Preferences",
|
||||||
|
"panel": "2",
|
||||||
|
"Type": "Toggle",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\FileSystem",
|
||||||
|
"Name": "LongPathsEnabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "false"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
## Registry Changes
|
||||||
|
|
||||||
|
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
|
||||||
|
|
||||||
|
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
|
||||||
@@ -3,7 +3,7 @@ title: "Mouse Acceleration"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1412}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1489}
|
||||||
"WPFToggleMouseAcceleration": {
|
"WPFToggleMouseAcceleration": {
|
||||||
"Content": "Mouse Acceleration",
|
"Content": "Mouse Acceleration",
|
||||||
"Description": "If enabled, the Cursor movement is affected by the speed of your physical mouse movements.",
|
"Description": "If enabled, the Cursor movement is affected by the speed of your physical mouse movements.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Multiplane Overlay"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1394}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1463}
|
||||||
"WPFToggleMultiplaneOverlay": {
|
"WPFToggleMultiplaneOverlay": {
|
||||||
"Content": "Multiplane Overlay",
|
"Content": "Multiplane Overlay",
|
||||||
"Description": "Enable or disable the Multiplane Overlay, which can sometimes cause issues with graphics cards.",
|
"Description": "Enable or disable the Multiplane Overlay, which can sometimes cause issues with graphics cards.",
|
||||||
@@ -18,6 +18,14 @@ description: ""
|
|||||||
"Type": "DWord",
|
"Type": "DWord",
|
||||||
"OriginalValue": "5",
|
"OriginalValue": "5",
|
||||||
"DefaultState": "true"
|
"DefaultState": "true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\GraphicsDrivers",
|
||||||
|
"Name": "DisableOverlays",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "0",
|
||||||
|
"DefaultState": "false"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Microsoft Outlook New Version"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1352}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1402}
|
||||||
"WPFToggleNewOutlook": {
|
"WPFToggleNewOutlook": {
|
||||||
"Content": "Microsoft Outlook New Version",
|
"Content": "Microsoft Outlook New Version",
|
||||||
"Description": "If disabled, it removes the new Outlook toggle, disables the new Outlook migration, and ensures the classic Outlook application is used.",
|
"Description": "If disabled, it removes the new Outlook toggle, disables the new Outlook migration, and ensures the classic Outlook application is used.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Num Lock on Startup"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1446}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1523}
|
||||||
"WPFToggleNumLock": {
|
"WPFToggleNumLock": {
|
||||||
"Content": "Num Lock on Startup",
|
"Content": "Num Lock on Startup",
|
||||||
"Description": "Toggle the Num Lock key state when your computer starts.",
|
"Description": "Toggle the Num Lock key state when your computer starts.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "S3 Sleep"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1490}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1567}
|
||||||
"WPFToggleS3Sleep": {
|
"WPFToggleS3Sleep": {
|
||||||
"Content": "S3 Sleep",
|
"Content": "S3 Sleep",
|
||||||
"Description": "Toggles between Modern Standby and S3 Sleep.",
|
"Description": "Toggles between Modern Standby and S3 Sleep.",
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: "Scrollbars Always Visible"
|
||||||
|
description: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## Registry Changes
|
||||||
|
|
||||||
|
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
|
||||||
|
|
||||||
|
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
|
||||||
@@ -3,7 +3,7 @@ title: "File Explorer File Extensions"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1278}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1328}
|
||||||
"WPFToggleShowExt": {
|
"WPFToggleShowExt": {
|
||||||
"Content": "File Explorer File Extensions",
|
"Content": "File Explorer File Extensions",
|
||||||
"Description": "If enabled, File extensions (e.g., .txt, .jpg) are visible.",
|
"Description": "If enabled, File extensions (e.g., .txt, .jpg) are visible.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "S0 Sleep Network Connectivity"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1472}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1549}
|
||||||
"WPFToggleStandbyFix": {
|
"WPFToggleStandbyFix": {
|
||||||
"Content": "S0 Sleep Network Connectivity",
|
"Content": "S0 Sleep Network Connectivity",
|
||||||
"Description": "Enable or disable network connectivity during S0 Sleep.",
|
"Description": "Enable or disable network connectivity during S0 Sleep.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Start Menu Recommendations"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1562}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1639}
|
||||||
"WPFToggleStartMenuRecommendations": {
|
"WPFToggleStartMenuRecommendations": {
|
||||||
"Content": "Start Menu Recommendations",
|
"Content": "Start Menu Recommendations",
|
||||||
"Description": "If disabled, then you will not see recommendations in the Start Menu. WARNING: This will also disable Windows Spotlight on your Lock Screen as a side effect.",
|
"Description": "If disabled, then you will not see recommendations in the Start Menu. WARNING: This will also disable Windows Spotlight on your Lock Screen as a side effect.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Sticky Keys"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1606}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1683}
|
||||||
"WPFToggleStickyKeys": {
|
"WPFToggleStickyKeys": {
|
||||||
"Content": "Sticky Keys",
|
"Content": "Sticky Keys",
|
||||||
"Description": "If enabled, Sticky Keys is activated. Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
|
"Description": "If enabled, Sticky Keys is activated. Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Taskbar Task View Icon"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1670}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1747}
|
||||||
"WPFToggleTaskView": {
|
"WPFToggleTaskView": {
|
||||||
"Content": "Taskbar Task View Icon",
|
"Content": "Taskbar Task View Icon",
|
||||||
"Description": "If enabled, Task View Button in Taskbar will be shown.",
|
"Description": "If enabled, Task View Button in Taskbar will be shown.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Taskbar Centered Icons"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1624}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1701}
|
||||||
"WPFToggleTaskbarAlignment": {
|
"WPFToggleTaskbarAlignment": {
|
||||||
"Content": "Taskbar Centered Icons",
|
"Content": "Taskbar Centered Icons",
|
||||||
"Description": "[Windows 11] If enabled, the Taskbar Items will be shown on the Center, otherwise the Taskbar Items will be shown on the Left.",
|
"Description": "[Windows 11] If enabled, the Taskbar Items will be shown on the Center, otherwise the Taskbar Items will be shown on the Left.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Taskbar Search Icon"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1652}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1729}
|
||||||
"WPFToggleTaskbarSearch": {
|
"WPFToggleTaskbarSearch": {
|
||||||
"Content": "Taskbar Search Icon",
|
"Content": "Taskbar Search Icon",
|
||||||
"Description": "If enabled, Search Button will be on the Taskbar.",
|
"Description": "If enabled, Search Button will be on the Taskbar.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Logon Verbose Mode"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1334}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1384}
|
||||||
"WPFToggleVerboseLogon": {
|
"WPFToggleVerboseLogon": {
|
||||||
"Content": "Logon Verbose Mode",
|
"Content": "Logon Verbose Mode",
|
||||||
"Description": "Show detailed messages during the login process for troubleshooting and diagnostics.",
|
"Description": "Show detailed messages during the login process for troubleshooting and diagnostics.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "ConsumerFeatures - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=440}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=459}
|
||||||
"WPFTweaksConsumerFeatures": {
|
"WPFTweaksConsumerFeatures": {
|
||||||
"Content": "ConsumerFeatures - Disable",
|
"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 (eg. Phone Link).",
|
"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 (eg. Phone Link).",
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ title: "Unwanted Pre-Installed Apps - Remove"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=802}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=821}
|
||||||
"WPFTweaksDeBloat": {
|
"WPFTweaksDeBloat": {
|
||||||
"Content": "Unwanted Pre-Installed Apps - Remove",
|
"Content": "Unwanted Pre-Installed Apps - Remove",
|
||||||
"Description": "This will remove a bunch of Windows pre-installed applications which most people dont want on there system.",
|
"Description": "This will remove a bunch of Windows pre-installed applications which most people dont want on their system.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"appx": [
|
"appx": [
|
||||||
"Microsoft.WindowsFeedbackHub",
|
"Microsoft.WindowsFeedbackHub",
|
||||||
@@ -3,7 +3,7 @@ title: "Temporary Files - Remove"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1087}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1119}
|
||||||
"WPFTweaksDeleteTempFiles": {
|
"WPFTweaksDeleteTempFiles": {
|
||||||
"Content": "Temporary Files - Remove",
|
"Content": "Temporary Files - Remove",
|
||||||
"Description": "Erases TEMP Folders.",
|
"Description": "Erases TEMP Folders.",
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
title: "BitLocker - Disable"
|
||||||
|
description: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=610}
|
||||||
|
"WPFTweaksDisableBitLocker": {
|
||||||
|
"Content": "BitLocker - Disable",
|
||||||
|
"Description": "Disables BitLocker.",
|
||||||
|
"category": "Essential Tweaks",
|
||||||
|
"panel": "1",
|
||||||
|
"InvokeScript": [
|
||||||
|
"Disable-BitLocker -MountPoint $Env:SystemDrive"
|
||||||
|
],
|
||||||
|
"UndoScript": [
|
||||||
|
"Enable-BitLocker -MountPoint $Env:SystemDrive"
|
||||||
|
],
|
||||||
|
```
|
||||||
@@ -3,7 +3,7 @@ title: "File Explorer Automatic Folder Discovery - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1719}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1840}
|
||||||
"WPFTweaksDisableExplorerAutoDiscovery": {
|
"WPFTweaksDisableExplorerAutoDiscovery": {
|
||||||
"Content": "File Explorer Automatic Folder Discovery - Disable",
|
"Content": "File Explorer Automatic Folder Discovery - Disable",
|
||||||
"Description": "Windows Explorer automatically tries to guess the type of the folder based on its contents, slowing down the browsing experience. WARNING! Will disable File Explorer grouping.",
|
"Description": "Windows Explorer automatically tries to guess the type of the folder based on its contents, slowing down the browsing experience. WARNING! Will disable File Explorer grouping.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Disk Cleanup - Run"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1074}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1106}
|
||||||
"WPFTweaksDiskCleanup": {
|
"WPFTweaksDiskCleanup": {
|
||||||
"Content": "Disk Cleanup - Run",
|
"Content": "Disk Cleanup - Run",
|
||||||
"Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.",
|
"Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "End Task With Right Click - Enable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=870}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=889}
|
||||||
"WPFTweaksEndTaskOnTaskbar": {
|
"WPFTweaksEndTaskOnTaskbar": {
|
||||||
"Content": "End Task With Right Click - Enable",
|
"Content": "End Task With Right Click - Enable",
|
||||||
"Description": "Enables option to end task when right clicking a program in the taskbar.",
|
"Description": "Enables option to end task when right clicking a program in the taskbar.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "PowerShell 7 Telemetry - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=886}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=905}
|
||||||
"WPFTweaksPowershell7Tele": {
|
"WPFTweaksPowershell7Tele": {
|
||||||
"Content": "PowerShell 7 Telemetry - Disable",
|
"Content": "PowerShell 7 Telemetry - Disable",
|
||||||
"Description": "Creates an Environment Variable called 'POWERSHELL_TELEMETRY_OPTOUT' with a value of '1' which will tell PowerShell 7 to not send Telemetry Data.",
|
"Description": "Creates an Environment Variable called 'POWERSHELL_TELEMETRY_OPTOUT' with a value of '1' which will tell PowerShell 7 to not send Telemetry Data.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Restore Point - Create"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=843}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=862}
|
||||||
"WPFTweaksRestorePoint": {
|
"WPFTweaksRestorePoint": {
|
||||||
"Content": "Restore Point - Create",
|
"Content": "Restore Point - Create",
|
||||||
"Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications.",
|
"Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications.",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: ""
|
|||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=175}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=175}
|
||||||
"WPFTweaksServices": {
|
"WPFTweaksServices": {
|
||||||
"Content": "Services - Set to Manual",
|
"Content": "Services - Set to Manual",
|
||||||
"Description": "Turns a bunch of system services to manual that don't need to be running all the time. This is pretty harmless as if the service is needed, it will simply start on demand.",
|
"Description": "Sets some services to Manual startup and adjusts the SvcHostSplitThresholdInKB registry value to better match system memory, which can significantly reduce the number of svchost.exe processes.",
|
||||||
"category": "Essential Tweaks",
|
"category": "Essential Tweaks",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"service": [
|
"service": [
|
||||||
@@ -25,16 +25,6 @@ description: ""
|
|||||||
"StartupType": "Manual",
|
"StartupType": "Manual",
|
||||||
"OriginalType": "Automatic"
|
"OriginalType": "Automatic"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Name": "RemoteAccess",
|
|
||||||
"StartupType": "Disabled",
|
|
||||||
"OriginalType": "Disabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "RemoteRegistry",
|
|
||||||
"StartupType": "Disabled",
|
|
||||||
"OriginalType": "Disabled"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Name": "StorSvc",
|
"Name": "StorSvc",
|
||||||
"StartupType": "Manual",
|
"StartupType": "Manual",
|
||||||
@@ -44,26 +34,6 @@ description: ""
|
|||||||
"Name": "SharedAccess",
|
"Name": "SharedAccess",
|
||||||
"StartupType": "Disabled",
|
"StartupType": "Disabled",
|
||||||
"OriginalType": "Automatic"
|
"OriginalType": "Automatic"
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "TermService",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Manual"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "TroubleshootingSvc",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Manual"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "seclogon",
|
|
||||||
"StartupType": "Manual",
|
|
||||||
"OriginalType": "Manual"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "ssh-agent",
|
|
||||||
"StartupType": "Disabled",
|
|
||||||
"OriginalType": "Disabled"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"InvokeScript": [
|
"InvokeScript": [
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Telemetry - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=456}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=475}
|
||||||
"WPFTweaksTelemetry": {
|
"WPFTweaksTelemetry": {
|
||||||
"Content": "Telemetry - Disable",
|
"Content": "Telemetry - Disable",
|
||||||
"Description": "Disables Microsoft Telemetry.",
|
"Description": "Disables Microsoft Telemetry.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Windows Platform Binary Table (WPBT) - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=942}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=974}
|
||||||
"WPFTweaksWPBT": {
|
"WPFTweaksWPBT": {
|
||||||
"Content": "Windows Platform Binary Table (WPBT) - Disable",
|
"Content": "Windows Platform Binary Table (WPBT) - Disable",
|
||||||
"Description": "If enabled, WPBT allows your computer vendor to execute programs at boot time, such as anti-theft software, software drivers, as well as force install software without user consent. Poses potential security risk.",
|
"Description": "If enabled, WPBT allows your computer vendor to execute programs at boot time, such as anti-theft software, software drivers, as well as force install software without user consent. Poses potential security risk.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Adobe URL Block List - Enable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1022}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1054}
|
||||||
"WPFTweaksBlockAdobeNet": {
|
"WPFTweaksBlockAdobeNet": {
|
||||||
"Content": "Adobe URL Block List - Enable",
|
"Content": "Adobe URL Block List - Enable",
|
||||||
"Description": "Reduces user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs",
|
"Description": "Reduces user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Brave Browser - Debloat"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=245}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=215}
|
||||||
"WPFTweaksBraveDebloat": {
|
"WPFTweaksBraveDebloat": {
|
||||||
"Content": "Brave Browser - Debloat",
|
"Content": "Brave Browser - Debloat",
|
||||||
"Description": "Disables various annoyances like Brave Rewards, Leo AI, Crypto Wallet and VPN.",
|
"Description": "Disables various annoyances like Brave Rewards, Leo AI, Crypto Wallet and VPN.",
|
||||||
@@ -44,6 +44,55 @@ description: ""
|
|||||||
"Value": "0",
|
"Value": "0",
|
||||||
"Type": "DWord",
|
"Type": "DWord",
|
||||||
"OriginalValue": "<RemoveEntry>"
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "BraveNewsDisabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "BraveTalkDisabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "TorDisabled",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "BraveP3AEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "UrlKeyedAnonymizedDataCollectionEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "SafeBrowsingExtendedReportingEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave",
|
||||||
|
"Name": "MetricsReportingEnabled",
|
||||||
|
"Value": "0",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Background Apps - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1160}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1192}
|
||||||
"WPFTweaksDisableBGapps": {
|
"WPFTweaksDisableBGapps": {
|
||||||
"Content": "Background Apps - Disable",
|
"Content": "Background Apps - Disable",
|
||||||
"Description": "Disables all Microsoft Store apps from running in the background, which has to be done individually since Windows 11.",
|
"Description": "Disables all Microsoft Store apps from running in the background, which has to be done individually since Windows 11.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Fullscreen Optimizations - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1176}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1208}
|
||||||
"WPFTweaksDisableFSO": {
|
"WPFTweaksDisableFSO": {
|
||||||
"Content": "Fullscreen Optimizations - Disable",
|
"Content": "Fullscreen Optimizations - Disable",
|
||||||
"Description": "Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen.",
|
"Description": "Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "IPv6 - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1138}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1170}
|
||||||
"WPFTweaksDisableIPv6": {
|
"WPFTweaksDisableIPv6": {
|
||||||
"Content": "IPv6 - Disable",
|
"Content": "IPv6 - Disable",
|
||||||
"Description": "Disables IPv6.",
|
"Description": "Disables IPv6.",
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: "Notification Tray & Calendar - Disable"
|
title: "System Tray Notifications & Calendar - Disable"
|
||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=999}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1031}
|
||||||
"WPFTweaksDisableNotifications": {
|
"WPFTweaksDisableNotifications": {
|
||||||
"Content": "Notification Tray & Calendar - Disable",
|
"Content": "System Tray Notifications & Calendar - Disable",
|
||||||
"Description": "Disables all Notifications INCLUDING Calendar.",
|
"Description": "Disables all Notifications INCLUDING Calendar.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
title: "Disable warnings for unsigned RDP files"
|
title: "RDP Unsigned File Warnings - Disable"
|
||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=289}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=308}
|
||||||
"WPFTweaksDisableWarningForUnsignedRdp": {
|
"WPFTweaksDisableWarningForUnsignedRdp": {
|
||||||
"Content": "Disable warnings for unsigned RDP files",
|
"Content": "RDP Unsigned File Warnings - Disable",
|
||||||
"Description": "Disables warnings shown when launching unsigned RDP files introduced with the latest Windows 10 and 11 updates.",
|
"Description": "Disables warnings shown when launching unsigned RDP files introduced with the latest Windows 10 and 11 updates.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Visual Effects - Set to Best Performance"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=680}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=699}
|
||||||
"WPFTweaksDisplay": {
|
"WPFTweaksDisplay": {
|
||||||
"Content": "Visual Effects - Set to Best Performance",
|
"Content": "Visual Effects - Set to Best Performance",
|
||||||
"Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
|
"Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Microsoft Edge - Debloat"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=312}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=331}
|
||||||
"WPFTweaksEdgeDebloat": {
|
"WPFTweaksEdgeDebloat": {
|
||||||
"Content": "Microsoft Edge - Debloat",
|
"Content": "Microsoft Edge - Debloat",
|
||||||
"Description": "Disables various telemetry options, popups, and other annoyances in Edge.",
|
"Description": "Disables various telemetry options, popups, and other annoyances in Edge.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "IPv6 - Set IPv4 as Preferred"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1100}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1132}
|
||||||
"WPFTweaksIPv46": {
|
"WPFTweaksIPv46": {
|
||||||
"Content": "IPv6 - Set IPv4 as Preferred",
|
"Content": "IPv6 - Set IPv4 as Preferred",
|
||||||
"Description": "Setting the IPv4 preference can have latency and security benefits on private networks where IPv6 is not configured.",
|
"Description": "Setting the IPv4 preference can have latency and security benefits on private networks where IPv6 is not configured.",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
title: "OO Shutup 10 - Run"
|
title: "O&O ShutUp10++ - Run"
|
||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Razer Software Auto-Install - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=958}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=990}
|
||||||
"WPFTweaksRazerBlock": {
|
"WPFTweaksRazerBlock": {
|
||||||
"Content": "Razer Software Auto-Install - Disable",
|
"Content": "Razer Software Auto-Install - Disable",
|
||||||
"Description": "Blocks ALL Razer Software installations. The hardware works fine without any software.",
|
"Description": "Blocks ALL Razer Software installations. The hardware works fine without any software.",
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Microsoft Copilot - Disable"
|
|
||||||
description: ""
|
|
||||||
---
|
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=915}
|
|
||||||
"WPFTweaksRemoveCopilot": {
|
|
||||||
"Content": "Microsoft Copilot - Disable",
|
|
||||||
"Description": "Removes Copilot AppXPackages and related ai packages",
|
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
|
||||||
"panel": "1",
|
|
||||||
"InvokeScript": [
|
|
||||||
"
|
|
||||||
Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers
|
|
||||||
Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers
|
|
||||||
|
|
||||||
$Appx = (Get-AppxPackage MicrosoftWindows.Client.CoreAI).PackageFullName
|
|
||||||
$Sid = (Get-LocalUser $Env:UserName).Sid.Value
|
|
||||||
|
|
||||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force
|
|
||||||
Remove-AppxPackage $Appx
|
|
||||||
|
|
||||||
Write-Host \"Copilot Removed\"
|
|
||||||
"
|
|
||||||
],
|
|
||||||
"UndoScript": [
|
|
||||||
"
|
|
||||||
Write-Host \"Installing Copilot...\"
|
|
||||||
winget install --name Copilot --source msstore --accept-package-agreements --accept-source-agreements --silent
|
|
||||||
"
|
|
||||||
],
|
|
||||||
```
|
|
||||||
@@ -3,7 +3,7 @@ title: "Microsoft Edge - Remove"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=575}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=594}
|
||||||
"WPFTweaksRemoveEdge": {
|
"WPFTweaksRemoveEdge": {
|
||||||
"Content": "Microsoft Edge - Remove",
|
"Content": "Microsoft Edge - Remove",
|
||||||
"Description": "Unblocks Microsoft Edge uninstaller restrictions then uses that uninstaller to remove Microsoft Edge.",
|
"Description": "Unblocks Microsoft Edge uninstaller restrictions then uses that uninstaller to remove Microsoft Edge.",
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
title: "File Explorer Gallery - Disable"
|
|
||||||
description: ""
|
|
||||||
---
|
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=663}
|
|
||||||
"WPFTweaksRemoveGallery": {
|
|
||||||
"Content": "File Explorer Gallery - Disable",
|
|
||||||
"Description": "Removes the Gallery from Explorer and sets This PC as default.",
|
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
|
||||||
"panel": "1",
|
|
||||||
"InvokeScript": [
|
|
||||||
"
|
|
||||||
Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
|
|
||||||
"
|
|
||||||
],
|
|
||||||
"UndoScript": [
|
|
||||||
"
|
|
||||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{e88865ea-0e1c-4e20-9aa6-edcd0212c87c}\"
|
|
||||||
"
|
|
||||||
],
|
|
||||||
```
|
|
||||||
@@ -1,24 +1,34 @@
|
|||||||
---
|
---
|
||||||
title: "File Explorer Home - Disable"
|
title: "File Explorer Home and Gallery - Disable"
|
||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=644}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=676}
|
||||||
"WPFTweaksRemoveHome": {
|
"WPFTweaksRemoveHome": {
|
||||||
"Content": "File Explorer Home - Disable",
|
"Content": "File Explorer Home and Gallery - Disable",
|
||||||
"Description": "Removes the Home from Explorer and sets This PC as default.",
|
"Description": "Removes the Home and Gallery from Explorer and sets This PC as default.",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
"panel": "1",
|
"panel": "1",
|
||||||
"InvokeScript": [
|
"registry": [
|
||||||
"
|
{
|
||||||
Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\"
|
"Path": "HKCU:\\Software\\Classes\\CLSID\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}",
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name LaunchTo -Value 1
|
"Name": "System.IsPinnedToNameSpaceTree",
|
||||||
"
|
"Value": "0",
|
||||||
],
|
"Type": "DWord",
|
||||||
"UndoScript": [
|
"OriginalValue": "<RemoveEntry>"
|
||||||
"
|
},
|
||||||
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\{f874310e-b6b7-47dc-bc84-b9e6b38f5903}\"
|
{
|
||||||
Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name LaunchTo -Value 0
|
"Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
|
||||||
"
|
"Name": "LaunchTo",
|
||||||
|
"Value": "1",
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Registry Changes
|
||||||
|
|
||||||
|
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
|
||||||
|
|
||||||
|
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Microsoft OneDrive - Remove"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=607}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=639}
|
||||||
"WPFTweaksRemoveOneDrive": {
|
"WPFTweaksRemoveOneDrive": {
|
||||||
"Content": "Microsoft OneDrive - Remove",
|
"Content": "Microsoft OneDrive - Remove",
|
||||||
"Description": "Denies permission to remove OneDrive user files, then uses its own uninstaller to remove it and restores the original permission afterward.",
|
"Description": "Denies permission to remove OneDrive user files, then uses its own uninstaller to remove it and restores the original permission afterward.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Right-Click Menu Previous Layout - Enable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1052}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1084}
|
||||||
"WPFTweaksRightClickMenu": {
|
"WPFTweaksRightClickMenu": {
|
||||||
"Content": "Right-Click Menu Previous Layout - Enable",
|
"Content": "Right-Click Menu Previous Layout - Enable",
|
||||||
"Description": "Restores the classic context menu when right-clicking in File Explorer, replacing the simplified Windows 11 version.",
|
"Description": "Restores the classic context menu when right-clicking in File Explorer, replacing the simplified Windows 11 version.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Storage Sense - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=899}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=918}
|
||||||
"WPFTweaksStorage": {
|
"WPFTweaksStorage": {
|
||||||
"Content": "Storage Sense - Disable",
|
"Content": "Storage Sense - Disable",
|
||||||
"Description": "Storage Sense deletes temp files automatically.",
|
"Description": "Storage Sense deletes temp files automatically.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Teredo - Disable"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1116}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1148}
|
||||||
"WPFTweaksTeredo": {
|
"WPFTweaksTeredo": {
|
||||||
"Content": "Teredo - Disable",
|
"Content": "Teredo - Disable",
|
||||||
"Description": "Teredo network tunneling is an IPv6 feature that can cause additional latency, but may cause problems with some games.",
|
"Description": "Teredo network tunneling is an IPv6 feature that can cause additional latency, but may cause problems with some games.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "Date & Time - Set Time to UTC"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=591}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=623}
|
||||||
"WPFTweaksUTC": {
|
"WPFTweaksUTC": {
|
||||||
"Content": "Date & Time - Set Time to UTC",
|
"Content": "Date & Time - Set Time to UTC",
|
||||||
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux systems.",
|
"Description": "Essential for computers that are dual booting. Fixes the time sync with Linux systems.",
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
title: "Windows AI - Disable"
|
||||||
|
description: ""
|
||||||
|
---
|
||||||
|
|
||||||
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=934}
|
||||||
|
"WPFTweaksWindowsAI": {
|
||||||
|
"Content": "Windows AI - Disable",
|
||||||
|
"Description": "Removes or disables all ai features and packages",
|
||||||
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
"panel": "1",
|
||||||
|
"registry": [
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",
|
||||||
|
"Name": "SettingsPageVisibility",
|
||||||
|
"Value": "hide:aicomponents",
|
||||||
|
"Type": "String",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Path": "HKLM:\\SOFTWARE\\Policies\\WindowsNotepad",
|
||||||
|
"Name": "DisableAIFeatures",
|
||||||
|
"Value": 1,
|
||||||
|
"Type": "DWord",
|
||||||
|
"OriginalValue": "<RemoveEntry>"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"InvokeScript": [
|
||||||
|
"
|
||||||
|
$Appx = (Get-AppxPackage MicrosoftWindows.Client.CoreAI).PackageFullName
|
||||||
|
$Sid = (Get-LocalUser $Env:UserName).Sid.Value
|
||||||
|
|
||||||
|
New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force
|
||||||
|
|
||||||
|
Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers
|
||||||
|
Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers
|
||||||
|
Remove-AppxPackage $Appx
|
||||||
|
|
||||||
|
Set-Service -Name WSAIFabricSvc -StartupType Disabled
|
||||||
|
Disable-WindowsOptionalFeature -FeatureName Recall -Online
|
||||||
|
|
||||||
|
Write-Host \"Windows AI Disabled\"
|
||||||
|
"
|
||||||
|
],
|
||||||
|
```
|
||||||
|
|
||||||
|
## Registry Changes
|
||||||
|
|
||||||
|
Applications and System Components store and retrieve configuration data to modify Windows settings, so we can use the registry to change many settings in one place.
|
||||||
|
|
||||||
|
You can find information about the registry on [Wikipedia](https://www.wikiwand.com/en/Windows_Registry) and [Microsoft's Website](https://learn.microsoft.com/en-us/windows/win32/sysinfo/registry).
|
||||||
@@ -3,7 +3,7 @@ title: "Xbox & Gaming Components - Remove"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=779}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=798}
|
||||||
"WPFTweaksXboxRemoval": {
|
"WPFTweaksXboxRemoval": {
|
||||||
"Content": "Xbox & Gaming Components - Remove",
|
"Content": "Xbox & Gaming Components - Remove",
|
||||||
"Description": "Removes Xbox services, the Xbox app, Game Bar, and related authentication components.",
|
"Description": "Removes Xbox services, the Xbox app, Game Bar, and related authentication components.",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: "DNS - Set to:"
|
|||||||
description: ""
|
description: ""
|
||||||
---
|
---
|
||||||
|
|
||||||
```json {filename="config/tweaks.json",linenos=inline,linenostart=1695}
|
```json {filename="config/tweaks.json",linenos=inline,linenostart=1816}
|
||||||
"WPFchangedns": {
|
"WPFchangedns": {
|
||||||
"Content": "DNS - Set to:",
|
"Content": "DNS - Set to:",
|
||||||
"category": "z__Advanced Tweaks - CAUTION",
|
"category": "z__Advanced Tweaks - CAUTION",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ To create a config file:
|
|||||||
|
|
||||||
Once you have exported a config, launch Winutil with it using this command:
|
Once you have exported a config, launch Winutil with it using this command:
|
||||||
```powershell
|
```powershell
|
||||||
& ([ScriptBlock]::Create((irm "https://christitus.com/win"))) -Config "C:\Path\To\Config.json" -Run
|
& ([ScriptBlock]::Create((irm "https://christitus.com/win"))) -Config "C:\Path\To\Config.json"
|
||||||
```
|
```
|
||||||
|
|
||||||
This is useful for:
|
This is useful for:
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ module github.com/ChrisTitusTech/WinUtil
|
|||||||
|
|
||||||
go 1.26
|
go 1.26
|
||||||
|
|
||||||
require github.com/imfing/hextra v0.12.1 // indirect
|
require github.com/imfing/hextra v0.12.3 // indirect
|
||||||
|
|||||||
@@ -1,8 +1,2 @@
|
|||||||
github.com/imfing/hextra v0.9.7 h1:Zg5n24us36Bn/S/5mEUPkRW6uwE6vHHEqWSgN0bPXaM=
|
github.com/imfing/hextra v0.12.3 h1:DZHY2rUWYteyzjlHi9r4n7Bb5e2Q+6LXe4C1Dqn0ZjM=
|
||||||
github.com/imfing/hextra v0.9.7/go.mod h1:cEfel3lU/bSx7lTE/+uuR4GJaphyOyiwNR3PTqFTXpI=
|
github.com/imfing/hextra v0.12.3/go.mod h1:vi+yhpq8YPp/aghvJlNKVnJKcPJ/VyAEcfC1BSV9ARo=
|
||||||
github.com/imfing/hextra v0.11.1 h1:8pTc4ReYbzGTHAnyiebmlT3ijFfIXiGu1r7tM/UGjFI=
|
|
||||||
github.com/imfing/hextra v0.11.1/go.mod h1:cEfel3lU/bSx7lTE/+uuR4GJaphyOyiwNR3PTqFTXpI=
|
|
||||||
github.com/imfing/hextra v0.12.0 h1:f6y35hW/WDJEcx9S0dOmbICOBxYE0PmP6IJFsTUgVyY=
|
|
||||||
github.com/imfing/hextra v0.12.0/go.mod h1:YAv8XRNSmcqjieFwI7fVQK1AoY2Do+45DO9HGqxSGu4=
|
|
||||||
github.com/imfing/hextra v0.12.1 h1:3t1n0bmJbDzSTVfht93UDcfF1BXMRjeFojA071ri2l8=
|
|
||||||
github.com/imfing/hextra v0.12.1/go.mod h1:vi+yhpq8YPp/aghvJlNKVnJKcPJ/VyAEcfC1BSV9ARo=
|
|
||||||
|
|||||||
@@ -3,78 +3,134 @@ function Find-AppsByNameOrDescription {
|
|||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Searches through the Apps on the Install Tab and hides all entries that do not match the string
|
Searches through the Apps on the Install Tab and hides all entries that do not match the string
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Filters application entries by name or description using literal string matching.
|
||||||
|
Respects collapsed category state and handles null $sync gracefully.
|
||||||
|
|
||||||
.PARAMETER SearchString
|
.PARAMETER SearchString
|
||||||
The string to be searched for
|
The string to be searched for. Wildcards are treated as literal characters.
|
||||||
|
|
||||||
|
.NOTES
|
||||||
|
- Uses module-scope $sync (no parameter needed; inherits from caller's scope)
|
||||||
|
- Performs literal matching (no wildcard expansion)
|
||||||
|
- Safely handles missing hashtable keys and null UI elements
|
||||||
|
- Protected by try/catch to prevent UI thread crashes
|
||||||
#>
|
#>
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory=$false)]
|
[Parameter(Mandatory = $false)]
|
||||||
[string]$SearchString = ""
|
[string]$SearchString = ""
|
||||||
)
|
)
|
||||||
# Reset the visibility if the search string is empty or the search is cleared
|
|
||||||
if ([string]::IsNullOrWhiteSpace($SearchString)) {
|
|
||||||
$sync.ItemsControl.Items | ForEach-Object {
|
|
||||||
# Each item is a StackPanel container
|
|
||||||
$_.Visibility = [Windows.Visibility]::Visible
|
|
||||||
|
|
||||||
|
# Validate that $sync exists and has required structure
|
||||||
|
if ($null -eq $sync) {
|
||||||
|
Write-Warning "Find-AppsByNameOrDescription: Global `$sync not found. Aborting search."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($null -eq $sync.ItemsControl) {
|
||||||
|
Write-Warning "Find-AppsByNameOrDescription: `$sync.ItemsControl not initialized. Aborting search."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($null -eq $sync.configs -or $null -eq $sync.configs.applicationsHashtable) {
|
||||||
|
Write-Warning "Find-AppsByNameOrDescription: `$sync.configs.applicationsHashtable not initialized. Aborting search."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
# Reset the visibility if the search string is empty or the search is cleared
|
||||||
|
if ([string]::IsNullOrWhiteSpace($SearchString)) {
|
||||||
|
$sync.ItemsControl.Items | ForEach-Object {
|
||||||
|
# Each item is a StackPanel container
|
||||||
|
$_.Visibility = [Windows.Visibility]::Visible
|
||||||
|
|
||||||
|
if ($_.Children.Count -ge 2) {
|
||||||
|
$categoryLabel = $_.Children[0]
|
||||||
|
$wrapPanel = $_.Children[1]
|
||||||
|
|
||||||
|
# Keep category label visible
|
||||||
|
$categoryLabel.Visibility = [Windows.Visibility]::Visible
|
||||||
|
|
||||||
|
# Respect the collapsed state of categories (indicated by + prefix)
|
||||||
|
if ($categoryLabel.Content -like "+*") {
|
||||||
|
$wrapPanel.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$wrapPanel.Visibility = [Windows.Visibility]::Visible
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show all apps within the category
|
||||||
|
$wrapPanel.Children | ForEach-Object {
|
||||||
|
$_.Visibility = [Windows.Visibility]::Visible
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# Escape wildcard characters for literal matching
|
||||||
|
$escapedSearchString = [System.Management.Automation.WildcardPattern]::Escape($SearchString)
|
||||||
|
|
||||||
|
# Perform search
|
||||||
|
$sync.ItemsControl.Items | ForEach-Object {
|
||||||
|
# Each item is a StackPanel container with Children[0] = label, Children[1] = WrapPanel
|
||||||
if ($_.Children.Count -ge 2) {
|
if ($_.Children.Count -ge 2) {
|
||||||
$categoryLabel = $_.Children[0]
|
$categoryLabel = $_.Children[0]
|
||||||
$wrapPanel = $_.Children[1]
|
$wrapPanel = $_.Children[1]
|
||||||
|
$categoryHasMatch = $false
|
||||||
|
|
||||||
# Keep category label visible
|
# Keep category label visible
|
||||||
$categoryLabel.Visibility = [Windows.Visibility]::Visible
|
$categoryLabel.Visibility = [Windows.Visibility]::Visible
|
||||||
|
|
||||||
# Respect the collapsed state of categories (indicated by + prefix)
|
# Search through apps in this category
|
||||||
if ($categoryLabel.Content -like "+*") {
|
|
||||||
$wrapPanel.Visibility = [Windows.Visibility]::Collapsed
|
|
||||||
} else {
|
|
||||||
$wrapPanel.Visibility = [Windows.Visibility]::Visible
|
|
||||||
}
|
|
||||||
|
|
||||||
# Show all apps within the category
|
|
||||||
$wrapPanel.Children | ForEach-Object {
|
$wrapPanel.Children | ForEach-Object {
|
||||||
$_.Visibility = [Windows.Visibility]::Visible
|
# Safely retrieve app entry from hashtable
|
||||||
|
$appTag = $_.Tag
|
||||||
|
$appEntry = $null
|
||||||
|
|
||||||
|
if (-not [string]::IsNullOrWhiteSpace($appTag) -and $sync.configs.applicationsHashtable.ContainsKey($appTag)) {
|
||||||
|
$appEntry = $sync.configs.applicationsHashtable[$appTag]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if app matches search criteria
|
||||||
|
if ($null -ne $appEntry) {
|
||||||
|
$contentMatch = $appEntry.Content -like "*$escapedSearchString*"
|
||||||
|
$descriptionMatch = $appEntry.Description -like "*$escapedSearchString*"
|
||||||
|
|
||||||
|
if ($contentMatch -or $descriptionMatch) {
|
||||||
|
# Show the App and mark that this category has a match
|
||||||
|
$_.Visibility = [Windows.Visibility]::Visible
|
||||||
|
$categoryHasMatch = $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$_.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# Hide app if no entry found (data integrity issue)
|
||||||
|
$_.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
# Perform search
|
# If category has matches, show the WrapPanel and update the category label to expanded state
|
||||||
$sync.ItemsControl.Items | ForEach-Object {
|
if ($categoryHasMatch) {
|
||||||
# Each item is a StackPanel container with Children[0] = label, Children[1] = WrapPanel
|
$wrapPanel.Visibility = [Windows.Visibility]::Visible
|
||||||
if ($_.Children.Count -ge 2) {
|
|
||||||
$categoryLabel = $_.Children[0]
|
|
||||||
$wrapPanel = $_.Children[1]
|
|
||||||
$categoryHasMatch = $false
|
|
||||||
|
|
||||||
# Keep category label visible
|
|
||||||
$categoryLabel.Visibility = [Windows.Visibility]::Visible
|
|
||||||
|
|
||||||
# Search through apps in this category
|
|
||||||
$wrapPanel.Children | ForEach-Object {
|
|
||||||
$appEntry = $sync.configs.applicationsHashtable.$($_.Tag)
|
|
||||||
if ($appEntry.Content -like "*$SearchString*" -or $appEntry.Description -like "*$SearchString*") {
|
|
||||||
# Show the App and mark that this category has a match
|
|
||||||
$_.Visibility = [Windows.Visibility]::Visible
|
$_.Visibility = [Windows.Visibility]::Visible
|
||||||
$categoryHasMatch = $true
|
# Update category label to show expanded state (-)
|
||||||
|
if ($categoryLabel.Content -like "+*") {
|
||||||
|
$categoryLabel.Content = $categoryLabel.Content -replace "^\+ ", "- "
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
# Hide the entire category container if no matches
|
||||||
$_.Visibility = [Windows.Visibility]::Collapsed
|
$_.Visibility = [Windows.Visibility]::Collapsed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# If category has matches, show the WrapPanel and update the category label to expanded state
|
|
||||||
if ($categoryHasMatch) {
|
|
||||||
$wrapPanel.Visibility = [Windows.Visibility]::Visible
|
|
||||||
$_.Visibility = [Windows.Visibility]::Visible
|
|
||||||
# Update category label to show expanded state (-)
|
|
||||||
if ($categoryLabel.Content -like "+*") {
|
|
||||||
$categoryLabel.Content = $categoryLabel.Content -replace "^\+ ", "- "
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
# Hide the entire category container if no matches
|
|
||||||
$_.Visibility = [Windows.Visibility]::Collapsed
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch {
|
||||||
|
Write-Warning "Find-AppsByNameOrDescription: An error occurred during search: $_"
|
||||||
|
# Fail gracefully - do not crash the UI thread
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,98 +3,300 @@ function Find-TweaksByNameOrDescription {
|
|||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Searches through the Tweaks on the Tweaks Tab and hides all entries that do not match the search string
|
Searches through the Tweaks on the Tweaks Tab and hides all entries that do not match the search string
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Filters tweak entries by name or description using literal string matching (no wildcard expansion).
|
||||||
|
Respects collapsed category state and handles null $sync gracefully.
|
||||||
|
Safe for rapid keystroke events; no terminal spam on error conditions.
|
||||||
|
|
||||||
.PARAMETER SearchString
|
.PARAMETER SearchString
|
||||||
The string to be searched for
|
The string to be searched for. Wildcards are treated as literal characters.
|
||||||
|
|
||||||
|
.NOTES
|
||||||
|
- Uses module-scope $sync (resolved via global/script fallback if needed)
|
||||||
|
- Performs literal matching (no wildcard expansion)
|
||||||
|
- Safely handles missing UI elements and null properties
|
||||||
|
- Protected by try/catch to prevent UI thread crashes
|
||||||
|
- PowerShell 5.1 compatible (no ternary operators, no advanced language features)
|
||||||
#>
|
#>
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory=$false)]
|
[Parameter(Mandatory = $false)]
|
||||||
[string]$SearchString = ""
|
[string]$SearchString = ""
|
||||||
)
|
)
|
||||||
|
|
||||||
# Reset the visibility if the search string is empty or the search is cleared
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
if ([string]::IsNullOrWhiteSpace($SearchString)) {
|
# 1. RESOLVE $SYNC WITH MULTI-LEVEL FALLBACK
|
||||||
# Show all categories
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
$tweakspanel = $sync.Form.FindName("tweakspanel")
|
|
||||||
$tweakspanel.Children | ForEach-Object {
|
|
||||||
$_.Visibility = [Windows.Visibility]::Visible
|
|
||||||
|
|
||||||
# Foreach category section, show all items
|
if ($null -eq $Sync) {
|
||||||
if ($_ -is [Windows.Controls.Border]) {
|
$Sync = $global:sync
|
||||||
$_.Visibility = [Windows.Visibility]::Visible
|
if ($null -eq $Sync) {
|
||||||
|
$Sync = $script:sync
|
||||||
# Find ItemsControl
|
|
||||||
$dockPanel = $_.Child
|
|
||||||
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
|
||||||
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] }
|
|
||||||
if ($itemsControl) {
|
|
||||||
# Show items in the category
|
|
||||||
foreach ($item in $itemsControl.Items) {
|
|
||||||
if ($item -is [Windows.Controls.Label]) {
|
|
||||||
$item.Visibility = [Windows.Visibility]::Visible
|
|
||||||
} elseif ($item -is [Windows.Controls.DockPanel] -or
|
|
||||||
$item -is [Windows.Controls.StackPanel]) {
|
|
||||||
$item.Visibility = [Windows.Visibility]::Visible
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Validate that $Sync exists and has required structure
|
||||||
|
if ($null -eq $Sync) {
|
||||||
|
# Silent return - function called on every keystroke; no warning spam
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
# Search for matching tweaks when search string is not null
|
if ($null -eq $Sync.Form) {
|
||||||
$tweakspanel = $sync.Form.FindName("tweakspanel")
|
# Silent return - form not yet initialized
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
$tweakspanel.Children | ForEach-Object {
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
$categoryBorder = $_
|
# 2. GET REFERENCE TO TWEAKS PANEL
|
||||||
$categoryVisible = $false
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
if ($_ -is [Windows.Controls.Border]) {
|
$tweaksPanel = $null
|
||||||
# Find the ItemsControl
|
try {
|
||||||
$dockPanel = $_.Child
|
$tweaksPanel = $Sync.Form.FindName("tweakspanel")
|
||||||
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
}
|
||||||
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] }
|
catch {
|
||||||
if ($itemsControl) {
|
# Silent return - panel not found or disposed
|
||||||
$categoryLabel = $null
|
return
|
||||||
|
}
|
||||||
|
|
||||||
# Process all items in the ItemsControl
|
if ($null -eq $tweaksPanel) {
|
||||||
for ($i = 0; $i -lt $itemsControl.Items.Count; $i++) {
|
# Silent return - panel doesn't exist
|
||||||
$item = $itemsControl.Items[$i]
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if ($item -is [Windows.Controls.Label]) {
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
$categoryLabel = $item
|
# 3. HANDLE EMPTY/WHITESPACE SEARCH STRING - RESET TO DEFAULT STATE
|
||||||
$item.Visibility = [Windows.Visibility]::Collapsed
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
} elseif ($item -is [Windows.Controls.DockPanel]) {
|
|
||||||
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
|
||||||
$label = $item.Children | Where-Object { $_ -is [Windows.Controls.Label] } | Select-Object -First 1
|
|
||||||
|
|
||||||
if ($label -and ($label.Content -like "*$SearchString*" -or $label.ToolTip -like "*$SearchString*")) {
|
if ([string]::IsNullOrWhiteSpace($SearchString)) {
|
||||||
$item.Visibility = [Windows.Visibility]::Visible
|
try {
|
||||||
if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible }
|
$tweaksPanel.Children | ForEach-Object {
|
||||||
$categoryVisible = $true
|
$categoryBorder = $_
|
||||||
} else {
|
|
||||||
$item.Visibility = [Windows.Visibility]::Collapsed
|
|
||||||
}
|
|
||||||
} elseif ($item -is [Windows.Controls.StackPanel]) {
|
|
||||||
# StackPanel which contain checkboxes or other elements
|
|
||||||
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
|
||||||
|
|
||||||
if ($checkbox -and ($checkbox.Content -like "*$SearchString*" -or $checkbox.ToolTip -like "*$SearchString*")) {
|
# Safely set visibility
|
||||||
$item.Visibility = [Windows.Visibility]::Visible
|
if ($null -ne $categoryBorder) {
|
||||||
if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible }
|
$categoryBorder.Visibility = [Windows.Visibility]::Visible
|
||||||
$categoryVisible = $true
|
}
|
||||||
} else {
|
|
||||||
$item.Visibility = [Windows.Visibility]::Collapsed
|
# Process each category
|
||||||
|
if ($categoryBorder -is [Windows.Controls.Border]) {
|
||||||
|
$dockPanel = $null
|
||||||
|
if ($null -ne $categoryBorder.Child) {
|
||||||
|
$dockPanel = $categoryBorder.Child
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
||||||
|
$itemsControl = $null
|
||||||
|
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] } | Select-Object -First 1
|
||||||
|
|
||||||
|
if ($null -ne $itemsControl) {
|
||||||
|
# Show all items in the category
|
||||||
|
foreach ($item in $itemsControl.Items) {
|
||||||
|
if ($null -ne $item) {
|
||||||
|
# Check if it's a category label (first Label in the ItemsControl)
|
||||||
|
if ($item -is [Windows.Controls.Label]) {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
}
|
||||||
|
elseif ($item -is [Windows.Controls.DockPanel] -or $item -is [Windows.Controls.StackPanel]) {
|
||||||
|
# Show all checkbox containers
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
# Silent catch - UI element may be disposed
|
||||||
|
}
|
||||||
|
|
||||||
# Set the visibility based on if any item matched
|
return
|
||||||
$categoryBorder.Visibility = if ($categoryVisible) { [Windows.Visibility]::Visible } else { [Windows.Visibility]::Collapsed }
|
}
|
||||||
|
|
||||||
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
|
# 4. PERFORM LITERAL SEARCH (NO WILDCARD EXPANSION)
|
||||||
|
# ──────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
try {
|
||||||
|
# Normalize search term once for the entire operation
|
||||||
|
$searchTerm = $SearchString
|
||||||
|
if ($null -eq $searchTerm) {
|
||||||
|
$searchTerm = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Iterate through all categories
|
||||||
|
$tweaksPanel.Children | ForEach-Object {
|
||||||
|
$categoryBorder = $_
|
||||||
|
$categoryHasMatch = $false
|
||||||
|
|
||||||
|
if ($categoryBorder -is [Windows.Controls.Border]) {
|
||||||
|
$dockPanel = $null
|
||||||
|
if ($null -ne $categoryBorder.Child) {
|
||||||
|
$dockPanel = $categoryBorder.Child
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($dockPanel -is [Windows.Controls.DockPanel]) {
|
||||||
|
$itemsControl = $null
|
||||||
|
$itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] } | Select-Object -First 1
|
||||||
|
|
||||||
|
if ($null -ne $itemsControl) {
|
||||||
|
$categoryLabel = $null
|
||||||
|
|
||||||
|
# Process all items (checkboxes, labels, panels) in the ItemsControl
|
||||||
|
for ($i = 0; $i -lt $itemsControl.Items.Count; $i++) {
|
||||||
|
$item = $itemsControl.Items[$i]
|
||||||
|
|
||||||
|
if ($null -eq $item) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
# Check if this is a category label (usually first Label)
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
if ($item -is [Windows.Controls.Label]) {
|
||||||
|
$categoryLabel = $item
|
||||||
|
# Initially hide category label; show it only if matches found
|
||||||
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
# Check if this is a DockPanel containing a tweak checkbox
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
elseif ($item -is [Windows.Controls.DockPanel]) {
|
||||||
|
$checkbox = $null
|
||||||
|
$label = $null
|
||||||
|
|
||||||
|
# Safely extract checkbox and label
|
||||||
|
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
||||||
|
$label = $item.Children | Where-Object { $_ -is [Windows.Controls.Label] } | Select-Object -First 1
|
||||||
|
|
||||||
|
# Check if tweak matches search criteria
|
||||||
|
$itemMatches = $false
|
||||||
|
|
||||||
|
if ($null -ne $label) {
|
||||||
|
$labelContent = $label.Content
|
||||||
|
$labelToolTip = $label.ToolTip
|
||||||
|
|
||||||
|
# Safely null-check properties
|
||||||
|
if ($null -eq $labelContent) {
|
||||||
|
$labelContent = ""
|
||||||
|
}
|
||||||
|
if ($null -eq $labelToolTip) {
|
||||||
|
$labelToolTip = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert to string and perform LITERAL matching
|
||||||
|
$labelContentStr = [string]$labelContent
|
||||||
|
$labelToolTipStr = [string]$labelToolTip
|
||||||
|
|
||||||
|
# Use IndexOf for literal matching (no wildcard interpretation)
|
||||||
|
$contentMatch = $labelContentStr.IndexOf($searchTerm, [System.StringComparison]::OrdinalIgnoreCase) -ge 0
|
||||||
|
$toolTipMatch = $labelToolTipStr.IndexOf($searchTerm, [System.StringComparison]::OrdinalIgnoreCase) -ge 0
|
||||||
|
|
||||||
|
if ($contentMatch -or $toolTipMatch) {
|
||||||
|
$itemMatches = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set visibility based on match result
|
||||||
|
if ($itemMatches) {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
$categoryHasMatch = $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
# Check if this is a StackPanel containing a tweak checkbox
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
elseif ($item -is [Windows.Controls.StackPanel]) {
|
||||||
|
$checkbox = $null
|
||||||
|
$checkbox = $item.Children | Where-Object { $_ -is [Windows.Controls.CheckBox] } | Select-Object -First 1
|
||||||
|
|
||||||
|
$itemMatches = $false
|
||||||
|
|
||||||
|
if ($null -ne $checkbox) {
|
||||||
|
$checkboxContent = $checkbox.Content
|
||||||
|
$checkboxToolTip = $checkbox.ToolTip
|
||||||
|
|
||||||
|
# Safely null-check properties
|
||||||
|
if ($null -eq $checkboxContent) {
|
||||||
|
$checkboxContent = ""
|
||||||
|
}
|
||||||
|
if ($null -eq $checkboxToolTip) {
|
||||||
|
$checkboxToolTip = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert to string and perform LITERAL matching
|
||||||
|
$checkboxContentStr = [string]$checkboxContent
|
||||||
|
$checkboxToolTipStr = [string]$checkboxToolTip
|
||||||
|
|
||||||
|
# Use IndexOf for literal matching (no wildcard interpretation)
|
||||||
|
$contentMatch = $checkboxContentStr.IndexOf($searchTerm, [System.StringComparison]::OrdinalIgnoreCase) -ge 0
|
||||||
|
$toolTipMatch = $checkboxToolTipStr.IndexOf($searchTerm, [System.StringComparison]::OrdinalIgnoreCase) -ge 0
|
||||||
|
|
||||||
|
if ($contentMatch -or $toolTipMatch) {
|
||||||
|
$itemMatches = $true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set visibility based on match result
|
||||||
|
if ($itemMatches) {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Visible
|
||||||
|
$categoryHasMatch = $true
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$item.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
# Update category label visibility and expanded/collapsed state
|
||||||
|
# ────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
if ($categoryHasMatch) {
|
||||||
|
# Show category label
|
||||||
|
if ($null -ne $categoryLabel) {
|
||||||
|
$categoryLabel.Visibility = [Windows.Visibility]::Visible
|
||||||
|
|
||||||
|
# Update category label to expanded state (change "+" to "-")
|
||||||
|
$labelContent = $categoryLabel.Content
|
||||||
|
if ($null -ne $labelContent) {
|
||||||
|
$labelStr = [string]$labelContent
|
||||||
|
|
||||||
|
# Safe string replacement without -replace regex
|
||||||
|
if ($labelStr.StartsWith("+ ")) {
|
||||||
|
$expandedLabel = "- " + $labelStr.Substring(2)
|
||||||
|
$categoryLabel.Content = $expandedLabel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# ────────────────────────────────────────────────────────────────
|
||||||
|
# Set category border visibility based on whether it has matches
|
||||||
|
# ────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
if ($categoryHasMatch) {
|
||||||
|
$categoryBorder.Visibility = [Windows.Visibility]::Visible
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$categoryBorder.Visibility = [Windows.Visibility]::Collapsed
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch {
|
||||||
|
# Silent catch - UI elements may be disposed or in unexpected state
|
||||||
|
# Do not log to terminal as this function is called on every keystroke
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
function Get-LocalizedYesNo {
|
|
||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
This function runs choice.exe and captures its output to extract yes no in a localized Windows
|
|
||||||
|
|
||||||
.DESCRIPTION
|
|
||||||
The function retrieves the output of the command 'cmd /c "choice <nul 2>nul"' and converts the default output for Yes and No
|
|
||||||
in the localized format, such as "Yes=<first character>, No=<second character>".
|
|
||||||
|
|
||||||
.EXAMPLE
|
|
||||||
$yesNoArray = Get-LocalizedYesNo
|
|
||||||
Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])"
|
|
||||||
#>
|
|
||||||
|
|
||||||
# Run choice and capture its options as output
|
|
||||||
# The output shows the options for Yes and No as "[Y,N]?" in the (partially) localized format.
|
|
||||||
# eg. English: [Y,N]?
|
|
||||||
# Dutch: [Y,N]?
|
|
||||||
# German: [J,N]?
|
|
||||||
# French: [O,N]?
|
|
||||||
# Spanish: [S,N]?
|
|
||||||
# Italian: [S,N]?
|
|
||||||
# Russian: [Y,N]?
|
|
||||||
|
|
||||||
$line = cmd /c "choice <nul 2>nul"
|
|
||||||
$charactersArray = @()
|
|
||||||
$regexPattern = '([a-zA-Z])'
|
|
||||||
$charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value }
|
|
||||||
|
|
||||||
Write-Debug "According to takeown.exe local Yes is $charactersArray[0]"
|
|
||||||
# Return the array of characters
|
|
||||||
return $charactersArray
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
function Get-WPFObjectName {
|
|
||||||
<#
|
|
||||||
.SYNOPSIS
|
|
||||||
This is a helper function that generates an objectname with the prefix WPF that can be used as a Powershell Variable after compilation.
|
|
||||||
To achieve this, all characters that are not a-z, A-Z or 0-9 are simply removed from the name.
|
|
||||||
|
|
||||||
.PARAMETER type
|
|
||||||
The type of object for which the name should be generated. (e.g. Label, Button, CheckBox...)
|
|
||||||
|
|
||||||
.PARAMETER name
|
|
||||||
The name or description to be used for the object. (invalid characters are removed)
|
|
||||||
|
|
||||||
.OUTPUTS
|
|
||||||
A string that can be used as a object/variable name in powershell.
|
|
||||||
For example: WPFLabelMicrosoftTools
|
|
||||||
|
|
||||||
.EXAMPLE
|
|
||||||
Get-WPFObjectName -type Label -name "Microsoft Tools"
|
|
||||||
#>
|
|
||||||
|
|
||||||
param(
|
|
||||||
[Parameter(Mandatory, position=0)]
|
|
||||||
[string]$type,
|
|
||||||
|
|
||||||
[Parameter(position=1)]
|
|
||||||
[string]$name
|
|
||||||
)
|
|
||||||
|
|
||||||
$Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', ''
|
|
||||||
return $Output
|
|
||||||
}
|
|
||||||