<# .NOTES Author : Chris Titus @christitustech Runspace Author: @DeveloperDurp GitHub : https://github.com/ChrisTitusTech Version : 26.02.11 #> param ( [switch]$Debug, [string]$Config, [switch]$Run ) # Set DebugPreference based on the -Debug switch if ($Debug) { $DebugPreference = "Continue" } if ($Config) { $PARAM_CONFIG = $Config } $PARAM_RUN = $false # Handle the -Run switch if ($Run) { Write-Host "Running config file tasks..." $PARAM_RUN = $true } # Load DLLs Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName System.Windows.Forms # Variable to sync between runspaces $sync = [Hashtable]::Synchronized(@{}) $sync.PSScriptRoot = $PSScriptRoot $sync.version = "26.02.11" $sync.configs = @{} $sync.Buttons = [System.Collections.Generic.List[PSObject]]::new() $sync.ProcessRunning = $false $sync.selectedApps = [System.Collections.Generic.List[string]]::new() $sync.currentTab = "Install" $sync.selectedAppsStackPanel $sync.selectedAppsPopup if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { Write-Output "GODMODE necesita permisos de administrador. Intentando relanzar..." $argList = @() $PSBoundParameters.GetEnumerator() | ForEach-Object { $argList += if ($_.Value -is [switch] -and $_.Value) { "-$($_.Key)" } elseif ($_.Value -is [array]) { "-$($_.Key) $($_.Value -join ',')" } elseif ($_.Value) { "-$($_.Key) '$($_.Value)'" } } $script = if ($PSCommandPath) { "& { & `'$($PSCommandPath)`' $($argList -join ' ') }" } else { "&([ScriptBlock]::Create((irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1))) $($argList -join ' ')" } $powershellCmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" } $processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { "$powershellCmd" } if ($processCmd -eq "wt.exe") { Start-Process $processCmd -ArgumentList "$powershellCmd -ExecutionPolicy Bypass -NoProfile -Command `"$script`"" -Verb RunAs } else { Start-Process $processCmd -ArgumentList "-ExecutionPolicy Bypass -NoProfile -Command `"$script`"" -Verb RunAs } break } $dateTime = Get-Date -Format "yyyy-MM-dd_HH-mm-ss" # Set the path for the winutil directory $winutildir = "$env:LocalAppData\winutil" New-Item $winutildir -ItemType Directory -Force | Out-Null $logdir = "$winutildir\logs" New-Item $logdir -ItemType Directory -Force | Out-Null Start-Transcript -Path "$logdir\godmode_$dateTime.log" -Append -NoClobber | Out-Null # Set PowerShell window title $Host.UI.RawUI.WindowTitle = "GODMODE by JosemaCT (Admin)" clear-host function Add-SelectedAppsMenuItem { <# .SYNOPSIS This is a helper function that generates and adds the Menu Items to the Selected Apps Popup. .Parameter name The actual Name of an App like "Chrome" or "Brave" This name is contained in the "Content" property inside the applications.json .PARAMETER key The key which identifies an app object in applications.json For Chrome this would be "WPFInstallchrome" because "WPFInstall" is prepended automatically for each key in applications.json #> param ([string]$name, [string]$key) $selectedAppGrid = New-Object Windows.Controls.Grid $selectedAppGrid.ColumnDefinitions.Add((New-Object System.Windows.Controls.ColumnDefinition -Property @{Width = "*" })) $selectedAppGrid.ColumnDefinitions.Add((New-Object System.Windows.Controls.ColumnDefinition -Property @{Width = "30" })) # Sets the name to the Content as well as the Tooltip, because the parent Popup Border has a fixed width and text could "overflow". # With the tooltip, you can still read the whole entry on hover $selectedAppLabel = New-Object Windows.Controls.Label $selectedAppLabel.Content = $name $selectedAppLabel.ToolTip = $name $selectedAppLabel.HorizontalAlignment = "Left" $selectedAppLabel.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") [System.Windows.Controls.Grid]::SetColumn($selectedAppLabel, 0) $selectedAppGrid.Children.Add($selectedAppLabel) $selectedAppRemoveButton = New-Object Windows.Controls.Button $selectedAppRemoveButton.FontFamily = "Segoe MDL2 Assets" $selectedAppRemoveButton.Content = [string]([char]0xE711) $selectedAppRemoveButton.HorizontalAlignment = "Center" $selectedAppRemoveButton.Tag = $key $selectedAppRemoveButton.ToolTip = "Remove the App from Selection" $selectedAppRemoveButton.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") $selectedAppRemoveButton.SetResourceReference([Windows.Controls.Control]::StyleProperty, "HoverButtonStyle") # Highlight the Remove icon on Hover $selectedAppRemoveButton.Add_MouseEnter({ $this.Foreground = "Red" }) $selectedAppRemoveButton.Add_MouseLeave({ $this.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") }) $selectedAppRemoveButton.Add_Click({ $sync.($this.Tag).isChecked = $false # On click of the remove button, we only have to uncheck the corresponding checkbox. This will kick of all necessary changes to update the UI }) [System.Windows.Controls.Grid]::SetColumn($selectedAppRemoveButton, 1) $selectedAppGrid.Children.Add($selectedAppRemoveButton) # Add new Element to Popup $sync.selectedAppsstackPanel.Children.Add($selectedAppGrid) } function Find-AppsByNameOrDescription { <# .SYNOPSIS Searches through the Apps on the Install Tab and hides all entries that do not match the string .PARAMETER SearchString The string to be searched for #> param( [Parameter(Mandatory = $false)] [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 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 } # 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) { $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 $categoryHasMatch = $true } else { $_.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 } } } } function Find-TweaksByNameOrDescription { <# .SYNOPSIS Searches through the Tweaks on the Tweaks Tab and hides all entries that do not match the search string .PARAMETER SearchString The string to be searched for #> param( [Parameter(Mandatory = $false)] [string]$SearchString = "" ) # Reset the visibility if the search string is empty or the search is cleared if ([string]::IsNullOrWhiteSpace($SearchString)) { # Show all categories $tweakspanel = $sync.Form.FindName("tweakspanel") $tweakspanel.Children | ForEach-Object { $_.Visibility = [Windows.Visibility]::Visible # Foreach category section, show all items if ($_ -is [Windows.Controls.Border]) { $_.Visibility = [Windows.Visibility]::Visible # 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 } } } } } } return } # Search for matching tweaks when search string is not null $tweakspanel = $sync.Form.FindName("tweakspanel") $tweakspanel.Children | ForEach-Object { $categoryBorder = $_ $categoryVisible = $false if ($_ -is [Windows.Controls.Border]) { # Find the ItemsControl $dockPanel = $_.Child if ($dockPanel -is [Windows.Controls.DockPanel]) { $itemsControl = $dockPanel.Children | Where-Object { $_ -is [Windows.Controls.ItemsControl] } if ($itemsControl) { $categoryLabel = $null # Process all items in the ItemsControl for ($i = 0; $i -lt $itemsControl.Items.Count; $i++) { $item = $itemsControl.Items[$i] if ($item -is [Windows.Controls.Label]) { $categoryLabel = $item $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*")) { $item.Visibility = [Windows.Visibility]::Visible if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible } $categoryVisible = $true } 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*")) { $item.Visibility = [Windows.Visibility]::Visible if ($categoryLabel) { $categoryLabel.Visibility = [Windows.Visibility]::Visible } $categoryVisible = $true } else { $item.Visibility = [Windows.Visibility]::Collapsed } } } } } # Set the visibility based on if any item matched $categoryBorder.Visibility = if ($categoryVisible) { [Windows.Visibility]::Visible } else { [Windows.Visibility]::Collapsed } } } } 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"' and converts the default output for Yes and No in the localized format, such as "Yes=, No=". .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" $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 } Function Get-WinUtilCheckBoxes { <# .SYNOPSIS Finds all checkboxes that are checked on the specific tab and inputs them into a script. .PARAMETER unCheck Whether to uncheck the checkboxes that are checked. Defaults to true .OUTPUTS A List containing the name of each checked checkbox .EXAMPLE Get-WinUtilCheckBoxes "WPFInstall" #> Param( [boolean]$unCheck = $false ) $Output = @{ Install = @() WPFTweaks = @() WPFFeature = @() WPFInstall = @() } $CheckBoxes = $sync.GetEnumerator() | Where-Object { $_.Value -is [System.Windows.Controls.CheckBox] } # First check and add WPFTweaksRestorePoint if checked $RestorePoint = $CheckBoxes | Where-Object { $_.Key -eq 'WPFTweaksRestorePoint' -and $_.Value.IsChecked -eq $true } if ($RestorePoint) { $Output["WPFTweaks"] = @('WPFTweaksRestorePoint') Write-Debug "Adding WPFTweaksRestorePoint as first in WPFTweaks" if ($unCheck) { $RestorePoint.Value.IsChecked = $false } } foreach ($CheckBox in $CheckBoxes) { if ($CheckBox.Key -eq 'WPFTweaksRestorePoint') { continue } # Skip since it's already handled $group = if ($CheckBox.Key.StartsWith("WPFInstall")) { "Install" } elseif ($CheckBox.Key.StartsWith("WPFTweaks")) { "WPFTweaks" } elseif ($CheckBox.Key.StartsWith("WPFFeature")) { "WPFFeature" } if ($group) { if ($CheckBox.Value.IsChecked -eq $true) { $feature = switch ($group) { "Install" { # Get the winget value [PsCustomObject]@{ winget = "$($sync.configs.applications.$($CheckBox.Name).winget)"; choco = "$($sync.configs.applications.$($CheckBox.Name).choco)"; } } default { $CheckBox.Name } } if (-not $Output.ContainsKey($group)) { $Output[$group] = @() } if ($group -eq "Install") { $Output["WPFInstall"] += $CheckBox.Name Write-Debug "Adding: $($CheckBox.Name) under: WPFInstall" } Write-Debug "Adding: $($feature) under: $($group)" $Output[$group] += $feature if ($unCheck) { $CheckBox.Value.IsChecked = $false } } } } return $Output } function Get-WinUtilInstallerProcess { <# .SYNOPSIS Checks if the given process is running .PARAMETER Process The process to check .OUTPUTS Boolean - True if the process is running #> param($Process) if ($Null -eq $Process) { return $false } if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue) { return $true } return $false } function Get-WinUtilSelectedPackages { <# .SYNOPSIS Sorts given packages based on installer preference and availability. .OUTPUTS Hashtable. Key = Package Manager, Value = ArrayList of packages to install #> param ( [Parameter(Mandatory = $true)] $PackageList, [Parameter(Mandatory = $true)] [PackageManagers]$Preference ) if ($PackageList.count -eq 1) { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) } $packages = [System.Collections.Hashtable]::new() $packagesWinget = [System.Collections.ArrayList]::new() $packagesChoco = [System.Collections.ArrayList]::new() $packages[[PackageManagers]::Winget] = $packagesWinget $packages[[PackageManagers]::Choco] = $packagesChoco Write-Debug "Checking packages using Preference '$($Preference)'" foreach ($package in $PackageList) { switch ($Preference) { "Choco" { if ($package.choco -eq "na") { Write-Debug "$($package.content) has no Choco value." $null = $packagesWinget.add($($package.winget)) Write-Host "Queueing $($package.winget) for Winget" } else { $null = $packagesChoco.add($package.choco) Write-Host "Queueing $($package.choco) for Chocolatey" } break } "Winget" { if ($package.winget -eq "na") { Write-Debug "$($package.content) has no Winget value." $null = $packagesChoco.add($package.choco) Write-Host "Queueing $($package.choco) for Chocolatey" } else { $null = $packagesWinget.add($($package.winget)) Write-Host "Queueing $($package.winget) for Winget" } break } } } return $packages } Function Get-WinUtilToggleStatus { <# .SYNOPSIS Pulls the registry keys for the given toggle switch and checks whether the toggle should be checked or unchecked .PARAMETER ToggleSwitch The name of the toggle to check .OUTPUTS Boolean to set the toggle's status to #> Param($ToggleSwitch) $ToggleSwitchReg = $sync.configs.tweaks.$ToggleSwitch.registry try { if (($ToggleSwitchReg.path -imatch "hku") -and !(Get-PSDrive -Name HKU -ErrorAction SilentlyContinue)) { $null = (New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS) if (Get-PSDrive -Name HKU -ErrorAction SilentlyContinue) { Write-Debug "HKU drive created successfully" } else { Write-Debug "Failed to create HKU drive" } } } catch { Write-Error "An error occurred regarding the HKU Drive: $_" return $false } if ($ToggleSwitchReg) { $count = 0 foreach ($regentry in $ToggleSwitchReg) { try { if (!(Test-Path $regentry.Path)) { New-Item -Path $regentry.Path -Force | Out-Null } $regstate = (Get-ItemProperty -path $regentry.Path).$($regentry.Name) if ($regstate -eq $regentry.Value) { $count += 1 Write-Debug "$($regentry.Name) is true (state: $regstate, value: $($regentry.Value), original: $($regentry.OriginalValue))" } else { Write-Debug "$($regentry.Name) is false (state: $regstate, value: $($regentry.Value), original: $($regentry.OriginalValue))" } if ($null -eq $regstate) { switch ($regentry.DefaultState) { "true" { $regstate = $regentry.Value $count += 1 } "false" { $regstate = $regentry.OriginalValue } default { Write-Error "Entry for $($regentry.Name) does not exist and no DefaultState is defined." $regstate = $regentry.OriginalValue } } } } catch { Write-Error "An unexpected error occurred: $_" } } if ($count -eq $ToggleSwitchReg.Count) { Write-Debug "$($ToggleSwitchReg.Name) is true (count: $count)" return $true } else { Write-Debug "$($ToggleSwitchReg.Name) is false (count: $count)" return $false } } else { return $false } } function Get-WinUtilVariables { <# .SYNOPSIS Gets every form object of the provided type .OUTPUTS List containing every object that matches the provided type #> param ( [Parameter()] [string[]]$Type ) $keys = ($sync.keys).where{ $_ -like "WPF*" } if ($Type) { $output = $keys | ForEach-Object { try { $objType = $sync["$psitem"].GetType().Name if ($Type -contains $objType) { Write-Output $psitem } } catch { <#I am here so errors don't get outputted for a couple variables that don't have the .GetType() attribute#> } } return $output } return $keys } 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 } function Hide-WPFInstallAppBusy { <# .SYNOPSIS Hides the busy overlay in the install app area of the WPF form. This is used to indicate that an install or uninstall has finished. #> $sync.form.Dispatcher.Invoke([action] { $sync.InstallAppAreaOverlay.Visibility = [Windows.Visibility]::Collapsed $sync.InstallAppAreaBorder.IsEnabled = $true $sync.InstallAppAreaScrollViewer.Effect.Radius = 0 }) } function Initialize-InstallAppArea { <# .SYNOPSIS Creates a [Windows.Controls.ScrollViewer] containing a [Windows.Controls.ItemsControl] which is setup to use Virtualization to only load the visible elements for performance reasons. This is used as the parent object for all category and app entries on the install tab Used to as part of the Install Tab UI generation Also creates an overlay with a progress bar and text to indicate that an install or uninstall is in progress .PARAMETER TargetElement The element to which the AppArea should be added #> param($TargetElement) $targetGrid = $sync.Form.FindName($TargetElement) $null = $targetGrid.Children.Clear() # Create the outer Border for the aren where the apps will be placed $Border = New-Object Windows.Controls.Border $Border.VerticalAlignment = "Stretch" $Border.SetResourceReference([Windows.Controls.Control]::StyleProperty, "BorderStyle") $sync.InstallAppAreaBorder = $Border # Add a ScrollViewer, because the ItemsControl does not support scrolling by itself $scrollViewer = New-Object Windows.Controls.ScrollViewer $scrollViewer.VerticalScrollBarVisibility = 'Auto' $scrollViewer.HorizontalAlignment = 'Stretch' $scrollViewer.VerticalAlignment = 'Stretch' $scrollViewer.CanContentScroll = $true $sync.InstallAppAreaScrollViewer = $scrollViewer $Border.Child = $scrollViewer # Initialize the Blur Effect for the ScrollViewer, which will be used to indicate that an install/uninstall is in progress $blurEffect = New-Object Windows.Media.Effects.BlurEffect $blurEffect.Radius = 0 $scrollViewer.Effect = $blurEffect ## Create the ItemsControl, which will be the parent of all the app entries $itemsControl = New-Object Windows.Controls.ItemsControl $itemsControl.HorizontalAlignment = 'Stretch' $itemsControl.VerticalAlignment = 'Stretch' $scrollViewer.Content = $itemsControl # Use WrapPanel to create dynamic columns based on AppEntryWidth and window width $itemsPanelTemplate = New-Object Windows.Controls.ItemsPanelTemplate $factory = New-Object Windows.FrameworkElementFactory ([Windows.Controls.WrapPanel]) $factory.SetValue([Windows.Controls.WrapPanel]::OrientationProperty, [Windows.Controls.Orientation]::Horizontal) $factory.SetValue([Windows.Controls.WrapPanel]::HorizontalAlignmentProperty, [Windows.HorizontalAlignment]::Left) $itemsPanelTemplate.VisualTree = $factory $itemsControl.ItemsPanel = $itemsPanelTemplate # Add the Border containing the App Area to the target Grid $targetGrid.Children.Add($Border) | Out-Null $overlay = New-Object Windows.Controls.Border $overlay.CornerRadius = New-Object Windows.CornerRadius(10) $overlay.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallOverlayBackgroundColor") $overlay.Visibility = [Windows.Visibility]::Collapsed # Also add the overlay to the target Grid on top of the App Area $targetGrid.Children.Add($overlay) | Out-Null $sync.InstallAppAreaOverlay = $overlay $overlayText = New-Object Windows.Controls.TextBlock $overlayText.Text = "Installing apps..." $overlayText.HorizontalAlignment = 'Center' $overlayText.VerticalAlignment = 'Center' $overlayText.SetResourceReference([Windows.Controls.TextBlock]::ForegroundProperty, "MainForegroundColor") $overlayText.Background = "Transparent" $overlayText.SetResourceReference([Windows.Controls.TextBlock]::FontSizeProperty, "HeaderFontSize") $overlayText.SetResourceReference([Windows.Controls.TextBlock]::FontFamilyProperty, "MainFontFamily") $overlayText.SetResourceReference([Windows.Controls.TextBlock]::FontWeightProperty, "MainFontWeight") $overlayText.SetResourceReference([Windows.Controls.TextBlock]::MarginProperty, "MainMargin") $sync.InstallAppAreaOverlayText = $overlayText $progressbar = New-Object Windows.Controls.ProgressBar $progressbar.Name = "ProgressBar" $progressbar.Width = 250 $progressbar.Height = 50 $sync.ProgressBar = $progressbar # Add a TextBlock overlay for the progress bar text $progressBarTextBlock = New-Object Windows.Controls.TextBlock $progressBarTextBlock.Name = "progressBarTextBlock" $progressBarTextBlock.FontWeight = [Windows.FontWeights]::Bold $progressBarTextBlock.FontSize = 16 $progressBarTextBlock.Width = $progressbar.Width $progressBarTextBlock.Height = $progressbar.Height $progressBarTextBlock.SetResourceReference([Windows.Controls.TextBlock]::ForegroundProperty, "ProgressBarTextColor") $progressBarTextBlock.TextTrimming = "CharacterEllipsis" $progressBarTextBlock.Background = "Transparent" $sync.progressBarTextBlock = $progressBarTextBlock # Create a Grid to overlay the text on the progress bar $progressGrid = New-Object Windows.Controls.Grid $progressGrid.Width = $progressbar.Width $progressGrid.Height = $progressbar.Height $progressGrid.Margin = "0,10,0,10" $progressGrid.Children.Add($progressbar) | Out-Null $progressGrid.Children.Add($progressBarTextBlock) | Out-Null $overlayStackPanel = New-Object Windows.Controls.StackPanel $overlayStackPanel.Orientation = "Vertical" $overlayStackPanel.HorizontalAlignment = 'Center' $overlayStackPanel.VerticalAlignment = 'Center' $overlayStackPanel.Children.Add($overlayText) | Out-Null $overlayStackPanel.Children.Add($progressGrid) | Out-Null $overlay.Child = $overlayStackPanel return $itemsControl } function Initialize-InstallAppEntry { <# .SYNOPSIS Creates the app entry to be placed on the install tab for a given app Used to as part of the Install Tab UI generation .PARAMETER TargetElement The Element into which the Apps should be placed .PARAMETER appKey The Key of the app inside the $sync.configs.applicationsHashtable #> param( [Windows.Controls.WrapPanel]$TargetElement, $appKey ) # Create the outer Border for the application type $border = New-Object Windows.Controls.Border $border.Style = $sync.Form.Resources.AppEntryBorderStyle $border.Tag = $appKey $border.ToolTip = $Apps.$appKey.description $border.Add_MouseLeftButtonUp({ $childCheckbox = ($this.Child | Where-Object { $_.Template.TargetType -eq [System.Windows.Controls.Checkbox] })[0] $childCheckBox.isChecked = -not $childCheckbox.IsChecked }) $border.Add_MouseEnter({ if (($sync.$($this.Tag).IsChecked) -eq $false) { $this.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallHighlightedColor") } }) $border.Add_MouseLeave({ if (($sync.$($this.Tag).IsChecked) -eq $false) { $this.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallUnselectedColor") } }) $border.Add_MouseRightButtonUp({ # Store the selected app in a global variable so it can be used in the popup $sync.appPopupSelectedApp = $this.Tag # Set the popup position to the current mouse position $sync.appPopup.PlacementTarget = $this $sync.appPopup.IsOpen = $true }) $checkBox = New-Object Windows.Controls.CheckBox $checkBox.Name = $appKey $checkbox.Style = $sync.Form.Resources.AppEntryCheckboxStyle $checkbox.Add_Checked({ Invoke-WPFSelectedAppsUpdate -type "Add" -checkbox $this $borderElement = $this.Parent $borderElement.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallSelectedColor") }) $checkbox.Add_Unchecked({ Invoke-WPFSelectedAppsUpdate -type "Remove" -checkbox $this $borderElement = $this.Parent $borderElement.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "AppInstallUnselectedColor") }) # Create the TextBlock for the application name $appName = New-Object Windows.Controls.TextBlock $appName.Style = $sync.Form.Resources.AppEntryNameStyle $appName.Text = $Apps.$appKey.content # Add the name to the Checkbox $checkBox.Content = $appName # Add accessibility properties to make the elements screen reader friendly $checkBox.SetValue([Windows.Automation.AutomationProperties]::NameProperty, $Apps.$appKey.content) $border.SetValue([Windows.Automation.AutomationProperties]::NameProperty, $Apps.$appKey.content) $border.Child = $checkBox # Add the border to the corresponding Category $TargetElement.Children.Add($border) | Out-Null return $checkbox } function Initialize-InstallCategoryAppList { <# .SYNOPSIS Clears the Target Element and sets up a "Loading" message. This is done, because loading of all apps can take a bit of time in some scenarios Iterates through all Categories and Apps and adds them to the UI Used to as part of the Install Tab UI generation .PARAMETER TargetElement The Element into which the Categories and Apps should be placed .PARAMETER Apps The Hashtable of Apps to be added to the UI The Categories are also extracted from the Apps Hashtable #> param( $TargetElement, $Apps ) # Pre-group apps by category $appsByCategory = @{} foreach ($appKey in $Apps.Keys) { $category = $Apps.$appKey.Category if (-not $appsByCategory.ContainsKey($category)) { $appsByCategory[$category] = @() } $appsByCategory[$category] += $appKey } foreach ($category in $($appsByCategory.Keys | Sort-Object)) { # Skip meta-categories that are intended for the sidebar if ($category -match "^_") { continue } # Create a container for category label + apps $categoryContainer = New-Object Windows.Controls.StackPanel $categoryContainer.Orientation = "Vertical" $categoryContainer.Margin = New-Object Windows.Thickness(0, 0, 0, 0) $categoryContainer.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch # Bind Width to the ItemsControl's ActualWidth to force full-row layout in WrapPanel $binding = New-Object Windows.Data.Binding $binding.Path = New-Object Windows.PropertyPath("ActualWidth") $binding.RelativeSource = New-Object Windows.Data.RelativeSource([Windows.Data.RelativeSourceMode]::FindAncestor, [Windows.Controls.ItemsControl], 1) [void][Windows.Data.BindingOperations]::SetBinding($categoryContainer, [Windows.FrameworkElement]::WidthProperty, $binding) # Add category label to container $toggleButton = New-Object Windows.Controls.Label $toggleButton.Content = "- $Category" $toggleButton.Tag = "CategoryToggleButton" $toggleButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize") $toggleButton.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily") $toggleButton.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "LabelboxForegroundColor") $toggleButton.Cursor = [System.Windows.Input.Cursors]::Hand $toggleButton.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch $sync.$Category = $toggleButton # Add click handler to toggle category visibility $toggleButton.Add_MouseLeftButtonUp({ param($sender, $e) # Find the parent StackPanel (categoryContainer) $categoryContainer = $sender.Parent if ($categoryContainer -and $categoryContainer.Children.Count -ge 2) { # The WrapPanel is the second child $wrapPanel = $categoryContainer.Children[1] # Toggle visibility if ($wrapPanel.Visibility -eq [Windows.Visibility]::Visible) { $wrapPanel.Visibility = [Windows.Visibility]::Collapsed # Change - to + $sender.Content = $sender.Content -replace "^- ", "+ " } else { $wrapPanel.Visibility = [Windows.Visibility]::Visible # Change + to - $sender.Content = $sender.Content -replace "^\+ ", "- " } } }) $null = $categoryContainer.Children.Add($toggleButton) # Add wrap panel for apps to container $wrapPanel = New-Object Windows.Controls.WrapPanel $wrapPanel.Orientation = "Horizontal" $wrapPanel.HorizontalAlignment = "Left" $wrapPanel.VerticalAlignment = "Top" $wrapPanel.Margin = New-Object Windows.Thickness(0, 0, 0, 0) $wrapPanel.Visibility = [Windows.Visibility]::Visible $wrapPanel.Tag = "CategoryWrapPanel_$category" $null = $categoryContainer.Children.Add($wrapPanel) # Add the entire category container to the target element $null = $TargetElement.Items.Add($categoryContainer) # Add apps to the wrap panel $appsByCategory[$category] | Sort-Object | ForEach-Object { $sync.$_ = $(Initialize-InstallAppEntry -TargetElement $wrapPanel -AppKey $_) } } } function Install-WinUtilChoco { <# .SYNOPSIS Installs Chocolatey if it is not already installed #> if ((Test-WinUtilPackageManager -choco) -eq "installed") { return } Write-Host "Chocolatey is not installed, installing now." Invoke-WebRequest -Uri https://community.chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression } function Install-WinUtilProgramChoco { <# .SYNOPSIS Manages the installation or uninstallation of a list of Chocolatey packages. .PARAMETER Programs A string array containing the programs to be installed or uninstalled. .PARAMETER Action Specifies the action to perform: "Install" or "Uninstall". The default value is "Install". .DESCRIPTION This function processes a list of programs to be managed using Chocolatey. Depending on the specified action, it either installs or uninstalls each program in the list, updating the taskbar progress accordingly. After all operations are completed, temporary output files are cleaned up. .EXAMPLE Install-WinUtilProgramChoco -Programs @("7zip","chrome") -Action "Uninstall" #> param( [Parameter(Mandatory, Position = 0)] [string[]]$Programs, [Parameter(Position = 1)] [String]$Action = "Install" ) function Initialize-OutputFile { <# .SYNOPSIS Initializes an output file by removing any existing file and creating a new, empty file at the specified path. .PARAMETER filePath The full path to the file to be initialized. .DESCRIPTION This function ensures that the specified file is reset by removing any existing file at the provided path and then creating a new, empty file. It is useful when preparing a log or output file for subsequent operations. .EXAMPLE Initialize-OutputFile -filePath "C:\temp\output.txt" #> param ($filePath) Remove-Item -Path $filePath -Force -ErrorAction SilentlyContinue New-Item -ItemType File -Path $filePath | Out-Null } function Invoke-ChocoCommand { <# .SYNOPSIS Executes a Chocolatey command with the specified arguments and returns the exit code. .PARAMETER arguments The arguments to be passed to the Chocolatey command. .DESCRIPTION This function runs a specified Chocolatey command by passing the provided arguments to the `choco` executable. It waits for the process to complete and then returns the exit code, allowing the caller to determine success or failure based on the exit code. .RETURNS [int] The exit code of the Chocolatey command. .EXAMPLE $exitCode = Invoke-ChocoCommand -arguments "install 7zip -y" #> param ($arguments) return (Start-Process -FilePath "choco" -ArgumentList $arguments -Wait -PassThru).ExitCode } function Test-UpgradeNeeded { <# .SYNOPSIS Checks if an upgrade is needed for a Chocolatey package based on the content of a log file. .PARAMETER filePath The path to the log file that contains the output of a Chocolatey install command. .DESCRIPTION This function reads the specified log file and checks for keywords that indicate whether an upgrade is needed. It returns a boolean value indicating whether the terms "reinstall" or "already installed" are present, which suggests that the package might need an upgrade. .RETURNS [bool] True if the log file indicates that an upgrade is needed; otherwise, false. .EXAMPLE $isUpgradeNeeded = Test-UpgradeNeeded -filePath "C:\temp\install-output.txt" #> param ($filePath) return Get-Content -Path $filePath | Select-String -Pattern "reinstall|already installed" -Quiet } function Update-TaskbarProgress { <# .SYNOPSIS Updates the taskbar progress based on the current installation progress. .PARAMETER currentIndex The current index of the program being installed or uninstalled. .PARAMETER totalPrograms The total number of programs to be installed or uninstalled. .DESCRIPTION This function calculates the progress of the installation or uninstallation process and updates the taskbar accordingly. The taskbar is set to "Normal" if all programs have been processed, otherwise, it is set to "Error" as a placeholder. .EXAMPLE Update-TaskbarProgress -currentIndex 3 -totalPrograms 10 #> param ( [int]$currentIndex, [int]$totalPrograms ) $progressState = if ($currentIndex -eq $totalPrograms) { "Normal" } else { "Error" } $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state $progressState -value ($currentIndex / $totalPrograms) }) } function Install-ChocoPackage { <# .SYNOPSIS Installs a Chocolatey package and optionally upgrades it if needed. .PARAMETER Program A string containing the name of the Chocolatey package to be installed. .PARAMETER currentIndex The current index of the program in the list of programs to be managed. .PARAMETER totalPrograms The total number of programs to be installed. .DESCRIPTION This function installs a Chocolatey package by running the `choco install` command. If the installation output indicates that an upgrade might be needed, the function will attempt to upgrade the package. The taskbar progress is updated after each package is processed. .EXAMPLE Install-ChocoPackage -Program $Program -currentIndex 0 -totalPrograms 5 #> param ( [string]$Program, [int]$currentIndex, [int]$totalPrograms ) $installOutputFile = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt" Initialize-OutputFile $installOutputFile Write-Host "Starting installation of $Program with Chocolatey." try { $installStatusCode = Invoke-ChocoCommand "install $Program -y --log-file $installOutputFile" if ($installStatusCode -eq 0) { if (Test-UpgradeNeeded $installOutputFile) { $upgradeStatusCode = Invoke-ChocoCommand "upgrade $Program -y" Write-Host "$Program was" $(if ($upgradeStatusCode -eq 0) { "upgraded successfully." } else { "not upgraded." }) } else { Write-Host "$Program installed successfully." } } else { Write-Host "Failed to install $Program." } } catch { Write-Host "Failed to install $Program due to an error: $_" } finally { Update-TaskbarProgress $currentIndex $totalPrograms } } function Uninstall-ChocoPackage { <# .SYNOPSIS Uninstalls a Chocolatey package and any related metapackages. .PARAMETER Program A string containing the name of the Chocolatey package to be uninstalled. .PARAMETER currentIndex The current index of the program in the list of programs to be managed. .PARAMETER totalPrograms The total number of programs to be uninstalled. .DESCRIPTION This function uninstalls a Chocolatey package and any related metapackages (e.g., .install or .portable variants). It updates the taskbar progress after processing each package. .EXAMPLE Uninstall-ChocoPackage -Program $Program -currentIndex 0 -totalPrograms 5 #> param ( [string]$Program, [int]$currentIndex, [int]$totalPrograms ) $uninstallOutputFile = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt" Initialize-OutputFile $uninstallOutputFile Write-Host "Searching for metapackages of $Program (.install or .portable)" $chocoPackages = ((choco list | Select-String -Pattern "$Program(\.install|\.portable)?").Matches.Value) -join " " if ($chocoPackages) { Write-Host "Starting uninstallation of $chocoPackages with Chocolatey." try { $uninstallStatusCode = Invoke-ChocoCommand "uninstall $chocoPackages -y" Write-Host "$Program" $(if ($uninstallStatusCode -eq 0) { "uninstalled successfully." } else { "failed to uninstall." }) } catch { Write-Host "Failed to uninstall $Program due to an error: $_" } finally { Update-TaskbarProgress $currentIndex $totalPrograms } } else { Write-Host "$Program is not installed." } } $totalPrograms = $Programs.Count if ($totalPrograms -le 0) { throw "Parameter 'Programs' must have at least one item." } Write-Host "===========================================" Write-Host "-- Configuring Chocolatey packages ---" Write-Host "===========================================" for ($currentIndex = 0; $currentIndex -lt $totalPrograms; $currentIndex++) { $Program = $Programs[$currentIndex] Set-WinUtilProgressBar -label "$Action $($Program)" -percent ($currentIndex / $totalPrograms * 100) $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -value ($currentIndex / $totalPrograms) }) switch ($Action) { "Install" { Install-ChocoPackage -Program $Program -currentIndex $currentIndex -totalPrograms $totalPrograms } "Uninstall" { Uninstall-ChocoPackage -Program $Program -currentIndex $currentIndex -totalPrograms $totalPrograms } default { throw "Invalid action parameter value: '$Action'." } } } Set-WinUtilProgressBar -label "$($Action)ation done" -percent 100 # Cleanup Output Files $outputFiles = @("$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt", "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt") foreach ($filePath in $outputFiles) { Remove-Item -Path $filePath -Force -ErrorAction SilentlyContinue } } Function Install-WinUtilProgramWinget { <# .SYNOPSIS Runs the designated action on the provided programs using Winget .PARAMETER Programs A list of programs to process .PARAMETER action The action to perform on the programs, can be either 'Install' or 'Uninstall' .NOTES The triple quotes are required any time you need a " in a normal script block. The winget Return codes are documented here: https://github.com/microsoft/winget-cli/blob/master/doc/windows/package-actionr/winget/returnCodes.md #> param( [Parameter(Mandatory, Position = 0)]$Programs, [Parameter(Mandatory, Position = 1)] [ValidateSet("Install", "Uninstall")] [String]$Action ) Function Invoke-Winget { <# .SYNOPSIS Invokes the winget.exe with the provided arguments and return the exit code .PARAMETER wingetId The Id of the Program that Winget should Install/Uninstall .NOTES Invoke Winget uses the public variable $Action defined outside the function to determine if a Program should be installed or removed #> param ( [string]$wingetId ) $commonArguments = "--id $wingetId --silent" $arguments = if ($Action -eq "Install") { "install $commonArguments --accept-source-agreements --accept-package-agreements --source winget" } else { "uninstall $commonArguments --source winget" } $processParams = @{ FilePath = "winget" ArgumentList = $arguments Wait = $true PassThru = $true NoNewWindow = $true } return (Start-Process @processParams).ExitCode } Function Invoke-Install { <# .SYNOPSIS Contains the Install Logic and return code handling from winget .PARAMETER Program The Winget ID of the Program that should be installed #> param ( [string]$Program ) $status = Invoke-Winget -wingetId $Program if ($status -eq 0) { Write-Host "$($Program) installed successfully." return $true } elseif ($status -eq -1978335189) { Write-Host "$($Program) No applicable update found" return $true } Write-Host "Failed to install $($Program)." return $false } Function Invoke-Uninstall { <# .SYNOPSIS Contains the Uninstall Logic and return code handling from winget .PARAMETER Program The Winget ID of the Program that should be uninstalled #> param ( [psobject]$Program ) try { $status = Invoke-Winget -wingetId $Program if ($status -eq 0) { Write-Host "$($Program) uninstalled successfully." return $true } else { Write-Host "Failed to uninstall $($Program)." return $false } } catch { Write-Host "Failed to uninstall $($Program) due to an error: $_" return $false } } $count = $Programs.Count $failedPackages = @() Write-Host "===========================================" Write-Host "-- Configuring winget packages ---" Write-Host "===========================================" for ($i = 0; $i -lt $count; $i++) { $Program = $Programs[$i] $result = $false Set-WinUtilProgressBar -label "$Action $($Program)" -percent ($i / $count * 100) $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -value ($i / $count) }) $result = switch ($Action) { "Install" { Invoke-Install -Program $Program } "Uninstall" { Invoke-Uninstall -Program $Program } default { throw "[Install-WinUtilProgramWinget] Invalid action: $Action" } } if (-not $result) { $failedPackages += $Program } } Set-WinUtilProgressBar -label "$($Action)ation done" -percent 100 return $failedPackages } function Install-WinUtilWinget { <# .SYNOPSIS Installs Winget if not already installed. .DESCRIPTION installs winget if needed #> if ((Test-WinUtilPackageManager -winget) -eq "installed") { return } Write-Host "Winget is not Installed. Installing." -ForegroundColor Red Set-PSRepository -Name PSGallery -InstallationPolicy Trusted Install-PackageProvider -Name NuGet -Force Install-Module Microsoft.WinGet.Client -Force Import-Module Microsoft.WinGet.Client Repair-WinGetPackageManager } function Invoke-WinUtilAssets { param ( $type, $Size, [switch]$render ) # Create the Viewbox and set its size $LogoViewbox = New-Object Windows.Controls.Viewbox $LogoViewbox.Width = $Size $LogoViewbox.Height = $Size # Create a Canvas to hold the paths $canvas = New-Object Windows.Controls.Canvas $canvas.Width = 100 $canvas.Height = 100 # Define a scale factor for the content inside the Canvas $scaleFactor = $Size / 100 # Apply a scale transform to the Canvas content $scaleTransform = New-Object Windows.Media.ScaleTransform($scaleFactor, $scaleFactor) $canvas.LayoutTransform = $scaleTransform switch ($type) { 'logo' { $LogoPathData1 = @" M 18.00,14.00 C 18.00,14.00 45.00,27.74 45.00,27.74 45.00,27.74 57.40,34.63 57.40,34.63 57.40,34.63 59.00,43.00 59.00,43.00 59.00,43.00 59.00,83.00 59.00,83.00 55.35,81.66 46.99,77.79 44.72,74.79 41.17,70.10 42.01,59.80 42.00,54.00 42.00,51.62 42.20,48.29 40.98,46.21 38.34,41.74 25.78,38.60 21.28,33.79 16.81,29.02 18.00,20.20 18.00,14.00 Z "@ $LogoPath1 = New-Object Windows.Shapes.Path $LogoPath1.Data = [Windows.Media.Geometry]::Parse($LogoPathData1) $LogoPath1.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#0567ff") $LogoPathData2 = @" M 107.00,14.00 C 109.01,19.06 108.93,30.37 104.66,34.21 100.47,37.98 86.38,43.10 84.60,47.21 83.94,48.74 84.01,51.32 84.00,53.00 83.97,57.04 84.46,68.90 83.26,72.00 81.06,77.70 72.54,81.42 67.00,83.00 67.00,83.00 67.00,43.00 67.00,43.00 67.00,43.00 67.99,35.63 67.99,35.63 67.99,35.63 80.00,28.26 80.00,28.26 80.00,28.26 107.00,14.00 107.00,14.00 Z "@ $LogoPath2 = New-Object Windows.Shapes.Path $LogoPath2.Data = [Windows.Media.Geometry]::Parse($LogoPathData2) $LogoPath2.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#0567ff") $LogoPathData3 = @" M 19.00,46.00 C 21.36,47.14 28.67,50.71 30.01,52.63 31.17,54.30 30.99,57.04 31.00,59.00 31.04,65.41 30.35,72.16 33.56,78.00 38.19,86.45 46.10,89.04 54.00,93.31 56.55,94.69 60.10,97.20 63.00,97.22 65.50,97.24 68.77,95.36 71.00,94.25 76.42,91.55 84.51,87.78 88.82,83.68 94.56,78.20 95.96,70.59 96.00,63.00 96.01,60.24 95.59,54.63 97.02,52.39 98.80,49.60 103.95,47.87 107.00,47.00 107.00,47.00 107.00,67.00 107.00,67.00 106.90,87.69 96.10,93.85 80.00,103.00 76.51,104.98 66.66,110.67 63.00,110.52 60.33,110.41 55.55,107.53 53.00,106.25 46.21,102.83 36.63,98.57 31.04,93.68 16.88,81.28 19.00,62.88 19.00,46.00 Z "@ $LogoPath3 = New-Object Windows.Shapes.Path $LogoPath3.Data = [Windows.Media.Geometry]::Parse($LogoPathData3) $LogoPath3.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#a3a4a6") $canvas.Children.Add($LogoPath1) | Out-Null $canvas.Children.Add($LogoPath2) | Out-Null $canvas.Children.Add($LogoPath3) | Out-Null } 'checkmark' { $canvas.Width = 512 $canvas.Height = 512 $scaleFactor = $Size / 2.54 $scaleTransform = New-Object Windows.Media.ScaleTransform($scaleFactor, $scaleFactor) $canvas.LayoutTransform = $scaleTransform # Define the circle path $circlePathData = "M 1.27,0 A 1.27,1.27 0 1,0 1.27,2.54 A 1.27,1.27 0 1,0 1.27,0" $circlePath = New-Object Windows.Shapes.Path $circlePath.Data = [Windows.Media.Geometry]::Parse($circlePathData) $circlePath.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#39ba00") # Define the checkmark path $checkmarkPathData = "M 0.873 1.89 L 0.41 1.391 A 0.17 0.17 0 0 1 0.418 1.151 A 0.17 0.17 0 0 1 0.658 1.16 L 1.016 1.543 L 1.583 1.013 A 0.17 0.17 0 0 1 1.599 1 L 1.865 0.751 A 0.17 0.17 0 0 1 2.105 0.759 A 0.17 0.17 0 0 1 2.097 0.999 L 1.282 1.759 L 0.999 2.022 L 0.874 1.888 Z" $checkmarkPath = New-Object Windows.Shapes.Path $checkmarkPath.Data = [Windows.Media.Geometry]::Parse($checkmarkPathData) $checkmarkPath.Fill = [Windows.Media.Brushes]::White # Add the paths to the Canvas $canvas.Children.Add($circlePath) | Out-Null $canvas.Children.Add($checkmarkPath) | Out-Null } 'warning' { $canvas.Width = 512 $canvas.Height = 512 # Define a scale factor for the content inside the Canvas $scaleFactor = $Size / 512 # Adjust scaling based on the canvas size $scaleTransform = New-Object Windows.Media.ScaleTransform($scaleFactor, $scaleFactor) $canvas.LayoutTransform = $scaleTransform # Define the circle path $circlePathData = "M 256,0 A 256,256 0 1,0 256,512 A 256,256 0 1,0 256,0" $circlePath = New-Object Windows.Shapes.Path $circlePath.Data = [Windows.Media.Geometry]::Parse($circlePathData) $circlePath.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#f41b43") # Define the exclamation mark path $exclamationPathData = "M 256 307.2 A 35.89 35.89 0 0 1 220.14 272.74 L 215.41 153.3 A 35.89 35.89 0 0 1 251.27 116 H 260.73 A 35.89 35.89 0 0 1 296.59 153.3 L 291.86 272.74 A 35.89 35.89 0 0 1 256 307.2 Z" $exclamationPath = New-Object Windows.Shapes.Path $exclamationPath.Data = [Windows.Media.Geometry]::Parse($exclamationPathData) $exclamationPath.Fill = [Windows.Media.Brushes]::White # Get the bounds of the exclamation mark path $exclamationBounds = $exclamationPath.Data.Bounds # Calculate the center position for the exclamation mark path $exclamationCenterX = ($canvas.Width - $exclamationBounds.Width) / 2 - $exclamationBounds.X $exclamationPath.SetValue([Windows.Controls.Canvas]::LeftProperty, $exclamationCenterX) # Define the rounded rectangle at the bottom (dot of exclamation mark) $roundedRectangle = New-Object Windows.Shapes.Rectangle $roundedRectangle.Width = 80 $roundedRectangle.Height = 80 $roundedRectangle.RadiusX = 30 $roundedRectangle.RadiusY = 30 $roundedRectangle.Fill = [Windows.Media.Brushes]::White # Calculate the center position for the rounded rectangle $centerX = ($canvas.Width - $roundedRectangle.Width) / 2 $roundedRectangle.SetValue([Windows.Controls.Canvas]::LeftProperty, $centerX) $roundedRectangle.SetValue([Windows.Controls.Canvas]::TopProperty, 324.34) # Add the paths to the Canvas $canvas.Children.Add($circlePath) | Out-Null $canvas.Children.Add($exclamationPath) | Out-Null $canvas.Children.Add($roundedRectangle) | Out-Null } default { Write-Host "Invalid type: $type" } } # Add the Canvas to the Viewbox $LogoViewbox.Child = $canvas if ($render) { # Measure and arrange the canvas to ensure proper rendering $canvas.Measure([Windows.Size]::new($canvas.Width, $canvas.Height)) $canvas.Arrange([Windows.Rect]::new(0, 0, $canvas.Width, $canvas.Height)) $canvas.UpdateLayout() # Initialize RenderTargetBitmap correctly with dimensions $renderTargetBitmap = New-Object Windows.Media.Imaging.RenderTargetBitmap($canvas.Width, $canvas.Height, 96, 96, [Windows.Media.PixelFormats]::Pbgra32) # Render the canvas to the bitmap $renderTargetBitmap.Render($canvas) # Create a BitmapFrame from the RenderTargetBitmap $bitmapFrame = [Windows.Media.Imaging.BitmapFrame]::Create($renderTargetBitmap) # Create a PngBitmapEncoder and add the frame $bitmapEncoder = [Windows.Media.Imaging.PngBitmapEncoder]::new() $bitmapEncoder.Frames.Add($bitmapFrame) # Save to a memory stream $imageStream = New-Object System.IO.MemoryStream $bitmapEncoder.Save($imageStream) $imageStream.Position = 0 # Load the stream into a BitmapImage $bitmapImage = [Windows.Media.Imaging.BitmapImage]::new() $bitmapImage.BeginInit() $bitmapImage.StreamSource = $imageStream $bitmapImage.CacheOption = [Windows.Media.Imaging.BitmapCacheOption]::OnLoad $bitmapImage.EndInit() return $bitmapImage } else { return $LogoViewbox } } Function Invoke-WinUtilCurrentSystem { <# .SYNOPSIS Checks to see what tweaks have already been applied and what programs are installed, and checks the according boxes .EXAMPLE Get-WinUtilCheckBoxes "WPFInstall" #> param( $CheckBox ) if ($CheckBox -eq "choco") { $apps = (choco list | Select-String -Pattern "^\S+").Matches.Value $filter = Get-WinUtilVariables -Type Checkbox | Where-Object { $psitem -like "WPFInstall*" } $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter } | ForEach-Object { $dependencies = @($sync.configs.applications.$($psitem.Key).choco -split ";") if ($dependencies -in $apps) { Write-Output $psitem.name } } } if ($checkbox -eq "winget") { $originalEncoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() $Sync.InstalledPrograms = winget list -s winget | Select-Object -skip 3 | ConvertFrom-String -PropertyNames "Name", "Id", "Version", "Available" -Delimiter '\s{2,}' [Console]::OutputEncoding = $originalEncoding $filter = Get-WinUtilVariables -Type Checkbox | Where-Object { $psitem -like "WPFInstall*" } $sync.GetEnumerator() | Where-Object { $psitem.Key -in $filter } | ForEach-Object { $dependencies = @($sync.configs.applications.$($psitem.Key).winget -split ";") if ($dependencies[-1] -in $sync.InstalledPrograms.Id) { Write-Output $psitem.name } } } if ($CheckBox -eq "tweaks") { if (!(Test-Path 'HKU:\')) { $null = (New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS) } $ScheduledTasks = Get-ScheduledTask $sync.configs.tweaks | Get-Member -MemberType NoteProperty | ForEach-Object { $Config = $psitem.Name #WPFEssTweaksTele $entry = $sync.configs.tweaks.$Config $registryKeys = $entry.registry $scheduledtaskKeys = $entry.scheduledtask $serviceKeys = $entry.service $appxKeys = $entry.appx $invokeScript = $entry.InvokeScript $entryType = $entry.Type if ($registryKeys -or $scheduledtaskKeys -or $serviceKeys) { $Values = @() if ($entryType -eq "Toggle") { if (-not (Get-WinUtilToggleStatus $Config)) { $values += $False } } else { $registryMatchCount = 0 $registryTotal = 0 Foreach ($tweaks in $registryKeys) { Foreach ($tweak in $tweaks) { $registryTotal++ $regstate = $null if (Test-Path $tweak.Path) { $regstate = Get-ItemProperty -Name $tweak.Name -Path $tweak.Path -ErrorAction SilentlyContinue | Select-Object -ExpandProperty $($tweak.Name) } if ($null -eq $regstate) { switch ($tweak.DefaultState) { "true" { $regstate = $tweak.Value } "false" { $regstate = $tweak.OriginalValue } default { $regstate = $tweak.OriginalValue } } } if ($regstate -eq $tweak.Value) { $registryMatchCount++ } } } if ($registryTotal -gt 0 -and $registryMatchCount -ne $registryTotal) { $values += $False } } Foreach ($tweaks in $scheduledtaskKeys) { Foreach ($tweak in $tweaks) { $task = $ScheduledTasks | Where-Object { $($psitem.TaskPath + $psitem.TaskName) -like "\$($tweak.name)" } if ($task) { $actualValue = $task.State $expectedValue = $tweak.State if ($expectedValue -ne $actualValue) { $values += $False } } } } Foreach ($tweaks in $serviceKeys) { Foreach ($tweak in $tweaks) { $Service = Get-Service -Name $tweak.Name if ($Service) { $actualValue = $Service.StartType $expectedValue = $tweak.StartupType if ($expectedValue -ne $actualValue) { $values += $False } } } } if ($values -notcontains $false) { Write-Output $Config } } else { if ($invokeScript -or $appxKeys) { Write-Debug "Skipping $Config in Get Installed: no detectable registry, scheduled task, or service state." } } } } } function Invoke-WinUtilExplorerUpdate { <# .SYNOPSIS Refreshes the Windows Explorer #> param ( [string]$action = "refresh" ) if ($action -eq "refresh") { Invoke-WPFRunspace -DebugPreference $DebugPreference -ScriptBlock { # Define the Win32 type only if it doesn't exist if (-not ([System.Management.Automation.PSTypeName]'Win32').Type) { Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] public static extern IntPtr SendMessageTimeout( IntPtr hWnd, uint Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out IntPtr lpdwResult); } "@ } $HWND_BROADCAST = [IntPtr]0xffff $WM_SETTINGCHANGE = 0x1A $SMTO_ABORTIFHUNG = 0x2 [Win32]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [IntPtr]::Zero, "ImmersiveColorSet", $SMTO_ABORTIFHUNG, 100, [ref]([IntPtr]::Zero)) } } elseif ($action -eq "restart") { taskkill.exe /F /IM "explorer.exe" Start-Process "explorer.exe" } } function Invoke-WinUtilFeatureInstall { <# .SYNOPSIS Converts all the values from the tweaks.json and routes them to the appropriate function #> param( $CheckBox ) $x = 0 $CheckBox | ForEach-Object { if ($sync.configs.feature.$psitem.feature) { Foreach ( $feature in $sync.configs.feature.$psitem.feature ) { try { Write-Host "Installing $feature" Enable-WindowsOptionalFeature -Online -FeatureName $feature -All -NoRestart } catch { if ($psitem.Exception.Message -like "*requires elevation*") { Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?" $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Error" }) } else { Write-Warning "Unable to Install $feature due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } } } } if ($sync.configs.feature.$psitem.InvokeScript) { Foreach ( $script in $sync.configs.feature.$psitem.InvokeScript ) { try { $Scriptblock = [scriptblock]::Create($script) Write-Host "Running Script for $psitem" Invoke-Command $scriptblock -ErrorAction stop } catch { if ($psitem.Exception.Message -like "*requires elevation*") { Write-Warning "Unable to Install $feature due to permissions. Are you running as admin?" $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Error" }) } else { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Error" }) Write-Warning "Unable to Install $feature due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } } } } $X++ $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -value ($x / $CheckBox.Count) }) } } function Invoke-WinUtilFontScaling { <# .SYNOPSIS Applies UI and font scaling for accessibility .PARAMETER ScaleFactor Sets the scaling from 0.75 and 2.0. Default is 1.0 (100% - no scaling) .EXAMPLE Invoke-WinUtilFontScaling -ScaleFactor 1.25 # Applies 125% scaling #> param ( [double]$ScaleFactor = 1.0 ) # Validate if scale factor is within the range if ($ScaleFactor -lt 0.75 -or $ScaleFactor -gt 2.0) { Write-Warning "Scale factor must be between 0.75 and 2.0. Using 1.0 instead." $ScaleFactor = 1.0 } # Define an array for resources to be scaled $fontResources = @( # Fonts "FontSize", "ButtonFontSize", "HeaderFontSize", "TabButtonFontSize", "ConfigTabButtonFontSize", "IconFontSize", "SettingsIconFontSize", "CloseIconFontSize", "AppEntryFontSize", "SearchBarTextBoxFontSize", "SearchBarClearButtonFontSize", "CustomDialogFontSize", "CustomDialogFontSizeHeader", "ConfigUpdateButtonFontSize", # Buttons and UI "CheckBoxBulletDecoratorSize", "ButtonWidth", "ButtonHeight", "TabButtonWidth", "TabButtonHeight", "IconButtonSize", "AppEntryWidth", "SearchBarWidth", "SearchBarHeight", "CustomDialogWidth", "CustomDialogHeight", "CustomDialogLogoSize", "ToolTipWidth" ) # Apply scaling to each resource foreach ($resourceName in $fontResources) { try { # Get the default font size from the theme configuration $originalValue = $sync.configs.themes.shared.$resourceName if ($originalValue) { # Convert string to double since values are stored as strings $originalValue = [double]$originalValue # Calculates and applies the new font size $newValue = [math]::Round($originalValue * $ScaleFactor, 1) $sync.Form.Resources[$resourceName] = $newValue Write-Debug "Scaled $resourceName from original $originalValue to $newValue (factor: $ScaleFactor)" } } catch { Write-Warning "Failed to scale resource $resourceName : $_" } } # Update the font scaling percentage displayed on the UI if ($sync.FontScalingValue) { $percentage = [math]::Round($ScaleFactor * 100) $sync.FontScalingValue.Text = "$percentage%" } Write-Debug "Font scaling applied with factor: $ScaleFactor" } function Invoke-WinUtilGPU { $gpuInfo = Get-CimInstance Win32_VideoController # GPUs to blacklist from using Demanding Theming $lowPowerGPUs = ( "*NVIDIA GeForce*M*", "*NVIDIA GeForce*Laptop*", "*NVIDIA GeForce*GT*", "*AMD Radeon(TM)*", "*Intel(R) HD Graphics*", "*UHD*" ) foreach ($gpu in $gpuInfo) { foreach ($gpuPattern in $lowPowerGPUs) { if ($gpu.Name -like $gpuPattern) { return $false } } } return $true } function Invoke-WinUtilInstallPSProfile { if (Test-Path $Profile) { Rename-Item $Profile -NewName ($Profile + '.bak') } Start-Process pwsh -ArgumentList '-Command "irm https://github.com/ChrisTitusTech/powershell-profile/raw/main/setup.ps1 | iex"' } function Invoke-WinUtilScript { <# .SYNOPSIS Invokes the provided scriptblock. Intended for things that can't be handled with the other functions. .PARAMETER Name The name of the scriptblock being invoked .PARAMETER scriptblock The scriptblock to be invoked .EXAMPLE $Scriptblock = [scriptblock]::Create({"Write-output 'Hello World'"}) Invoke-WinUtilScript -ScriptBlock $scriptblock -Name "Hello World" #> param ( $Name, [scriptblock]$scriptblock ) try { Write-Host "Running Script for $name" Invoke-Command $scriptblock -ErrorAction Stop } catch [System.Management.Automation.CommandNotFoundException] { Write-Warning "The specified command was not found." Write-Warning $PSItem.Exception.message } catch [System.Management.Automation.RuntimeException] { Write-Warning "A runtime exception occurred." Write-Warning $PSItem.Exception.message } catch [System.Security.SecurityException] { Write-Warning "A security exception occurred." Write-Warning $PSItem.Exception.message } catch [System.UnauthorizedAccessException] { Write-Warning "Access denied. You do not have permission to perform this operation." Write-Warning $PSItem.Exception.message } catch { # Generic catch block to handle any other type of exception Write-Warning "Unable to run script for $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } } Function Invoke-WinUtilSponsors { <# .SYNOPSIS Lists Sponsors from ChrisTitusTech .DESCRIPTION Lists Sponsors from ChrisTitusTech .EXAMPLE Invoke-WinUtilSponsors .NOTES This function is used to list sponsors from ChrisTitusTech #> try { # Define the URL and headers $url = "https://github.com/sponsors/ChrisTitusTech" $headers = @{ "User-Agent" = "Chrome/58.0.3029.110" } # Fetch the webpage content try { $html = Invoke-RestMethod -Uri $url -Headers $headers } catch { Write-Output $_.Exception.Message exit } # Use regex to extract the content between "Current sponsors" and "Past sponsors" $currentSponsorsPattern = '(?s)(?<=Current sponsors).*?(?=Past sponsors)' $currentSponsorsHtml = [regex]::Match($html, $currentSponsorsPattern).Value # Use regex to extract the sponsor usernames from the alt attributes in the "Current Sponsors" section $sponsorPattern = '(?<=alt="@)[^"]+' $sponsors = [regex]::Matches($currentSponsorsHtml, $sponsorPattern) | ForEach-Object { $_.Value } # Exclude "ChrisTitusTech" from the sponsors $sponsors = $sponsors | Where-Object { $_ -ne "ChrisTitusTech" } # Return the sponsors return $sponsors } catch { Write-Error "An error occurred while fetching or processing the sponsors: $_" return $null } } function Invoke-WinUtilSSHServer { <# .SYNOPSIS Enables OpenSSH server to remote into your windows device #> # Get the latest version of OpenSSH Server $FeatureName = Get-WindowsCapability -Online | Where-Object { $_.Name -like "OpenSSH.Server*" } # Install the OpenSSH Server feature if not already installed if ($FeatureName.State -ne "Installed") { Write-Host "Enabling OpenSSH Server" Add-WindowsCapability -Online -Name $FeatureName.Name } # Sets up the OpenSSH Server service Write-Host "Starting the services" Start-Service -Name sshd Set-Service -Name sshd -StartupType Automatic # Sets up the ssh-agent service Start-Service 'ssh-agent' Set-Service -Name 'ssh-agent' -StartupType 'Automatic' # Confirm the required services are running $SSHDaemonService = Get-Service -Name sshd $SSHAgentService = Get-Service -Name 'ssh-agent' if ($SSHDaemonService.Status -eq 'Running') { Write-Host "OpenSSH Server is running." } else { try { Write-Host "OpenSSH Server is not running. Attempting to restart..." Restart-Service -Name sshd -Force Write-Host "OpenSSH Server has been restarted successfully." } catch { Write-Host "Failed to restart OpenSSH Server: $_" } } if ($SSHAgentService.Status -eq 'Running') { Write-Host "ssh-agent is running." } else { try { Write-Host "ssh-agent is not running. Attempting to restart..." Restart-Service -Name sshd -Force Write-Host "ssh-agent has been restarted successfully." } catch { Write-Host "Failed to restart ssh-agent : $_" } } #Adding Firewall rule for port 22 Write-Host "Setting up firewall rules" $firewallRule = (Get-NetFirewallRule -Name 'sshd').Enabled if ($firewallRule) { Write-Host "Firewall rule for OpenSSH Server (sshd) already exists." } else { New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 Write-Host "Firewall rule for OpenSSH Server created and enabled." } # Check for the authorized_keys file $sshFolderPath = "$env:HOMEDRIVE\$env:HOMEPATH\.ssh" $authorizedKeysPath = "$sshFolderPath\authorized_keys" if (-not (Test-Path -Path $sshFolderPath)) { Write-Host "Creating ssh directory..." New-Item -Path $sshFolderPath -ItemType Directory -Force } if (-not (Test-Path -Path $authorizedKeysPath)) { Write-Host "Creating authorized_keys file..." New-Item -Path $authorizedKeysPath -ItemType File -Force Write-Host "authorized_keys file created at $authorizedKeysPath." } else { Write-Host "authorized_keys file already exists at $authorizedKeysPath." } Write-Host "OpenSSH server was successfully enabled." Write-Host "The config file can be located at C:\ProgramData\ssh\sshd_config " Write-Host "Add your public keys to this file -> $authorizedKeysPath" } function Invoke-WinutilThemeChange { <# .SYNOPSIS Toggles between light and dark themes for a Windows utility application. .DESCRIPTION This function toggles the theme of the user interface between 'Light' and 'Dark' modes, modifying various UI elements such as colors, margins, corner radii, font families, etc. If the '-init' switch is used, it initializes the theme based on the system's current dark mode setting. .PARAMETER init A switch parameter. If set to $true, the function initializes the theme based on the system?s current dark mode setting. .EXAMPLE Invoke-WinutilThemeChange # Toggles the theme between 'Light' and 'Dark'. .EXAMPLE Invoke-WinutilThemeChange -init # Initializes the theme based on the system's dark mode and applies the shared theme. #> param ( [switch]$init = $false, [string]$theme ) function Set-WinutilTheme { <# .SYNOPSIS Applies the specified theme to the application's user interface. .DESCRIPTION This internal function applies the given theme by setting the relevant properties like colors, font families, corner radii, etc., in the UI. It uses the 'Set-ThemeResourceProperty' helper function to modify the application's resources. .PARAMETER currentTheme The name of the theme to be applied. Common values are "Light", "Dark", or "shared". #> param ( [string]$currentTheme ) function Set-ThemeResourceProperty { <# .SYNOPSIS Sets a specific UI property in the application's resources. .DESCRIPTION This helper function sets a property (e.g., color, margin, corner radius) in the application's resources, based on the provided type and value. It includes error handling to manage potential issues while setting a property. .PARAMETER Name The name of the resource property to modify (e.g., "MainBackgroundColor", "ButtonBackgroundMouseoverColor"). .PARAMETER Value The value to assign to the resource property (e.g., "#FFFFFF" for a color). .PARAMETER Type The type of the resource, such as "ColorBrush", "CornerRadius", "GridLength", or "FontFamily". #> param($Name, $Value, $Type) try { # Set the resource property based on its type $sync.Form.Resources[$Name] = switch ($Type) { "ColorBrush" { [Windows.Media.SolidColorBrush]::new($Value) } "Color" { # Convert hex string to RGB values $hexColor = $Value.TrimStart("#") $r = [Convert]::ToInt32($hexColor.Substring(0, 2), 16) $g = [Convert]::ToInt32($hexColor.Substring(2, 2), 16) $b = [Convert]::ToInt32($hexColor.Substring(4, 2), 16) [Windows.Media.Color]::FromRgb($r, $g, $b) } "CornerRadius" { [System.Windows.CornerRadius]::new($Value) } "GridLength" { [System.Windows.GridLength]::new($Value) } "Thickness" { # Parse the Thickness value (supports 1, 2, or 4 inputs) $values = $Value -split "," switch ($values.Count) { 1 { [System.Windows.Thickness]::new([double]$values[0]) } 2 { [System.Windows.Thickness]::new([double]$values[0], [double]$values[1]) } 4 { [System.Windows.Thickness]::new([double]$values[0], [double]$values[1], [double]$values[2], [double]$values[3]) } } } "FontFamily" { [Windows.Media.FontFamily]::new($Value) } "Double" { [double]$Value } default { $Value } } } catch { # Log a warning if there's an issue setting the property Write-Warning "Failed to set property $($Name): $_" } } # Retrieve all theme properties from the theme configuration $themeProperties = $sync.configs.themes.$currentTheme.PSObject.Properties foreach ($_ in $themeProperties) { # Apply properties that deal with colors if ($_.Name -like "*color*") { Set-ThemeResourceProperty -Name $_.Name -Value $_.Value -Type "ColorBrush" # For certain color properties, also set complementary values (e.g., BorderColor -> CBorderColor) This is required because e.g DropShadowEffect requires a and not a object if ($_.Name -in @("BorderColor", "ButtonBackgroundMouseoverColor")) { Set-ThemeResourceProperty -Name "C$($_.Name)" -Value $_.Value -Type "Color" } } # Apply corner radius properties elseif ($_.Name -like "*Radius*") { Set-ThemeResourceProperty -Name $_.Name -Value $_.Value -Type "CornerRadius" } # Apply row height properties elseif ($_.Name -like "*RowHeight*") { Set-ThemeResourceProperty -Name $_.Name -Value $_.Value -Type "GridLength" } # Apply thickness or margin properties elseif (($_.Name -like "*Thickness*") -or ($_.Name -like "*margin")) { Set-ThemeResourceProperty -Name $_.Name -Value $_.Value -Type "Thickness" } # Apply font family properties elseif ($_.Name -like "*FontFamily*") { Set-ThemeResourceProperty -Name $_.Name -Value $_.Value -Type "FontFamily" } # Apply any other properties as doubles (numerical values) else { Set-ThemeResourceProperty -Name $_.Name -Value $_.Value -Type "Double" } } } $LightPreferencePath = "$winutildir\LightTheme.ini" $DarkPreferencePath = "$winutildir\DarkTheme.ini" if ($init) { Set-WinutilTheme -currentTheme "shared" if (Test-Path $LightPreferencePath) { $theme = "Light" } elseif (Test-Path $DarkPreferencePath) { $theme = "Dark" } else { $theme = "Auto" } } switch ($theme) { "Auto" { $systemUsesDarkMode = Get-WinUtilToggleStatus WPFToggleDarkMode if ($systemUsesDarkMode) { Set-WinutilTheme -currentTheme "Dark" } else { Set-WinutilTheme -currentTheme "Light" } $themeButtonIcon = [char]0xF08C Remove-Item $LightPreferencePath -Force -ErrorAction SilentlyContinue Remove-Item $DarkPreferencePath -Force -ErrorAction SilentlyContinue } "Dark" { Set-WinutilTheme -currentTheme $theme $themeButtonIcon = [char]0xE708 $null = New-Item $DarkPreferencePath -Force Remove-Item $LightPreferencePath -Force -ErrorAction SilentlyContinue } "Light" { Set-WinutilTheme -currentTheme $theme $themeButtonIcon = [char]0xE706 $null = New-Item $LightPreferencePath -Force Remove-Item $DarkPreferencePath -Force -ErrorAction SilentlyContinue } } # Update the theme selector button with the appropriate icon $ThemeButton = $sync.Form.FindName("ThemeButton") $ThemeButton.Content = [string]$themeButtonIcon } function Invoke-WinUtilTweaks { <# .SYNOPSIS Invokes the function associated with each provided checkbox .PARAMETER CheckBox The checkbox to invoke .PARAMETER undo Indicates whether to undo the operation contained in the checkbox .PARAMETER KeepServiceStartup Indicates whether to override the startup of a service with the one given from WinUtil, or to keep the startup of said service, if it was changed by the user, or another program, from its default value. #> param( $CheckBox, $undo = $false, $KeepServiceStartup = $true ) Write-Debug "Tweaks: $($CheckBox)" if ($undo) { $Values = @{ Registry = "OriginalValue" ScheduledTask = "OriginalState" Service = "OriginalType" ScriptType = "UndoScript" } } else { $Values = @{ Registry = "Value" ScheduledTask = "State" Service = "StartupType" OriginalService = "OriginalType" ScriptType = "InvokeScript" } } if ($sync.configs.tweaks.$CheckBox.ScheduledTask) { $sync.configs.tweaks.$CheckBox.ScheduledTask | ForEach-Object { Write-Debug "$($psitem.Name) and state is $($psitem.$($values.ScheduledTask))" Set-WinUtilScheduledTask -Name $psitem.Name -State $psitem.$($values.ScheduledTask) } } if ($sync.configs.tweaks.$CheckBox.service) { Write-Debug "KeepServiceStartup is $KeepServiceStartup" $sync.configs.tweaks.$CheckBox.service | ForEach-Object { $changeservice = $true # The check for !($undo) is required, without it the script will throw an error for accessing unavailable member, which's the 'OriginalService' Property if ($KeepServiceStartup -AND !($undo)) { try { # Check if the service exists $service = Get-Service -Name $psitem.Name -ErrorAction Stop if (!($service.StartType.ToString() -eq $psitem.$($values.OriginalService))) { Write-Debug "Service $($service.Name) was changed in the past to $($service.StartType.ToString()) from it's original type of $($psitem.$($values.OriginalService)), will not change it to $($psitem.$($values.service))" $changeservice = $false } } catch [System.ServiceProcess.ServiceNotFoundException] { Write-Warning "Service $($psitem.Name) was not found" } } if ($changeservice) { Write-Debug "$($psitem.Name) and state is $($psitem.$($values.service))" Set-WinUtilService -Name $psitem.Name -StartupType $psitem.$($values.Service) } } } if ($sync.configs.tweaks.$CheckBox.registry) { $sync.configs.tweaks.$CheckBox.registry | ForEach-Object { Write-Debug "$($psitem.Name) and state is $($psitem.$($values.registry))" if (($psitem.Path -imatch "hku") -and !(Get-PSDrive -Name HKU -ErrorAction SilentlyContinue)) { $null = (New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS) if (Get-PSDrive -Name HKU -ErrorAction SilentlyContinue) { Write-Debug "HKU drive created successfully" } else { Write-Debug "Failed to create HKU drive" } } Set-WinUtilRegistry -Name $psitem.Name -Path $psitem.Path -Type $psitem.Type -Value $psitem.$($values.registry) } } if ($sync.configs.tweaks.$CheckBox.$($values.ScriptType)) { $sync.configs.tweaks.$CheckBox.$($values.ScriptType) | ForEach-Object { Write-Debug "$($psitem) and state is $($psitem.$($values.ScriptType))" $Scriptblock = [scriptblock]::Create($psitem) Invoke-WinUtilScript -ScriptBlock $scriptblock -Name $CheckBox } } if (!$undo) { if ($sync.configs.tweaks.$CheckBox.appx) { $sync.configs.tweaks.$CheckBox.appx | ForEach-Object { Write-Debug "UNDO $($psitem.Name)" Remove-WinUtilAPPX -Name $psitem } } } } function Invoke-WinUtilUninstallPSProfile { if (Test-Path ($Profile + '.bak')) { Remove-Item $Profile Rename-Item ($Profile + '.bak') -NewName $Profile } else { Remove-Item $Profile } Write-Host "Successfully uninstalled CTT Powershell Profile" -ForegroundColor Green } function Remove-WinUtilAPPX { <# .SYNOPSIS Removes all APPX packages that match the given name .PARAMETER Name The name of the APPX package to remove .EXAMPLE Remove-WinUtilAPPX -Name "Microsoft.Microsoft3DViewer" #> param ( $Name ) Write-Host "Removing $Name" Get-AppxPackage $Name -AllUsers | Remove-AppxPackage -AllUsers Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like $Name | Remove-AppxProvisionedPackage -Online } function Set-PackageManagerPreference { <# .SYNOPSIS Sets the currently selected package manager to global "ManagerPreference" in sync. Also persists preference across Winutil restarts via preference.ini. Reads from preference.ini if no argument sent. .PARAMETER preferredPackageManager The PackageManager that was selected. #> param( [Parameter(Position = 0, Mandatory = $false)] [PackageManagers]$preferredPackageManager ) $preferencePath = "$winutildir\preferences.ini" $oldChocoPath = "$winutildir\preferChocolatey.ini" #Try loading from file if no argument given. if ($null -eq $preferredPackageManager) { # Backwards compat for preferChocolatey.ini if (Test-Path -Path $oldChocoPath) { $preferredPackageManager = [PackageManagers]::Choco Remove-Item -Path $oldChocoPath } elseif (Test-Path -Path $preferencePath) { $potential = Get-Content -Path $preferencePath -TotalCount 1 $preferredPackageManager = [PackageManagers]$potential } else { Write-Debug "Creating new preference file, defaulting to winget." $preferredPackageManager = [PackageManagers]::Winget } } $sync["ManagerPreference"] = [PackageManagers]::$preferredPackageManager Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'" # Write preference to file to persist across restarts. Out-File -FilePath $preferencePath -InputObject $sync["ManagerPreference"] } function Set-WinUtilDNS { <# .SYNOPSIS Sets the DNS of all interfaces that are in the "Up" state. It will lookup the values from the DNS.Json file .PARAMETER DNSProvider The DNS provider to set the DNS server to .EXAMPLE Set-WinUtilDNS -DNSProvider "google" #> param($DNSProvider) if ($DNSProvider -eq "Default") { return } try { $Adapters = Get-NetAdapter | Where-Object { $_.Status -eq "Up" } Write-Host "Ensuring DNS is set to $DNSProvider on the following interfaces" Write-Host $($Adapters | Out-String) Foreach ($Adapter in $Adapters) { if ($DNSProvider -eq "DHCP") { Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses } else { Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary)", "$($sync.configs.dns.$DNSProvider.Secondary)") Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ServerAddresses ("$($sync.configs.dns.$DNSProvider.Primary6)", "$($sync.configs.dns.$DNSProvider.Secondary6)") } } } catch { Write-Warning "Unable to set DNS Provider due to an unhandled exception" Write-Warning $psitem.Exception.StackTrace } } function Set-WinUtilProgressbar { <# .SYNOPSIS This function is used to Update the Progress Bar displayed in the winutil GUI. It will be automatically hidden if the user clicks something and no process is running .PARAMETER Label The Text to be overlaid onto the Progress Bar .PARAMETER PERCENT The percentage of the Progress Bar that should be filled (0-100) #> param( [string]$Label, [ValidateRange(0, 100)] [int]$Percent ) $sync.form.Dispatcher.Invoke([action] { $sync.progressBarTextBlock.Text = $label }) $sync.form.Dispatcher.Invoke([action] { $sync.progressBarTextBlock.ToolTip = $label }) if ($percent -lt 5 ) { $percent = 5 # Ensure the progress bar is not empty, as it looks weird } $sync.form.Dispatcher.Invoke([action] { $sync.ProgressBar.Value = $percent }) } function Set-WinUtilRegistry { <# .SYNOPSIS Modifies the registry based on the given inputs .PARAMETER Name The name of the key to modify .PARAMETER Path The path to the key .PARAMETER Type The type of value to set the key to .PARAMETER Value The value to set the key to .EXAMPLE Set-WinUtilRegistry -Name "PublishUserActivities" -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Type "DWord" -Value "0" #> param ( $Name, $Path, $Type, $Value ) try { if (!(Test-Path 'HKU:\')) { New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS } If (!(Test-Path $Path)) { Write-Host "$Path was not found, Creating..." New-Item -Path $Path -Force -ErrorAction Stop | Out-Null } if ($Value -ne "") { Write-Host "Set $Path\$Name to $Value" Set-ItemProperty -Path $Path -Name $Name -Type $Type -Value $Value -Force -ErrorAction Stop | Out-Null } else { Write-Host "Remove $Path\$Name" Remove-ItemProperty -Path $Path -Name $Name -Force -ErrorAction Stop | Out-Null } } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord } catch [System.UnauthorizedAccessException] { Write-Warning $psitem.Exception.Message } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } } function Set-WinUtilScheduledTask { <# .SYNOPSIS Enables/Disables the provided Scheduled Task .PARAMETER Name The path to the Scheduled Task .PARAMETER State The State to set the Task to .EXAMPLE Set-WinUtilScheduledTask -Name "Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" -State "Disabled" #> param ( $Name, $State ) try { if ($State -eq "Disabled") { Write-Host "Disabling Scheduled Task $Name" Disable-ScheduledTask -TaskName $Name -ErrorAction Stop } if ($State -eq "Enabled") { Write-Host "Enabling Scheduled Task $Name" Enable-ScheduledTask -TaskName $Name -ErrorAction Stop } } catch [System.Exception] { if ($psitem.Exception.Message -like "*The system cannot find the file specified*") { Write-Warning "Scheduled Task $name was not Found" } else { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.Message } } catch { Write-Warning "Unable to run script for $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } } Function Set-WinUtilService { <# .SYNOPSIS Changes the startup type of the given service .PARAMETER Name The name of the service to modify .PARAMETER StartupType The startup type to set the service to .EXAMPLE Set-WinUtilService -Name "HomeGroupListener" -StartupType "Manual" #> param ( $Name, $StartupType ) try { Write-Host "Setting Service $Name to $StartupType" # Check if the service exists $service = Get-Service -Name $Name -ErrorAction Stop # Service exists, proceed with changing properties -- while handling auto delayed start for PWSH 5 if (($PSVersionTable.PSVersion.Major -lt 7) -and ($StartupType -eq "AutomaticDelayedStart")) { sc.exe config $Name start=delayed-auto } else { $service | Set-Service -StartupType $StartupType -ErrorAction Stop } } catch [System.ServiceProcess.ServiceNotFoundException] { Write-Warning "Service $Name was not found" } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $_.Exception.Message } } function Set-WinUtilTaskbaritem { <# .SYNOPSIS Modifies the Taskbaritem of the WPF Form .PARAMETER value Value can be between 0 and 1, 0 being no progress done yet and 1 being fully completed Value does not affect item without setting the state to 'Normal', 'Error' or 'Paused' Set-WinUtilTaskbaritem -value 0.5 .PARAMETER state State can be 'None' > No progress, 'Indeterminate' > inf. loading gray, 'Normal' > Gray, 'Error' > Red, 'Paused' > Yellow no value needed: - Set-WinUtilTaskbaritem -state "None" - Set-WinUtilTaskbaritem -state "Indeterminate" value needed: - Set-WinUtilTaskbaritem -state "Error" - Set-WinUtilTaskbaritem -state "Normal" - Set-WinUtilTaskbaritem -state "Paused" .PARAMETER overlay Overlay icon to display on the taskbar item, there are the presets 'None', 'logo' and 'checkmark' or you can specify a path/link to an image file. CTT logo preset: - Set-WinUtilTaskbaritem -overlay "logo" Checkmark preset: - Set-WinUtilTaskbaritem -overlay "checkmark" Warning preset: - Set-WinUtilTaskbaritem -overlay "warning" No overlay: - Set-WinUtilTaskbaritem -overlay "None" Custom icon (needs to be supported by WPF): - Set-WinUtilTaskbaritem -overlay "C:\path\to\icon.png" .PARAMETER description Description to display on the taskbar item preview Set-WinUtilTaskbaritem -description "This is a description" #> param ( [string]$state, [double]$value, [string]$overlay, [string]$description ) if ($value) { $sync["Form"].taskbarItemInfo.ProgressValue = $value } if ($state) { switch ($state) { 'None' { $sync["Form"].taskbarItemInfo.ProgressState = "None" } 'Indeterminate' { $sync["Form"].taskbarItemInfo.ProgressState = "Indeterminate" } 'Normal' { $sync["Form"].taskbarItemInfo.ProgressState = "Normal" } 'Error' { $sync["Form"].taskbarItemInfo.ProgressState = "Error" } 'Paused' { $sync["Form"].taskbarItemInfo.ProgressState = "Paused" } default { throw "[Set-WinUtilTaskbarItem] Invalid state" } } } if ($overlay) { switch ($overlay) { 'logo' { $sync["Form"].taskbarItemInfo.Overlay = $sync["logorender"] } 'checkmark' { $sync["Form"].taskbarItemInfo.Overlay = $sync["checkmarkrender"] } 'warning' { $sync["Form"].taskbarItemInfo.Overlay = $sync["warningrender"] } 'None' { $sync["Form"].taskbarItemInfo.Overlay = $null } default { if (Test-Path $overlay) { $sync["Form"].taskbarItemInfo.Overlay = $overlay } } } } if ($description) { $sync["Form"].taskbarItemInfo.Description = $description } } function Show-CustomDialog { <# .SYNOPSIS Displays a custom dialog box with an image, heading, message, and an OK button. .DESCRIPTION This function creates a custom dialog box with the specified message and additional elements such as an image, heading, and an OK button. The dialog box is designed with a green border, rounded corners, and a black background. .PARAMETER Title The Title to use for the dialog window's Title Bar, this will not be visible by the user, as window styling is set to None. .PARAMETER Message The message to be displayed in the dialog box. .PARAMETER Width The width of the custom dialog window. .PARAMETER Height The height of the custom dialog window. .PARAMETER FontSize The Font Size of message shown inside custom dialog window. .PARAMETER HeaderFontSize The Font Size for the Header of custom dialog window. .PARAMETER LogoSize The Size of the Logo used inside the custom dialog window. .PARAMETER ForegroundColor The Foreground Color of dialog window title & message. .PARAMETER BackgroundColor The Background Color of dialog window. .PARAMETER BorderColor The Color for dialog window border. .PARAMETER ButtonBackgroundColor The Background Color for Buttons in dialog window. .PARAMETER ButtonForegroundColor The Foreground Color for Buttons in dialog window. .PARAMETER ShadowColor The Color used when creating the Drop-down Shadow effect for dialog window. .PARAMETER LogoColor The Color of WinUtil Text found next to WinUtil's Logo inside dialog window. .PARAMETER LinkForegroundColor The Foreground Color for Links inside dialog window. .PARAMETER LinkHoverForegroundColor The Foreground Color for Links when the mouse pointer hovers over them inside dialog window. .PARAMETER EnableScroll A flag indicating whether to enable scrolling if the content exceeds the window size. .EXAMPLE Show-CustomDialog -Title "My Custom Dialog" -Message "This is a custom dialog with a message and an image above." -Width 300 -Height 200 Makes a new Custom Dialog with the title 'My Custom Dialog' and a message 'This is a custom dialog with a message and an image above.', with dimensions of 300 by 200 pixels. Other styling options are grabbed from '$sync.Form.Resources' global variable. .EXAMPLE $foregroundColor = New-Object System.Windows.Media.SolidColorBrush("#0088e5") $backgroundColor = New-Object System.Windows.Media.SolidColorBrush("#1e1e1e") $linkForegroundColor = New-Object System.Windows.Media.SolidColorBrush("#0088e5") $linkHoverForegroundColor = New-Object System.Windows.Media.SolidColorBrush("#005289") Show-CustomDialog -Title "My Custom Dialog" -Message "This is a custom dialog with a message and an image above." -Width 300 -Height 200 -ForegroundColor $foregroundColor -BackgroundColor $backgroundColor -LinkForegroundColor $linkForegroundColor -LinkHoverForegroundColor $linkHoverForegroundColor Makes a new Custom Dialog with the title 'My Custom Dialog' and a message 'This is a custom dialog with a message and an image above.', with dimensions of 300 by 200 pixels, with a link foreground (and general foreground) colors of '#0088e5', background color of '#1e1e1e', and Link Color on Hover of '005289', all of which are in Hexadecimal (the '#' Symbol is required by SolidColorBrush Constructor). Other styling options are grabbed from '$sync.Form.Resources' global variable. #> param( [string]$Title, [string]$Message, [int]$Width = $sync.Form.Resources.CustomDialogWidth, [int]$Height = $sync.Form.Resources.CustomDialogHeight, [System.Windows.Media.FontFamily]$FontFamily = $sync.Form.Resources.FontFamily, [int]$FontSize = $sync.Form.Resources.CustomDialogFontSize, [int]$HeaderFontSize = $sync.Form.Resources.CustomDialogFontSizeHeader, [int]$LogoSize = $sync.Form.Resources.CustomDialogLogoSize, [System.Windows.Media.Color]$ShadowColor = "#AAAAAAAA", [System.Windows.Media.SolidColorBrush]$LogoColor = $sync.Form.Resources.LabelboxForegroundColor, [System.Windows.Media.SolidColorBrush]$BorderColor = $sync.Form.Resources.BorderColor, [System.Windows.Media.SolidColorBrush]$ForegroundColor = $sync.Form.Resources.MainForegroundColor, [System.Windows.Media.SolidColorBrush]$BackgroundColor = $sync.Form.Resources.MainBackgroundColor, [System.Windows.Media.SolidColorBrush]$ButtonForegroundColor = $sync.Form.Resources.ButtonInstallForegroundColor, [System.Windows.Media.SolidColorBrush]$ButtonBackgroundColor = $sync.Form.Resources.ButtonInstallBackgroundColor, [System.Windows.Media.SolidColorBrush]$LinkForegroundColor = $sync.Form.Resources.LinkForegroundColor, [System.Windows.Media.SolidColorBrush]$LinkHoverForegroundColor = $sync.Form.Resources.LinkHoverForegroundColor, [bool]$EnableScroll = $false ) # Create a custom dialog window $dialog = New-Object Windows.Window $dialog.Title = $Title $dialog.Height = $Height $dialog.Width = $Width $dialog.Margin = New-Object Windows.Thickness(10) # Add margin to the entire dialog box $dialog.WindowStyle = [Windows.WindowStyle]::None # Remove title bar and window controls $dialog.ResizeMode = [Windows.ResizeMode]::NoResize # Disable resizing $dialog.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen # Center the window $dialog.Foreground = $ForegroundColor $dialog.Background = $BackgroundColor $dialog.FontFamily = $FontFamily $dialog.FontSize = $FontSize # Create a Border for the green edge with rounded corners $border = New-Object Windows.Controls.Border $border.BorderBrush = $BorderColor $border.BorderThickness = New-Object Windows.Thickness(1) # Adjust border thickness as needed $border.CornerRadius = New-Object Windows.CornerRadius(10) # Adjust the radius for rounded corners # Create a drop shadow effect $dropShadow = New-Object Windows.Media.Effects.DropShadowEffect $dropShadow.Color = $shadowColor $dropShadow.Direction = 270 $dropShadow.ShadowDepth = 5 $dropShadow.BlurRadius = 10 # Apply drop shadow effect to the border $dialog.Effect = $dropShadow $dialog.Content = $border # Create a grid for layout inside the Border $grid = New-Object Windows.Controls.Grid $border.Child = $grid # Uncomment the following line to show gridlines #$grid.ShowGridLines = $true # Add the following line to set the background color of the grid $grid.Background = [Windows.Media.Brushes]::Transparent # Add the following line to make the Grid stretch $grid.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch $grid.VerticalAlignment = [Windows.VerticalAlignment]::Stretch # Add the following line to make the Border stretch $border.HorizontalAlignment = [Windows.HorizontalAlignment]::Stretch $border.VerticalAlignment = [Windows.VerticalAlignment]::Stretch # Set up Row Definitions $row0 = New-Object Windows.Controls.RowDefinition $row0.Height = [Windows.GridLength]::Auto $row1 = New-Object Windows.Controls.RowDefinition $row1.Height = [Windows.GridLength]::new(1, [Windows.GridUnitType]::Star) $row2 = New-Object Windows.Controls.RowDefinition $row2.Height = [Windows.GridLength]::Auto # Add Row Definitions to Grid $grid.RowDefinitions.Add($row0) $grid.RowDefinitions.Add($row1) $grid.RowDefinitions.Add($row2) # Add StackPanel for horizontal layout with margins $stackPanel = New-Object Windows.Controls.StackPanel $stackPanel.Margin = New-Object Windows.Thickness(10) # Add margins around the stack panel $stackPanel.Orientation = [Windows.Controls.Orientation]::Horizontal $stackPanel.HorizontalAlignment = [Windows.HorizontalAlignment]::Left # Align to the left $stackPanel.VerticalAlignment = [Windows.VerticalAlignment]::Top # Align to the top $grid.Children.Add($stackPanel) [Windows.Controls.Grid]::SetRow($stackPanel, 0) # Set the row to the second row (0-based index) # Add SVG path to the stack panel $stackPanel.Children.Add((Invoke-WinUtilAssets -Type "logo" -Size $LogoSize)) # Add "Winutil" text $winutilTextBlock = New-Object Windows.Controls.TextBlock $winutilTextBlock.Text = "Winutil" $winutilTextBlock.FontSize = $HeaderFontSize $winutilTextBlock.Foreground = $LogoColor $winutilTextBlock.Margin = New-Object Windows.Thickness(10, 10, 10, 5) # Add margins around the text block $stackPanel.Children.Add($winutilTextBlock) # Add TextBlock for information with text wrapping and margins $messageTextBlock = New-Object Windows.Controls.TextBlock $messageTextBlock.FontSize = $FontSize $messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping $messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left $messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top $messageTextBlock.Margin = New-Object Windows.Thickness(10) # Add margins around the text block # Define the Regex to find hyperlinks formatted as HTML tags $regex = [regex]::new('([^<]+)') $lastPos = 0 # Iterate through each match and add regular text and hyperlinks foreach ($match in $regex.Matches($Message)) { # Add the text before the hyperlink, if any $textBefore = $Message.Substring($lastPos, $match.Index - $lastPos) if ($textBefore.Length -gt 0) { $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textBefore))) } # Create and add the hyperlink $hyperlink = New-Object Windows.Documents.Hyperlink $hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value) $hyperlink.Inlines.Add($match.Groups[2].Value) $hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline $hyperlink.Foreground = $LinkForegroundColor $hyperlink.Add_Click({ param($sender, $args) Start-Process $sender.NavigateUri.AbsoluteUri }) $hyperlink.Add_MouseEnter({ param($sender, $args) $sender.Foreground = $LinkHoverForegroundColor $sender.FontSize = ($FontSize + ($FontSize / 4)) $sender.FontWeight = "SemiBold" }) $hyperlink.Add_MouseLeave({ param($sender, $args) $sender.Foreground = $LinkForegroundColor $sender.FontSize = $FontSize $sender.FontWeight = "Normal" }) $messageTextBlock.Inlines.Add($hyperlink) # Update the last position $lastPos = $match.Index + $match.Length } # Add any remaining text after the last hyperlink if ($lastPos -lt $Message.Length) { $textAfter = $Message.Substring($lastPos) $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textAfter))) } # If no matches, add the entire message as a run if ($regex.Matches($Message).Count -eq 0) { $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($Message))) } # Create a ScrollViewer if EnableScroll is true if ($EnableScroll) { $scrollViewer = New-Object System.Windows.Controls.ScrollViewer $scrollViewer.VerticalScrollBarVisibility = 'Auto' $scrollViewer.HorizontalScrollBarVisibility = 'Disabled' $scrollViewer.Content = $messageTextBlock $grid.Children.Add($scrollViewer) [Windows.Controls.Grid]::SetRow($scrollViewer, 1) # Set the row to the second row (0-based index) } else { $grid.Children.Add($messageTextBlock) [Windows.Controls.Grid]::SetRow($messageTextBlock, 1) # Set the row to the second row (0-based index) } # Add OK button $okButton = New-Object Windows.Controls.Button $okButton.Content = "OK" $okButton.FontSize = $FontSize $okButton.Width = 80 $okButton.Height = 30 $okButton.HorizontalAlignment = [Windows.HorizontalAlignment]::Center $okButton.VerticalAlignment = [Windows.VerticalAlignment]::Bottom $okButton.Margin = New-Object Windows.Thickness(0, 0, 0, 10) $okButton.Background = $buttonBackgroundColor $okButton.Foreground = $buttonForegroundColor $okButton.BorderBrush = $BorderColor $okButton.Add_Click({ $dialog.Close() }) $grid.Children.Add($okButton) [Windows.Controls.Grid]::SetRow($okButton, 2) # Set the row to the third row (0-based index) # Handle Escape key press to close the dialog $dialog.Add_KeyDown({ if ($_.Key -eq 'Escape') { $dialog.Close() } }) # Set the OK button as the default button (activated on Enter) $okButton.IsDefault = $true # Show the custom dialog $dialog.ShowDialog() } function Show-WPFInstallAppBusy { <# .SYNOPSIS Displays a busy overlay in the install app area of the WPF form. This is used to indicate that an install or uninstall is in progress. Dynamically updates the size of the overlay based on the app area on each invocation. .PARAMETER text The text to display in the busy overlay. Defaults to "Installing apps...". #> param ( $text = "Installing apps..." ) $sync.form.Dispatcher.Invoke([action] { $sync.InstallAppAreaOverlay.Visibility = [Windows.Visibility]::Visible $sync.InstallAppAreaOverlay.Width = $($sync.InstallAppAreaScrollViewer.ActualWidth * 0.4) $sync.InstallAppAreaOverlay.Height = $($sync.InstallAppAreaScrollViewer.ActualWidth * 0.4) $sync.InstallAppAreaOverlayText.Text = $text $sync.InstallAppAreaBorder.IsEnabled = $false $sync.InstallAppAreaScrollViewer.Effect.Radius = 5 }) } function Test-WinUtilInternetConnection { <# .SYNOPSIS Tests if the computer has internet connectivity .OUTPUTS Boolean - True if connected, False if offline #> try { # Test multiple reliable endpoints $testSites = @( "8.8.8.8", # Google DNS "1.1.1.1", # Cloudflare DNS "208.67.222.222" # OpenDNS ) foreach ($site in $testSites) { if (Test-Connection -ComputerName $site -Count 1 -Quiet -ErrorAction SilentlyContinue) { return $true } } return $false } catch { return $false } } function Test-WinUtilPackageManager { <# .SYNOPSIS Checks if Winget and/or Choco are installed .PARAMETER winget Check if Winget is installed .PARAMETER choco Check if Chocolatey is installed #> Param( [System.Management.Automation.SwitchParameter]$winget, [System.Management.Automation.SwitchParameter]$choco ) if ($winget) { if (Get-Command winget -ErrorAction SilentlyContinue) { Write-Host "===========================================" -ForegroundColor Green Write-Host "--- Winget is installed ---" -ForegroundColor Green Write-Host "===========================================" -ForegroundColor Green $status = "installed" } else { Write-Host "===========================================" -ForegroundColor Red Write-Host "--- Winget is not installed ---" -ForegroundColor Red Write-Host "===========================================" -ForegroundColor Red $status = "not-installed" } } if ($choco) { if (Get-Command choco -ErrorAction SilentlyContinue) { Write-Host "===========================================" -ForegroundColor Green Write-Host "--- Chocolatey is installed ---" -ForegroundColor Green Write-Host "===========================================" -ForegroundColor Green $status = "installed" } else { Write-Host "===========================================" -ForegroundColor Red Write-Host "--- Chocolatey is not installed ---" -ForegroundColor Red Write-Host "===========================================" -ForegroundColor Red $status = "not-installed" } } return $status } Function Update-WinUtilProgramWinget { <# .SYNOPSIS This will update all programs using Winget #> [ScriptBlock]$wingetinstall = { $host.ui.RawUI.WindowTitle = """Winget Install""" Start-Transcript "$logdir\winget-update_$dateTime.log" -Append winget upgrade --all --accept-source-agreements --accept-package-agreements --scope=machine --silent } $global:WinGetInstall = Start-Process -Verb runas powershell -ArgumentList "-command invoke-command -scriptblock {$wingetinstall} -argumentlist '$($ProgramsToInstall -join ",")'" -PassThru } function Initialize-WPFUI { [OutputType([void])] param( [Parameter(Mandatory)] [string]$TargetGridName ) switch ($TargetGridName) { "appscategory" { # TODO # Switch UI generation of the sidebar to this function # $sync.ItemsControl = Initialize-InstallAppArea -TargetElement $TargetGridName # ... # Create and configure a popup for displaying selected apps $selectedAppsPopup = New-Object Windows.Controls.Primitives.Popup $selectedAppsPopup.IsOpen = $false $selectedAppsPopup.PlacementTarget = $sync.WPFselectedAppsButton $selectedAppsPopup.Placement = [System.Windows.Controls.Primitives.PlacementMode]::Bottom $selectedAppsPopup.AllowsTransparency = $true # Style the popup with a border and background $selectedAppsBorder = New-Object Windows.Controls.Border $selectedAppsBorder.SetResourceReference([Windows.Controls.Control]::BackgroundProperty, "MainBackgroundColor") $selectedAppsBorder.SetResourceReference([Windows.Controls.Control]::BorderBrushProperty, "MainForegroundColor") $selectedAppsBorder.SetResourceReference([Windows.Controls.Control]::BorderThicknessProperty, "ButtonBorderThickness") $selectedAppsBorder.Width = 200 $selectedAppsBorder.Padding = 5 $selectedAppsPopup.Child = $selectedAppsBorder $sync.selectedAppsPopup = $selectedAppsPopup # Add a stack panel inside the popup's border to organize its child elements $sync.selectedAppsstackPanel = New-Object Windows.Controls.StackPanel $selectedAppsBorder.Child = $sync.selectedAppsstackPanel # Close selectedAppsPopup when mouse leaves both button and selectedAppsPopup $sync.WPFselectedAppsButton.Add_MouseLeave({ if (-not $sync.selectedAppsPopup.IsMouseOver) { $sync.selectedAppsPopup.IsOpen = $false } }) $selectedAppsPopup.Add_MouseLeave({ if (-not $sync.WPFselectedAppsButton.IsMouseOver) { $sync.selectedAppsPopup.IsOpen = $false } }) # Creates the popup that is displayed when the user right-clicks on an app entry # This popup contains buttons for installing, uninstalling, and viewing app information $appPopup = New-Object Windows.Controls.Primitives.Popup $appPopup.StaysOpen = $false $appPopup.Placement = [System.Windows.Controls.Primitives.PlacementMode]::Bottom $appPopup.AllowsTransparency = $true # Store the popup globally so the position can be set later $sync.appPopup = $appPopup $appPopupStackPanel = New-Object Windows.Controls.StackPanel $appPopupStackPanel.Orientation = "Horizontal" $appPopupStackPanel.Add_MouseLeave({ $sync.appPopup.IsOpen = $false }) $appPopup.Child = $appPopupStackPanel $appButtons = @( [PSCustomObject]@{ Name = "Install"; Icon = [char]0xE118 }, [PSCustomObject]@{ Name = "Uninstall"; Icon = [char]0xE74D }, [PSCustomObject]@{ Name = "Info"; Icon = [char]0xE946 } ) foreach ($button in $appButtons) { $newButton = New-Object Windows.Controls.Button $newButton.Style = $sync.Form.Resources.AppEntryButtonStyle $newButton.Content = $button.Icon $appPopupStackPanel.Children.Add($newButton) | Out-Null # Dynamically load the selected app object so the buttons can be reused and do not need to be created for each app switch ($button.Name) { "Install" { $newButton.Add_MouseEnter({ $appObject = $sync.configs.applicationsHashtable.$($sync.appPopupSelectedApp) $this.ToolTip = "Install or Upgrade $($appObject.content)" }) $newButton.Add_Click({ $appObject = $sync.configs.applicationsHashtable.$($sync.appPopupSelectedApp) Invoke-WPFInstall -PackagesToInstall $appObject }) } "Uninstall" { $newButton.Add_MouseEnter({ $appObject = $sync.configs.applicationsHashtable.$($sync.appPopupSelectedApp) $this.ToolTip = "Uninstall $($appObject.content)" }) $newButton.Add_Click({ $appObject = $sync.configs.applicationsHashtable.$($sync.appPopupSelectedApp) Invoke-WPFUnInstall -PackagesToUninstall $appObject }) } "Info" { $newButton.Add_MouseEnter({ $appObject = $sync.configs.applicationsHashtable.$($sync.appPopupSelectedApp) $this.ToolTip = "Open the application's website in your default browser`n$($appObject.link)" }) $newButton.Add_Click({ $appObject = $sync.configs.applicationsHashtable.$($sync.appPopupSelectedApp) Start-Process $appObject.link }) } } } } "appspanel" { $sync.ItemsControl = Initialize-InstallAppArea -TargetElement $TargetGridName Initialize-InstallCategoryAppList -TargetElement $sync.ItemsControl -Apps $sync.configs.applicationsHashtable } default { Write-Output "$TargetGridName not yet implemented" } } } function Invoke-AutoConfigDialog { <# .SYNOPSIS Sets the automatic configuration file based on a specified JSON file #> [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null $OFD = New-Object System.Windows.Forms.OpenFileDialog $OFD.Filter = "JSON Files (*.json)|*.json" $OFD.ShowDialog() if ($OFD.FileName -eq "") { Write-Host "No automatic config file has been selected. Continuing without one..." return } return $OFD.FileName } function Invoke-WinUtilRemoveEdge { Write-Host "Unlocking The Offical Edge Uninstaller And Removing Microsoft Edge..." $Path = (Get-ChildItem "C:\Program Files (x86)\Microsoft\Edge\Application\*\Installer\setup.exe")[0].FullName New-Item "C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\MicrosoftEdge.exe" -Force Start-Process $Path -ArgumentList '--uninstall --system-level --force-uninstall --delete-profile' } function Invoke-WPFButton { <# .SYNOPSIS Invokes the function associated with the clicked button .PARAMETER Button The name of the button that was clicked #> Param ([string]$Button) # Use this to get the name of the button #[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info") if (-not $sync.ProcessRunning) { Set-WinUtilProgressBar -label "" -percent 0 } Switch -Wildcard ($Button) { "WPFTab?BT" { Invoke-WPFTab $Button } "WPFInstall" { Invoke-WPFInstall } "WPFUninstall" { Invoke-WPFUnInstall } "WPFInstallUpgrade" { Invoke-WPFInstallUpgrade } "WPFCollapseAllCategories" { Invoke-WPFToggleAllCategories -Action "Collapse" } "WPFExpandAllCategories" { Invoke-WPFToggleAllCategories -Action "Expand" } "WPFStandard" { Invoke-WPFPresets "Standard" -checkboxfilterpattern "WPFTweak*" } "WPFMinimal" { Invoke-WPFPresets "Minimal" -checkboxfilterpattern "WPFTweak*" } "WPFClearTweaksSelection" { Invoke-WPFPresets -imported $true -checkboxfilterpattern "WPFTweak*" } "WPFClearInstallSelection" { Invoke-WPFPresets -imported $true -checkboxfilterpattern "WPFInstall*" } "WPFtweaksbutton" { Invoke-WPFtweaksbutton } "WPFOOSUbutton" { Invoke-WPFOOSU } "WPFAddUltPerf" { Invoke-WPFUltimatePerformance -State "Enable" } "WPFRemoveUltPerf" { Invoke-WPFUltimatePerformance -State "Disable" } "WPFundoall" { Invoke-WPFundoall } "WPFFeatureInstall" { Invoke-WPFFeatureInstall } "WPFPanelDISM" { Invoke-WPFSystemRepair } "WPFPanelAutologin" { Invoke-WPFPanelAutologin } "WPFPanelComputer" { Invoke-WPFControlPanel -Panel $button } "WPFPanelControl" { Invoke-WPFControlPanel -Panel $button } "WPFPanelNetwork" { Invoke-WPFControlPanel -Panel $button } "WPFPanelPower" { Invoke-WPFControlPanel -Panel $button } "WPFPanelPrinter" { Invoke-WPFControlPanel -Panel $button } "WPFPanelRegion" { Invoke-WPFControlPanel -Panel $button } "WPFPanelRestore" { Invoke-WPFControlPanel -Panel $button } "WPFPanelSound" { Invoke-WPFControlPanel -Panel $button } "WPFPanelSystem" { Invoke-WPFControlPanel -Panel $button } "WPFPanelTimedate" { Invoke-WPFControlPanel -Panel $button } "WPFPanelUser" { Invoke-WPFControlPanel -Panel $button } "WPFUpdatesdefault" { Invoke-WPFUpdatesdefault } "WPFFixesUpdate" { Invoke-WPFFixesUpdate } "WPFFixesWinget" { Invoke-WPFFixesWinget } "WPFRunAdobeCCCleanerTool" { Invoke-WPFRunAdobeCCCleanerTool } "WPFFixesNetwork" { Invoke-WPFFixesNetwork } "WPFUpdatesdisable" { Invoke-WPFUpdatesdisable } "WPFUpdatessecurity" { Invoke-WPFUpdatessecurity } "WPFWinUtilShortcut" { Invoke-WPFShortcut -ShortcutToAdd "WinUtil" -RunAsAdmin $true } "WPFGetInstalled" { Invoke-WPFGetInstalled -CheckBox "winget" } "WPFGetInstalledTweaks" { Invoke-WPFGetInstalled -CheckBox "tweaks" } "WPFCloseButton" { Invoke-WPFCloseButton } "WPFWinUtilInstallPSProfile" { Invoke-WinUtilInstallPSProfile } "WPFWinUtilUninstallPSProfile" { Invoke-WinUtilUninstallPSProfile } "WPFWinUtilSSHServer" { Invoke-WPFSSHServer } "WPFselectedAppsButton" { $sync.selectedAppsPopup.IsOpen = -not $sync.selectedAppsPopup.IsOpen } } } function Invoke-WPFCloseButton { <# .SYNOPSIS Close application .PARAMETER Button #> $sync["Form"].Close() Write-Host "Bye bye!" } function Invoke-WPFControlPanel { <# .SYNOPSIS Opens the requested legacy panel .PARAMETER Panel The panel to open #> param($Panel) switch ($Panel) { "WPFPanelControl" { control } "WPFPanelComputer" { compmgmt.msc } "WPFPanelNetwork" { ncpa.cpl } "WPFPanelPower" { powercfg.cpl } "WPFPanelPrinter" { Start-Process "shell:::{A8A91A66-3A7D-4424-8D24-04E180695C7A}" } "WPFPanelRegion" { intl.cpl } "WPFPanelRestore" { rstrui.exe } "WPFPanelSound" { mmsys.cpl } "WPFPanelSystem" { sysdm.cpl } "WPFPanelTimedate" { timedate.cpl } "WPFPanelUser" { control userpasswords2 } } } function Invoke-WPFFeatureInstall { <# .SYNOPSIS Installs selected Windows Features #> if ($sync.ProcessRunning) { $msg = "[Invoke-WPFFeatureInstall] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } $Features = (Get-WinUtilCheckBoxes)["WPFFeature"] Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock { param($Features, $DebugPreference) $sync.ProcessRunning = $true if ($Features.count -eq 1) { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) } Invoke-WinUtilFeatureInstall $Features $sync.ProcessRunning = $false $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) Write-Host "===================================" Write-Host "--- Features are Installed ---" Write-Host "--- A Reboot may be required ---" Write-Host "===================================" } } function Invoke-WPFFixesNetwork { <# .SYNOPSIS Resets various network configurations #> Write-Host "Resetting Network with netsh" Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" # Reset WinSock catalog to a clean state Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" Set-WinUtilTaskbaritem -state "Normal" -value 0.35 -overlay "logo" # Resets WinHTTP proxy setting to DIRECT Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" Set-WinUtilTaskbaritem -state "Normal" -value 0.7 -overlay "logo" # Removes all user configured IP settings Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" Write-Host "Process complete. Please reboot your computer." $ButtonType = [System.Windows.MessageBoxButton]::OK $MessageboxTitle = "Network Reset " $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer") $MessageIcon = [System.Windows.MessageBoxImage]::Information [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) Write-Host "==========================================" Write-Host "-- Network Configuration has been Reset --" Write-Host "==========================================" } function Invoke-WPFFixesUpdate { <# .SYNOPSIS Performs various tasks in an attempt to repair Windows Update .DESCRIPTION 1. (Aggressive Only) Scans the system for corruption using the Invoke-WPFSystemRepair function 2. Stops Windows Update Services 3. Remove the QMGR Data file, which stores BITS jobs 4. (Aggressive Only) Renames the DataStore and CatRoot2 folders DataStore - Contains the Windows Update History and Log Files CatRoot2 - Contains the Signatures for Windows Update Packages 5. Renames the Windows Update Download Folder 6. Deletes the Windows Update Log 7. (Aggressive Only) Resets the Security Descriptors on the Windows Update Services 8. Reregisters the BITS and Windows Update DLLs 9. Removes the WSUS client settings 10. Resets WinSock 11. Gets and deletes all BITS jobs 12. Sets the startup type of the Windows Update Services then starts them 13. Forces Windows Update to check for updates .PARAMETER Aggressive If specified, the script will take additional steps to repair Windows Update that are more dangerous, take a significant amount of time, or are generally unnecessary #> param($Aggressive = $false) Write-Progress -Id 0 -Activity "Repairing Windows Update" -PercentComplete 0 Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" Write-Host "Starting Windows Update Repair..." # Wait for the first progress bar to show, otherwise the second one won't show Start-Sleep -Milliseconds 200 if ($Aggressive) { Invoke-WPFSystemRepair } Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Stopping Windows Update Services..." -PercentComplete 10 # Stop the Windows Update Services Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping BITS..." -PercentComplete 0 Stop-Service -Name BITS -Force Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping wuauserv..." -PercentComplete 20 Stop-Service -Name wuauserv -Force Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping appidsvc..." -PercentComplete 40 Stop-Service -Name appidsvc -Force Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping cryptsvc..." -PercentComplete 60 Stop-Service -Name cryptsvc -Force Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Completed" -PercentComplete 100 # Remove the QMGR Data file Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Renaming/Removing Files..." -PercentComplete 20 Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing QMGR Data files..." -PercentComplete 0 Remove-Item "$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat" -ErrorAction SilentlyContinue if ($Aggressive) { # Rename the Windows Update Log and Signature Folders Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Log, Download, and Signature Folder..." -PercentComplete 20 Rename-Item $env:systemroot\SoftwareDistribution\DataStore DataStore.bak -ErrorAction SilentlyContinue Rename-Item $env:systemroot\System32\Catroot2 catroot2.bak -ErrorAction SilentlyContinue } # Rename the Windows Update Download Folder Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Download Folder..." -PercentComplete 20 Rename-Item $env:systemroot\SoftwareDistribution\Download Download.bak -ErrorAction SilentlyContinue # Delete the legacy Windows Update Log Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing the old Windows Update log..." -PercentComplete 80 Remove-Item $env:systemroot\WindowsUpdate.log -ErrorAction SilentlyContinue Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Completed" -PercentComplete 100 if ($Aggressive) { # Reset the Security Descriptors on the Windows Update Services Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting the WU Service Security Descriptors..." -PercentComplete 25 Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the BITS Security Descriptor..." -PercentComplete 0 Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "bits", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)" -Wait Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the wuauserv Security Descriptor..." -PercentComplete 50 Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "wuauserv", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)" -Wait Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Completed" -PercentComplete 100 } # Reregister the BITS and Windows Update DLLs Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Reregistering DLLs..." -PercentComplete 40 $oldLocation = Get-Location Set-Location $env:systemroot\system32 $i = 0 $DLLs = @( "atl.dll", "urlmon.dll", "mshtml.dll", "shdocvw.dll", "browseui.dll", "jscript.dll", "vbscript.dll", "scrrun.dll", "msxml.dll", "msxml3.dll", "msxml6.dll", "actxprxy.dll", "softpub.dll", "wintrust.dll", "dssenh.dll", "rsaenh.dll", "gpkcsp.dll", "sccbase.dll", "slbcsp.dll", "cryptdlg.dll", "oleaut32.dll", "ole32.dll", "shell32.dll", "initpki.dll", "wuapi.dll", "wuaueng.dll", "wuaueng1.dll", "wucltui.dll", "wups.dll", "wups2.dll", "wuweb.dll", "qmgr.dll", "qmgrprxy.dll", "wucltux.dll", "muweb.dll", "wuwebv.dll" ) foreach ($dll in $DLLs) { Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Registering $dll..." -PercentComplete ($i / $DLLs.Count * 100) $i++ Start-Process -NoNewWindow -FilePath "regsvr32.exe" -ArgumentList "/s", $dll } Set-Location $oldLocation Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Completed" -PercentComplete 100 # Remove the WSUS client settings if (Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate") { Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Removing WSUS client settings..." -PercentComplete 60 Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -PercentComplete 0 Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "AccountDomainSid", "/f" -RedirectStandardError "NUL" Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "PingID", "/f" -RedirectStandardError "NUL" Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "SusClientId", "/f" -RedirectStandardError "NUL" Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -Status "Completed" -PercentComplete 100 } # Remove Group Policy Windows Update settings Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Removing Group Policy Windows Update settings..." -PercentComplete 60 Write-Progress -Id 7 -ParentId 0 -Activity "Removing Group Policy Windows Update settings" -PercentComplete 0 Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -ErrorAction SilentlyContinue Write-Host "Defaulting driver offering through Windows Update..." Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontSearchWindowsUpdate" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DriverUpdateWizardWuSearchEnabled" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -ErrorAction SilentlyContinue Write-Host "Defaulting Windows Update automatic restart..." Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -ErrorAction SilentlyContinue Write-Host "Clearing ANY Windows Update Policy settings..." Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -ErrorAction SilentlyContinue Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -ErrorAction SilentlyContinue Remove-Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKCU:\Software\Microsoft\WindowsSelfHost" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKCU:\Software\Policies" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\Microsoft\Policies" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\Microsoft\WindowsSelfHost" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\Policies" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Policies" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue Start-Process -NoNewWindow -FilePath "secedit" -ArgumentList "/configure", "/cfg", "$env:windir\inf\defltbase.inf", "/db", "defltbase.sdb", "/verbose" -Wait Start-Process -NoNewWindow -FilePath "cmd.exe" -ArgumentList "/c RD /S /Q $env:WinDir\System32\GroupPolicyUsers" -Wait Start-Process -NoNewWindow -FilePath "cmd.exe" -ArgumentList "/c RD /S /Q $env:WinDir\System32\GroupPolicy" -Wait Start-Process -NoNewWindow -FilePath "gpupdate" -ArgumentList "/force" -Wait Write-Progress -Id 7 -ParentId 0 -Activity "Removing Group Policy Windows Update settings" -Status "Completed" -PercentComplete 100 # Reset WinSock Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting WinSock..." -PercentComplete 65 Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Resetting WinSock..." -PercentComplete 0 Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Completed" -PercentComplete 100 # Get and delete all BITS jobs Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Deleting BITS jobs..." -PercentComplete 75 Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Deleting BITS jobs..." -PercentComplete 0 Get-BitsTransfer | Remove-BitsTransfer Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Completed" -PercentComplete 100 # Change the startup type of the Windows Update Services and start them Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Starting Windows Update Services..." -PercentComplete 90 Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting BITS..." -PercentComplete 0 Get-Service BITS | Set-Service -StartupType Manual -PassThru | Start-Service Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting wuauserv..." -PercentComplete 25 Get-Service wuauserv | Set-Service -StartupType Manual -PassThru | Start-Service Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting AppIDSvc..." -PercentComplete 50 # The AppIDSvc service is protected, so the startup type has to be changed in the registry Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\AppIDSvc" -Name "Start" -Value "3" # Manual Start-Service AppIDSvc Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting CryptSvc..." -PercentComplete 75 Get-Service CryptSvc | Set-Service -StartupType Manual -PassThru | Start-Service Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Completed" -PercentComplete 100 # Force Windows Update to check for updates Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Forcing discovery..." -PercentComplete 95 Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Forcing discovery..." -PercentComplete 0 try { (New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow() } catch { Set-WinUtilTaskbaritem -state "Error" -overlay "warning" Write-Warning "Failed to create Windows Update COM object: $_" } Start-Process -NoNewWindow -FilePath "wuauclt" -ArgumentList "/resetauthorization", "/detectnow" Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Completed" -PercentComplete 100 Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Completed" -PercentComplete 100 Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" $ButtonType = [System.Windows.MessageBoxButton]::OK $MessageboxTitle = "Reset Windows Update " $Messageboxbody = ("Stock settings loaded.`n Please reboot your computer") $MessageIcon = [System.Windows.MessageBoxImage]::Information [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) Write-Host "===============================================" Write-Host "-- Reset All Windows Update Settings to Stock -" Write-Host "===============================================" # Remove the progress bars Write-Progress -Id 0 -Activity "Repairing Windows Update" -Completed Write-Progress -Id 1 -Activity "Scanning for corruption" -Completed Write-Progress -Id 2 -Activity "Stopping Services" -Completed Write-Progress -Id 3 -Activity "Renaming/Removing Files" -Completed Write-Progress -Id 4 -Activity "Resetting the WU Service Security Descriptors" -Completed Write-Progress -Id 5 -Activity "Reregistering DLLs" -Completed Write-Progress -Id 6 -Activity "Removing Group Policy Windows Update settings" -Completed Write-Progress -Id 7 -Activity "Resetting WinSock" -Completed Write-Progress -Id 8 -Activity "Deleting BITS jobs" -Completed Write-Progress -Id 9 -Activity "Starting Windows Update Services" -Completed Write-Progress -Id 10 -Activity "Forcing discovery" -Completed } function Invoke-WPFFixesWinget { <# .SYNOPSIS Fixes Winget by running choco install winget .DESCRIPTION BravoNorris for the fantastic idea of a button to reinstall winget #> # Install Choco if not already present try { Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" Write-Host "==> Starting Winget Repair" Install-WinUtilWinget -Force } catch { Write-Error "Failed to install winget: $_" Set-WinUtilTaskbaritem -state "Error" -overlay "warning" } finally { Write-Host "==> Finished Winget Repair" Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" } } function Invoke-WPFGetInstalled { <# TODO: Add the Option to use Chocolatey as Engine .SYNOPSIS Invokes the function that gets the checkboxes to check in a new runspace .PARAMETER checkbox Indicates whether to check for installed 'winget' programs or applied 'tweaks' #> param($checkbox) if ($sync.ProcessRunning) { $msg = "[Invoke-WPFGetInstalled] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } if (($sync.ChocoRadioButton.IsChecked -eq $false) -and ((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget") { return } $managerPreference = $sync["ManagerPreference"] Invoke-WPFRunspace -ParameterList @(("managerPreference", $managerPreference), ("checkbox", $checkbox)) -DebugPreference $DebugPreference -ScriptBlock { param ( [string]$checkbox, [PackageManagers]$managerPreference ) $sync.ProcessRunning = $true $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Indeterminate" }) if ($checkbox -eq "winget") { Write-Host "Getting Installed Programs..." switch ($managerPreference) { "Choco" { $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox "choco"; break } "Winget" { $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox; break } } } elseif ($checkbox -eq "tweaks") { Write-Host "Getting Installed Tweaks..." $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox } $sync.form.Dispatcher.invoke({ foreach ($checkbox in $Checkboxes) { $sync.$checkbox.ischecked = $True } }) Write-Host "Done..." $sync.ProcessRunning = $false $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" }) } } function Invoke-WPFImpex { <# .SYNOPSIS Handles importing and exporting of the checkboxes checked for the tweaks section .PARAMETER type Indicates whether to 'import' or 'export' .PARAMETER checkbox The checkbox to export to a file or apply the imported file to .EXAMPLE Invoke-WPFImpex -type "export" #> param( $type, $Config = $null ) function ConfigDialog { if (!$Config) { switch ($type) { "export" { $FileBrowser = New-Object System.Windows.Forms.SaveFileDialog } "import" { $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog } } $FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop') $FileBrowser.Filter = "JSON Files (*.json)|*.json" $FileBrowser.ShowDialog() | Out-Null if ($FileBrowser.FileName -eq "") { return $null } else { return $FileBrowser.FileName } } else { return $Config } } switch ($type) { "export" { try { $Config = ConfigDialog if ($Config) { $jsonFile = Get-WinUtilCheckBoxes -unCheck $false | ConvertTo-Json $jsonFile | Out-File $Config -Force "iex ""& { `$(irm https://christitus.com/win) } -Config '$Config'""" | Set-Clipboard } } catch { Write-Error "An error occurred while exporting: $_" } } "import" { try { $Config = ConfigDialog if ($Config) { try { if ($Config -match '^https?://') { $jsonFile = (Invoke-WebRequest "$Config").Content | ConvertFrom-Json } else { $jsonFile = Get-Content $Config | ConvertFrom-Json } } catch { Write-Error "Failed to load the JSON file from the specified path or URL: $_" return } $flattenedJson = $jsonFile.PSObject.Properties.Where({ $_.Name -ne "Install" }).ForEach({ $_.Value }) Invoke-WPFPresets -preset $flattenedJson -imported $true } } catch { Write-Error "An error occurred while importing: $_" } } } } function Invoke-WPFInstall { param ( [Parameter(Mandatory = $false)] [PSObject[]]$PackagesToInstall = $($sync.selectedApps | Foreach-Object { $sync.configs.applicationsHashtable.$_ }) ) <# .SYNOPSIS Installs the selected programs using winget, if one or more of the selected programs are already installed on the system, winget will try and perform an upgrade if there's a newer version to install. #> if ($sync.ProcessRunning) { $msg = "[Invoke-WPFInstall] An Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } if ($PackagesToInstall.Count -eq 0) { $WarningMsg = "Please select the program(s) to install or upgrade" [System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } $ManagerPreference = $sync["ManagerPreference"] Invoke-WPFRunspace -ParameterList @(("PackagesToInstall", $PackagesToInstall), ("ManagerPreference", $ManagerPreference)) -DebugPreference $DebugPreference -ScriptBlock { param($PackagesToInstall, $ManagerPreference, $DebugPreference) $packagesSorted = Get-WinUtilSelectedPackages -PackageList $PackagesToInstall -Preference $ManagerPreference $packagesWinget = $packagesSorted[[PackageManagers]::Winget] $packagesChoco = $packagesSorted[[PackageManagers]::Choco] try { $sync.ProcessRunning = $true if ($packagesWinget.Count -gt 0 -and $packagesWinget -ne "0") { Show-WPFInstallAppBusy -text "Installing apps..." Install-WinUtilWinget Install-WinUtilProgramWinget -Action Install -Programs $packagesWinget } if ($packagesChoco.Count -gt 0) { Install-WinUtilChoco Install-WinUtilProgramChoco -Action Install -Programs $packagesChoco } Hide-WPFInstallAppBusy Write-Host "===========================================" Write-Host "-- Installs have finished ---" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) } catch { Write-Host "===========================================" Write-Host "Error: $_" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Error" -overlay "warning" }) } $sync.ProcessRunning = $False } } function Invoke-WPFInstallUpgrade { <# .SYNOPSIS Invokes the function that upgrades all installed programs #> if ($sync.ChocoRadioButton.IsChecked) { Install-WinUtilChoco $chocoUpgradeStatus = (Start-Process "choco" -ArgumentList "upgrade all -y" -Wait -PassThru -NoNewWindow).ExitCode if ($chocoUpgradeStatus -eq 0) { Write-Host "Upgrade Successful" } else { Write-Host "Error Occurred. Return Code: $chocoUpgradeStatus" } } else { if ((Test-WinUtilPackageManager -winget) -eq "not-installed") { return } if (Get-WinUtilInstallerProcess -Process $global:WinGetInstall) { $msg = "[Invoke-WPFInstallUpgrade] Install process is currently running. Please check for a powershell window labeled 'Winget Install'" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } Update-WinUtilProgramWinget Write-Host "===========================================" Write-Host "-- Updates started ---" Write-Host "-- You can close this window if desired ---" Write-Host "===========================================" } } function Invoke-WPFOOSU { <# .SYNOPSIS Downloads and runs OO Shutup 10 #> try { $OOSU_filepath = "$ENV:temp\OOSU10.exe" $Initial_ProgressPreference = $ProgressPreference $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath Write-Host "Starting OO Shutup 10 ..." Start-Process $OOSU_filepath } catch { Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red } finally { $ProgressPreference = $Initial_ProgressPreference } } function Invoke-WPFPanelAutologin { <# .SYNOPSIS Enables autologin using Sysinternals Autologon.exe #> # Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe" cmd /c "$env:temp\autologin.exe" /accepteula } function Invoke-WPFPopup { param ( [ValidateSet("Show", "Hide", "Toggle")] [string]$Action = "", [string[]]$Popups = @(), [ValidateScript({ $invalid = $_.GetEnumerator() | Where-Object { $_.Value -notin @("Show", "Hide", "Toggle") } if ($invalid) { throw "Found invalid Popup-Action pair(s): " + ($invalid | ForEach-Object { "$($_.Key) = $($_.Value)" } -join "; ") } $true })] [hashtable]$PopupActionTable = @{} ) if (-not $PopupActionTable.Count -and (-not $Action -or -not $Popups.Count)) { throw "Provide either 'PopupActionTable' or both 'Action' and 'Popups'." } if ($PopupActionTable.Count -and ($Action -or $Popups.Count)) { throw "Use 'PopupActionTable' on its own, or 'Action' with 'Popups'." } # Collect popups and actions $PopupsToProcess = if ($PopupActionTable.Count) { $PopupActionTable.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ Name = "$($_.Key)Popup"; Action = $_.Value } } } else { $Popups | ForEach-Object { [PSCustomObject]@{ Name = "$_`Popup"; Action = $Action } } } $PopupsNotFound = @() # Apply actions foreach ($popupEntry in $PopupsToProcess) { $popupName = $popupEntry.Name if (-not $sync.$popupName) { $PopupsNotFound += $popupName continue } $sync.$popupName.IsOpen = switch ($popupEntry.Action) { "Show" { $true } "Hide" { $false } "Toggle" { -not $sync.$popupName.IsOpen } } } if ($PopupsNotFound.Count -gt 0) { throw "Could not find the following popups: $($PopupsNotFound -join ', ')" } } function Invoke-WPFPresets { <# .SYNOPSIS Sets the options in the tweaks panel to the given preset .PARAMETER preset The preset to set the options to .PARAMETER imported If the preset is imported from a file, defaults to false .PARAMETER checkboxfilterpattern The Pattern to use when filtering through CheckBoxes, defaults to "**" #> param ( [Parameter(position = 0)] [Array]$preset = "", [Parameter(position = 1)] [bool]$imported = $false, [Parameter(position = 2)] [string]$checkboxfilterpattern = "**" ) if ($imported -eq $true) { $CheckBoxesToCheck = $preset } else { $CheckBoxesToCheck = $sync.configs.preset.$preset } $CheckBoxes = ($sync.GetEnumerator()).where{ $_.Value -is [System.Windows.Controls.CheckBox] -and $_.Name -notlike "WPFToggle*" -and $_.Name -like "$checkboxfilterpattern" } Write-Debug "Getting checkboxes to set, number of checkboxes: $($CheckBoxes.Count)" if ($CheckBoxesToCheck -ne "") { $debugMsg = "CheckBoxes to Check are: " $CheckBoxesToCheck | ForEach-Object { $debugMsg += "$_, " } $debugMsg = $debugMsg -replace (',\s*$', '') Write-Debug "$debugMsg" } foreach ($CheckBox in $CheckBoxes) { $checkboxName = $CheckBox.Key if (-not $CheckBoxesToCheck) { $sync.$checkboxName.IsChecked = $false continue } # Check if the checkbox name exists in the flattened JSON hashtable if ($CheckBoxesToCheck -contains $checkboxName) { # If it exists, set IsChecked to true $sync.$checkboxName.IsChecked = $true Write-Debug "$checkboxName is checked" } else { # If it doesn't exist, set IsChecked to false $sync.$checkboxName.IsChecked = $false Write-Debug "$checkboxName is not checked" } } } function Invoke-WPFRunAdobeCCCleanerTool { <# .SYNOPSIS It removes or fixes problem files and resolves permission issues in registry keys. .DESCRIPTION The Creative Cloud Cleaner tool is a utility for experienced users to clean up corrupted installations. #> [string]$url = "https://swupmf.adobe.com/webfeed/CleanerTool/win/AdobeCreativeCloudCleanerTool.exe" Write-Host "The Adobe Creative Cloud Cleaner tool is hosted at" Write-Host "$url" try { # Don't show the progress because it will slow down the download speed $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -UseBasicParsing -ErrorAction SilentlyContinue -Verbose # Revert back the ProgressPreference variable to the default value since we got the file desired $ProgressPreference = 'Continue' Start-Process -FilePath "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Wait -ErrorAction SilentlyContinue -Verbose } catch { Write-Error $_.Exception.Message } finally { if (Test-Path -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe") { Write-Host "Cleaning up..." Remove-Item -Path "$env:TEMP\AdobeCreativeCloudCleanerTool.exe" -Verbose } } } function Invoke-WPFRunspace { <# .SYNOPSIS Creates and invokes a runspace using the given scriptblock and argumentlist .PARAMETER ScriptBlock The scriptblock to invoke in the runspace .PARAMETER ArgumentList A list of arguments to pass to the runspace .PARAMETER ParameterList A list of named parameters that should be provided. .EXAMPLE Invoke-WPFRunspace ` -ScriptBlock $sync.ScriptsInstallPrograms ` -ArgumentList "Installadvancedip,Installbitwarden" ` Invoke-WPFRunspace` -ScriptBlock $sync.ScriptsInstallPrograms ` -ParameterList @(("PackagesToInstall", @("Installadvancedip,Installbitwarden")),("ChocoPreference", $true)) #> [CmdletBinding()] Param ( $ScriptBlock, $ArgumentList, $ParameterList, $DebugPreference ) # Create a PowerShell instance $script:powershell = [powershell]::Create() # Add Scriptblock and Arguments to runspace $script:powershell.AddScript($ScriptBlock) $script:powershell.AddArgument($ArgumentList) foreach ($parameter in $ParameterList) { $script:powershell.AddParameter($parameter[0], $parameter[1]) } $script:powershell.AddArgument($DebugPreference) # Pass DebugPreference to the script block $script:powershell.RunspacePool = $sync.runspace # Execute the RunspacePool $script:handle = $script:powershell.BeginInvoke() # Clean up the RunspacePool threads when they are complete, and invoke the garbage collector to clean up the memory if ($script:handle.IsCompleted) { $script:powershell.EndInvoke($script:handle) $script:powershell.Dispose() $sync.runspace.Dispose() $sync.runspace.Close() [System.GC]::Collect() } # Return the handle return $handle } function Invoke-WPFSelectedAppsUpdate { <# .SYNOPSIS This is a helper function that is called by the Checked and Unchecked events of the Checkboxes on the install tab. It Updates the "Selected Apps" selectedAppLabel on the Install Tab to represent the current collection .PARAMETER type Eigther: Add | Remove .PARAMETER checkbox should contain the current instance of the checkbox that triggered the Event. Most of the time will be the automatic variable $this .EXAMPLE $checkbox.Add_Unchecked({Invoke-WPFSelectedAppsUpdate -type "Remove" -checkbox $this}) OR Invoke-WPFSelectedAppsUpdate -type "Add" -checkbox $specificCheckbox #> param ( $type, $checkbox ) $selectedAppsButton = $sync.WPFselectedAppsButton # Get the actual Name from the selectedAppLabel inside the Checkbox $appKey = $checkbox.Parent.Tag if ($type -eq "Add") { $sync.selectedApps.Add($appKey) # The List type needs to be specified again, because otherwise Sort-Object will convert the list to a string if there is only a single entry [System.Collections.Generic.List[pscustomobject]]$sync.selectedApps = $sync.SelectedApps | Sort-Object } elseif ($type -eq "Remove") { $sync.SelectedApps.Remove($appKey) } else { Write-Error "Type: $type not implemented" } $count = $sync.SelectedApps.Count $selectedAppsButton.Content = "Selected Apps: $count" # On every change, remove all entries inside the Popup Menu. This is done, so we can keep the alphabetical order even if elements are selected in a random way $sync.selectedAppsstackPanel.Children.Clear() $sync.SelectedApps | Foreach-Object { Add-SelectedAppsMenuItem -name $($sync.configs.applicationsHashtable.$_.Content) -key $_ } } function Invoke-WPFSSHServer { <# .SYNOPSIS Invokes the OpenSSH Server install in a runspace #> Invoke-WPFRunspace -DebugPreference $DebugPreference -ScriptBlock { Invoke-WinUtilSSHServer Write-Host "=======================================" Write-Host "-- OpenSSH Server installed! ---" Write-Host "=======================================" } } function Invoke-WPFSystemRepair { <# .SYNOPSIS Checks for system corruption using Chkdsk, SFC, and DISM .DESCRIPTION 1. Chkdsk - Fixes disk and filesystem corruption 2. SFC Run 1 - Fixes system file corruption, and fixes DISM if it was corrupted 3. DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted 4. SFC Run 2 - Fixes system file corruption, this time with an almost guaranteed uncorrupted system image #> function Invoke-Chkdsk { <# .SYNOPSIS Runs chkdsk on the system drive .DESCRIPTION Chkdsk /Scan - Runs an online scan on the system drive, attempts to fix any corruption, and queues other corruption for fixing on reboot #> param( [int]$parentProgressId = 0 ) Write-Progress -Id 1 -ParentId $parentProgressId -Activity $childProgressBarActivity -Status "Running chkdsk..." -PercentComplete 0 $oldpercent = 0 # 2>&1 redirects stdout, allowing iteration over the output chkdsk.exe /scan /perf 2>&1 | ForEach-Object { Write-Debug $_ # Regex to match the total percentage regardless of windows locale (it's always the second percentage in the status output) if ($_ -match "%.*?(\d+)%") { [int]$percent = $matches[1] if ($percent -gt $oldpercent) { Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "Running chkdsk... ($percent%)" -PercentComplete $percent $oldpercent = $percent } } } Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "chkdsk Completed" -PercentComplete 100 -Completed } function Invoke-SFC { <# .SYNOPSIS Runs sfc on the system drive .DESCRIPTION SFC /ScanNow - Performs a scan of the system files and fixes any corruption .NOTES ErrorActionPreference is set locally within a script block & {...} to isolate their effects. ErrorActionPreference suppresses false errors caused by sfc.exe output redirection. A bug in SFC output buffering causes progress updates to appear in chunks when redirecting output #> param( [int]$parentProgressId = 0 ) & { $ErrorActionPreference = "SilentlyContinue" Write-Progress -Id 1 -ParentId $parentProgressId -Activity $childProgressBarActivity -Status "Running SFC..." -PercentComplete 0 $oldpercent = 0 sfc.exe /scannow 2>&1 | ForEach-Object { Write-Debug $_ if ($_ -ne "") { # sfc.exe /scannow outputs unicode characters, so we directly remove null characters for optimization $utf8line = $_ -replace "`0", "" if ($utf8line -match "(\d+)\s*%") { [int]$percent = $matches[1] if ($percent -gt $oldpercent) { Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "Running SFC... ($percent%)" -PercentComplete $percent $oldpercent = $percent } } } } Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "SFC Completed" -PercentComplete 100 -Completed } } function Invoke-DISM { <# .SYNOPSIS Runs DISM on the system drive .DESCRIPTION DISM - Fixes system image corruption, and fixes SFC's system image if it was corrupted /Online - Fixes the currently running system image /Cleanup-Image - Performs cleanup operations on the image, could remove some unneeded temporary files /Restorehealth - Performs a scan of the image and fixes any corruption #> param( [int]$parentProgressId = 0 ) Write-Progress -Id 1 -ParentId $parentProgressId -Activity $childProgressBarActivity -Status "Running DISM..." -PercentComplete 0 $oldpercent = 0 DISM /Online /Cleanup-Image /RestoreHealth | ForEach-Object { Write-Debug $_ # Filter for lines that contain a percentage that is greater than the previous one if ($_ -match "(\d+)[.,]\d+%") { [int]$percent = $matches[1] if ($percent -gt $oldpercent) { # Update the progress bar Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "Running DISM... ($percent%)" -PercentComplete $percent $oldpercent = $percent } } } Write-Progress -Id 1 -Activity $childProgressBarActivity -Status "DISM Completed" -PercentComplete 100 -Completed } try { Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" $childProgressBarActivity = "Scanning for corruption" Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 0 # Step 1: Run chkdsk to fix disk and filesystem corruption before proceeding with system file repairs Invoke-Chkdsk Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 25 # Step 2: Run SFC to fix system file corruption and ensure DISM can operate correctly Invoke-SFC Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 50 # Step 3: Run DISM to repair the system image, which SFC relies on for accurate repairs Invoke-DISM Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 75 # Step 4: Run SFC again to ensure system files are repaired using the now-fixed system image Invoke-SFC Write-Progress -Id 0 -Activity "Repairing Windows" -PercentComplete 100 -Completed Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" } catch { Write-Error "An error occurred while repairing the system: $_" Set-WinUtilTaskbaritem -state "Error" -overlay "warning" } finally { Write-Host "==> Finished System Repair" Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" } } function Invoke-WPFTab { <# .SYNOPSIS Sets the selected tab to the tab that was clicked .PARAMETER ClickedTab The name of the tab that was clicked #> Param ( [Parameter(Mandatory, position = 0)] [string]$ClickedTab ) $tabNav = Get-WinUtilVariables | Where-Object { $psitem -like "WPFTabNav" } $tabNumber = [int]($ClickedTab -replace "WPFTab", "" -replace "BT", "") - 1 $filter = Get-WinUtilVariables -Type ToggleButton | Where-Object { $psitem -like "WPFTab?BT" } ($sync.GetEnumerator()).where{ $psitem.Key -in $filter } | ForEach-Object { if ($ClickedTab -ne $PSItem.name) { $sync[$PSItem.Name].IsChecked = $false } else { $sync["$ClickedTab"].IsChecked = $true $tabNumber = [int]($ClickedTab -replace "WPFTab", "" -replace "BT", "") - 1 $sync.$tabNav.Items[$tabNumber].IsSelected = $true } } $sync.currentTab = $sync.$tabNav.Items[$tabNumber].Header # Always reset the filter for the current tab if ($sync.currentTab -eq "Install") { # Reset Install tab filter Find-AppsByNameOrDescription -SearchString "" } elseif ($sync.currentTab -eq "Tweaks") { # Reset Tweaks tab filter Find-TweaksByNameOrDescription -SearchString "" } # Show search bar in Install and Tweaks tabs if ($tabNumber -eq 0 -or $tabNumber -eq 1) { $sync.SearchBar.Visibility = "Visible" $searchIcon = ($sync.Form.FindName("SearchBar").Parent.Children | Where-Object { $_ -is [System.Windows.Controls.TextBlock] -and $_.Text -eq [char]0xE721 })[0] if ($searchIcon) { $searchIcon.Visibility = "Visible" } } else { $sync.SearchBar.Visibility = "Collapsed" $searchIcon = ($sync.Form.FindName("SearchBar").Parent.Children | Where-Object { $_ -is [System.Windows.Controls.TextBlock] -and $_.Text -eq [char]0xE721 })[0] if ($searchIcon) { $searchIcon.Visibility = "Collapsed" } # Hide the clear button if it's visible $sync.SearchBarClearButton.Visibility = "Collapsed" } } function Invoke-WPFToggleAllCategories { <# .SYNOPSIS Expands or collapses all categories in the Install tab .PARAMETER Action The action to perform: "Expand" or "Collapse" .DESCRIPTION This function iterates through all category containers in the Install tab and expands or collapses their WrapPanels while updating the toggle button labels #> param( [Parameter(Mandatory = $true)] [ValidateSet("Expand", "Collapse")] [string]$Action ) try { if ($null -eq $sync.ItemsControl) { Write-Warning "ItemsControl not initialized" return } $targetVisibility = if ($Action -eq "Expand") { [Windows.Visibility]::Visible } else { [Windows.Visibility]::Collapsed } $targetPrefix = if ($Action -eq "Expand") { "-" } else { "+" } $sourcePrefix = if ($Action -eq "Expand") { "+" } else { "-" } # Iterate through all items in the ItemsControl $sync.ItemsControl.Items | ForEach-Object { $categoryContainer = $_ # Check if this is a category container (StackPanel with children) if ($categoryContainer -is [System.Windows.Controls.StackPanel] -and $categoryContainer.Children.Count -ge 2) { # Get the WrapPanel (second child) $wrapPanel = $categoryContainer.Children[1] $wrapPanel.Visibility = $targetVisibility # Update the label to show the correct state $categoryLabel = $categoryContainer.Children[0] if ($categoryLabel.Content -like "$sourcePrefix*") { $categoryLabel.Content = $categoryLabel.Content -replace "^$sourcePrefix ", "$targetPrefix " } } } } catch { Write-Error "Error toggling categories: $_" } } function Invoke-WPFtweaksbutton { <# .SYNOPSIS Invokes the functions associated with each group of checkboxes #> if ($sync.ProcessRunning) { $msg = "[Invoke-WPFtweaksbutton] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } $Tweaks = (Get-WinUtilCheckBoxes)["WPFTweaks"] Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default") { $msg = "Please check the tweaks you wish to perform." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } Write-Debug "Number of tweaks to process: $($Tweaks.Count)" # The leading "," in the ParameterList is necessary because we only provide one argument and powershell cannot be convinced that we want a nested loop with only one argument otherwise Invoke-WPFRunspace -ParameterList @(, ("tweaks", $tweaks)) -DebugPreference $DebugPreference -ScriptBlock { param( $tweaks, $DebugPreference ) Write-Debug "Inside Number of tweaks to process: $($Tweaks.Count)" $sync.ProcessRunning = $true if ($Tweaks.count -eq 1) { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) } # Execute other selected tweaks for ($i = 0; $i -lt $Tweaks.Count; $i++) { Set-WinUtilProgressBar -Label "Applying $($tweaks[$i])" -Percent ($i / $tweaks.Count * 100) Invoke-WinUtilTweaks $tweaks[$i] $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -value ($i / $Tweaks.Count) }) } Set-WinUtilProgressBar -Label "Tweaks finished" -Percent 100 $sync.ProcessRunning = $false $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) Write-Host "=================================" Write-Host "-- Tweaks are Finished ---" Write-Host "=================================" # $ButtonType = [System.Windows.MessageBoxButton]::OK # $MessageboxTitle = "Tweaks are Finished " # $Messageboxbody = ("Done") # $MessageIcon = [System.Windows.MessageBoxImage]::Information # [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) } } function Invoke-WPFUIElements { <# .SYNOPSIS Adds UI elements to a specified Grid in the WinUtil GUI based on a JSON configuration. .PARAMETER configVariable The variable/link containing the JSON configuration. .PARAMETER targetGridName The name of the grid to which the UI elements should be added. .PARAMETER columncount The number of columns to be used in the Grid. If not provided, a default value is used based on the panel. .EXAMPLE Invoke-WPFUIElements -configVariable $sync.configs.applications -targetGridName "install" -columncount 5 .NOTES Future me/contributor: If possible, please wrap this into a runspace to make it load all panels at the same time. #> param( [Parameter(Mandatory, Position = 0)] [PSCustomObject]$configVariable, [Parameter(Mandatory, Position = 1)] [string]$targetGridName, [Parameter(Mandatory, Position = 2)] [int]$columncount ) $window = $sync.form $borderstyle = $window.FindResource("BorderStyle") $HoverTextBlockStyle = $window.FindResource("HoverTextBlockStyle") $ColorfulToggleSwitchStyle = $window.FindResource("ColorfulToggleSwitchStyle") $ToggleButtonStyle = $window.FindResource("ToggleButtonStyle") if (!$borderstyle -or !$HoverTextBlockStyle -or !$ColorfulToggleSwitchStyle) { throw "Failed to retrieve Styles using 'FindResource' from main window element." } $targetGrid = $window.FindName($targetGridName) if (!$targetGrid) { throw "Failed to retrieve Target Grid by name, provided name: $targetGrid" } # Clear existing ColumnDefinitions and Children $targetGrid.ColumnDefinitions.Clear() | Out-Null $targetGrid.Children.Clear() | Out-Null # Add ColumnDefinitions to the target Grid for ($i = 0; $i -lt $columncount; $i++) { $colDef = New-Object Windows.Controls.ColumnDefinition $colDef.Width = New-Object Windows.GridLength(1, [Windows.GridUnitType]::Star) $targetGrid.ColumnDefinitions.Add($colDef) | Out-Null } # Convert PSCustomObject to Hashtable $configHashtable = @{} $configVariable.PSObject.Properties.Name | ForEach-Object { $configHashtable[$_] = $configVariable.$_ } $radioButtonGroups = @{} $organizedData = @{} # Iterate through JSON data and organize by panel and category foreach ($entry in $configHashtable.Keys) { $entryInfo = $configHashtable[$entry] # Filter for sidebar: only show categories starting with underscores if ($targetGridName -eq "appscategory" -and $entryInfo.Category -notmatch "^_") { continue } # Create an object for the application $entryObject = [PSCustomObject]@{ Name = $entry Category = $entryInfo.Category Content = $entryInfo.Content Panel = if ($entryInfo.Panel) { $entryInfo.Panel } else { "0" } Link = $entryInfo.link Description = $entryInfo.description Type = $entryInfo.type ComboItems = $entryInfo.ComboItems Checked = $entryInfo.Checked ButtonWidth = $entryInfo.ButtonWidth GroupName = $entryInfo.GroupName # Added for RadioButton groupings } if (-not $organizedData.ContainsKey($entryObject.Panel)) { $organizedData[$entryObject.Panel] = @{} } if (-not $organizedData[$entryObject.Panel].ContainsKey($entryObject.Category)) { $organizedData[$entryObject.Panel][$entryObject.Category] = @() } # Store application data in an array under the category $organizedData[$entryObject.Panel][$entryObject.Category] += $entryObject } # Initialize panel count $panelcount = 0 # Iterate through 'organizedData' by panel, category, and application $count = 0 foreach ($panelKey in ($organizedData.Keys | Sort-Object)) { # Create a Border for each column $border = New-Object Windows.Controls.Border $border.VerticalAlignment = "Stretch" [System.Windows.Controls.Grid]::SetColumn($border, $panelcount) $border.style = $borderstyle $targetGrid.Children.Add($border) | Out-Null # Use a DockPanel to contain the content $dockPanelContainer = New-Object Windows.Controls.DockPanel $border.Child = $dockPanelContainer # Create an ItemsControl for application content $itemsControl = New-Object Windows.Controls.ItemsControl $itemsControl.HorizontalAlignment = 'Stretch' $itemsControl.VerticalAlignment = 'Stretch' # Set the ItemsPanel to a VirtualizingStackPanel $itemsPanelTemplate = New-Object Windows.Controls.ItemsPanelTemplate $factory = New-Object Windows.FrameworkElementFactory ([Windows.Controls.VirtualizingStackPanel]) $itemsPanelTemplate.VisualTree = $factory $itemsControl.ItemsPanel = $itemsPanelTemplate # Set virtualization properties $itemsControl.SetValue([Windows.Controls.VirtualizingStackPanel]::IsVirtualizingProperty, $true) $itemsControl.SetValue([Windows.Controls.VirtualizingStackPanel]::VirtualizationModeProperty, [Windows.Controls.VirtualizationMode]::Recycling) # Add the ItemsControl directly to the DockPanel [Windows.Controls.DockPanel]::SetDock($itemsControl, [Windows.Controls.Dock]::Bottom) $dockPanelContainer.Children.Add($itemsControl) | Out-Null $panelcount++ # Now proceed with adding category labels and entries to $itemsControl foreach ($category in ($organizedData[$panelKey].Keys | Sort-Object)) { $count++ $label = New-Object Windows.Controls.Label $label.Content = $category -replace ".*__", "" $label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "HeaderFontSize") $label.SetResourceReference([Windows.Controls.Control]::FontFamilyProperty, "HeaderFontFamily") $label.UseLayoutRounding = $true $itemsControl.Items.Add($label) | Out-Null $sync[$category] = $label # Sort entries by type (checkboxes first, then buttons, then comboboxes) and then alphabetically by Content $entries = $organizedData[$panelKey][$category] | Sort-Object @{Expression = { switch ($_.Type) { 'Button' { 1 } 'Combobox' { 2 } default { 0 } } } }, Content foreach ($entryInfo in $entries) { $count++ # Create the UI elements based on the entry type switch ($entryInfo.Type) { "Toggle" { $dockPanel = New-Object Windows.Controls.DockPanel $checkBox = New-Object Windows.Controls.CheckBox $checkBox.Name = $entryInfo.Name $checkBox.HorizontalAlignment = "Right" $checkBox.UseLayoutRounding = $true [System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content) $dockPanel.Children.Add($checkBox) | Out-Null $checkBox.Style = $ColorfulToggleSwitchStyle $label = New-Object Windows.Controls.Label $label.Content = $entryInfo.Content $label.ToolTip = $entryInfo.Description $label.HorizontalAlignment = "Left" $label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize") $label.SetResourceReference([Windows.Controls.Control]::ForegroundProperty, "MainForegroundColor") $label.UseLayoutRounding = $true $dockPanel.Children.Add($label) | Out-Null $itemsControl.Items.Add($dockPanel) | Out-Null $sync[$entryInfo.Name] = $checkBox $sync[$entryInfo.Name].IsChecked = (Get-WinUtilToggleStatus $entryInfo.Name) $sync[$entryInfo.Name].Add_Checked({ [System.Object]$Sender = $args[0] Invoke-WinUtilTweaks $sender.name }) $sync[$entryInfo.Name].Add_Unchecked({ [System.Object]$Sender = $args[0] Invoke-WinUtiltweaks $sender.name -undo $true }) } "ToggleButton" { $toggleButton = New-Object Windows.Controls.Primitives.ToggleButton $toggleButton.Name = $entryInfo.Name $toggleButton.Content = $entryInfo.Content[1] $toggleButton.ToolTip = $entryInfo.Description $toggleButton.HorizontalAlignment = "Left" $toggleButton.Style = $ToggleButtonStyle [System.Windows.Automation.AutomationProperties]::SetName($toggleButton, $entryInfo.Content[0]) $toggleButton.Tag = @{ contentOn = if ($entryInfo.Content.Count -ge 1) { $entryInfo.Content[0] } else { "" } contentOff = if ($entryInfo.Content.Count -ge 2) { $entryInfo.Content[1] } else { $contentOn } } $itemsControl.Items.Add($toggleButton) | Out-Null $sync[$entryInfo.Name] = $toggleButton $sync[$entryInfo.Name].Add_Checked({ $this.Content = $this.Tag.contentOn }) $sync[$entryInfo.Name].Add_Unchecked({ $this.Content = $this.Tag.contentOff }) } "Combobox" { $horizontalStackPanel = New-Object Windows.Controls.StackPanel $horizontalStackPanel.Orientation = "Horizontal" $horizontalStackPanel.Margin = "0,5,0,0" $label = New-Object Windows.Controls.Label $label.Content = $entryInfo.Content $label.HorizontalAlignment = "Left" $label.VerticalAlignment = "Center" $label.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $label.UseLayoutRounding = $true $horizontalStackPanel.Children.Add($label) | Out-Null $comboBox = New-Object Windows.Controls.ComboBox $comboBox.Name = $entryInfo.Name $comboBox.SetResourceReference([Windows.Controls.Control]::HeightProperty, "ButtonHeight") $comboBox.SetResourceReference([Windows.Controls.Control]::WidthProperty, "ButtonWidth") $comboBox.HorizontalAlignment = "Left" $comboBox.VerticalAlignment = "Center" $comboBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin") $comboBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $comboBox.UseLayoutRounding = $true [System.Windows.Automation.AutomationProperties]::SetName($comboBox, $entryInfo.Content) foreach ($comboitem in ($entryInfo.ComboItems -split " ")) { $comboBoxItem = New-Object Windows.Controls.ComboBoxItem $comboBoxItem.Content = $comboitem $comboBoxItem.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $comboBoxItem.UseLayoutRounding = $true $comboBox.Items.Add($comboBoxItem) | Out-Null } $horizontalStackPanel.Children.Add($comboBox) | Out-Null $itemsControl.Items.Add($horizontalStackPanel) | Out-Null $comboBox.SelectedIndex = 0 # Set initial text if ($comboBox.Items.Count -gt 0) { $comboBox.Text = $comboBox.Items[0].Content } # Add SelectionChanged event handler to update the text property $comboBox.Add_SelectionChanged({ $selectedItem = $this.SelectedItem if ($selectedItem) { $this.Text = $selectedItem.Content } }) $sync[$entryInfo.Name] = $comboBox } "Button" { $button = New-Object Windows.Controls.Button $button.Name = $entryInfo.Name $button.Content = $entryInfo.Content $button.HorizontalAlignment = "Left" $button.SetResourceReference([Windows.Controls.Control]::MarginProperty, "ButtonMargin") $button.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") if ($entryInfo.ButtonWidth) { $baseWidth = [int]$entryInfo.ButtonWidth $button.Width = [math]::Max($baseWidth, 350) } [System.Windows.Automation.AutomationProperties]::SetName($button, $entryInfo.Content) $itemsControl.Items.Add($button) | Out-Null $sync[$entryInfo.Name] = $button } "RadioButton" { # Check if a container for this GroupName already exists if (-not $radioButtonGroups.ContainsKey($entryInfo.GroupName)) { # Create a StackPanel for this group $groupStackPanel = New-Object Windows.Controls.StackPanel $groupStackPanel.Orientation = "Vertical" # Add the group container to the ItemsControl $itemsControl.Items.Add($groupStackPanel) | Out-Null } else { # Retrieve the existing group container $groupStackPanel = $radioButtonGroups[$entryInfo.GroupName] } # Create the RadioButton $radioButton = New-Object Windows.Controls.RadioButton $radioButton.Name = $entryInfo.Name $radioButton.GroupName = $entryInfo.GroupName $radioButton.Content = $entryInfo.Content $radioButton.HorizontalAlignment = "Left" $radioButton.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin") $radioButton.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "ButtonFontSize") $radioButton.ToolTip = $entryInfo.Description $radioButton.UseLayoutRounding = $true [System.Windows.Automation.AutomationProperties]::SetName($radioButton, $entryInfo.Content) if ($entryInfo.Checked -eq $true) { $radioButton.IsChecked = $true } # Add the RadioButton to the group container $groupStackPanel.Children.Add($radioButton) | Out-Null $sync[$entryInfo.Name] = $radioButton } default { $horizontalStackPanel = New-Object Windows.Controls.StackPanel $horizontalStackPanel.Orientation = "Horizontal" $checkBox = New-Object Windows.Controls.CheckBox $checkBox.Name = $entryInfo.Name $checkBox.Content = $entryInfo.Content $checkBox.SetResourceReference([Windows.Controls.Control]::FontSizeProperty, "FontSize") $checkBox.ToolTip = $entryInfo.Description $checkBox.SetResourceReference([Windows.Controls.Control]::MarginProperty, "CheckBoxMargin") $checkBox.UseLayoutRounding = $true [System.Windows.Automation.AutomationProperties]::SetName($checkBox, $entryInfo.Content) if ($entryInfo.Checked -eq $true) { $checkBox.IsChecked = $entryInfo.Checked } $horizontalStackPanel.Children.Add($checkBox) | Out-Null if ($entryInfo.Link) { $textBlock = New-Object Windows.Controls.TextBlock $textBlock.Name = $checkBox.Name + "Link" $textBlock.Text = "(?)" $textBlock.ToolTip = $entryInfo.Link $textBlock.Style = $HoverTextBlockStyle $textBlock.UseLayoutRounding = $true $horizontalStackPanel.Children.Add($textBlock) | Out-Null $sync[$textBlock.Name] = $textBlock } $itemsControl.Items.Add($horizontalStackPanel) | Out-Null $sync[$entryInfo.Name] = $checkBox } } } } } } Function Invoke-WPFUltimatePerformance { <# .SYNOPSIS Enables or disables the Ultimate Performance power scheme based on its GUID. .PARAMETER State Specifies whether to "Enable" or "Disable" the Ultimate Performance power scheme. #> param( [Parameter(Mandatory = $true)] [ValidateSet("Enable", "Disable")] [string]$State ) try { # GUID of the Ultimate Performance power plan $ultimateGUID = "e9a42b02-d5df-448d-aa00-03f14749eb61" switch ($State) { "Enable" { # Duplicate the Ultimate Performance power plan using its GUID $duplicateOutput = powercfg /duplicatescheme $ultimateGUID $guid = $null $nameFromFile = "ChrisTitus - Ultimate Power Plan" $description = "Ultimate Power Plan, added via WinUtils" # Extract the new GUID from the duplicateOutput foreach ($line in $duplicateOutput) { if ($line -match "\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b") { $guid = $matches[0] # $matches[0] will contain the first match, which is the GUID Write-Output "GUID: $guid has been extracted and stored in the variable." break } } if (-not $guid) { Write-Output "No GUID found in the duplicateOutput. Check the output format." exit 1 } # Change the name of the power plan and set its description $changeNameOutput = powercfg /changename $guid "$nameFromFile" "$description" Write-Output "The power plan name and description have been changed. Output:" Write-Output $changeNameOutput # Set the duplicated Ultimate Performance plan as active $setActiveOutput = powercfg /setactive $guid Write-Output "The power plan has been set as active. Output:" Write-Output $setActiveOutput Write-Host "> Ultimate Performance plan installed and set as active." } "Disable" { # Check if the Ultimate Performance plan is installed by GUID $installedPlan = powercfg -list | Select-String -Pattern "ChrisTitus - Ultimate Power Plan" if ($installedPlan) { # Extract the GUID of the installed Ultimate Performance plan $ultimatePlanGUID = $installedPlan.Line.Split()[3] # Set a different power plan as active before deleting the Ultimate Performance plan $balancedPlanGUID = "381b4222-f694-41f0-9685-ff5bb260df2e" powercfg -setactive $balancedPlanGUID # Delete the Ultimate Performance plan by GUID powercfg -delete $ultimatePlanGUID Write-Host "Ultimate Performance plan has been uninstalled." Write-Host "> Balanced plan is now active." } else { Write-Host "Ultimate Performance plan is not installed." } } default { Write-Host "Invalid state. Please use 'Enable' or 'Disable'." } } } catch { Write-Error "Error occurred: $_" } } function Invoke-WPFundoall { <# .SYNOPSIS Undoes every selected tweak #> if ($sync.ProcessRunning) { $msg = "[Invoke-WPFundoall] Install process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } $tweaks = (Get-WinUtilCheckBoxes)["WPFtweaks"] if ($tweaks.count -eq 0) { $msg = "Please check the tweaks you wish to undo." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } Invoke-WPFRunspace -ArgumentList $tweaks -DebugPreference $DebugPreference -ScriptBlock { param($tweaks, $DebugPreference) $sync.ProcessRunning = $true if ($tweaks.count -eq 1) { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" }) } else { $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" }) } for ($i = 0; $i -lt $tweaks.Count; $i++) { Set-WinUtilProgressBar -Label "Undoing $($tweaks[$i])" -Percent ($i / $tweaks.Count * 100) Invoke-WinUtiltweaks $tweaks[$i] -undo $true $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -value ($i / $tweaks.Count) }) } Set-WinUtilProgressBar -Label "Undo Tweaks Finished" -Percent 100 $sync.ProcessRunning = $false $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) Write-Host "==================================" Write-Host "--- Undo Tweaks are Finished ---" Write-Host "==================================" } } function Invoke-WPFUnInstall { param( [Parameter(Mandatory = $false)] [PSObject[]]$PackagesToUninstall = $($sync.selectedApps | Foreach-Object { $sync.configs.applicationsHashtable.$_ }) ) <# .SYNOPSIS Uninstalls the selected programs #> if ($sync.ProcessRunning) { $msg = "[Invoke-WPFUnInstall] Install process is currently running" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } if ($PackagesToUninstall.Count -eq 0) { $WarningMsg = "Please select the program(s) to uninstall" [System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } $ButtonType = [System.Windows.MessageBoxButton]::YesNo $MessageboxTitle = "Are you sure?" $Messageboxbody = ("This will uninstall the following applications: `n $($PackagesToUninstall | Select-Object Name, Description| Out-String)") $MessageIcon = [System.Windows.MessageBoxImage]::Information $confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) if ($confirm -eq "No") { return } $ManagerPreference = $sync["ManagerPreference"] Invoke-WPFRunspace -ArgumentList @(("PackagesToUninstall", $PackagesToUninstall), ("ManagerPreference", $ManagerPreference)) -DebugPreference $DebugPreference -ScriptBlock { param($PackagesToUninstall, $ManagerPreference, $DebugPreference) $packagesSorted = Get-WinUtilSelectedPackages -PackageList $PackagesToUninstall -Preference $ManagerPreference $packagesWinget = $packagesSorted[[PackageManagers]::Winget] $packagesChoco = $packagesSorted[[PackageManagers]::Choco] try { $sync.ProcessRunning = $true Show-WPFInstallAppBusy -text "Uninstalling apps..." # Uninstall all selected programs in new window if ($packagesWinget.Count -gt 0) { Install-WinUtilProgramWinget -Action Uninstall -Programs $packagesWinget } if ($packagesChoco.Count -gt 0) { Install-WinUtilProgramChoco -Action Uninstall -Programs $packagesChoco } Hide-WPFInstallAppBusy Write-Host "===========================================" Write-Host "-- Uninstalls have finished ---" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) } catch { Write-Host "===========================================" Write-Host "Error: $_" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action] { Set-WinUtilTaskbaritem -state "Error" -overlay "warning" }) } $sync.ProcessRunning = $False } } function Invoke-WPFUpdatesdefault { <# .SYNOPSIS Resets Windows Update settings to default #> $ErrorActionPreference = 'SilentlyContinue' Write-Host "Removing Windows Update policy settings..." -ForegroundColor Green Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Recurse -Force Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization" -Recurse -Force Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Recurse -Force Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Recurse -Force Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Recurse -Force Remove-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Recurse -Force Write-Host "Reenabling Windows Update Services..." -ForegroundColor Green Write-Host "Restored BITS to Manual" Set-Service -Name BITS -StartupType Manual Write-Host "Restored wuauserv to Manual" Set-Service -Name wuauserv -StartupType Manual Write-Host "Restored UsoSvc to Automatic" Set-Service -Name UsoSvc -StartupType Automatic Write-Host "Restored WaaSMedicSvc to Manual" Set-Service -Name WaaSMedicSvc -StartupType Manual Write-Host "Enabling update related scheduled tasks..." -ForegroundColor Green $Tasks = '\Microsoft\Windows\InstallService\*', '\Microsoft\Windows\UpdateOrchestrator\*', '\Microsoft\Windows\UpdateAssistant\*', '\Microsoft\Windows\WaaSMedic\*', '\Microsoft\Windows\WindowsUpdate\*', '\Microsoft\WindowsUpdate\*' foreach ($Task in $Tasks) { Get-ScheduledTask -TaskPath $Task | Enable-ScheduledTask -ErrorAction SilentlyContinue } Write-Host "Windows Local Policies Reset to Default" secedit /configure /cfg "$Env:SystemRoot\inf\defltbase.inf" /db defltbase.sdb Write-Host "===================================================" -ForegroundColor Green Write-Host "--- Windows Update Settings Reset to Default ---" -ForegroundColor Green Write-Host "===================================================" -ForegroundColor Green Write-Host "Note: You must restart your system in order for all changes to take effect." -ForegroundColor Yellow } function Invoke-WPFUpdatesdisable { <# .SYNOPSIS Disables Windows Update .NOTES Disabling Windows Update is not recommended. This is only for advanced users who know what they are doing. #> $ErrorActionPreference = 'SilentlyContinue' Write-Host "Configuring registry settings..." -ForegroundColor Yellow New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Type DWord -Value 1 Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Type DWord -Value 1 New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Config" -Name "DODownloadMode" -Type DWord -Value 0 Write-Host "Disabled BITS Service" Set-Service -Name BITS -StartupType Disabled Write-Host "Disabled wuauserv Service" Set-Service -Name wuauserv -StartupType Disabled Write-Host "Disabled UsoSvc Service" Set-Service -Name UsoSvc -StartupType Disabled Write-Host "Disabled WaaSMedicSvc Service" Set-Service -Name WaaSMedicSvc -StartupType Disabled Remove-Item "C:\Windows\SoftwareDistribution\*" -Recurse -Force Write-Host "Cleared SoftwareDistribution folder" Write-Host "Disabling update related scheduled tasks..." -ForegroundColor Yellow $Tasks = '\Microsoft\Windows\InstallService\*', '\Microsoft\Windows\UpdateOrchestrator\*', '\Microsoft\Windows\UpdateAssistant\*', '\Microsoft\Windows\WaaSMedic\*', '\Microsoft\Windows\WindowsUpdate\*', '\Microsoft\WindowsUpdate\*' foreach ($Task in $Tasks) { Get-ScheduledTask -TaskPath $Task | Disable-ScheduledTask -ErrorAction SilentlyContinue } Write-Host "=================================" -ForegroundColor Green Write-Host "--- Updates Are Disabled ---" -ForegroundColor Green Write-Host "=================================" -ForegroundColor Green Write-Host "Note: You must restart your system in order for all changes to take effect." -ForegroundColor Yellow } function Invoke-WPFUpdatessecurity { <# .SYNOPSIS Sets Windows Update to recommended settings .DESCRIPTION 1. Disables driver offering through Windows Update 2. Disables Windows Update automatic restart 3. Sets Windows Update to Semi-Annual Channel (Targeted) 4. Defers feature updates for 365 days 5. Defers quality updates for 4 days #> Write-Host "Disabling driver offering through Windows Update..." New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Device Metadata" -Name "PreventDeviceMetadataFromNetwork" -Type DWord -Value 1 New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontPromptForWindowsUpdate" -Type DWord -Value 1 Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DontSearchWindowsUpdate" -Type DWord -Value 1 Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DriverSearching" -Name "DriverUpdateWizardWuSearchEnabled" -Type DWord -Value 0 New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -Type DWord -Value 1 Write-Host "Setting cumulative updates back by 1 year and security updates by 4 days" New-Item -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "BranchReadinessLevel" -Type DWord -Value 20 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferFeatureUpdatesPeriodInDays" -Type DWord -Value 365 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings" -Name "DeferQualityUpdatesPeriodInDays" -Type DWord -Value 4 Write-Host "Disabling Windows Update automatic restart..." New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -Type DWord -Value 1 Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUPowerManagement" -Type DWord -Value 0 Write-Host "=================================" Write-Host "-- Updates Set to Recommended ---" Write-Host "=================================" } Function Show-CTTLogo { <# .SYNOPSIS Displays the CTT logo in ASCII art. .DESCRIPTION This function displays the CTT logo in ASCII art format. .PARAMETER None No parameters are required for this function. .EXAMPLE Show-CTTLogo Prints the CTT logo in ASCII art format to the console. #> $asciiArt = @" JJJJJJJJJJJJJ MMMMMMMM MMMMMMMM CCCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTT J::::::::::::J M:::::::M M:::::::M CCC::::::::::::CT:::::::::::::::::::::T J::::::::::::J M::::::::M M::::::::M CC:::::::::::::::CT:::::::::::::::::::::T JJJJJ:::::JJJJ M:::::::::M M:::::::::M C:::::CCCCCCCC::::CT:::::TT:::::::TT:::::T J::::J M::M:::::::M M:::::::M::M C:::::C CCCCCC TTTTTT T:::::T TTTTTT J::::J M::M M:::::::M M:::::::M ::MC:::::C T:::::T J::::J M::M M:::::::M M:::::::M ::MC:::::C T:::::T J::::J M::M M:::::::M M:::::::M ::MC:::::C T:::::T J::::J M::M M:::::::M:::::::M ::MC:::::C T:::::T J::::J M::M M:::::::::::::M ::MC:::::C T:::::T J::::J M::M M:::::::::::M ::MC:::::C T:::::T J::::J M::M M:::::::::M ::MC:::::C CCCCCC T:::::T JJJJJ:::::J M::M M:::::::M ::M C:::::CCCCCCCC::::C TT:::::::TT J:::::::::J M::M M:::::M ::M CC:::::::::::::::C T:::::::::T J:::::::::J M::M M:::M ::M CCC::::::::::::C T:::::::::T JJJJJJJJJ MMMM MMM MMM CCCCCCCCCCCCC TTTTTTTTTTT =================================== JMCT ============================================== ============================= Windows Godmode ========================================= "@ Write-Host $asciiArt } $sync.configs.applications = @' { "WPFInstall1password": { "category": "Utilities", "choco": "1password", "content": "1Password", "description": "1Password is a password manager that allows you to store and manage your passwords securely.", "link": "https://1password.com/", "winget": "AgileBits.1Password" }, "WPFInstall7zip": { "category": "Utilities", "choco": "7zip", "content": "7-Zip", "description": "7-Zip is a free and open-source file archiver utility. It supports several compression formats and provides a high compression ratio, making it a popular choice for file compression.", "link": "https://www.7-zip.org/", "winget": "7zip.7zip" }, "WPFInstalladobe": { "category": "Document", "choco": "adobereader", "content": "Adobe Acrobat Reader", "description": "Adobe Acrobat Reader is a free PDF viewer with essential features for viewing, printing, and annotating PDF documents.", "link": "https://www.adobe.com/acrobat/pdf-reader.html", "winget": "Adobe.Acrobat.Reader.64-bit" }, "WPFInstalladvancedip": { "category": "Pro Tools", "choco": "advanced-ip-scanner", "content": "Advanced IP Scanner", "description": "Advanced IP Scanner is a fast and easy-to-use network scanner. It is designed to analyze LAN networks and provides information about connected devices.", "link": "https://www.advanced-ip-scanner.com/", "winget": "Famatech.AdvancedIPScanner" }, "WPFInstallaffine": { "category": "Document", "choco": "na", "content": "AFFiNE", "description": "AFFiNE is an open source alternative to Notion. Write, draw, plan all at once. Selfhost it to sync across devices.", "link": "https://affine.pro/", "winget": "ToEverything.AFFiNE" }, "WPFInstallaimp": { "category": "Multimedia Tools", "choco": "aimp", "content": "AIMP (Music Player)", "description": "AIMP is a feature-rich music player with support for various audio formats, playlists, and customizable user interface.", "link": "https://www.aimp.ru/", "winget": "AIMP.AIMP" }, "WPFInstallalacritty": { "category": "Utilities", "choco": "alacritty", "content": "Alacritty Terminal", "description": "Alacritty is a fast, cross-platform, and GPU-accelerated terminal emulator. It is designed for performance and aims to be the fastest terminal emulator available.", "link": "https://alacritty.org/", "winget": "Alacritty.Alacritty" }, "WPFInstallanaconda3": { "category": "Development", "choco": "anaconda3", "content": "Anaconda", "description": "Anaconda is a distribution of the Python and R programming languages for scientific computing.", "link": "https://www.anaconda.com/products/distribution", "winget": "Anaconda.Anaconda3" }, "WPFInstallangryipscanner": { "category": "Pro Tools", "choco": "angryip", "content": "Angry IP Scanner", "description": "Angry IP Scanner is an open-source and cross-platform network scanner. It is used to scan IP addresses and ports, providing information about network connectivity.", "link": "https://angryip.org/", "winget": "angryziber.AngryIPScanner" }, "WPFInstallanki": { "category": "Document", "choco": "anki", "content": "Anki", "description": "Anki is a flashcard application that helps you memorize information with intelligent spaced repetition.", "link": "https://apps.ankiweb.net/", "winget": "Anki.Anki" }, "WPFInstallanydesk": { "category": "Utilities", "choco": "anydesk", "content": "AnyDesk", "description": "AnyDesk is a remote desktop software that enables users to access and control computers remotely. It is known for its fast connection and low latency.", "link": "https://anydesk.com/", "winget": "AnyDesk.AnyDesk" }, "WPFInstallaudacity": { "category": "Multimedia Tools", "choco": "audacity", "content": "Audacity", "description": "Audacity is a free and open-source audio editing software known for its powerful recording and editing capabilities.", "link": "https://www.audacityteam.org/", "winget": "Audacity.Audacity" }, "WPFInstallautoruns": { "category": "Microsoft Tools", "choco": "autoruns", "content": "Autoruns", "description": "This utility shows you what programs are configured to run during system bootup or login", "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns", "winget": "Microsoft.Sysinternals.Autoruns" }, "WPFInstallrdcman": { "category": "Microsoft Tools", "choco": "rdcman", "content": "RDCMan", "description": "RDCMan manages multiple remote desktop connections. It is useful for managing server labs where you need regular access to each machine such as automated checkin systems and data centers.", "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/rdcman", "winget": "Microsoft.Sysinternals.RDCMan" }, "WPFInstallautohotkey": { "category": "Utilities", "choco": "autohotkey", "content": "AutoHotkey", "description": "AutoHotkey is a scripting language for Windows that allows users to create custom automation scripts and macros. It is often used for automating repetitive tasks and customizing keyboard shortcuts.", "link": "https://www.autohotkey.com/", "winget": "AutoHotkey.AutoHotkey" }, "WPFInstallazuredatastudio": { "category": "Microsoft Tools", "choco": "azure-data-studio", "content": "Microsoft Azure Data Studio", "description": "Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.", "link": "https://docs.microsoft.com/sql/azure-data-studio/what-is-azure-data-studio", "winget": "Microsoft.AzureDataStudio" }, "WPFInstallbarrier": { "category": "Utilities", "choco": "barrier", "content": "Barrier", "description": "Barrier is an open-source software KVM (keyboard, video, and mouseswitch). It allows users to control multiple computers with a single keyboard and mouse, even if they have different operating systems.", "link": "https://github.com/debauchee/barrier", "winget": "DebaucheeOpenSourceGroup.Barrier" }, "WPFInstallbat": { "category": "Utilities", "choco": "bat", "content": "Bat (Cat)", "description": "Bat is a cat command clone with syntax highlighting. It provides a user-friendly and feature-rich alternative to the traditional cat command for viewing and concatenating files.", "link": "https://github.com/sharkdp/bat", "winget": "sharkdp.bat" }, "WPFInstallbeeper": { "category": "Communications", "choco": "na", "content": "Beeper", "description": "All your chats in one app", "link": "https://www.beeper.com/", "winget": "Beeper.Beeper" }, "WPFInstallbitwarden": { "category": "Utilities", "choco": "bitwarden", "content": "Bitwarden", "description": "Bitwarden is an open-source password management solution. It allows users to store and manage their passwords in a secure and encrypted vault, accessible across multiple devices.", "link": "https://bitwarden.com/", "winget": "Bitwarden.Bitwarden" }, "WPFInstallbleachbit": { "category": "Utilities", "choco": "bleachbit", "content": "BleachBit", "description": "Clean Your System and Free Disk Space", "link": "https://www.bleachbit.org/", "winget": "BleachBit.BleachBit" }, "WPFInstallblender": { "category": "Multimedia Tools", "choco": "blender", "content": "Blender (3D Graphics)", "description": "Blender is a powerful open-source 3D creation suite, offering modeling, sculpting, animation, and rendering tools.", "link": "https://www.blender.org/", "winget": "BlenderFoundation.Blender" }, "WPFInstallbrave": { "category": "Browsers", "choco": "brave", "content": "Brave", "description": "Brave is a privacy-focused web browser that blocks ads and trackers, offering a faster and safer browsing experience.", "link": "https://www.brave.com", "winget": "Brave.Brave" }, "WPFInstallbulkcrapuninstaller": { "category": "Utilities", "choco": "bulk-crap-uninstaller", "content": "Bulk Crap Uninstaller", "description": "Bulk Crap Uninstaller is a free and open-source uninstaller utility for Windows. It helps users remove unwanted programs and clean up their system by uninstalling multiple applications at once.", "link": "https://www.bcuninstaller.com/", "winget": "Klocman.BulkCrapUninstaller" }, "WPFInstallbulkrenameutility": { "category": "Utilities", "choco": "bulkrenameutility", "content": "Bulk Rename Utility", "description": "Bulk Rename Utility allows you to easily rename files and folders recursively based upon find-replace, character place, fields, sequences, regular expressions, EXIF data, and more.", "link": "https://www.bulkrenameutility.co.uk", "winget": "TGRMNSoftware.BulkRenameUtility" }, "WPFInstallAdvancedRenamer": { "category": "Utilities", "choco": "advanced-renamer", "content": "Advanced Renamer", "description": "Advanced Renamer is a program for renaming multiple files and folders at once. By configuring renaming methods the names can be manipulated in various ways.", "link": "https://www.advancedrenamer.com/", "winget": "HulubuluSoftware.AdvancedRenamer" }, "WPFInstallcalibre": { "category": "Document", "choco": "calibre", "content": "Calibre", "description": "Calibre is a powerful and easy-to-use e-book manager, viewer, and converter.", "link": "https://calibre-ebook.com/", "winget": "calibre.calibre" }, "WPFInstallcarnac": { "category": "Utilities", "choco": "carnac", "content": "Carnac", "description": "Carnac is a keystroke visualizer for Windows. It displays keystrokes in an overlay, making it useful for presentations, tutorials, and live demonstrations.", "link": "https://carnackeys.com/", "winget": "code52.Carnac" }, "WPFInstallcemu": { "category": "Games", "choco": "cemu", "content": "Cemu", "description": "Cemu is a highly experimental software to emulate Wii U applications on PC.", "link": "https://cemu.info/", "winget": "Cemu.Cemu" }, "WPFInstallchatterino": { "category": "Communications", "choco": "chatterino", "content": "Chatterino", "description": "Chatterino is a chat client for Twitch chat that offers a clean and customizable interface for a better streaming experience.", "link": "https://www.chatterino.com/", "winget": "ChatterinoTeam.Chatterino" }, "WPFInstallchrome": { "category": "Browsers", "choco": "googlechrome", "content": "Chrome", "description": "Google Chrome is a widely used web browser known for its speed, simplicity, and seamless integration with Google services.", "link": "https://www.google.com/chrome/", "winget": "Google.Chrome" }, "WPFInstallchromium": { "category": "Browsers", "choco": "chromium", "content": "Chromium", "description": "Chromium is the open-source project that serves as the foundation for various web browsers, including Chrome.", "link": "https://github.com/Hibbiki/chromium-win64", "winget": "Hibbiki.Chromium" }, "WPFInstallclementine": { "category": "Multimedia Tools", "choco": "clementine", "content": "Clementine", "description": "Clementine is a modern music player and library organizer, supporting various audio formats and online radio services.", "link": "https://www.clementine-player.org/", "winget": "Clementine.Clementine" }, "WPFInstallclink": { "category": "Development", "choco": "clink", "content": "Clink", "description": "Clink is a powerful Bash-compatible command-line interface (CLIenhancement for Windows, adding features like syntax highlighting and improved history).", "link": "https://mridgers.github.io/clink/", "winget": "chrisant996.Clink" }, "WPFInstallclonehero": { "category": "Games", "choco": "na", "content": "Clone Hero", "description": "Clone Hero is a free rhythm game, which can be played with any 5 or 6 button guitar controller.", "link": "https://clonehero.net/", "winget": "CloneHeroTeam.CloneHero" }, "WPFInstallcmake": { "category": "Development", "choco": "cmake", "content": "CMake", "description": "CMake is an open-source, cross-platform family of tools designed to build, test and package software.", "link": "https://cmake.org/", "winget": "Kitware.CMake" }, "WPFInstallcopyq": { "category": "Utilities", "choco": "copyq", "content": "CopyQ (Clipboard Manager)", "description": "CopyQ is a clipboard manager with advanced features, allowing you to store, edit, and retrieve clipboard history.", "link": "https://copyq.readthedocs.io/", "winget": "hluk.CopyQ" }, "WPFInstallcpuz": { "category": "Utilities", "choco": "cpu-z", "content": "CPU-Z", "description": "CPU-Z is a system monitoring and diagnostic tool for Windows. It provides detailed information about the computer's hardware components, including the CPU, memory, and motherboard.", "link": "https://www.cpuid.com/softwares/cpu-z.html", "winget": "CPUID.CPU-Z" }, "WPFInstallcrystaldiskinfo": { "category": "Utilities", "choco": "crystaldiskinfo", "content": "Crystal Disk Info", "description": "Crystal Disk Info is a disk health monitoring tool that provides information about the status and performance of hard drives. It helps users anticipate potential issues and monitor drive health.", "link": "https://crystalmark.info/en/software/crystaldiskinfo/", "winget": "CrystalDewWorld.CrystalDiskInfo" }, "WPFInstallcapframex": { "category": "Utilities", "choco": "na", "content": "CapFrameX", "description": "Frametimes capture and analysis tool based on Intel's PresentMon. Overlay provided by Rivatuner Statistics Server.", "link": "https://www.capframex.com/", "winget": "CXWorld.CapFrameX" }, "WPFInstallcrystaldiskmark": { "category": "Utilities", "choco": "crystaldiskmark", "content": "Crystal Disk Mark", "description": "Crystal Disk Mark is a disk benchmarking tool that measures the read and write speeds of storage devices. It helps users assess the performance of their hard drives and SSDs.", "link": "https://crystalmark.info/en/software/crystaldiskmark/", "winget": "CrystalDewWorld.CrystalDiskMark" }, "WPFInstalldarktable": { "category": "Multimedia Tools", "choco": "darktable", "content": "darktable", "description": "Open-source photo editing tool, offering an intuitive interface, advanced editing capabilities, and a non-destructive workflow for seamless image enhancement.", "link": "https://www.darktable.org/install/", "winget": "darktable.darktable" }, "WPFInstallDaxStudio": { "category": "Development", "choco": "daxstudio", "content": "DaxStudio", "description": "DAX (Data Analysis eXpressions) Studio is the ultimate tool for executing and analyzing DAX queries against Microsoft Tabular models.", "link": "https://daxstudio.org/", "winget": "DaxStudio.DaxStudio" }, "WPFInstallddu": { "category": "Utilities", "choco": "ddu", "content": "Display Driver Uninstaller", "description": "Display Driver Uninstaller (DDU) is a tool for completely uninstalling graphics drivers from NVIDIA, AMD, and Intel. It is useful for troubleshooting graphics driver-related issues.", "link": "https://www.wagnardsoft.com/display-driver-uninstaller-DDU-", "winget": "Wagnardsoft.DisplayDriverUninstaller" }, "WPFInstalldeluge": { "category": "Utilities", "choco": "deluge", "content": "Deluge", "description": "Deluge is a free and open-source BitTorrent client. It features a user-friendly interface, support for plugins, and the ability to manage torrents remotely.", "link": "https://deluge-torrent.org/", "winget": "DelugeTeam.Deluge" }, "WPFInstalldevtoys": { "category": "Utilities", "choco": "devtoys", "content": "DevToys", "description": "DevToys is a collection of development-related utilities and tools for Windows. It includes tools for file management, code formatting, and productivity enhancements for developers.", "link": "https://devtoys.app/", "winget": "DevToys-app.DevToys" }, "WPFInstalldigikam": { "category": "Multimedia Tools", "choco": "digikam", "content": "digiKam", "description": "digiKam is an advanced open-source photo management software with features for organizing, editing, and sharing photos.", "link": "https://www.digikam.org/", "winget": "KDE.digikam" }, "WPFInstalldiscord": { "category": "Communications", "choco": "discord", "content": "Discord", "description": "Discord is a popular communication platform with voice, video, and text chat, designed for gamers but used by a wide range of communities.", "link": "https://discord.com/", "winget": "Discord.Discord" }, "WPFInstalldismtools": { "category": "Microsoft Tools", "choco": "na", "content": "DISMTools", "description": "DISMTools is a fast, customizable GUI for the DISM utility, supporting Windows images from Windows 7 onward. It handles installations on any drive, offers project support, and lets users tweak settings like color modes, language, and DISM versions; powered by both native DISM and a managed DISM API.", "link": "https://github.com/CodingWonders/DISMTools", "winget": "CodingWondersSoftware.DISMTools.Stable" }, "WPFInstallntlite": { "category": "Microsoft Tools", "choco": "ntlite-free", "content": "NTLite", "description": "Integrate updates, drivers, automate Windows and application setup, speedup Windows deployment process and have it all set for the next time.", "link": "https://ntlite.com", "winget": "Nlitesoft.NTLite" }, "WPFInstallditto": { "category": "Utilities", "choco": "ditto", "content": "Ditto", "description": "Ditto is an extension to the standard windows clipboard.", "link": "https://github.com/sabrogden/Ditto", "winget": "Ditto.Ditto" }, "WPFInstalldockerdesktop": { "category": "Development", "choco": "docker-desktop", "content": "Docker Desktop", "description": "Docker Desktop is a powerful tool for containerized application development and deployment.", "link": "https://www.docker.com/products/docker-desktop", "winget": "Docker.DockerDesktop" }, "WPFInstalldotnet3": { "category": "Microsoft Tools", "choco": "dotnetcore3-desktop-runtime", "content": ".NET Desktop Runtime 3.1", "description": ".NET Desktop Runtime 3.1 is a runtime environment required for running applications developed with .NET Core 3.1.", "link": "https://dotnet.microsoft.com/download/dotnet/3.1", "winget": "Microsoft.DotNet.DesktopRuntime.3_1" }, "WPFInstalldotnet5": { "category": "Microsoft Tools", "choco": "dotnet-5.0-runtime", "content": ".NET Desktop Runtime 5", "description": ".NET Desktop Runtime 5 is a runtime environment required for running applications developed with .NET 5.", "link": "https://dotnet.microsoft.com/download/dotnet/5.0", "winget": "Microsoft.DotNet.DesktopRuntime.5" }, "WPFInstalldotnet6": { "category": "Microsoft Tools", "choco": "dotnet-6.0-runtime", "content": ".NET Desktop Runtime 6", "description": ".NET Desktop Runtime 6 is a runtime environment required for running applications developed with .NET 6.", "link": "https://dotnet.microsoft.com/download/dotnet/6.0", "winget": "Microsoft.DotNet.DesktopRuntime.6" }, "WPFInstalldotnet7": { "category": "Microsoft Tools", "choco": "dotnet-7.0-runtime", "content": ".NET Desktop Runtime 7", "description": ".NET Desktop Runtime 7 is a runtime environment required for running applications developed with .NET 7.", "link": "https://dotnet.microsoft.com/download/dotnet/7.0", "winget": "Microsoft.DotNet.DesktopRuntime.7" }, "WPFInstalldotnet8": { "category": "Microsoft Tools", "choco": "dotnet-8.0-runtime", "content": ".NET Desktop Runtime 8", "description": ".NET Desktop Runtime 8 is a runtime environment required for running applications developed with .NET 8.", "link": "https://dotnet.microsoft.com/download/dotnet/8.0", "winget": "Microsoft.DotNet.DesktopRuntime.8" }, "WPFInstalldotnet9": { "category": "Microsoft Tools", "choco": "dotnet-9.0-runtime", "content": ".NET Desktop Runtime 9", "description": ".NET Desktop Runtime 9 is a runtime environment required for running applications developed with .NET 9.", "link": "https://dotnet.microsoft.com/download/dotnet/9.0", "winget": "Microsoft.DotNet.DesktopRuntime.9" }, "WPFInstalldmt": { "winget": "GNE.DualMonitorTools", "choco": "dual-monitor-tools", "category": "Utilities", "content": "Dual Monitor Tools", "link": "https://dualmonitortool.sourceforge.net/", "description": "Dual Monitor Tools (DMT) is a FOSS app that allows you to customize the handling of multiple monitors. Useful for fullscreen games and apps that handle a second monitor poorly and can improve your workflow." }, "WPFInstallduplicati": { "category": "Utilities", "choco": "duplicati", "content": "Duplicati", "description": "Duplicati is an open-source backup solution that supports encrypted, compressed, and incremental backups. It is designed to securely store data on cloud storage services.", "link": "https://www.duplicati.com/", "winget": "Duplicati.Duplicati" }, "WPFInstalleaapp": { "category": "Games", "choco": "ea-app", "content": "EA App", "description": "EA App is a platform for accessing and playing Electronic Arts games.", "link": "https://www.ea.com/ea-app", "winget": "ElectronicArts.EADesktop" }, "WPFInstalleartrumpet": { "category": "Multimedia Tools", "choco": "eartrumpet", "content": "EarTrumpet (Audio)", "description": "EarTrumpet is an audio control app for Windows, providing a simple and intuitive interface for managing sound settings.", "link": "https://eartrumpet.app/", "winget": "File-New-Project.EarTrumpet" }, "WPFInstalledge": { "category": "Browsers", "choco": "microsoft-edge", "content": "Edge", "description": "Microsoft Edge is a modern web browser built on Chromium, offering performance, security, and integration with Microsoft services.", "link": "https://www.microsoft.com/edge", "winget": "Microsoft.Edge" }, "WPFInstallefibooteditor": { "category": "Pro Tools", "choco": "na", "content": "EFI Boot Editor", "description": "EFI Boot Editor is a tool for managing the EFI/UEFI boot entries on your system. It allows you to customize the boot configuration of your computer.", "link": "https://www.easyuefi.com/", "winget": "EFIBootEditor.EFIBootEditor" }, "WPFInstallemulationstation": { "category": "Games", "choco": "emulationstation", "content": "Emulation Station", "description": "Emulation Station is a graphical and themeable emulator front-end that allows you to access all your favorite games in one place.", "link": "https://emulationstation.org/", "winget": "Emulationstation.Emulationstation" }, "WPFInstallenteauth": { "category": "Utilities", "choco": "ente-auth", "content": "Ente Auth", "description": "Ente Auth is a free, cross-platform, end-to-end encrypted authenticator app.", "link": "https://ente.io/auth/", "winget": "ente-io.auth-desktop" }, "WPFInstallepicgames": { "category": "Games", "choco": "epicgameslauncher", "content": "Epic Games Launcher", "description": "Epic Games Launcher is the client for accessing and playing games from the Epic Games Store.", "link": "https://www.epicgames.com/store/en-US/", "winget": "EpicGames.EpicGamesLauncher" }, "WPFInstallesearch": { "category": "Utilities", "choco": "everything", "content": "Everything Search", "description": "Everything Search is a fast and efficient file search utility for Windows.", "link": "https://www.voidtools.com/", "winget": "voidtools.Everything" }, "WPFInstallespanso": { "category": "Utilities", "choco": "espanso", "content": "Espanso", "description": "Cross-platform and open-source Text Expander written in Rust", "link": "https://espanso.org/", "winget": "Espanso.Espanso" }, "WPFInstallfalkon": { "category": "Browsers", "choco": "falkon", "content": "Falkon", "description": "Falkon is a lightweight and fast web browser with a focus on user privacy and efficiency.", "link": "https://www.falkon.org/", "winget": "KDE.Falkon" }, "WPFInstallfastfetch": { "category": "Utilities", "choco": "na", "content": "Fastfetch", "description": "Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way", "link": "https://github.com/fastfetch-cli/fastfetch/", "winget": "Fastfetch-cli.Fastfetch" }, "WPFInstallferdium": { "category": "Communications", "choco": "ferdium", "content": "Ferdium", "description": "Ferdium is a messaging application that combines multiple messaging services into a single app for easy management.", "link": "https://ferdium.org/", "winget": "Ferdium.Ferdium" }, "WPFInstallffmpeg": { "category": "Multimedia Tools", "choco": "ffmpeg-full", "content": "FFmpeg (full)", "description": "FFmpeg is a powerful multimedia processing tool that enables users to convert, edit, and stream audio and video files with a vast range of codecs and formats. | Note: FFmpeg can not be uninstalled using winget.", "link": "https://ffmpeg.org/", "winget": "Gyan.FFmpeg" }, "WPFInstallfileconverter": { "category": "Utilities", "choco": "file-converter", "content": "File-Converter", "description": "File Converter is a very simple tool which allows you to convert and compress one or several file(s) using the context menu in windows explorer.", "link": "https://file-converter.io/", "winget": "AdrienAllard.FileConverter" }, "WPFInstallfiles": { "category": "Utilities", "choco": "files", "content": "Files", "description": "Alternative file explorer.", "link": "https://github.com/files-community/Files", "winget": "na" }, "WPFInstallfirealpaca": { "category": "Multimedia Tools", "choco": "firealpaca", "content": "Fire Alpaca", "description": "Fire Alpaca is a free digital painting software that provides a wide range of drawing tools and a user-friendly interface.", "link": "https://firealpaca.com/", "winget": "FireAlpaca.FireAlpaca" }, "WPFInstallfirefox": { "category": "Browsers", "choco": "firefox", "content": "Firefox", "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions.", "link": "https://www.mozilla.org/en-US/firefox/new/", "winget": "Mozilla.Firefox" }, "WPFInstallfirefoxesr": { "category": "Browsers", "choco": "FirefoxESR", "content": "Firefox ESR", "description": "Mozilla Firefox is an open-source web browser known for its customization options, privacy features, and extensions. Firefox ESR (Extended Support Release) receives major updates every 42 weeks with minor updates such as crash fixes, security fixes and policy updates as needed, but at least every four weeks.", "link": "https://www.mozilla.org/en-US/firefox/enterprise/", "winget": "Mozilla.Firefox.ESR" }, "WPFInstallflameshot": { "category": "Multimedia Tools", "choco": "flameshot", "content": "Flameshot (Screenshots)", "description": "Flameshot is a powerful yet simple to use screenshot software, offering annotation and editing features.", "link": "https://flameshot.org/", "winget": "Flameshot.Flameshot" }, "WPFInstalllightshot": { "category": "Multimedia Tools", "choco": "lightshot", "content": "Lightshot (Screenshots)", "description": "Ligthshot is an Easy-to-use, light-weight screenshot software tool, where you can optionally edit your screenshots using different tools, share them via Internet and/or save to disk, and customize the available options.", "link": "https://app.prntscr.com/", "winget": "Skillbrains.Lightshot" }, "WPFInstallfloorp": { "category": "Browsers", "choco": "na", "content": "Floorp", "description": "Floorp is an open-source web browser project that aims to provide a simple and fast browsing experience.", "link": "https://floorp.app/", "winget": "Ablaze.Floorp" }, "WPFInstallflow": { "category": "Utilities", "choco": "flow-launcher", "content": "Flow launcher", "description": "Keystroke launcher for Windows to search, manage and launch files, folders bookmarks, websites and more.", "link": "https://www.flowlauncher.com/", "winget": "Flow-Launcher.Flow-Launcher" }, "WPFInstallflux": { "category": "Utilities", "choco": "flux", "content": "F.lux", "description": "f.lux adjusts the color temperature of your screen to reduce eye strain during nighttime use.", "link": "https://justgetflux.com/", "winget": "flux.flux" }, "WPFInstallfoobar": { "category": "Multimedia Tools", "choco": "foobar2000", "content": "foobar2000 (Music Player)", "description": "foobar2000 is a highly customizable and extensible music player for Windows, known for its modular design and advanced features.", "link": "https://www.foobar2000.org/", "winget": "PeterPawlowski.foobar2000" }, "WPFInstallfoxpdfeditor": { "category": "Document", "choco": "na", "content": "Foxit PDF Editor", "description": "Foxit PDF Editor is a feature-rich PDF editor and viewer with a familiar ribbon-style interface.", "link": "https://www.foxit.com/pdf-editor/", "winget": "Foxit.PhantomPDF" }, "WPFInstallfoxpdfreader": { "category": "Document", "choco": "foxitreader", "content": "Foxit PDF Reader", "description": "Foxit PDF Reader is a free PDF viewer with a familiar ribbon-style interface.", "link": "https://www.foxit.com/pdf-reader/", "winget": "Foxit.FoxitReader" }, "WPFInstallfreecad": { "category": "Multimedia Tools", "choco": "freecad", "content": "FreeCAD", "description": "FreeCAD is a parametric 3D CAD modeler, designed for product design and engineering tasks, with a focus on flexibility and extensibility.", "link": "https://www.freecadweb.org/", "winget": "FreeCAD.FreeCAD" }, "WPFInstallfxsound": { "category": "Multimedia Tools", "choco": "fxsound", "content": "FxSound", "description": "FxSound is free open-source software to boost sound quality, volume, and bass. Including an equalizer, effects, and presets for customized audio.", "link": "https://www.fxsound.com/", "winget": "FxSound.FxSound" }, "WPFInstallfzf": { "category": "Utilities", "choco": "fzf", "content": "Fzf", "description": "A command-line fuzzy finder", "link": "https://github.com/junegunn/fzf/", "winget": "junegunn.fzf" }, "WPFInstallgeforcenow": { "category": "Games", "choco": "nvidia-geforce-now", "content": "GeForce NOW", "description": "GeForce NOW is a cloud gaming service that allows you to play high-quality PC games on your device.", "link": "https://www.nvidia.com/en-us/geforce-now/", "winget": "Nvidia.GeForceNow" }, "WPFInstallgimp": { "category": "Multimedia Tools", "choco": "gimp", "content": "GIMP (Image Editor)", "description": "GIMP is a versatile open-source raster graphics editor used for tasks such as photo retouching, image editing, and image composition.", "link": "https://www.gimp.org/", "winget": "GIMP.GIMP.3" }, "WPFInstallgit": { "category": "Development", "choco": "git", "content": "Git", "description": "Git is a distributed version control system widely used for tracking changes in source code during software development.", "link": "https://git-scm.com/", "winget": "Git.Git" }, "WPFInstallgitbutler": { "category": "Development", "choco": "na", "content": "Git Butler", "description": "A Git client for simultaneous branches on top of your existing workflow.", "link": "https://gitbutler.com/", "winget": "GitButler.GitButler" }, "WPFInstallgitextensions": { "category": "Development", "choco": "git;gitextensions", "content": "Git Extensions", "description": "Git Extensions is a graphical user interface for Git, providing additional features for easier source code management.", "link": "https://gitextensions.github.io/", "winget": "GitExtensionsTeam.GitExtensions" }, "WPFInstallgithubcli": { "category": "Development", "choco": "git;gh", "content": "GitHub CLI", "description": "GitHub CLI is a command-line tool that simplifies working with GitHub directly from the terminal.", "link": "https://cli.github.com/", "winget": "GitHub.cli" }, "WPFInstallgithubdesktop": { "category": "Development", "choco": "git;github-desktop", "content": "GitHub Desktop", "description": "GitHub Desktop is a visual Git client that simplifies collaboration on GitHub repositories with an easy-to-use interface.", "link": "https://desktop.github.com/", "winget": "GitHub.GitHubDesktop" }, "WPFInstallgitkrakenclient": { "category": "Development", "choco": "gitkraken", "content": "GitKraken Client", "description": "GitKraken Client is a powerful visual Git client from Axosoft that works with ALL git repositories on any hosting environment.", "link": "https://www.gitkraken.com/git-client", "winget": "Axosoft.GitKraken" }, "WPFInstallglaryutilities": { "category": "Utilities", "choco": "glaryutilities-free", "content": "Glary Utilities", "description": "Glary Utilities is a comprehensive system optimization and maintenance tool for Windows.", "link": "https://www.glarysoft.com/glary-utilities/", "winget": "Glarysoft.GlaryUtilities" }, "WPFInstallgodotengine": { "category": "Development", "choco": "godot", "content": "Godot Engine", "description": "Godot Engine is a free, open-source 2D and 3D game engine with a focus on usability and flexibility.", "link": "https://godotengine.org/", "winget": "GodotEngine.GodotEngine" }, "WPFInstallgog": { "category": "Games", "choco": "goggalaxy", "content": "GOG Galaxy", "description": "GOG Galaxy is a gaming client that offers DRM-free games, additional content, and more.", "link": "https://www.gog.com/galaxy", "winget": "GOG.Galaxy" }, "WPFInstallgitify": { "category": "Development", "choco": "na", "content": "Gitify", "description": "GitHub notifications on your menu bar.", "link": "https://www.gitify.io/", "winget": "Gitify.Gitify" }, "WPFInstallgolang": { "category": "Development", "choco": "golang", "content": "Go", "description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.", "link": "https://go.dev/", "winget": "GoLang.Go" }, "WPFInstallgoogledrive": { "category": "Utilities", "choco": "googledrive", "content": "Google Drive", "description": "File syncing across devices all tied to your google account", "link": "https://www.google.com/drive/", "winget": "Google.GoogleDrive" }, "WPFInstallgpuz": { "category": "Utilities", "choco": "gpu-z", "content": "GPU-Z", "description": "GPU-Z provides detailed information about your graphics card and GPU.", "link": "https://www.techpowerup.com/gpuz/", "winget": "TechPowerUp.GPU-Z" }, "WPFInstallgreenshot": { "category": "Multimedia Tools", "choco": "greenshot", "content": "Greenshot (Screenshots)", "description": "Greenshot is a light-weight screenshot software tool with built-in image editor and customizable capture options.", "link": "https://getgreenshot.org/", "winget": "Greenshot.Greenshot" }, "WPFInstallgsudo": { "category": "Utilities", "choco": "gsudo", "content": "Gsudo", "description": "Gsudo is a sudo implementation for Windows, allowing elevated privilege execution.", "link": "https://gerardog.github.io/gsudo/", "winget": "gerardog.gsudo" }, "WPFInstallhandbrake": { "category": "Multimedia Tools", "choco": "handbrake", "content": "HandBrake", "description": "HandBrake is an open-source video transcoder, allowing you to convert video from nearly any format to a selection of widely supported codecs.", "link": "https://handbrake.fr/", "winget": "HandBrake.HandBrake" }, "WPFInstallharmonoid": { "category": "Multimedia Tools", "choco": "na", "content": "Harmonoid", "description": "Plays and manages your music library. Looks beautiful and juicy. Playlists, visuals, synced lyrics, pitch shift, volume boost and more.", "link": "https://harmonoid.com/", "winget": "Harmonoid.Harmonoid" }, "WPFInstallheidisql": { "category": "Pro Tools", "choco": "heidisql", "content": "HeidiSQL", "description": "HeidiSQL is a powerful and easy-to-use client for MySQL, MariaDB, Microsoft SQL Server, and PostgreSQL databases. It provides tools for database management and development.", "link": "https://www.heidisql.com/", "winget": "HeidiSQL.HeidiSQL" }, "WPFInstallhelix": { "category": "Development", "choco": "helix", "content": "Helix", "description": "Helix is a neovim alternative built in rust.", "link": "https://helix-editor.com/", "winget": "Helix.Helix" }, "WPFInstallheroiclauncher": { "category": "Games", "choco": "na", "content": "Heroic Games Launcher", "description": "Heroic Games Launcher is an open-source alternative game launcher for Epic Games Store.", "link": "https://heroicgameslauncher.com/", "winget": "HeroicGamesLauncher.HeroicGamesLauncher" }, "WPFInstallhexchat": { "category": "Communications", "choco": "hexchat", "content": "Hexchat", "description": "HexChat is a free, open-source IRC (Internet Relay Chat) client with a graphical interface for easy communication.", "link": "https://hexchat.github.io/", "winget": "HexChat.HexChat" }, "WPFInstallhwinfo": { "category": "Utilities", "choco": "hwinfo", "content": "HWiNFO", "description": "HWiNFO provides comprehensive hardware information and diagnostics for Windows.", "link": "https://www.hwinfo.com/", "winget": "REALiX.HWiNFO" }, "WPFInstallhwmonitor": { "category": "Utilities", "choco": "hwmonitor", "content": "HWMonitor", "description": "HWMonitor is a hardware monitoring program that reads PC systems main health sensors.", "link": "https://www.cpuid.com/softwares/hwmonitor.html", "winget": "CPUID.HWMonitor" }, "WPFInstallimhex": { "category": "Development", "choco": "na", "content": "ImHex (Hex Editor)", "description": "A modern, featureful Hex Editor for Reverse Engineers and Developers.", "link": "https://imhex.werwolv.net/", "winget": "WerWolv.ImHex" }, "WPFInstallimageglass": { "category": "Multimedia Tools", "choco": "imageglass", "content": "ImageGlass (Image Viewer)", "description": "ImageGlass is a versatile image viewer with support for various image formats and a focus on simplicity and speed.", "link": "https://imageglass.org/", "winget": "DuongDieuPhap.ImageGlass" }, "WPFInstallimgburn": { "category": "Multimedia Tools", "choco": "imgburn", "content": "ImgBurn", "description": "ImgBurn is a lightweight CD, DVD, HD-DVD, and Blu-ray burning application with advanced features for creating and burning disc images.", "link": "https://www.imgburn.com/", "winget": "LIGHTNINGUK.ImgBurn" }, "WPFInstallinkscape": { "category": "Multimedia Tools", "choco": "inkscape", "content": "Inkscape", "description": "Inkscape is a powerful open-source vector graphics editor, suitable for tasks such as illustrations, icons, logos, and more.", "link": "https://inkscape.org/", "winget": "Inkscape.Inkscape" }, "WPFInstallitch": { "category": "Games", "choco": "itch", "content": "Itch.io", "description": "Itch.io is a digital distribution platform for indie games and creative projects.", "link": "https://itch.io/", "winget": "ItchIo.Itch" }, "WPFInstallitunes": { "category": "Multimedia Tools", "choco": "itunes", "content": "iTunes", "description": "iTunes is a media player, media library, and online radio broadcaster application developed by Apple Inc.", "link": "https://www.apple.com/itunes/", "winget": "Apple.iTunes" }, "WPFInstalljami": { "category": "Communications", "choco": "jami", "content": "Jami", "description": "Jami is a secure and privacy-focused communication platform that offers audio and video calls, messaging, and file sharing.", "link": "https://jami.net/", "winget": "SFLinux.Jami" }, "WPFInstalljava8": { "category": "Development", "choco": "corretto8jdk", "content": "Amazon Corretto 8 (LTS)", "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).", "link": "https://aws.amazon.com/corretto", "winget": "Amazon.Corretto.8.JDK" }, "WPFInstalljava11": { "category": "Development", "choco": "corretto11jdk", "content": "Amazon Corretto 11 (LTS)", "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).", "link": "https://aws.amazon.com/corretto", "winget": "Amazon.Corretto.11.JDK" }, "WPFInstalljava17": { "category": "Development", "choco": "corretto17jdk", "content": "Amazon Corretto 17 (LTS)", "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).", "link": "https://aws.amazon.com/corretto", "winget": "Amazon.Corretto.17.JDK" }, "WPFInstalljava21": { "category": "Development", "choco": "corretto21jdk", "content": "Amazon Corretto 21 (LTS)", "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).", "link": "https://aws.amazon.com/corretto", "winget": "Amazon.Corretto.21.JDK" }, "WPFInstalljava25": { "category": "Development", "choco": "corretto25jdk", "content": "Amazon Corretto 25 (LTS)", "description": "Amazon Corretto is a no-cost, multiplatform, production-ready distribution of the Open Java Development Kit (OpenJDK).", "link": "https://aws.amazon.com/corretto", "winget": "Amazon.Corretto.25.JDK" }, "WPFInstalljdownloader": { "category": "Utilities", "choco": "jdownloader", "content": "JDownloader", "description": "JDownloader is a feature-rich download manager with support for various file hosting services.", "link": "https://jdownloader.org/", "winget": "AppWork.JDownloader" }, "WPFInstalljellyfinmediaplayer": { "category": "Multimedia Tools", "choco": "jellyfin-media-player", "content": "Jellyfin Media Player", "description": "Jellyfin Media Player is a client application for the Jellyfin media server, providing access to your media library.", "link": "https://github.com/jellyfin/jellyfin-media-player", "winget": "Jellyfin.JellyfinMediaPlayer" }, "WPFInstalljellyfinserver": { "category": "Multimedia Tools", "choco": "jellyfin", "content": "Jellyfin Server", "description": "Jellyfin Server is an open-source media server software, allowing you to organize and stream your media library.", "link": "https://jellyfin.org/", "winget": "Jellyfin.Server" }, "WPFInstalljetbrains": { "category": "Development", "choco": "jetbrainstoolbox", "content": "Jetbrains Toolbox", "description": "Jetbrains Toolbox is a platform for easy installation and management of JetBrains developer tools.", "link": "https://www.jetbrains.com/toolbox/", "winget": "JetBrains.Toolbox" }, "WPFInstalljoplin": { "category": "Document", "choco": "joplin", "content": "Joplin (FOSS Notes)", "description": "Joplin is an open-source note-taking and to-do application with synchronization capabilities.", "link": "https://joplinapp.org/", "winget": "Joplin.Joplin" }, "WPFInstalljpegview": { "category": "Utilities", "choco": "jpegview", "content": "JPEG View", "description": "JPEGView is a lean, fast and highly configurable viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF, JXL, HEIC, HEIF, AVIF and TIFF images with a minimal GUI", "link": "https://github.com/sylikc/jpegview", "winget": "sylikc.JPEGView" }, "WPFInstallkdeconnect": { "category": "Utilities", "choco": "kdeconnect-kde", "content": "KDE Connect", "description": "KDE Connect allows seamless integration between your KDE desktop and mobile devices.", "link": "https://community.kde.org/KDEConnect", "winget": "KDE.KDEConnect" }, "WPFInstallkdenlive": { "category": "Multimedia Tools", "choco": "kdenlive", "content": "Kdenlive (Video Editor)", "description": "Kdenlive is an open-source video editing software with powerful features for creating and editing professional-quality videos.", "link": "https://kdenlive.org/", "winget": "KDE.Kdenlive" }, "WPFInstallkeepass": { "category": "Utilities", "choco": "keepassxc", "content": "KeePassXC", "description": "KeePassXC is a cross-platform, open-source password manager with strong encryption features.", "link": "https://keepassxc.org/", "winget": "KeePassXCTeam.KeePassXC" }, "WPFInstallklite": { "category": "Multimedia Tools", "choco": "k-litecodecpack-standard", "content": "K-Lite Codec Standard", "description": "K-Lite Codec Pack Standard is a collection of audio and video codecs and related tools, providing essential components for media playback.", "link": "https://www.codecguide.com/", "winget": "CodecGuide.K-LiteCodecPack.Standard" }, "WPFInstallkodi": { "category": "Multimedia Tools", "choco": "kodi", "content": "Kodi Media Center", "description": "Kodi is an open-source media center application that allows you to play and view most videos, music, podcasts, and other digital media files.", "link": "https://kodi.tv/", "winget": "XBMCFoundation.Kodi" }, "WPFInstallkrita": { "category": "Multimedia Tools", "choco": "krita", "content": "Krita (Image Editor)", "description": "Krita is a powerful open-source painting application. It is designed for concept artists, illustrators, matte and texture artists, and the VFX industry.", "link": "https://krita.org/en/features/", "winget": "KDE.Krita" }, "WPFInstalllazygit": { "category": "Development", "choco": "lazygit", "content": "Lazygit", "description": "Simple terminal UI for git commands", "link": "https://github.com/jesseduffield/lazygit/", "winget": "JesseDuffield.lazygit" }, "WPFInstalllibreoffice": { "category": "Document", "choco": "libreoffice-fresh", "content": "LibreOffice", "description": "LibreOffice is a powerful and free office suite, compatible with other major office suites.", "link": "https://www.libreoffice.org/", "winget": "TheDocumentFoundation.LibreOffice" }, "WPFInstalllibrewolf": { "category": "Browsers", "choco": "librewolf", "content": "LibreWolf", "description": "LibreWolf is a privacy-focused web browser based on Firefox, with additional privacy and security enhancements.", "link": "https://librewolf-community.gitlab.io/", "winget": "LibreWolf.LibreWolf" }, "WPFInstalllinkshellextension": { "category": "Utilities", "choco": "linkshellextension", "content": "Link Shell extension", "description": "Link Shell Extension (LSE) provides for the creation of Hardlinks, Junctions, Volume Mountpoints, Symbolic Links, a folder cloning process that utilises Hardlinks or Symbolic Links and a copy process taking care of Junctions, Symbolic Links, and Hardlinks. LSE, as its name implies is implemented as a Shell extension and is accessed from Windows Explorer, or similar file/folder managers.", "link": "https://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html", "winget": "HermannSchinagl.LinkShellExtension" }, "WPFInstalllinphone": { "category": "Communications", "choco": "linphone", "content": "Linphone", "description": "Linphone is an open-source voice over IP (VoIPservice that allows for audio and video calls, messaging, and more.", "link": "https://www.linphone.org/", "winget": "BelledonneCommunications.Linphone" }, "WPFInstalllivelywallpaper": { "category": "Utilities", "choco": "lively", "content": "Lively Wallpaper", "description": "Free and open-source software that allows users to set animated desktop wallpapers and screensavers.", "link": "https://www.rocksdanister.com/lively/", "winget": "rocksdanister.LivelyWallpaper" }, "WPFInstalllocalsend": { "category": "Utilities", "choco": "localsend.install", "content": "LocalSend", "description": "An open source cross-platform alternative to AirDrop.", "link": "https://localsend.org/", "winget": "LocalSend.LocalSend" }, "WPFInstalllockhunter": { "category": "Utilities", "choco": "lockhunter", "content": "LockHunter", "description": "LockHunter is a free tool to delete files blocked by something you do not know.", "link": "https://lockhunter.com/", "winget": "CrystalRich.LockHunter" }, "WPFInstalllogseq": { "category": "Document", "choco": "logseq", "content": "Logseq", "description": "Logseq is a versatile knowledge management and note-taking application designed for the digital thinker. With a focus on the interconnectedness of ideas, Logseq allows users to seamlessly organize their thoughts through a combination of hierarchical outlines and bi-directional linking. It supports both structured and unstructured content, enabling users to create a personalized knowledge graph that adapts to their evolving ideas and insights.", "link": "https://logseq.com/", "winget": "Logseq.Logseq" }, "WPFInstallmalwarebytes": { "category": "Utilities", "choco": "malwarebytes", "content": "Malwarebytes", "description": "Malwarebytes is an anti-malware software that provides real-time protection against threats.", "link": "https://www.malwarebytes.com/", "winget": "Malwarebytes.Malwarebytes" }, "WPFInstallmasscode": { "category": "Document", "choco": "na", "content": "massCode (Snippet Manager)", "description": "massCode is a fast and efficient open-source code snippet manager for developers.", "link": "https://masscode.io/", "winget": "antonreshetov.massCode" }, "WPFInstallmatrix": { "category": "Communications", "choco": "element-desktop", "content": "Element", "description": "Element is a client for Matrix; an open network for secure, decentralized communication.", "link": "https://element.io/", "winget": "Element.Element" }, "WPFInstallmeld": { "category": "Utilities", "choco": "meld", "content": "Meld", "description": "Meld is a visual diff and merge tool for files and directories.", "link": "https://meldmerge.org/", "winget": "Meld.Meld" }, "WPFInstallModernFlyouts": { "category": "Multimedia Tools", "choco": "na", "content": "Modern Flyouts", "description": "An open source, modern, Fluent Design-based set of flyouts for Windows.", "link": "https://github.com/ModernFlyouts-Community/ModernFlyouts/", "winget": "ModernFlyouts.ModernFlyouts" }, "WPFInstallmonitorian": { "category": "Utilities", "choco": "monitorian", "content": "Monitorian", "description": "Monitorian is a utility for adjusting monitor brightness and contrast on Windows.", "link": "https://github.com/emoacht/Monitorian", "winget": "emoacht.Monitorian" }, "WPFInstallmoonlight": { "category": "Games", "choco": "moonlight-qt", "content": "Moonlight/GameStream Client", "description": "Moonlight/GameStream Client allows you to stream PC games to other devices over your local network.", "link": "https://moonlight-stream.org/", "winget": "MoonlightGameStreamingProject.Moonlight" }, "WPFInstallMotrix": { "category": "Utilities", "choco": "motrix", "content": "Motrix Download Manager", "description": "A full-featured download manager.", "link": "https://motrix.app/", "winget": "agalwood.Motrix" }, "WPFInstallmpchc": { "category": "Multimedia Tools", "choco": "mpc-hc-clsid2", "content": "Media Player Classic - Home Cinema", "description": "Media Player Classic - Home Cinema (MPC-HC) is a free and open-source video and audio player for Windows. MPC-HC is based on the original Guliverkli project and contains many additional features and bug fixes.", "link": "https://github.com/clsid2/mpc-hc/", "winget": "clsid2.mpc-hc" }, "WPFInstallmremoteng": { "category": "Pro Tools", "choco": "mremoteng", "content": "mRemoteNG", "description": "mRemoteNG is a free and open-source remote connections manager. It allows you to view and manage multiple remote sessions in a single interface.", "link": "https://mremoteng.org/", "winget": "mRemoteNG.mRemoteNG" }, "WPFInstallmsedgeredirect": { "category": "Utilities", "choco": "msedgeredirect", "content": "MSEdgeRedirect", "description": "A Tool to Redirect News, Search, Widgets, Weather, and More to Your Default Browser.", "link": "https://github.com/rcmaehl/MSEdgeRedirect", "winget": "rcmaehl.MSEdgeRedirect" }, "WPFInstallmsiafterburner": { "category": "Utilities", "choco": "msiafterburner", "content": "MSI Afterburner", "description": "MSI Afterburner is a graphics card overclocking utility with advanced features.", "link": "https://www.msi.com/Landing/afterburner", "winget": "Guru3D.Afterburner" }, "WPFInstallmullvadvpn": { "category": "Pro Tools", "choco": "mullvad-app", "content": "Mullvad VPN", "description": "This is the VPN client software for the Mullvad VPN service.", "link": "https://github.com/mullvad/mullvadvpn-app", "winget": "MullvadVPN.MullvadVPN" }, "WPFInstallBorderlessGaming": { "category": "Utilities", "choco": "borderlessgaming", "content": "Borderless Gaming", "description": "Play your favorite games in a borderless window; no more time consuming alt-tabs.", "link": "https://github.com/Codeusa/Borderless-Gaming", "winget": "Codeusa.BorderlessGaming" }, "WPFInstallEqualizerAPO": { "category": "Multimedia Tools", "choco": "equalizerapo", "content": "Equalizer APO", "description": "Equalizer APO is a parametric / graphic equalizer for Windows.", "link": "https://sourceforge.net/projects/equalizerapo", "winget": "na" }, "WPFInstallCompactGUI": { "category": "Utilities", "choco": "compactgui", "content": "Compact GUI", "description": "Transparently compress active games and programs using Windows 10/11 APIs", "link": "https://github.com/IridiumIO/CompactGUI", "winget": "IridiumIO.CompactGUI" }, "WPFInstallExifCleaner": { "category": "Utilities", "choco": "na", "content": "ExifCleaner", "description": "Desktop app to clean metadata from images, videos, PDFs, and other files.", "link": "https://github.com/szTheory/exifcleaner", "winget": "szTheory.exifcleaner" }, "WPFInstallmullvadbrowser": { "category": "Browsers", "choco": "na", "content": "Mullvad Browser", "description": "Mullvad Browser is a privacy-focused web browser, developed in partnership with the Tor Project.", "link": "https://mullvad.net/browser", "winget": "MullvadVPN.MullvadBrowser" }, "WPFInstallmusescore": { "category": "Multimedia Tools", "choco": "musescore", "content": "MuseScore", "description": "Create, play back and print beautiful sheet music with free and easy to use music notation software MuseScore.", "link": "https://musescore.org/en", "winget": "Musescore.Musescore" }, "WPFInstallmusicbee": { "category": "Multimedia Tools", "choco": "musicbee", "content": "MusicBee (Music Player)", "description": "MusicBee is a customizable music player with support for various audio formats. It includes features like an integrated search function, tag editing, and more.", "link": "https://getmusicbee.com/", "winget": "MusicBee.MusicBee" }, "WPFInstallmp3tag": { "category": "Multimedia Tools", "choco": "mp3tag", "content": "Mp3tag (Metadata Audio Editor)", "description": "Mp3tag is a powerful and yet easy-to-use tool to edit metadata of common audio formats.", "link": "https://www.mp3tag.de/en/", "winget": "Mp3tag.Mp3tag" }, "WPFInstalltagscanner": { "category": "Multimedia Tools", "choco": "tagscanner", "content": "TagScanner (Tag Scanner)", "description": "TagScanner is a powerful tool for organizing and managing your music collection", "link": "https://www.xdlab.ru/en/", "winget": "SergeySerkov.TagScanner" }, "WPFInstallnanazip": { "category": "Utilities", "choco": "nanazip", "content": "NanaZip", "description": "NanaZip is a fast and efficient file compression and decompression tool.", "link": "https://github.com/M2Team/NanaZip", "winget": "M2Team.NanaZip" }, "WPFInstallnetbird": { "category": "Pro Tools", "choco": "netbird", "content": "NetBird", "description": "NetBird is a Open Source alternative comparable to TailScale that can be connected to a selfhosted Server.", "link": "https://netbird.io/", "winget": "netbird" }, "WPFInstallnaps2": { "category": "Document", "choco": "naps2", "content": "NAPS2 (Document Scanner)", "description": "NAPS2 is a document scanning application that simplifies the process of creating electronic documents.", "link": "https://www.naps2.com/", "winget": "Cyanfish.NAPS2" }, "WPFInstallneofetchwin": { "category": "Utilities", "choco": "na", "content": "Neofetch", "description": "Neofetch is a command-line utility for displaying system information in a visually appealing way.", "link": "https://github.com/nepnep39/neofetch-win", "winget": "nepnep.neofetch-win" }, "WPFInstallneovim": { "category": "Development", "choco": "neovim", "content": "Neovim", "description": "Neovim is a highly extensible text editor and an improvement over the original Vim editor.", "link": "https://neovim.io/", "winget": "Neovim.Neovim" }, "WPFInstallnextclouddesktop": { "category": "Utilities", "choco": "nextcloud-client", "content": "Nextcloud Desktop", "description": "Nextcloud Desktop is the official desktop client for the Nextcloud file synchronization and sharing platform.", "link": "https://nextcloud.com/install/#install-clients", "winget": "Nextcloud.NextcloudDesktop" }, "WPFInstallnglide": { "category": "Multimedia Tools", "choco": "na", "content": "nGlide (3dfx compatibility)", "description": "nGlide is a 3Dfx Voodoo Glide wrapper. It allows you to play games that use Glide API on modern graphics cards without the need for a 3Dfx Voodoo graphics card.", "link": "https://www.zeus-software.com/downloads/nglide", "winget": "ZeusSoftware.nGlide" }, "WPFInstallnmap": { "category": "Pro Tools", "choco": "nmap", "content": "Nmap", "description": "Nmap (Network Mapper) is an open-source tool for network exploration and security auditing. It discovers devices on a network and provides information about their ports and services.", "link": "https://nmap.org/", "winget": "Insecure.Nmap" }, "WPFInstallnodejs": { "category": "Development", "choco": "nodejs", "content": "NodeJS", "description": "NodeJS is a JavaScript runtime built on Chrome's V8 JavaScript engine for building server-side and networking applications.", "link": "https://nodejs.org/", "winget": "OpenJS.NodeJS" }, "WPFInstallnodejslts": { "category": "Development", "choco": "nodejs-lts", "content": "NodeJS LTS", "description": "NodeJS LTS provides Long-Term Support releases for stable and reliable server-side JavaScript development.", "link": "https://nodejs.org/", "winget": "OpenJS.NodeJS.LTS" }, "WPFInstallnomacs": { "category": "Multimedia Tools", "choco": "nomacs", "content": "Nomacs (Image viewer)", "description": "Nomacs is a free, open-source image viewer that supports multiple platforms. It features basic image editing capabilities and supports a variety of image formats.", "link": "https://nomacs.org/", "winget": "nomacs.nomacs" }, "WPFInstallnotepadplus": { "category": "Document", "choco": "notepadplusplus", "content": "Notepad++", "description": "Notepad++ is a free, open-source code editor and Notepad replacement with support for multiple languages.", "link": "https://notepad-plus-plus.org/", "winget": "Notepad++.Notepad++" }, "WPFInstallnuget": { "category": "Microsoft Tools", "choco": "nuget.commandline", "content": "NuGet", "description": "NuGet is a package manager for the .NET framework, enabling developers to manage and share libraries in their .NET applications.", "link": "https://www.nuget.org/", "winget": "Microsoft.NuGet" }, "WPFInstallnushell": { "category": "Utilities", "choco": "nushell", "content": "Nushell", "description": "Nushell is a new shell that takes advantage of modern hardware and systems to provide a powerful, expressive, and fast experience.", "link": "https://www.nushell.sh/", "winget": "Nushell.Nushell" }, "WPFInstallnvclean": { "category": "Utilities", "choco": "na", "content": "NVCleanstall", "description": "NVCleanstall is a tool designed to customize NVIDIA driver installations, allowing advanced users to control more aspects of the installation process.", "link": "https://www.techpowerup.com/nvcleanstall/", "winget": "TechPowerUp.NVCleanstall" }, "WPFInstallnvm": { "category": "Development", "choco": "nvm", "content": "Node Version Manager", "description": "Node Version Manager (NVM) for Windows allows you to easily switch between multiple Node.js versions.", "link": "https://github.com/coreybutler/nvm-windows", "winget": "CoreyButler.NVMforWindows" }, "WPFInstallobs": { "category": "Multimedia Tools", "choco": "obs-studio", "content": "OBS Studio", "description": "OBS Studio is a free and open-source software for video recording and live streaming. It supports real-time video/audio capturing and mixing, making it popular among content creators.", "link": "https://obsproject.com/", "winget": "OBSProject.OBSStudio" }, "WPFInstallobsidian": { "category": "Document", "choco": "obsidian", "content": "Obsidian", "description": "Obsidian is a powerful note-taking and knowledge management application.", "link": "https://obsidian.md/", "winget": "Obsidian.Obsidian" }, "WPFInstallokular": { "category": "Document", "choco": "okular", "content": "Okular", "description": "Okular is a versatile document viewer with advanced features.", "link": "https://okular.kde.org/", "winget": "KDE.Okular" }, "WPFInstallonedrive": { "category": "Microsoft Tools", "choco": "onedrive", "content": "OneDrive", "description": "OneDrive is a cloud storage service provided by Microsoft, allowing users to store and share files securely across devices.", "link": "https://onedrive.live.com/", "winget": "Microsoft.OneDrive" }, "WPFInstallonlyoffice": { "category": "Document", "choco": "onlyoffice", "content": "ONLYOffice Desktop", "description": "ONLYOffice Desktop is a comprehensive office suite for document editing and collaboration.", "link": "https://www.onlyoffice.com/desktop.aspx", "winget": "ONLYOFFICE.DesktopEditors" }, "WPFInstallOPAutoClicker": { "category": "Utilities", "choco": "autoclicker", "content": "OPAutoClicker", "description": "A full-fledged autoclicker with two modes of autoclicking, at your dynamic cursor location or at a prespecified location.", "link": "https://www.opautoclicker.com", "winget": "OPAutoClicker.OPAutoClicker" }, "WPFInstallopenhashtab": { "category": "Utilities", "choco": "openhashtab", "content": "OpenHashTab", "description": "OpenHashTab is a shell extension for conveniently calculating and checking file hashes from file properties.", "link": "https://github.com/namazso/OpenHashTab/", "winget": "namazso.OpenHashTab" }, "WPFInstallopenrgb": { "category": "Utilities", "choco": "openrgb", "content": "OpenRGB", "description": "OpenRGB is an open-source RGB lighting control software designed to manage and control RGB lighting for various components and peripherals.", "link": "https://openrgb.org/", "winget": "OpenRGB.OpenRGB" }, "WPFInstallopenscad": { "category": "Multimedia Tools", "choco": "openscad", "content": "OpenSCAD", "description": "OpenSCAD is a free and open-source script-based 3D CAD modeler. It is especially useful for creating parametric designs for 3D printing.", "link": "https://www.openscad.org/", "winget": "OpenSCAD.OpenSCAD" }, "WPFInstallopenshell": { "category": "Utilities", "choco": "open-shell", "content": "Open Shell (Start Menu)", "description": "Open Shell is a Windows Start Menu replacement with enhanced functionality and customization options.", "link": "https://github.com/Open-Shell/Open-Shell-Menu", "winget": "Open-Shell.Open-Shell-Menu" }, "WPFInstallOpenVPN": { "category": "Pro Tools", "choco": "openvpn-connect", "content": "OpenVPN Connect", "description": "OpenVPN Connect is an open-source VPN client that allows you to connect securely to a VPN server. It provides a secure and encrypted connection for protecting your online privacy.", "link": "https://openvpn.net/", "winget": "OpenVPNTechnologies.OpenVPNConnect" }, "WPFInstallOVirtualBox": { "category": "Utilities", "choco": "virtualbox", "content": "Oracle VirtualBox", "description": "Oracle VirtualBox is a powerful and free open-source virtualization tool for x86 and AMD64/Intel64 architectures.", "link": "https://www.virtualbox.org/", "winget": "Oracle.VirtualBox" }, "WPFInstallownclouddesktop": { "category": "Utilities", "choco": "owncloud-client", "content": "ownCloud Desktop", "description": "ownCloud Desktop is the official desktop client for the ownCloud file synchronization and sharing platform.", "link": "https://owncloud.com/desktop-app/", "winget": "ownCloud.ownCloudDesktop" }, "WPFInstallpolicyplus": { "category": "Multimedia Tools", "choco": "na", "content": "Policy Plus", "description": "Local Group Policy Editor plus more, for all Windows editions.", "link": "https://github.com/Fleex255/PolicyPlus", "winget": "Fleex255.PolicyPlus" }, "WPFInstallpotplayer": { "category": "Multimedia Tools", "choco": "na", "content": "PotPlayer", "description": "PotPlayer is a free Windows media player with wide format support, high performance, built-in codecs, and extensive customization options.", "link": "https://potplayer.tv/", "winget": "Daum.PotPlayer" }, "WPFInstallprocessexplorer": { "category": "Microsoft Tools", "choco": "na", "content": "Process Explorer", "description": "Process Explorer is a task manager and system monitor.", "link": "https://learn.microsoft.com/sysinternals/downloads/process-explorer", "winget": "Microsoft.Sysinternals.ProcessExplorer" }, "WPFInstallPaintdotnet": { "category": "Multimedia Tools", "choco": "paint.net", "content": "Paint.NET", "description": "Paint.NET is a free image and photo editing software for Windows. It features an intuitive user interface and supports a wide range of powerful editing tools.", "link": "https://www.getpaint.net/", "winget": "dotPDN.PaintDotNet" }, "WPFInstallparsec": { "category": "Utilities", "choco": "parsec", "content": "Parsec", "description": "Parsec is a low-latency, high-quality remote desktop sharing application for collaborating and gaming across devices.", "link": "https://parsec.app/", "winget": "Parsec.Parsec" }, "WPFInstallpdf24creator": { "category": "Document", "choco": "pdf24", "content": "PDF24 creator", "description": "Free and easy-to-use online/desktop PDF tools that make you more productive", "link": "https://tools.pdf24.org/en/", "winget": "geeksoftwareGmbH.PDF24Creator" }, "WPFInstallpdfsam": { "category": "Document", "choco": "pdfsam", "content": "PDFsam Basic", "description": "PDFsam Basic is a free and open-source tool for splitting, merging, and rotating PDF files.", "link": "https://pdfsam.org/", "winget": "PDFsam.PDFsam" }, "WPFInstallpeazip": { "category": "Utilities", "choco": "peazip", "content": "PeaZip", "description": "PeaZip is a free, open-source file archiver utility that supports multiple archive formats and provides encryption features.", "link": "https://peazip.github.io/", "winget": "Giorgiotani.Peazip" }, "WPFInstallpiimager": { "category": "Utilities", "choco": "rpi-imager", "content": "Raspberry Pi Imager", "description": "Raspberry Pi Imager is a utility for writing operating system images to SD cards for Raspberry Pi devices.", "link": "https://www.raspberrypi.com/software/", "winget": "RaspberryPiFoundation.RaspberryPiImager" }, "WPFInstallplaynite": { "category": "Games", "choco": "playnite", "content": "Playnite", "description": "Playnite is an open-source video game library manager with one simple goal: To provide a unified interface for all of your games.", "link": "https://playnite.link/", "winget": "Playnite.Playnite" }, "WPFInstallplex": { "category": "Multimedia Tools", "choco": "plexmediaserver", "content": "Plex Media Server", "description": "Plex Media Server is a media server software that allows you to organize and stream your media library. It supports various media formats and offers a wide range of features.", "link": "https://www.plex.tv/your-media/", "winget": "Plex.PlexMediaServer" }, "WPFInstallplexdesktop": { "category": "Multimedia Tools", "choco": "plex", "content": "Plex Desktop", "description": "Plex Desktop for Windows is the front end for Plex Media Server.", "link": "https://www.plex.tv", "winget": "Plex.Plex" }, "WPFInstallPortmaster": { "category": "Pro Tools", "choco": "portmaster", "content": "Portmaster", "description": "Portmaster is a free and open-source application that puts you back in charge over all your computers network connections.", "link": "https://safing.io/", "winget": "Safing.Portmaster" }, "WPFInstallposh": { "category": "Development", "choco": "oh-my-posh", "content": "Oh My Posh (Prompt)", "description": "Oh My Posh is a cross-platform prompt theme engine for any shell.", "link": "https://ohmyposh.dev/", "winget": "JanDeDobbeleer.OhMyPosh" }, "WPFInstallpostman": { "category": "Development", "choco": "postman", "content": "Postman", "description": "Postman is a collaboration platform for API development that simplifies the process of developing APIs.", "link": "https://www.postman.com/", "winget": "Postman.Postman" }, "WPFInstallpowerautomate": { "category": "Microsoft Tools", "choco": "powerautomatedesktop", "content": "Power Automate", "description": "Using Power Automate Desktop you can automate tasks on the desktop as well as the Web.", "link": "https://www.microsoft.com/en-us/power-platform/products/power-automate", "winget": "Microsoft.PowerAutomateDesktop" }, "WPFInstallpowerbi": { "category": "Microsoft Tools", "choco": "powerbi", "content": "Power BI", "description": "Create stunning reports and visualizations with Power BI Desktop. It puts visual analytics at your fingertips with intuitive report authoring. Drag-and-drop to place content exactly where you want it on the flexible and fluid canvas. Quickly discover patterns as you explore a single unified view of linked, interactive visualizations.", "link": "https://www.microsoft.com/en-us/power-platform/products/power-bi/", "winget": "Microsoft.PowerBI" }, "WPFInstallpowershell": { "category": "Microsoft Tools", "choco": "powershell-core", "content": "PowerShell", "description": "PowerShell is a task automation framework and scripting language designed for system administrators, offering powerful command-line capabilities.", "link": "https://github.com/PowerShell/PowerShell", "winget": "Microsoft.PowerShell" }, "WPFInstallpowertoys": { "category": "Microsoft Tools", "choco": "powertoys", "content": "PowerToys", "description": "PowerToys is a set of utilities for power users to enhance productivity, featuring tools like FancyZones, PowerRename, and more.", "link": "https://github.com/microsoft/PowerToys", "winget": "Microsoft.PowerToys" }, "WPFInstallprismlauncher": { "category": "Games", "choco": "prismlauncher", "content": "Prism Launcher", "description": "Prism Launcher is an Open Source Minecraft launcher with the ability to manage multiple instances, accounts and mods.", "link": "https://prismlauncher.org/", "winget": "PrismLauncher.PrismLauncher" }, "WPFInstallprocesslasso": { "category": "Utilities", "choco": "plasso", "content": "Process Lasso", "description": "Process Lasso is a system optimization and automation tool that improves system responsiveness and stability by adjusting process priorities and CPU affinities.", "link": "https://bitsum.com/", "winget": "BitSum.ProcessLasso" }, "WPFInstallprotonauth": { "category": "Utilities", "choco": "protonauth", "content": "Proton Authenticator", "description": "2FA app from Proton to securely sync and backup 2FA codes.", "link": "https://proton.me/authenticator", "winget": "Proton.ProtonAuthenticator" }, "WPFInstallprocessmonitor": { "category": "Microsoft Tools", "choco": "procexp", "content": "SysInternals Process Monitor", "description": "SysInternals Process Monitor is an advanced monitoring tool that shows real-time file system, registry, and process/thread activity.", "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon", "winget": "Microsoft.Sysinternals.ProcessMonitor" }, "WPFInstallorcaslicer": { "category": "Utilities", "choco": "orcaslicer", "content": "OrcaSlicer", "description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)", "link": "https://github.com/SoftFever/OrcaSlicer", "winget": "SoftFever.OrcaSlicer" }, "WPFInstallprucaslicer": { "category": "Utilities", "choco": "prusaslicer", "content": "PrusaSlicer", "description": "PrusaSlicer is a powerful and easy-to-use slicing software for 3D printing with Prusa 3D printers.", "link": "https://www.prusa3d.com/prusaslicer/", "winget": "Prusa3d.PrusaSlicer" }, "WPFInstallpsremoteplay": { "category": "Games", "choco": "ps-remote-play", "content": "PS Remote Play", "description": "PS Remote Play is a free application that allows you to stream games from your PlayStation console to a PC or mobile device.", "link": "https://remoteplay.dl.playstation.net/remoteplay/lang/gb/", "winget": "PlayStation.PSRemotePlay" }, "WPFInstallputty": { "category": "Pro Tools", "choco": "putty", "content": "PuTTY", "description": "PuTTY is a free and open-source terminal emulator, serial console, and network file transfer application. It supports various network protocols such as SSH, Telnet, and SCP.", "link": "https://www.chiark.greenend.org.uk/~sgtatham/putty/", "winget": "PuTTY.PuTTY" }, "WPFInstallpython3": { "category": "Development", "choco": "python", "content": "Python3", "description": "Python is a versatile programming language used for web development, data analysis, artificial intelligence, and more.", "link": "https://www.python.org/", "winget": "Python.Python.3.14" }, "WPFInstallqbittorrent": { "category": "Utilities", "choco": "qbittorrent", "content": "qBittorrent", "description": "qBittorrent is a free and open-source BitTorrent client that aims to provide a feature-rich and lightweight alternative to other torrent clients.", "link": "https://www.qbittorrent.org/", "winget": "qBittorrent.qBittorrent" }, "WPFInstalltransmission": { "category": "Utilities", "choco": "transmission", "content": "Transmission", "description": "Transmission is a cross-platform BitTorrent client that is open source, easy, powerful, and lean.", "link": "https://transmissionbt.com/", "winget": "Transmission.Transmission" }, "WPFInstalltixati": { "category": "Utilities", "choco": "tixati.portable", "content": "Tixati", "description": "Tixati is a cross-platform BitTorrent client written in C++ that has been designed to be light on system resources.", "link": "https://www.tixati.com/", "winget": "Tixati.Tixati.Portable" }, "WPFInstallqtox": { "category": "Communications", "choco": "qtox", "content": "QTox", "description": "QTox is a free and open-source messaging app that prioritizes user privacy and security in its design.", "link": "https://qtox.github.io/", "winget": "Tox.qTox" }, "WPFInstallquicklook": { "category": "Utilities", "choco": "quicklook", "content": "Quicklook", "description": "Bring macOS ?Quick Look? feature to Windows", "link": "https://github.com/QL-Win/QuickLook", "winget": "QL-Win.QuickLook" }, "WPFInstallrainmeter": { "category": "Utilities", "choco": "na", "content": "Rainmeter", "description": "Rainmeter is a desktop customization tool that allows you to create and share customizable skins for your desktop.", "link": "https://www.rainmeter.net/", "winget": "Rainmeter.Rainmeter" }, "WPFInstallrevo": { "category": "Utilities", "choco": "revo-uninstaller", "content": "Revo Uninstaller", "description": "Revo Uninstaller is an advanced uninstaller tool that helps you remove unwanted software and clean up your system.", "link": "https://www.revouninstaller.com/", "winget": "RevoUninstaller.RevoUninstaller" }, "WPFInstallWiseProgramUninstaller": { "category": "Utilities", "choco": "na", "content": "Wise Program Uninstaller (WiseCleaner)", "description": "Wise Program Uninstaller is the perfect solution for uninstalling Windows programs, allowing you to uninstall applications quickly and completely using its simple and user-friendly interface.", "link": "https://www.wisecleaner.com/wise-program-uninstaller.html", "winget": "WiseCleaner.WiseProgramUninstaller" }, "WPFInstallrevolt": { "category": "Communications", "choco": "na", "content": "Revolt", "description": "Find your community, connect with the world. Revolt is one of the best ways to stay connected with your friends and community without sacrificing any usability.", "link": "https://revolt.chat/", "winget": "Revolt.RevoltDesktop" }, "WPFInstallripgrep": { "category": "Utilities", "choco": "ripgrep", "content": "Ripgrep", "description": "Fast and powerful commandline search tool", "link": "https://github.com/BurntSushi/ripgrep/", "winget": "BurntSushi.ripgrep.MSVC" }, "WPFInstallrufus": { "category": "Utilities", "choco": "rufus", "content": "Rufus Imager", "description": "Rufus is a utility that helps format and create bootable USB drives, such as USB keys or pen drives.", "link": "https://rufus.ie/", "winget": "Rufus.Rufus" }, "WPFInstallrustdesk": { "category": "Pro Tools", "choco": "rustdesk.portable", "content": "RustDesk", "description": "RustDesk is a free and open-source remote desktop application. It provides a secure way to connect to remote machines and access desktop environments.", "link": "https://rustdesk.com/", "winget": "RustDesk.RustDesk" }, "WPFInstallrustlang": { "category": "Development", "choco": "rust", "content": "Rust", "description": "Rust is a programming language designed for safety and performance, particularly focused on systems programming.", "link": "https://www.rust-lang.org/", "winget": "Rustlang.Rust.MSVC" }, "WPFInstallsagethumbs": { "category": "Utilities", "choco": "sagethumbs", "content": "SageThumbs", "description": "Provides support for thumbnails in Explorer with more formats.", "link": "https://sagethumbs.en.lo4d.com/windows", "winget": "CherubicSoftware.SageThumbs" }, "WPFInstallsandboxie": { "category": "Utilities", "choco": "sandboxie", "content": "Sandboxie Plus", "description": "Sandboxie Plus is a sandbox-based isolation program that provides enhanced security by running applications in an isolated environment.", "link": "https://github.com/sandboxie-plus/Sandboxie", "winget": "Sandboxie.Plus" }, "WPFInstallsdio": { "category": "Utilities", "choco": "sdio", "content": "Snappy Driver Installer Origin", "description": "Snappy Driver Installer Origin is a free and open-source driver updater with a vast driver database for Windows.", "link": "https://www.glenn.delahoy.com/snappy-driver-installer-origin/", "winget": "GlennDelahoy.SnappyDriverInstallerOrigin" }, "WPFInstallsession": { "category": "Communications", "choco": "session", "content": "Session", "description": "Session is a private and secure messaging app built on a decentralized network for user privacy and data protection.", "link": "https://getsession.org/", "winget": "Session.Session" }, "WPFInstallsharex": { "category": "Multimedia Tools", "choco": "sharex", "content": "ShareX (Screenshots)", "description": "ShareX is a free and open-source screen capture and file sharing tool. It supports various capture methods and offers advanced features for editing and sharing screenshots.", "link": "https://getsharex.com/", "winget": "ShareX.ShareX" }, "WPFInstallnilesoftShell": { "category": "Utilities", "choco": "nilesoft-shell", "content": "Nilesoft Shell", "description": "Shell is an expanded context menu tool that adds extra functionality and customization options to the Windows context menu.", "link": "https://nilesoft.org/", "winget": "Nilesoft.Shell" }, "WPFInstallsysteminformer": { "category": "Development", "choco": "na", "content": "System Informer", "description": "A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware.", "link": "https://systeminformer.com/", "winget": "WinsiderSS.SystemInformer" }, "WPFInstallsidequest": { "category": "Games", "choco": "sidequest", "content": "SideQuestVR", "description": "SideQuestVR is a community-driven platform that enables users to discover, install, and manage virtual reality content on Oculus Quest devices.", "link": "https://sidequestvr.com/", "winget": "SideQuestVR.SideQuest" }, "WPFInstallsignal": { "category": "Communications", "choco": "signal", "content": "Signal", "description": "Signal is a privacy-focused messaging app that offers end-to-end encryption for secure and private communication.", "link": "https://signal.org/", "winget": "OpenWhisperSystems.Signal" }, "WPFInstallsignalrgb": { "category": "Utilities", "choco": "na", "content": "SignalRGB", "description": "SignalRGB lets you control and sync your favorite RGB devices with one free application.", "link": "https://www.signalrgb.com/", "winget": "WhirlwindFX.SignalRgb" }, "WPFInstallsimplenote": { "category": "Document", "choco": "simplenote", "content": "simplenote", "description": "Simplenote is an easy way to keep notes, lists, ideas and more.", "link": "https://simplenote.com/", "winget": "Automattic.Simplenote" }, "WPFInstallsimplewall": { "category": "Pro Tools", "choco": "simplewall", "content": "Simplewall", "description": "Simplewall is a free and open-source firewall application for Windows. It allows users to control and manage the inbound and outbound network traffic of applications.", "link": "https://github.com/henrypp/simplewall", "winget": "Henry++.simplewall" }, "WPFInstallslack": { "category": "Communications", "choco": "slack", "content": "Slack", "description": "Slack is a collaboration hub that connects teams and facilitates communication through channels, messaging, and file sharing.", "link": "https://slack.com/", "winget": "SlackTechnologies.Slack" }, "WPFInstallspacedrive": { "category": "Utilities", "choco": "na", "content": "Spacedrive File Manager", "description": "Spacedrive is a file manager that offers cloud storage integration and file synchronization across devices.", "link": "https://www.spacedrive.com/", "winget": "spacedrive.Spacedrive" }, "WPFInstallspacesniffer": { "category": "Utilities", "choco": "spacesniffer", "content": "SpaceSniffer", "description": "A tool application that lets you understand how folders and files are structured on your disks", "link": "http://www.uderzo.it/main_products/space_sniffer/", "winget": "UderzoSoftware.SpaceSniffer" }, "WPFInstallstarship": { "category": "Development", "choco": "starship", "content": "Starship (Shell Prompt)", "description": "Starship is a minimal, fast, and customizable prompt for any shell.", "link": "https://starship.rs/", "winget": "starship" }, "WPFInstallsteam": { "category": "Games", "choco": "steam-client", "content": "Steam", "description": "Steam is a digital distribution platform for purchasing and playing video games, offering multiplayer gaming, video streaming, and more.", "link": "https://store.steampowered.com/about/", "winget": "Valve.Steam" }, "WPFInstallstrawberry": { "category": "Multimedia Tools", "choco": "strawberrymusicplayer", "content": "Strawberry (Music Player)", "description": "Strawberry is an open-source music player that focuses on music collection management and audio quality. It supports various audio formats and features a clean user interface.", "link": "https://www.strawberrymusicplayer.org/", "winget": "StrawberryMusicPlayer.Strawberry" }, "WPFInstallstremio": { "winget": "Stremio.Stremio", "choco": "stremio", "category": "Multimedia Tools", "content": "Stremio", "link": "https://www.stremio.com/", "description": "Stremio is a media center application that allows users to organize and stream their favorite movies, TV shows, and video content." }, "WPFInstallsublimemerge": { "category": "Development", "choco": "sublimemerge", "content": "Sublime Merge", "description": "Sublime Merge is a Git client with advanced features and a beautiful interface.", "link": "https://www.sublimemerge.com/", "winget": "SublimeHQ.SublimeMerge" }, "WPFInstallsublimetext": { "category": "Development", "choco": "sublimetext4", "content": "Sublime Text", "description": "Sublime Text is a sophisticated text editor for code, markup, and prose.", "link": "https://www.sublimetext.com/", "winget": "SublimeHQ.SublimeText.4" }, "WPFInstallsumatra": { "category": "Document", "choco": "sumatrapdf", "content": "Sumatra PDF", "description": "Sumatra PDF is a lightweight and fast PDF viewer with minimalistic design.", "link": "https://www.sumatrapdfreader.org/free-pdf-reader.html", "winget": "SumatraPDF.SumatraPDF" }, "WPFInstallpdfgear": { "category": "Document", "choco": "na", "content": "PDFgear", "description": "PDFgear is a piece of full-featured PDF management software for Windows, Mac, and mobile, and it's completely free to use.", "link": "https://www.pdfgear.com/", "winget": "PDFgear.PDFgear" }, "WPFInstallsunshine": { "category": "Games", "choco": "sunshine", "content": "Sunshine/GameStream Server", "description": "Sunshine is a GameStream server that allows you to remotely play PC games on Android devices, offering low-latency streaming.", "link": "https://github.com/LizardByte/Sunshine", "winget": "LizardByte.Sunshine" }, "WPFInstallsuperf4": { "category": "Utilities", "choco": "superf4", "content": "SuperF4", "description": "SuperF4 is a utility that allows you to terminate programs instantly by pressing a customizable hotkey.", "link": "https://stefansundin.github.io/superf4/", "winget": "StefanSundin.Superf4" }, "WPFInstallswift": { "category": "Development", "choco": "na", "content": "Swift toolchain", "description": "Swift is a general-purpose programming language that's approachable for newcomers and powerful for experts.", "link": "https://www.swift.org/", "winget": "Swift.Toolchain" }, "WPFInstallsynctrayzor": { "category": "Utilities", "choco": "synctrayzor", "content": "SyncTrayzor", "description": "Windows tray utility / filesystem watcher / launcher for Syncthing", "link": "https://github.com/GermanCoding/SyncTrayzor", "winget": "GermanCoding.SyncTrayzor" }, "WPFInstallsqlmanagementstudio": { "category": "Microsoft Tools", "choco": "sql-server-management-studio", "content": "Microsoft SQL Server Management Studio", "description": "SQL Server Management Studio (SSMS) is an integrated environment for managing any SQL infrastructure, from SQL Server to Azure SQL Database. SSMS provides tools to configure, monitor, and administer instances of SQL Server and databases.", "link": "https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16", "winget": "Microsoft.SQLServerManagementStudio" }, "WPFInstalltabby": { "category": "Utilities", "choco": "tabby", "content": "Tabby.sh", "description": "Tabby is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux", "link": "https://tabby.sh/", "winget": "Eugeny.Tabby" }, "WPFInstalltailscale": { "category": "Utilities", "choco": "tailscale", "content": "Tailscale", "description": "Tailscale is a secure and easy-to-use VPN solution for connecting your devices and networks.", "link": "https://tailscale.com/", "winget": "tailscale.tailscale" }, "WPFInstallTcNoAccSwitcher": { "category": "Games", "choco": "tcno-acc-switcher", "content": "TCNO Account Switcher", "description": "A Super-fast account switcher for Steam, Battle.net, Epic Games, Origin, Riot, Ubisoft and many others!", "link": "https://github.com/TCNOco/TcNo-Acc-Switcher", "winget": "TechNobo.TcNoAccountSwitcher" }, "WPFInstalltcpview": { "category": "Microsoft Tools", "choco": "tcpview", "content": "SysInternals TCPView", "description": "SysInternals TCPView is a network monitoring tool that displays a detailed list of all TCP and UDP endpoints on your system.", "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview", "winget": "Microsoft.Sysinternals.TCPView" }, "WPFInstallteams": { "category": "Communications", "choco": "microsoft-teams", "content": "Teams", "description": "Microsoft Teams is a collaboration platform that integrates with Office 365 and offers chat, video conferencing, file sharing, and more.", "link": "https://www.microsoft.com/en-us/microsoft-teams/group-chat-software", "winget": "Microsoft.Teams" }, "WPFInstallteamviewer": { "category": "Utilities", "choco": "teamviewer9", "content": "TeamViewer", "description": "TeamViewer is a popular remote access and support software that allows you to connect to and control remote devices.", "link": "https://www.teamviewer.com/", "winget": "TeamViewer.TeamViewer" }, "WPFInstalltelegram": { "category": "Communications", "choco": "telegram", "content": "Telegram", "description": "Telegram is a cloud-based instant messaging app known for its security features, speed, and simplicity.", "link": "https://telegram.org/", "winget": "Telegram.TelegramDesktop" }, "WPFInstallunigram": { "category": "Communications", "choco": "na", "content": "Unigram", "description": "Unigram - Telegram for Windows", "link": "https://unigramdev.github.io/", "winget": "Telegram.Unigram" }, "WPFInstallterminal": { "category": "Microsoft Tools", "choco": "microsoft-windows-terminal", "content": "Windows Terminal", "description": "Windows Terminal is a modern, fast, and efficient terminal application for command-line users, supporting multiple tabs, panes, and more.", "link": "https://aka.ms/terminal", "winget": "Microsoft.WindowsTerminal" }, "WPFInstallThonny": { "category": "Development", "choco": "thonny", "content": "Thonny Python IDE", "description": "Python IDE for beginners.", "link": "https://github.com/thonny/thonny", "winget": "AivarAnnamaa.Thonny" }, "WPFInstallMuEditor": { "category": "Development", "choco": "na", "content": "Code With Mu (Mu Editor)", "description": "Mu is a Python code editor for beginner programmers", "link": "https://codewith.mu/", "winget": "Mu.Mu" }, "WPFInstallthorium": { "category": "Browsers", "choco": "thorium", "content": "Thorium Browser AVX2", "description": "Browser built for speed over vanilla chromium. It is built with AVX2 optimizations and is the fastest browser on the market.", "link": "https://thorium.rocks/", "winget": "Alex313031.Thorium.AVX2" }, "WPFInstallthunderbird": { "category": "Communications", "choco": "thunderbird", "content": "Thunderbird", "description": "Mozilla Thunderbird is a free and open-source email client, news client, and chat client with advanced features.", "link": "https://www.thunderbird.net/", "winget": "Mozilla.Thunderbird" }, "WPFInstallbetterbird": { "category": "Communications", "choco": "betterbird", "content": "Betterbird", "description": "Betterbird is a fork of Mozilla Thunderbird with additional features and bugfixes.", "link": "https://www.betterbird.eu/", "winget": "Betterbird.Betterbird" }, "WPFInstalltidal": { "category": "Multimedia Tools", "choco": "na", "content": "Tidal", "description": "Tidal is a music streaming service known for its high-fidelity audio quality and exclusive content. It offers a vast library of songs and curated playlists.", "link": "https://tidal.com/", "winget": "9NNCB5BS59PH" }, "WPFInstalltor": { "category": "Browsers", "choco": "tor-browser", "content": "Tor Browser", "description": "Tor Browser is designed for anonymous web browsing, utilizing the Tor network to protect user privacy and security.", "link": "https://www.torproject.org/", "winget": "TorProject.TorBrowser" }, "WPFInstalltotalcommander": { "category": "Utilities", "choco": "TotalCommander", "content": "Total Commander", "description": "Total Commander is a file manager for Windows that provides a powerful and intuitive interface for file management.", "link": "https://www.ghisler.com/", "winget": "Ghisler.TotalCommander" }, "WPFInstalltreesize": { "category": "Utilities", "choco": "treesizefree", "content": "TreeSize Free", "description": "TreeSize Free is a disk space manager that helps you analyze and visualize the space usage on your drives.", "link": "https://www.jam-software.com/treesize_free/", "winget": "JAMSoftware.TreeSize.Free" }, "WPFInstallttaskbar": { "category": "Utilities", "choco": "translucenttb", "content": "TranslucentTB", "description": "TranslucentTB is a tool that allows you to customize the transparency of the Windows taskbar.", "link": "https://github.com/TranslucentTB/TranslucentTB", "winget": "9PF4KZ2VN4W9" }, "WPFInstalltwinkletray": { "category": "Utilities", "choco": "twinkle-tray", "content": "Twinkle Tray", "description": "Twinkle Tray lets you easily manage the brightness levels of multiple monitors.", "link": "https://twinkletray.com/", "winget": "xanderfrangos.twinkletray" }, "WPFInstallubisoft": { "category": "Games", "choco": "ubisoft-connect", "content": "Ubisoft Connect", "description": "Ubisoft Connect is Ubisoft's digital distribution and online gaming service, providing access to Ubisoft's games and services.", "link": "https://ubisoftconnect.com/", "winget": "Ubisoft.Connect" }, "WPFInstallungoogled": { "category": "Browsers", "choco": "ungoogled-chromium", "content": "Ungoogled", "description": "Ungoogled Chromium is a version of Chromium without Google's integration for enhanced privacy and control.", "link": "https://github.com/Eloston/ungoogled-chromium", "winget": "eloston.ungoogled-chromium" }, "WPFInstallunity": { "category": "Development", "choco": "unityhub", "content": "Unity Game Engine", "description": "Unity is a powerful game development platform for creating 2D, 3D, augmented reality, and virtual reality games.", "link": "https://unity.com/", "winget": "Unity.UnityHub" }, "WPFInstallvagrant": { "category": "Development", "choco": "vagrant", "content": "Vagrant", "description": "Vagrant is an open-source tool for building and managing virtualized development environments.", "link": "https://www.vagrantup.com/", "winget": "Hashicorp.Vagrant" }, "WPFInstallvc2015_32": { "category": "Microsoft Tools", "choco": "na", "content": "Visual C++ 2015-2022 32-bit", "description": "Visual C++ 2015-2022 32-bit redistributable package installs runtime components of Visual C++ libraries required to run 32-bit applications.", "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads", "winget": "Microsoft.VCRedist.2015+.x86" }, "WPFInstallvc2015_64": { "category": "Microsoft Tools", "choco": "na", "content": "Visual C++ 2015-2022 64-bit", "description": "Visual C++ 2015-2022 64-bit redistributable package installs runtime components of Visual C++ libraries required to run 64-bit applications.", "link": "https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads", "winget": "Microsoft.VCRedist.2015+.x64" }, "WPFInstallventoy": { "category": "Pro Tools", "choco": "ventoy", "content": "Ventoy", "description": "Ventoy is an open-source tool for creating bootable USB drives. It supports multiple ISO files on a single USB drive, making it a versatile solution for installing operating systems.", "link": "https://www.ventoy.net/", "winget": "Ventoy.Ventoy" }, "WPFInstallvesktop": { "category": "Communications", "choco": "na", "content": "Vesktop", "description": "A cross platform electron-based desktop app aiming to give you a snappier Discord experience with Vencord pre-installed.", "link": "https://github.com/Vencord/Vesktop", "winget": "Vencord.Vesktop" }, "WPFInstallviber": { "category": "Communications", "choco": "viber", "content": "Viber", "description": "Viber is a free messaging and calling app with features like group chats, video calls, and more.", "link": "https://www.viber.com/", "winget": "Rakuten.Viber" }, "WPFInstallvideomass": { "category": "Multimedia Tools", "choco": "na", "content": "Videomass", "description": "Videomass by GianlucaPernigotto is a cross-platform GUI for FFmpeg, streamlining multimedia file processing with batch conversions and user-friendly features.", "link": "https://jeanslack.github.io/Videomass/", "winget": "GianlucaPernigotto.Videomass" }, "WPFInstallvisualstudio": { "category": "Development", "choco": "visualstudio2022community", "content": "Visual Studio 2022", "description": "Visual Studio 2022 is an integrated development environment (IDE) for building, debugging, and deploying applications.", "link": "https://visualstudio.microsoft.com/", "winget": "Microsoft.VisualStudio.2022.Community" }, "WPFInstallvivaldi": { "category": "Browsers", "choco": "vivaldi", "content": "Vivaldi", "description": "Vivaldi is a highly customizable web browser with a focus on user personalization and productivity features.", "link": "https://vivaldi.com/", "winget": "Vivaldi.Vivaldi" }, "WPFInstallvlc": { "category": "Multimedia Tools", "choco": "vlc", "content": "VLC (Video Player)", "description": "VLC Media Player is a free and open-source multimedia player that supports a wide range of audio and video formats. It is known for its versatility and cross-platform compatibility.", "link": "https://www.videolan.org/vlc/", "winget": "VideoLAN.VLC" }, "WPFInstallvoicemeeter": { "category": "Multimedia Tools", "choco": "voicemeeter", "content": "Voicemeeter (Audio)", "description": "Voicemeeter is a virtual audio mixer that allows you to manage and enhance audio streams on your computer. It is commonly used for audio recording and streaming purposes.", "link": "https://voicemeeter.com/", "winget": "VB-Audio.Voicemeeter" }, "WPFInstallVoicemeeterPotato": { "category": "Multimedia Tools", "choco": "voicemeeter-potato", "content": "Voicemeeter Potato", "description": "Voicemeeter Potato is the ultimate version of the Voicemeeter Audio Mixer Application endowed with Virtual Audio Device to mix and manage any audio sources from or to any audio devices or applications.", "link": "https://voicemeeter.com/", "winget": "VB-Audio.Voicemeeter.Potato" }, "WPFInstallvrdesktopstreamer": { "category": "Games", "choco": "na", "content": "Virtual Desktop Streamer", "description": "Virtual Desktop Streamer is a tool that allows you to stream your desktop screen to VR devices.", "link": "https://www.vrdesktop.net/", "winget": "VirtualDesktop.Streamer" }, "WPFInstallvscode": { "category": "Development", "choco": "vscode", "content": "VS Code", "description": "Visual Studio Code is a free, open-source code editor with support for multiple programming languages.", "link": "https://code.visualstudio.com/", "winget": "Microsoft.VisualStudioCode" }, "WPFInstallvscodium": { "category": "Development", "choco": "vscodium", "content": "VS Codium", "description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.", "link": "https://vscodium.com/", "winget": "VSCodium.VSCodium" }, "WPFInstallwaterfox": { "category": "Browsers", "choco": "waterfox", "content": "Waterfox", "description": "Waterfox is a fast, privacy-focused web browser based on Firefox, designed to preserve user choice and privacy.", "link": "https://www.waterfox.net/", "winget": "Waterfox.Waterfox" }, "WPFInstallwazuh": { "category": "Utilities", "choco": "wazuh-agent", "content": "Wazuh.", "description": "Wazuh is an open-source security monitoring platform that offers intrusion detection, compliance checks, and log analysis.", "link": "https://wazuh.com/", "winget": "Wazuh.WazuhAgent" }, "WPFInstallwezterm": { "category": "Development", "choco": "wezterm", "content": "Wezterm", "description": "WezTerm is a powerful cross-platform terminal emulator and multiplexer", "link": "https://wezfurlong.org/wezterm/index.html", "winget": "wez.wezterm" }, "WPFInstallwindowspchealth": { "category": "Utilities", "choco": "na", "content": "Windows PC Health Check", "description": "Windows PC Health Check is a tool that helps you check if your PC meets the system requirements for Windows 11.", "link": "https://support.microsoft.com/en-us/windows/how-to-use-the-pc-health-check-app-9c8abd9b-03ba-4e67-81ef-36f37caa7844", "winget": "Microsoft.WindowsPCHealthCheck" }, "WPFInstallWindowGrid": { "category": "Utilities", "choco": "windowgrid", "content": "WindowGrid", "description": "WindowGrid is a modern window management program for Windows that allows the user to quickly and easily layout their windows on a dynamic grid using just the mouse.", "link": "http://windowgrid.net/", "winget": "na" }, "WPFInstallwingetui": { "category": "Utilities", "choco": "wingetui", "content": "UniGetUI", "description": "UniGetUI is a GUI for Winget, Chocolatey, and other Windows CLI package managers.", "link": "https://www.marticliment.com/wingetui/", "winget": "MartiCliment.UniGetUI" }, "WPFInstallwinmerge": { "category": "Document", "choco": "winmerge", "content": "WinMerge", "description": "WinMerge is a visual text file and directory comparison tool for Windows.", "link": "https://winmerge.org/", "winget": "WinMerge.WinMerge" }, "WPFInstallwinpaletter": { "category": "Utilities", "choco": "WinPaletter", "content": "WinPaletter", "description": "WinPaletter is a tool for adjusting the color palette of Windows 10, providing customization options for window colors.", "link": "https://github.com/Abdelrhman-AK/WinPaletter", "winget": "Abdelrhman-AK.WinPaletter" }, "WPFInstallwinrar": { "category": "Utilities", "choco": "winrar", "content": "WinRAR", "description": "WinRAR is a powerful archive manager that allows you to create, manage, and extract compressed files.", "link": "https://www.win-rar.com/", "winget": "RARLab.WinRAR" }, "WPFInstallwinscp": { "category": "Pro Tools", "choco": "winscp", "content": "WinSCP", "description": "WinSCP is a popular open-source SFTP, FTP, and SCP client for Windows. It allows secure file transfers between a local and a remote computer.", "link": "https://winscp.net/", "winget": "WinSCP.WinSCP" }, "WPFInstallwireguard": { "category": "Pro Tools", "choco": "wireguard", "content": "WireGuard", "description": "WireGuard is a fast and modern VPN (Virtual Private Network) protocol. It aims to be simpler and more efficient than other VPN protocols, providing secure and reliable connections.", "link": "https://www.wireguard.com/", "winget": "WireGuard.WireGuard" }, "WPFInstallwireshark": { "category": "Pro Tools", "choco": "wireshark", "content": "Wireshark", "description": "Wireshark is a widely-used open-source network protocol analyzer. It allows users to capture and analyze network traffic in real-time, providing detailed insights into network activities.", "link": "https://www.wireshark.org/", "winget": "WiresharkFoundation.Wireshark" }, "WPFInstallwisetoys": { "category": "Utilities", "choco": "na", "content": "WiseToys", "description": "WiseToys is a set of utilities and tools designed to enhance and optimize your Windows experience.", "link": "https://toys.wisecleaner.com/", "winget": "WiseCleaner.WiseToys" }, "WPFInstallTeraCopy": { "category": "Utilities", "choco": "TeraCopy", "content": "TeraCopy", "description": "Copy your files faster and more securely", "link": "https://codesector.com/teracopy", "winget": "CodeSector.TeraCopy" }, "WPFInstallwizfile": { "category": "Utilities", "choco": "na", "content": "WizFile", "description": "Find files by name on your hard drives almost instantly.", "link": "https://antibody-software.com/wizfile/", "winget": "AntibodySoftware.WizFile" }, "WPFInstallwiztree": { "category": "Utilities", "choco": "wiztree", "content": "WizTree", "description": "WizTree is a fast disk space analyzer that helps you quickly find the files and folders consuming the most space on your hard drive.", "link": "https://wiztreefree.com/", "winget": "AntibodySoftware.WizTree" }, "WPFInstallxdm": { "category": "Utilities", "choco": "xdm", "content": "Xtreme Download Manager", "description": "Xtreme Download Manager is an advanced download manager with support for various protocols and browsers.*Browser integration deprecated by google store. No official release.*", "link": "https://xtremedownloadmanager.com/", "winget": "subhra74.XtremeDownloadManager" }, "WPFInstallxeheditor": { "category": "Utilities", "choco": "HxD", "content": "HxD Hex Editor", "description": "HxD is a free hex editor that allows you to edit, view, search, and analyze binary files.", "link": "https://mh-nexus.de/en/hxd/", "winget": "MHNexus.HxD" }, "WPFInstallxemu": { "category": "Games", "choco": "na", "content": "XEMU", "description": "XEMU is an open-source Xbox emulator that allows you to play Xbox games on your PC, aiming for accuracy and compatibility.", "link": "https://xemu.app/", "winget": "xemu-project.xemu" }, "WPFInstallxnview": { "category": "Utilities", "choco": "xnview", "content": "XnView classic", "description": "XnView is an efficient image viewer, browser and converter for Windows.", "link": "https://www.xnview.com/en/xnview/", "winget": "XnSoft.XnView.Classic" }, "WPFInstallxournal": { "category": "Document", "choco": "xournalplusplus", "content": "Xournal++", "description": "Xournal++ is an open-source handwriting notetaking software with PDF annotation capabilities.", "link": "https://xournalpp.github.io/", "winget": "Xournal++.Xournal++" }, "WPFInstallxpipe": { "category": "Pro Tools", "choco": "xpipe", "content": "XPipe", "description": "XPipe is an open-source tool for orchestrating containerized applications. It simplifies the deployment and management of containerized services in a distributed environment.", "link": "https://xpipe.io/", "winget": "xpipe-io.xpipe" }, "WPFInstallyarn": { "category": "Development", "choco": "yarn", "content": "Yarn", "description": "Yarn is a fast, reliable, and secure dependency management tool for JavaScript projects.", "link": "https://yarnpkg.com/", "winget": "Yarn.Yarn" }, "WPFInstallytdlp": { "category": "Multimedia Tools", "choco": "yt-dlp", "content": "Yt-dlp", "description": "Command-line tool that allows you to download videos from YouTube and other supported sites. It is an improved version of the popular youtube-dl.", "link": "https://github.com/yt-dlp/yt-dlp", "winget": "yt-dlp.yt-dlp" }, "WPFInstallzerotierone": { "category": "Utilities", "choco": "zerotier-one", "content": "ZeroTier One", "description": "ZeroTier One is a software-defined networking tool that allows you to create secure and scalable networks.", "link": "https://zerotier.com/", "winget": "ZeroTier.ZeroTierOne" }, "WPFInstallzim": { "category": "Document", "choco": "zim", "content": "Zim Desktop Wiki", "description": "Zim Desktop Wiki is a graphical text editor used to maintain a collection of wiki pages.", "link": "https://zim-wiki.org/", "winget": "Zimwiki.Zim" }, "WPFInstallznote": { "category": "Document", "choco": "na", "content": "Znote", "description": "Znote is a note-taking application.", "link": "https://znote.io/", "winget": "alagrede.znote" }, "WPFInstallzoom": { "category": "Communications", "choco": "zoom", "content": "Zoom", "description": "Zoom is a popular video conferencing and web conferencing service for online meetings, webinars, and collaborative projects.", "link": "https://zoom.us/", "winget": "Zoom.Zoom" }, "WPFInstallzoomit": { "category": "Utilities", "choco": "na", "content": "ZoomIt", "description": "A screen zoom, annotation, and recording tool for technical presentations and demos", "link": "https://learn.microsoft.com/en-us/sysinternals/downloads/zoomit", "winget": "Microsoft.Sysinternals.ZoomIt" }, "WPFInstallzotero": { "category": "Document", "choco": "zotero", "content": "Zotero", "description": "Zotero is a free, easy-to-use tool to help you collect, organize, cite, and share your research materials.", "link": "https://www.zotero.org/", "winget": "DigitalScholar.Zotero" }, "WPFInstallzoxide": { "category": "Utilities", "choco": "zoxide", "content": "Zoxide", "description": "Zoxide is a fast and efficient directory changer (cd) that helps you navigate your file system with ease.", "link": "https://github.com/ajeetdsouza/zoxide", "winget": "ajeetdsouza.zoxide" }, "WPFInstallzulip": { "category": "Communications", "choco": "zulip", "content": "Zulip", "description": "Zulip is an open-source team collaboration tool with chat streams for productive and organized communication.", "link": "https://zulipchat.com/", "winget": "Zulip.Zulip" }, "WPFInstallsyncthingtray": { "category": "Utilities", "choco": "syncthingtray", "content": "Syncthingtray", "description": "Might be the alternative for Synctrayzor. Windows tray utility / filesystem watcher / launcher for Syncthing", "link": "https://github.com/Martchus/syncthingtray", "winget": "Martchus.syncthingtray" }, "WPFInstallminiconda": { "category": "Development", "choco": "miniconda3", "content": "Miniconda", "description": "Miniconda is a free minimal installer for conda. It is a small bootstrap version of Anaconda that includes only conda, Python, the packages they both depend on, and a small number of other useful packages (like pip, zlib, and a few others).", "link": "https://docs.conda.io/projects/miniconda", "winget": "Anaconda.Miniconda3" }, "WPFInstallpixi": { "category": "Development", "choco": "pixi", "content": "Pixi", "description": "Pixi is a fast software package manager built on top of the existing conda ecosystem. Spins up development environments quickly on Windows, macOS and Linux. Pixi supports Python, R, C/C++, Rust, Ruby, and many other languages.", "link": "https://pixi.sh", "winget": "prefix-dev.pixi" }, "WPFInstalltemurin": { "category": "Development", "choco": "temurin", "content": "Eclipse Temurin", "description": "Eclipse Temurin is the open source Java SE build based upon OpenJDK.", "link": "https://adoptium.net/temurin/", "winget": "EclipseAdoptium.Temurin.21.JDK" }, "WPFInstallintelpresentmon": { "category": "Utilities", "choco": "na", "content": "Intel-PresentMon", "description": "A new gaming performance overlay and telemetry application to monitor and measure your gaming experience.", "link": "https://game.intel.com/us/stories/intel-presentmon/", "winget": "Intel.PresentMon.Beta" }, "WPFInstallpyenvwin": { "category": "Development", "choco": "pyenv-win", "content": "Python Version Manager (pyenv-win)", "description": "pyenv for Windows is a simple python version management tool. It lets you easily switch between multiple versions of Python.", "link": "https://pyenv-win.github.io/pyenv-win/", "winget": "na" }, "WPFInstalltightvnc": { "category": "Utilities", "choco": "TightVNC", "content": "TightVNC", "description": "TightVNC is a free and Open Source remote desktop software that lets you access and control a computer over the network. With its intuitive interface, you can interact with the remote screen as if you were sitting in front of it. You can open files, launch applications, and perform other actions on the remote desktop almost as if you were physically there", "link": "https://www.tightvnc.com/", "winget": "GlavSoft.TightVNC" }, "WPFInstallultravnc": { "category": "Utilities", "choco": "ultravnc", "content": "UltraVNC", "description": "UltraVNC is a powerful, easy to use and free - remote pc access software - that can display the screen of another computer (via internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other PC remotely. It means that you can work on a remote computer, as if you were sitting in front of it, right from your current location.", "link": "https://uvnc.com/", "winget": "uvncbvba.UltraVnc" }, "WPFInstallwindowsfirewallcontrol": { "category": "Utilities", "choco": "windowsfirewallcontrol", "content": "Windows Firewall Control", "description": "Windows Firewall Control is a powerful tool which extends the functionality of Windows Firewall and provides new extra features which makes Windows Firewall better.", "link": "https://www.binisoft.org/wfc", "winget": "BiniSoft.WindowsFirewallControl" }, "WPFInstallvistaswitcher": { "category": "Utilities", "choco": "na", "content": "VistaSwitcher", "description": "VistaSwitcher makes it easier for you to locate windows and switch focus, even on multi-monitor systems. The switcher window consists of an easy-to-read list of all tasks running with clearly shown titles and a full-sized preview of the selected task.", "link": "https://www.ntwind.com/freeware/vistaswitcher.html", "winget": "ntwind.VistaSwitcher" }, "WPFInstallautodarkmode": { "category": "Utilities", "choco": "auto-dark-mode", "content": "Windows Auto Dark Mode", "description": "Automatically switches between the dark and light theme of Windows 10 and Windows 11", "link": "https://github.com/AutoDarkMode/Windows-Auto-Night-Mode", "winget": "Armin2208.WindowsAutoNightMode" }, "WPFInstallAmbieWhiteNoise": { "category": "Utilities", "choco": "na", "content": "Ambie White Noise", "description": "Ambie is the ultimate app to help you focus, study, or relax. We use white noise and nature sounds combined with an innovative focus timer to keep you concentrated on doing your best work.", "link": "https://ambieapp.com/", "winget": "9P07XNM5CHP0" }, "WPFInstallmagicwormhole": { "category": "Utilities", "choco": "magic-wormhole", "content": "Magic Wormhole", "description": "get things from one computer to another, safely", "link": "https://github.com/magic-wormhole/magic-wormhole", "winget": "magic-wormhole.magic-wormhole" }, "WPFInstallcroc": { "category": "Utilities", "choco": "croc", "content": "croc", "description": "Easily and securely send things from one computer to another.", "link": "https://github.com/schollz/croc", "winget": "schollz.croc" }, "WPFInstallqgis": { "category": "Multimedia Tools", "choco": "qgis", "content": "QGIS", "description": "QGIS (Quantum GIS) is an open-source Geographic Information System (GIS) software that enables users to create, edit, visualize, analyze, and publish geospatial information on Windows, Mac, and Linux platforms.", "link": "https://qgis.org/en/site/", "winget": "OSGeo.QGIS" }, "WPFInstallsmplayer": { "category": "Multimedia Tools", "choco": "smplayer", "content": "SMPlayer", "description": "SMPlayer is a free media player for Windows and Linux with built-in codecs that can play virtually all video and audio formats.", "link": "https://www.smplayer.info", "winget": "SMPlayer.SMPlayer" }, "WPFInstallglazewm": { "category": "Utilities", "choco": "na", "content": "GlazeWM", "description": "GlazeWM is a tiling window manager for Windows inspired by i3 and Polybar", "link": "https://github.com/glzr-io/glazewm", "winget": "glzr-io.glazewm" }, "WPFInstallfancontrol": { "category": "Utilities", "choco": "na", "content": "FanControl", "description": "Fan Control is a free and open-source software that allows the user to control his CPU, GPU and case fans using temperatures.", "link": "https://getfancontrol.com/", "winget": "Rem0o.FanControl" }, "WPFInstallfnm": { "category": "Development", "choco": "fnm", "content": "Fast Node Manager", "description": "Fast Node Manager (fnm) allows you to switch your Node version by using the Terminal", "link": "https://github.com/Schniz/fnm", "winget": "Schniz.fnm" }, "WPFInstallWindhawk": { "category": "Utilities", "choco": "windhawk", "content": "Windhawk", "description": "The customization marketplace for Windows programs", "link": "https://windhawk.net", "winget": "RamenSoftware.Windhawk" }, "WPFInstallForceAutoHDR": { "category": "Utilities", "choco": "na", "content": "ForceAutoHDR", "description": "ForceAutoHDR simplifies the process of adding games to the AutoHDR list in the Windows Registry", "link": "https://github.com/7gxycn08/ForceAutoHDR", "winget": "ForceAutoHDR.7gxycn08" }, "WPFInstallJoyToKey": { "category": "Utilities", "choco": "joytokey", "content": "JoyToKey", "description": "enables PC game controllers to emulate the keyboard and mouse input", "link": "https://joytokey.net/en/", "winget": "JTKsoftware.JoyToKey" }, "WPFInstallnditools": { "category": "Multimedia Tools", "choco": "na", "content": "NDI Tools", "description": "NDI, or Network Device Interface, is a video connectivity standard that enables multimedia systems to identify and communicate with one another over IP and to encode, transmit, and receive high-quality, low latency, frame-accurate video and audio, and exchange metadata in real-time.", "link": "https://ndi.video/", "winget": "NDI.NDITools" }, "WPFInstallkicad": { "category": "Multimedia Tools", "choco": "na", "content": "Kicad", "description": "Kicad is an open-source EDA tool. It's a good starting point for those who want to do electrical design and is even used by professionals in the industry.", "link": "https://www.kicad.org/", "winget": "KiCad.KiCad" }, "WPFInstalldropox": { "category": "Utilities", "choco": "na", "content": "Dropbox", "description": "The Dropbox desktop app! Save hard drive space, share and edit files and send for signature ? all without the distraction of countless browser tabs.", "link": "https://www.dropbox.com/en_GB/desktop", "winget": "Dropbox.Dropbox" }, "WPFInstallOFGB": { "category": "Utilities", "choco": "ofgb", "content": "OFGB (Oh Frick Go Back)", "description": "GUI Tool to remove ads from various places around Windows 11", "link": "https://github.com/xM4ddy/OFGB", "winget": "xM4ddy.OFGB" }, "WPFInstallPaleMoon": { "category": "Browsers", "choco": "paleMoon", "content": "PaleMoon", "description": "Pale Moon is an Open Source, Goanna-based web browser available for Microsoft Windows and Linux (with other operating systems in development), focusing on efficiency and ease of use.", "link": "https://www.palemoon.org/download.shtml", "winget": "MoonchildProductions.PaleMoon" }, "WPFInstallShotcut": { "category": "Multimedia Tools", "choco": "na", "content": "Shotcut", "description": "Shotcut is a free, open source, cross-platform video editor.", "link": "https://shotcut.org/", "winget": "Meltytech.Shotcut" }, "WPFInstallLenovoLegionToolkit": { "category": "Utilities", "choco": "na", "content": "Lenovo Legion Toolkit", "description": "Lenovo Legion Toolkit (LLT) is a open-source utility created for Lenovo Legion (and similar) series laptops, that allows changing a couple of features that are only available in Lenovo Vantage or Legion Zone. It runs no background services, uses less memory, uses virtually no CPU, and contains no telemetry. Just like Lenovo Vantage, this application is Windows only.", "link": "https://github.com/BartoszCichecki/LenovoLegionToolkit", "winget": "BartoszCichecki.LenovoLegionToolkit" }, "WPFInstallPulsarEdit": { "category": "Development", "choco": "pulsar", "content": "Pulsar", "description": "A Community-led Hyper-Hackable Text Editor", "link": "https://pulsar-edit.dev/", "winget": "Pulsar-Edit.Pulsar" }, "WPFInstallAegisub": { "category": "Development", "choco": "aegisub", "content": "Aegisub", "description": "Aegisub is a free, cross-platform open source tool for creating and modifying subtitles. Aegisub makes it quick and easy to time subtitles to audio, and features many powerful tools for styling them, including a built-in real-time video preview.", "link": "https://github.com/Aegisub/Aegisub", "winget": "Aegisub.Aegisub" }, "WPFInstallSubtitleEdit": { "category": "Multimedia Tools", "choco": "na", "content": "Subtitle Edit", "description": "Subtitle Edit is a free and open source editor for video subtitles.", "link": "https://github.com/SubtitleEdit/subtitleedit", "winget": "Nikse.SubtitleEdit" }, "WPFInstallFork": { "category": "Development", "choco": "git-fork", "content": "Fork", "description": "Fork - a fast and friendly git client.", "link": "https://git-fork.com/", "winget": "Fork.Fork" }, "WPFInstallZenBrowser": { "category": "Browsers", "choco": "na", "content": "Zen Browser", "description": "The modern, privacy-focused, performance-driven browser built on Firefox", "link": "https://zen-browser.app/", "winget": "Zen-Team.Zen-Browser" }, "WPFInstallZed": { "category": "Development", "choco": "na", "content": "Zed", "description": "Zed is a modern, high-performance code editor designed from the ground up for speed and collaboration.", "link": "https://zed.dev/", "winget": "ZedIndustries.Zed" } , "WPFInstall": { "Content": "Install/Upgrade Applications", "Category": "____Actions", "Type": "Button", "Order": "1", "Description": "Install or upgrade the selected applications" }, "WPFUninstall": { "Content": "Uninstall Applications", "Category": "____Actions", "Type": "Button", "Order": "2", "Description": "Uninstall the selected applications" }, "WPFInstallUpgrade": { "Content": "Upgrade all Applications", "Category": "____Actions", "Type": "Button", "Order": "3", "Description": "Upgrade all applications to the latest version" }, "WingetRadioButton": { "Content": "Winget", "Category": "__Package Manager", "Type": "RadioButton", "GroupName": "PackageManagerGroup", "Checked": true, "Order": "1", "Description": "Use Winget for package management" }, "ChocoRadioButton": { "Content": "Chocolatey", "Category": "__Package Manager", "Type": "RadioButton", "GroupName": "PackageManagerGroup", "Checked": false, "Order": "2", "Description": "Use Chocolatey for package management" }, "WPFCollapseAllCategories": { "Content": "Collapse All Categories", "Category": "__Selection", "Type": "Button", "Order": "1", "Description": "Collapse all application categories" }, "WPFExpandAllCategories": { "Content": "Expand All Categories", "Category": "__Selection", "Type": "Button", "Order": "2", "Description": "Expand all application categories" }, "WPFClearInstallSelection": { "Content": "Clear Selection", "Category": "__Selection", "Type": "Button", "Order": "3", "Description": "Clear the selection of applications" }, "WPFGetInstalled": { "Content": "Get Installed", "Category": "__Selection", "Type": "Button", "Order": "4", "Description": "Show installed applications" }, "WPFselectedAppsButton": { "Content": "Selected Apps: 0", "Category": "__Selection", "Type": "Button", "Order": "5", "Description": "Show the selected applications" } } '@ | ConvertFrom-Json $sync.configs.appnavigation = @' { "Install": { "Order": "1", "Icon": "0xE118" }, "Tweaks": { "Order": "2", "Icon": "0xE713" }, "Config": { "Order": "3", "Icon": "0xEBAA" }, "Updates": { "Order": "4", "Icon": "0xECC5" } } '@ | ConvertFrom-Json $sync.configs.dns = @' { "Google": { "Primary": "8.8.8.8", "Secondary": "8.8.4.4", "Primary6": "2001:4860:4860::8888", "Secondary6": "2001:4860:4860::8844" }, "Cloudflare": { "Primary": "1.1.1.1", "Secondary": "1.0.0.1", "Primary6": "2606:4700:4700::1111", "Secondary6": "2606:4700:4700::1001" }, "Cloudflare_Malware": { "Primary": "1.1.1.2", "Secondary": "1.0.0.2", "Primary6": "2606:4700:4700::1112", "Secondary6": "2606:4700:4700::1002" }, "Cloudflare_Malware_Adult": { "Primary": "1.1.1.3", "Secondary": "1.0.0.3", "Primary6": "2606:4700:4700::1113", "Secondary6": "2606:4700:4700::1003" }, "Open_DNS": { "Primary": "208.67.222.222", "Secondary": "208.67.220.220", "Primary6": "2620:119:35::35", "Secondary6": "2620:119:53::53" }, "Quad9": { "Primary": "9.9.9.9", "Secondary": "149.112.112.112", "Primary6": "2620:fe::fe", "Secondary6": "2620:fe::9" }, "AdGuard_Ads_Trackers": { "Primary": "94.140.14.14", "Secondary": "94.140.15.15", "Primary6": "2a10:50c0::ad1:ff", "Secondary6": "2a10:50c0::ad2:ff" }, "AdGuard_Ads_Trackers_Malware_Adult": { "Primary": "94.140.14.15", "Secondary": "94.140.15.16", "Primary6": "2a10:50c0::bad1:ff", "Secondary6": "2a10:50c0::bad2:ff" } } '@ | ConvertFrom-Json $sync.configs.feature = @' { "WPFFeaturesdotnet": { "Content": "All .Net Framework (2,3,4)", "Description": ".NET and .NET Framework is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.", "category": "Features", "panel": "1", "Order": "a010_", "feature": [ "NetFx4-AdvSrvs", "NetFx3" ], "InvokeScript": [], "link": "https://winutil.christitus.com/dev/features/features/dotnet" }, "WPFFeatureshyperv": { "Content": "HyperV Virtualization", "Description": "Hyper-V is a hardware virtualization product developed by Microsoft that allows users to create and manage virtual machines.", "category": "Features", "panel": "1", "Order": "a011_", "feature": [ "Microsoft-Hyper-V-All" ], "InvokeScript": [ "bcdedit /set hypervisorschedulertype classic" ], "link": "https://winutil.christitus.com/dev/features/features/hyperv" }, "WPFFeatureslegacymedia": { "Content": "Legacy Media (WMP, DirectPlay)", "Description": "Enables legacy programs from previous versions of windows", "category": "Features", "panel": "1", "Order": "a012_", "feature": [ "WindowsMediaPlayer", "MediaPlayback", "DirectPlay", "LegacyComponents" ], "InvokeScript": [], "link": "https://winutil.christitus.com/dev/features/features/legacymedia" }, "WPFFeaturewsl": { "Content": "Windows Subsystem for Linux", "Description": "Windows Subsystem for Linux is an optional feature of Windows that allows Linux programs to run natively on Windows without the need for a separate virtual machine or dual booting.", "category": "Features", "panel": "1", "Order": "a020_", "feature": [ "VirtualMachinePlatform", "Microsoft-Windows-Subsystem-Linux" ], "InvokeScript": [], "link": "https://winutil.christitus.com/dev/features/features/wsl" }, "WPFFeaturenfs": { "Content": "NFS - Network File System", "Description": "Network File System (NFS) is a mechanism for storing files on a network.", "category": "Features", "panel": "1", "Order": "a014_", "feature": [ "ServicesForNFS-ClientOnly", "ClientForNFS-Infrastructure", "NFS-Administration" ], "InvokeScript": [ "nfsadmin client stop", "Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default' -Name 'AnonymousUID' -Type DWord -Value 0", "Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\ClientForNFS\\CurrentVersion\\Default' -Name 'AnonymousGID' -Type DWord -Value 0", "nfsadmin client start", "nfsadmin client localhost config fileaccess=755 SecFlavors=+sys -krb5 -krb5i" ], "link": "https://winutil.christitus.com/dev/features/features/nfs" }, "WPFFeatureRegBackup": { "Content": "Enable Daily Registry Backup Task 12.30am", "Description": "Enables daily registry backup, previously disabled by Microsoft in Windows 10 1803.", "category": "Features", "panel": "1", "Order": "a017_", "feature": [], "InvokeScript": [ "\r\n New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager' -Name 'EnablePeriodicBackup' -Type DWord -Value 1 -Force\r\n New-ItemProperty -Path 'HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Configuration Manager' -Name 'BackupCount' -Type DWord -Value 2 -Force\r\n $action = New-ScheduledTaskAction -Execute 'schtasks' -Argument '/run /i /tn \"\\Microsoft\\Windows\\Registry\\RegIdleBackup\"'\r\n $trigger = New-ScheduledTaskTrigger -Daily -At 00:30\r\n Register-ScheduledTask -Action $action -Trigger $trigger -TaskName 'AutoRegBackup' -Description 'Create System Registry Backups' -User 'System'\r\n " ], "link": "https://winutil.christitus.com/dev/features/features/regbackup" }, "WPFFeatureEnableLegacyRecovery": { "Content": "Enable Legacy F8 Boot Recovery", "Description": "Enables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.", "category": "Features", "panel": "1", "Order": "a018_", "feature": [], "InvokeScript": [ "bcdedit /set bootmenupolicy legacy" ], "link": "https://winutil.christitus.com/dev/features/features/enablelegacyrecovery" }, "WPFFeatureDisableLegacyRecovery": { "Content": "Disable Legacy F8 Boot Recovery", "Description": "Disables Advanced Boot Options screen that lets you start Windows in advanced troubleshooting modes.", "category": "Features", "panel": "1", "Order": "a019_", "feature": [], "InvokeScript": [ "bcdedit /set bootmenupolicy standard" ], "link": "https://winutil.christitus.com/dev/features/features/disablelegacyrecovery" }, "WPFFeaturesSandbox": { "Content": "Windows Sandbox", "Description": "Windows Sandbox is a lightweight virtual machine that provides a temporary desktop environment to safely run applications and programs in isolation.", "category": "Features", "panel": "1", "Order": "a021_", "feature": [ "Containers-DisposableClientVM" ], "link": "https://winutil.christitus.com/dev/features/features/sandbox" }, "WPFFeatureInstall": { "Content": "Install Features", "category": "Features", "panel": "1", "Order": "a060_", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/features/install" }, "WPFPanelAutologin": { "Content": "Set Up Autologin", "category": "Fixes", "Order": "a040_", "panel": "1", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/fixes/autologin" }, "WPFFixesUpdate": { "Content": "Reset Windows Update", "category": "Fixes", "panel": "1", "Order": "a041_", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/fixes/update" }, "WPFFixesNetwork": { "Content": "Reset Network", "category": "Fixes", "Order": "a042_", "panel": "1", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/fixes/network" }, "WPFPanelDISM": { "Content": "System Corruption Scan", "category": "Fixes", "panel": "1", "Order": "a043_", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/fixes/dism" }, "WPFFixesWinget": { "Content": "WinGet Reinstall", "category": "Fixes", "panel": "1", "Order": "a044_", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/fixes/winget" }, "WPFRunAdobeCCCleanerTool": { "Content": "Remove Adobe Creative Cloud", "category": "Fixes", "panel": "1", "Order": "a045_", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/fixes/runadobecccleanertool" }, "WPFPanelControl": { "Content": "Control Panel", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/control" }, "WPFPanelComputer": { "Content": "Computer Management", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/computer" }, "WPFPanelNetwork": { "Content": "Network Connections", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/network" }, "WPFPanelPower": { "Content": "Power Panel", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/power" }, "WPFPanelPrinter": { "Content": "Printer Panel", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/printer" }, "WPFPanelRegion": { "Content": "Region", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/region" }, "WPFPanelRestore": { "Content": "Windows Restore", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/restore" }, "WPFPanelSound": { "Content": "Sound Settings", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/user" }, "WPFPanelSystem": { "Content": "System Properties", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/system" }, "WPFPanelTimedate": { "Content": "Time and Date", "category": "Legacy Windows Panels", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/features/legacy-windows-panels/timedate" }, "WPFWinUtilInstallPSProfile": { "Content": "Install CTT PowerShell Profile", "category": "Powershell Profile Powershell 7+ Only", "panel": "2", "Order": "a083_", "Type": "Button", "ButtonWidth": "300" }, "WPFWinUtilUninstallPSProfile": { "Content": "Uninstall CTT PowerShell Profile", "category": "Powershell Profile Powershell 7+ Only", "panel": "2", "Order": "a084_", "Type": "Button", "ButtonWidth": "300" }, "WPFWinUtilSSHServer": { "Content": "Enable OpenSSH Server", "category": "Remote Access", "panel": "2", "Order": "a084_", "Type": "Button", "ButtonWidth": "300" } } '@ | ConvertFrom-Json $sync.configs.preset = @' { "Standard": [ "WPFTweaksActivity", "WPFTweaksConsumerFeatures", "WPFTweaksDisableExplorerAutoDiscovery", "WPFTweaksWPBT", "WPFTweaksDVR", "WPFTweaksLocation", "WPFTweaksServices", "WPFTweaksTelemetry", "WPFTweaksDiskCleanup", "WPFTweaksDeleteTempFiles", "WPFTweaksEndTaskOnTaskbar", "WPFTweaksRestorePoint", "WPFTweaksPowershell7Tele" ], "Minimal": [ "WPFTweaksConsumerFeatures", "WPFTweaksDisableExplorerAutoDiscovery", "WPFTweaksWPBT", "WPFTweaksServices", "WPFTweaksTelemetry" ] } '@ | ConvertFrom-Json $sync.configs.themes = @' { "shared": { "AppEntryWidth": "200", "AppEntryFontSize": "11", "AppEntryMargin": "1,0,1,0", "AppEntryBorderThickness": "0", "CustomDialogFontSize": "12", "CustomDialogFontSizeHeader": "14", "CustomDialogLogoSize": "25", "CustomDialogWidth": "400", "CustomDialogHeight": "200", "FontSize": "12", "FontFamily": "Arial", "HeaderFontSize": "16", "HeaderFontFamily": "Consolas, Monaco", "CheckBoxBulletDecoratorSize": "14", "CheckBoxMargin": "15,0,0,2", "TabContentMargin": "5", "TabButtonFontSize": "14", "TabButtonWidth": "110", "TabButtonHeight": "26", "TabRowHeightInPixels": "50", "ToolTipWidth": "300", "IconFontSize": "14", "IconButtonSize": "35", "SettingsIconFontSize": "18", "CloseIconFontSize": "18", "GroupBorderBackgroundColor": "#0D0D0D", "ButtonFontSize": "12", "ButtonFontFamily": "Arial", "ButtonWidth": "200", "ButtonHeight": "25", "ConfigTabButtonFontSize": "14", "ConfigUpdateButtonFontSize": "14", "SearchBarWidth": "200", "SearchBarHeight": "26", "SearchBarTextBoxFontSize": "12", "SearchBarClearButtonFontSize": "14", "CheckboxMouseOverColor": "#FF2222", "ButtonBorderThickness": "1", "ButtonMargin": "1", "ButtonCornerRadius": "2" }, "Light": { "AppInstallUnselectedColor": "#F7F7F7", "AppInstallHighlightedColor": "#CFCFCF", "AppInstallSelectedColor": "#C2C2C2", "AppInstallOverlayBackgroundColor": "#6A6D72", "ComboBoxForegroundColor": "#232629", "ComboBoxBackgroundColor": "#F7F7F7", "LabelboxForegroundColor": "#232629", "MainForegroundColor": "#232629", "MainBackgroundColor": "#F7F7F7", "LabelBackgroundColor": "#F7F7F7", "LinkForegroundColor": "#484848", "LinkHoverForegroundColor": "#232629", "ScrollBarBackgroundColor": "#4A4D52", "ScrollBarHoverColor": "#5A5D62", "ScrollBarDraggingColor": "#6A6D72", "ProgressBarForegroundColor": "#2e77ff", "ProgressBarBackgroundColor": "Transparent", "ProgressBarTextColor": "#FF2222", "ButtonInstallBackgroundColor": "#F7F7F7", "ButtonTweaksBackgroundColor": "#F7F7F7", "ButtonConfigBackgroundColor": "#F7F7F7", "ButtonUpdatesBackgroundColor": "#F7F7F7", "ButtonInstallForegroundColor": "#232629", "ButtonTweaksForegroundColor": "#232629", "ButtonConfigForegroundColor": "#232629", "ButtonUpdatesForegroundColor": "#232629", "ButtonBackgroundColor": "#F5F5F5", "ButtonBackgroundPressedColor": "#1A1A1A", "ButtonBackgroundMouseoverColor": "#C2C2C2", "ButtonBackgroundSelectedColor": "#F0F0F0", "ButtonForegroundColor": "#232629", "ToggleButtonOnColor": "#CC0000", "ToggleButtonOffColor": "#660000", "ToolTipBackgroundColor": "#F7F7F7", "BorderColor": "#232629", "BorderOpacity": "0.2" }, "Dark": { "AppInstallUnselectedColor": "#0D0D0D", "AppInstallHighlightedColor": "#2A0000", "AppInstallSelectedColor": "#3D0000", "AppInstallOverlayBackgroundColor": "#1A0000", "ComboBoxForegroundColor": "#FF2222", "ComboBoxBackgroundColor": "#1A0000", "LabelboxForegroundColor": "#FF2222", "MainForegroundColor": "#FF2222", "MainBackgroundColor": "#000000", "LabelBackgroundColor": "#000000", "LinkForegroundColor": "#FF6666", "LinkHoverForegroundColor": "#FF9999", "ScrollBarBackgroundColor": "#1A0000", "ScrollBarHoverColor": "#3D0000", "ScrollBarDraggingColor": "#CC0000", "ProgressBarForegroundColor": "#CC0000", "ProgressBarBackgroundColor": "Transparent", "ProgressBarTextColor": "#FF2222", "ButtonInstallBackgroundColor": "#1A0000", "ButtonTweaksBackgroundColor": "#1A0000", "ButtonConfigBackgroundColor": "#1A0000", "ButtonUpdatesBackgroundColor": "#1A0000", "ButtonInstallForegroundColor": "#FF2222", "ButtonTweaksForegroundColor": "#FF2222", "ButtonConfigForegroundColor": "#FF2222", "ButtonUpdatesForegroundColor": "#FF2222", "ButtonBackgroundColor": "#1A0000", "ButtonBackgroundPressedColor": "#FF0000", "ButtonBackgroundMouseoverColor": "#3D0000", "ButtonBackgroundSelectedColor": "#CC0000", "ButtonForegroundColor": "#FF2222", "ToggleButtonOnColor": "#CC0000", "ToggleButtonOffColor": "#660000", "ToolTipBackgroundColor": "#1A0000", "BorderColor": "#CC0000", "BorderOpacity": "0.2" } } '@ | ConvertFrom-Json $sync.configs.tweaks = @' { "WPFTweaksActivity": { "Content": "Disable Activity History", "Description": "This erases recent docs, clipboard, and run history.", "category": "Essential Tweaks", "panel": "1", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System", "Name": "EnableActivityFeed", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System", "Name": "PublishUserActivities", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System", "Name": "UploadUserActivities", "Type": "DWord", "Value": "0", "OriginalValue": "" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/activity" }, "WPFTweaksHiber": { "Content": "Disable Hibernation", "Description": "Hibernation is really meant for laptops as it saves what's in memory before turning the pc off. It really should never be used", "category": "Essential Tweaks", "panel": "1", "registry": [ { "Path": "HKLM:\\System\\CurrentControlSet\\Control\\Session Manager\\Power", "Name": "HibernateEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "1" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FlyoutMenuSettings", "Name": "ShowHibernateOption", "Type": "DWord", "Value": "0", "OriginalValue": "1" } ], "InvokeScript": [ "powercfg.exe /hibernate off" ], "UndoScript": [ "powercfg.exe /hibernate on" ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/hibernation" }, "WPFTweaksWidget": { "Content": "Remove Widgets", "Description": "Removes the annoying widgets in the bottom left of the taskbar", "category": "Essential Tweaks", "panel": "1", "InvokeScript": [ "\r\n # Sometimes if you dont stop Widgets Process for removal to work\r\n Stop-Process -Name Widgets\r\n Get-AppxPackage Microsoft.WidgetsPlatformRuntime -AllUsers | Remove-AppxPackage -AllUsers\r\n\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n Write-Host \"Removed widgets\"\r\n " ], "UndoScript": [ "\r\n Write-Host \"Restoring widgets AppxPackages\"\r\n Add-AppxPackage -DisableDevelopmentMode -Register \"C:\\Program Files\\WindowsApps\\Microsoft.WidgetsPlatformRuntime*\\AppxManifest.xml\"\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/widgets" }, "WPFTweaksLocation": { "Content": "Disable Location Tracking", "Description": "Disables Location Tracking...DUH!", "category": "Essential Tweaks", "panel": "1", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location", "Name": "Value", "Type": "String", "Value": "Deny", "OriginalValue": "Allow" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Sensor\\Overrides\\{BFA794E4-F964-4FDB-90F6-51056BFE4B44}", "Name": "SensorPermissionState", "Type": "DWord", "Value": "0", "OriginalValue": "1" }, { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\lfsvc\\Service\\Configuration", "Name": "Status", "Type": "DWord", "Value": "0", "OriginalValue": "1" }, { "Path": "HKLM:\\SYSTEM\\Maps", "Name": "AutoUpdateEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "1" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/location" }, "WPFTweaksServices": { "Content": "Set Services 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.", "category": "Essential Tweaks", "panel": "1", "service": [ { "Name": "ALG", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "AppMgmt", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "AppReadiness", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "AppVClient", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "Appinfo", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "AssignedAccessManagerSvc", "StartupType": "Disabled", "OriginalType": "Manual" }, { "Name": "AudioEndpointBuilder", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "AudioSrv", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "Audiosrv", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "AxInstSV", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "BDESVC", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "BITS", "StartupType": "AutomaticDelayedStart", "OriginalType": "Automatic" }, { "Name": "BTAGService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "BthAvctpSvc", "StartupType": "Automatic", "OriginalType": "Manual" }, { "Name": "CDPSvc", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "COMSysApp", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "CertPropSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "CryptSvc", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "CscService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "DPS", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "DevQueryBroker", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "DeviceAssociationService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "DeviceInstall", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "Dhcp", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "DiagTrack", "StartupType": "Disabled", "OriginalType": "Automatic" }, { "Name": "DialogBlockingService", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "DispBrokerDesktopSvc", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "DisplayEnhancementService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "EFS", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "EapHost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "EventLog", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "EventSystem", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "FDResPub", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "FontCache", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "FrameServer", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "FrameServerMonitor", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "GraphicsPerfSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "HvHost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "IKEEXT", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "InstallService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "InventorySvc", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "IpxlatCfgSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "KeyIso", "StartupType": "Automatic", "OriginalType": "Manual" }, { "Name": "KtmRm", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "LanmanServer", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "LanmanWorkstation", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "LicenseManager", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "LxpSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "MSDTC", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "MSiSCSI", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "MapsBroker", "StartupType": "AutomaticDelayedStart", "OriginalType": "Automatic" }, { "Name": "McpManagementService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "MicrosoftEdgeElevationService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "NaturalAuthentication", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "NcaSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "NcbService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "NcdAutoSetup", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "NetSetupSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "NetTcpPortSharing", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "Netman", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "NlaSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "PcaSvc", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "PeerDistSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "PerfHost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "PhoneSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "PlugPlay", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "PolicyAgent", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "Power", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "PrintNotify", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "ProfSvc", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "PushToInstall", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "QWAVE", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "RasAuto", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "RasMan", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "RemoteAccess", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "RemoteRegistry", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "RetailDemo", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "RmSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "RpcLocator", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SCPolicySvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SCardSvr", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SDRSVC", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SEMgrSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SENS", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "SNMPTRAP", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SNMPTrap", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SSDPSRV", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SamSs", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "ScDeviceEnum", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SensorDataService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SensorService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SensrSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SessionEnv", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "SharedAccess", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "ShellHWDetection", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "SmsRouter", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "Spooler", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "SstpSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "StiSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "StorSvc", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "SysMain", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "TapiSrv", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "TermService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "Themes", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "TieringEngineService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "TokenBroker", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "TrkWks", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "TroubleshootingSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "TrustedInstaller", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "UevAgentService", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "UmRdpService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "UserManager", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "UsoSvc", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "VSS", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "VaultSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "W32Time", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WEPHOSTSVC", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WFDSConMgrSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WMPNetworkSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WManSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WPDBusEnum", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WSAIFabricSvc", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "WSearch", "StartupType": "AutomaticDelayedStart", "OriginalType": "Automatic" }, { "Name": "WalletService", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WarpJITSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WbioSrvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "Wcmsvc", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "WdiServiceHost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WdiSystemHost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WebClient", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "Wecsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WerSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WiaRpc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WinRM", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "Winmgmt", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "WpcMonSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "WpnService", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "XblAuthManager", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "XblGameSave", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "XboxGipSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "XboxNetApiSvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "autotimesvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "bthserv", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "camsvc", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "cloudidsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "dcsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "defragsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "diagsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "dmwappushservice", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "dot3svc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "edgeupdate", "StartupType": "Manual", "OriginalType": "Automatic" }, { "Name": "edgeupdatem", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "fdPHost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "fhsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "hidserv", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "icssvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "iphlpsvc", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "lfsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "lltdsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "lmhosts", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "netprofm", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "nsi", "StartupType": "Automatic", "OriginalType": "Automatic" }, { "Name": "perceptionsimulation", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "pla", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "seclogon", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "shpamsvc", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "smphost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "ssh-agent", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "svsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "swprv", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "tzautoupdate", "StartupType": "Disabled", "OriginalType": "Disabled" }, { "Name": "upnphost", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vds", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmicguestinterface", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmicheartbeat", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmickvpexchange", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmicrdv", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmicshutdown", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmictimesync", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmicvmsession", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "vmicvss", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wbengine", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wcncsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "webthreatdefsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wercplsupport", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wisvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wlidsvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wlpasvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wmiApSrv", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "workfolderssvc", "StartupType": "Manual", "OriginalType": "Manual" }, { "Name": "wuauserv", "StartupType": "Manual", "OriginalType": "Manual" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/services" }, "WPFTweaksBraveDebloat": { "Content": "Brave Debloat", "Description": "Disables various annoyances like Brave Rewards,Leo AI,Crypto Wallet and VPN", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave", "Name": "BraveRewardsDisabled", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave", "Name": "BraveWalletDisabled", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave", "Name": "BraveVPNDisabled", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave", "Name": "BraveAIChatEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\BraveSoftware\\Brave", "Name": "BraveStatsPingEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" } ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/bravedebloat/" }, "WPFTweaksEdgeDebloat": { "Content": "Edge Debloat", "Description": "Disables various telemetry options, popups, and other annoyances in Edge.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\EdgeUpdate", "Name": "CreateDesktopShortcutDefault", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "PersonalizationReportingEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "ofefcgjbeghpigppfmkologfjadafddi", "Type": "String", "Value": "1", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "ShowRecommendationsEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "HideFirstRunExperience", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "UserFeedbackAllowed", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "ConfigureDoNotTrack", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "AlternateErrorPagesEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "EdgeCollectionsEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "EdgeShoppingAssistantEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "MicrosoftEdgeInsiderPromotionEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "ShowMicrosoftRewards", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "WebWidgetAllowed", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "DiagnosticData", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "EdgeAssetDeliveryServiceEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Edge", "Name": "WalletDonationEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "" } ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/edgedebloat" }, "WPFTweaksConsumerFeatures": { "Content": "Disable ConsumerFeatures", "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)", "category": "Essential Tweaks", "panel": "1", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent", "OriginalValue": "", "Name": "DisableWindowsConsumerFeatures", "Value": "1", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/consumerfeatures" }, "WPFTweaksTelemetry": { "Content": "Disable Telemetry", "Description": "Disables Microsoft Telemetry...Duh", "category": "Essential Tweaks", "panel": "1", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\AdvertisingInfo", "Name": "Enabled", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Privacy", "Name": "TailoredExperiencesWithDiagnosticDataEnabled", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Speech_OneCore\\Settings\\OnlineSpeechPrivacy", "Name": "HasAccepted", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Input\\TIPC", "Name": "Enabled", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\InputPersonalization", "Name": "RestrictImplicitInkCollection", "Value": "1", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\InputPersonalization", "Name": "RestrictImplicitTextCollection", "Value": "1", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\InputPersonalization\\TrainedDataStore", "Name": "HarvestContacts", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Personalization\\Settings", "Name": "AcceptedPrivacyPolicy", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\DataCollection", "Name": "AllowTelemetry", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "Start_TrackProgs", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\System", "Name": "PublishUserActivities", "Value": "0", "Type": "DWord", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Siuf\\Rules", "Name": "NumberOfSIUFInPeriod", "Value": "0", "Type": "DWord", "OriginalValue": "" } ], "InvokeScript": [ "\r\n # Disable Defender Auto Sample Submission\r\n Set-MpPreference -SubmitSamplesConsent 2\r\n\r\n # Disable (Connected User Experiences and Telemetry) Service\r\n Set-Service -Name diagtrack -StartupType Disabled\r\n\r\n # Disable (Windows Error Reporting Manager) Service\r\n Set-Service -Name wermgr -StartupType Disabled\r\n\r\n $Memory = (Get-CimInstance Win32_PhysicalMemory | Measure-Object Capacity -Sum).Sum / 1KB\r\n Set-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Control\" -Name SvcHostSplitThresholdInKB -Value $Memory\r\n\r\n Remove-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Siuf\\Rules\" -Name PeriodInNanoSeconds\r\n " ], "UndoScript": [ "\r\n # Enable Defender Auto Sample Submission\r\n Set-MpPreference -SubmitSamplesConsent 1\r\n\r\n # Enable (Connected User Experiences and Telemetry) Service\r\n Set-Service -Name diagtrack -StartupType Automatic\r\n\r\n # Enable (Windows Error Reporting Manager) Service\r\n Set-Service -Name wermgr -StartupType Automatic\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/telemetry" }, "WPFTweaksRemoveEdge": { "Content": "Remove Microsoft Edge", "Description": "Unblocks Microsoft Edge uninstaller restrictions than uses that uninstaller to remove Microsoft Edge", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "InvokeScript": [ "Invoke-WinUtilRemoveEdge" ], "UndoScript": [ "\r\n Write-Host 'Installing Microsoft Edge...'\r\n winget install Microsoft.Edge --source winget\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeedge" }, "WPFTweaksUTC": { "Content": "Set Time to UTC (Dual Boot)", "Description": "Essential for computers that are dual booting. Fixes the time sync with Linux Systems.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation", "Name": "RealTimeIsUniversal", "Type": "QWord", "Value": "1", "OriginalValue": "0" } ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/utc" }, "WPFTweaksRemoveOneDrive": { "Content": "Remove OneDrive", "Description": "Denys permission to remove onedrive user files than uses its own uninstaller to remove it than brings back permissions", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "InvokeScript": [ "\r\n # Deny permission to remove OneDrive folder\r\n icacls $Env:OneDrive /deny \"Administrators:(D, DC)\"\r\n\r\n Write-Host \"Uninstalling OneDrive...\"\r\n Start-Process 'C:\\Windows\\System32\\OneDriveSetup.exe' -ArgumentList '/uninstall' -Wait\r\n\r\n # Some of OneDrive files use explorer, and OneDrive uses FileCoAuth\r\n Write-Host \"Removing leftover OneDrive Files...\"\r\n Stop-Process -Name FileCoAuth,Explorer\r\n Remove-Item \"$Env:LocalAppData\\Microsoft\\OneDrive\" -Recurse -Force\r\n Remove-Item \"C:\\ProgramData\\Microsoft OneDrive\" -Recurse -Force\r\n\r\n # Grant back permission to accses OneDrive folder\r\n icacls $Env:OneDrive /grant \"Administrators:(D, DC)\"\r\n\r\n # Disable OneSyncSvc\r\n Set-Service -Name OneSyncSvc -StartupType Disabled\r\n " ], "UndoScript": [ "\r\n Write-Host \"Installing OneDrive\"\r\n winget install Microsoft.Onedrive --source winget\r\n\r\n # Enabled OneSyncSvc\r\n Set-Service -Name OneSyncSvc -StartupType Enabled\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removeonedrive" }, "WPFTweaksRemoveHome": { "Content": "Remove Home from Explorer", "Description": "Removes the Home from Explorer and sets This PC as default", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "InvokeScript": [ "\r\n Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\ { f874310e-b6b7-47dc-bc84-b9e6b38f5903 }\"\r\n Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name LaunchTo -Value 1\r\n " ], "UndoScript": [ "\r\n New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\ { f874310e-b6b7-47dc-bc84-b9e6b38f5903 }\"\r\n Set-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\" -Name LaunchTo -Value 0\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removehome" }, "WPFTweaksRemoveGallery": { "Content": "Remove Gallery from explorer", "Description": "Removes the Gallery from Explorer and sets This PC as default", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "InvokeScript": [ "\r\n Remove-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\ { e88865ea-0e1c-4e20-9aa6-edcd0212c87c }\"\r\n " ], "UndoScript": [ "\r\n New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\ { e88865ea-0e1c-4e20-9aa6-edcd0212c87c }\"\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removegallery" }, "WPFTweaksDisplay": { "Content": "Set Display for Performance", "Description": "Sets the system preferences to performance. You can do this manually with sysdm.cpl as well.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKCU:\\Control Panel\\Desktop", "OriginalValue": "1", "Name": "DragFullWindows", "Value": "0", "Type": "String" }, { "Path": "HKCU:\\Control Panel\\Desktop", "OriginalValue": "400", "Name": "MenuShowDelay", "Value": "200", "Type": "String" }, { "Path": "HKCU:\\Control Panel\\Desktop\\WindowMetrics", "OriginalValue": "1", "Name": "MinAnimate", "Value": "0", "Type": "String" }, { "Path": "HKCU:\\Control Panel\\Keyboard", "OriginalValue": "1", "Name": "KeyboardDelay", "Value": "0", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "OriginalValue": "1", "Name": "ListviewAlphaSelect", "Value": "0", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "OriginalValue": "1", "Name": "ListviewShadow", "Value": "0", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "OriginalValue": "1", "Name": "TaskbarAnimations", "Value": "0", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VisualEffects", "OriginalValue": "1", "Name": "VisualFXSetting", "Value": "3", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\DWM", "OriginalValue": "1", "Name": "EnableAeroPeek", "Value": "0", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "OriginalValue": "1", "Name": "TaskbarMn", "Value": "0", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "OriginalValue": "1", "Name": "ShowTaskViewButton", "Value": "0", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Search", "OriginalValue": "1", "Name": "SearchboxTaskbarMode", "Value": "0", "Type": "DWord" } ], "InvokeScript": [ "Set-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\" -Type Binary -Value ([byte[]](144,18,3,128,16,0,0,0))" ], "UndoScript": [ "Remove-ItemProperty -Path \"HKCU:\\Control Panel\\Desktop\" -Name \"UserPreferencesMask\"" ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/display" }, "WPFTweaksXboxRemoval": { "Content": "Remove Xbox & Gaming Components", "Description": "Removes Xbox services, the Xbox app, Game Bar, and related authentication components.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "appx": [ "Microsoft.XboxIdentityProvider", "Microsoft.XboxSpeechToTextOverlay", "Microsoft.GamingApp", "Microsoft.Xbox.TCUI", "Microsoft.XboxGamingOverlay" ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/xboxremoval" }, "WPFTweaksDeBloat": { "Content": "Remove ALL MS Store Apps - NOT RECOMMENDED", "Description": "USE WITH CAUTION!!! This will remove ALL Microsoft store apps.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "appx": [ "Microsoft.Microsoft3DViewer", "Microsoft.AppConnector", "Microsoft.BingFinance", "Microsoft.BingNews", "Microsoft.BingSports", "Microsoft.BingTranslator", "Microsoft.BingWeather", "Microsoft.BingFoodAndDrink", "Microsoft.BingHealthAndFitness", "Microsoft.BingTravel", "Clipchamp.Clipchamp", "Microsoft.Todos", "MicrosoftCorporationII.QuickAssist", "Microsoft.MicrosoftStickyNotes", "Microsoft.GetHelp", "Microsoft.GetStarted", "Microsoft.Messaging", "Microsoft.MicrosoftSolitaireCollection", "Microsoft.NetworkSpeedTest", "Microsoft.News", "Microsoft.Office.Lens", "Microsoft.Office.Sway", "Microsoft.Office.OneNote", "Microsoft.OneConnect", "Microsoft.People", "Microsoft.Print3D", "Microsoft.SkypeApp", "Microsoft.Wallet", "Microsoft.Whiteboard", "Microsoft.WindowsAlarms", "Microsoft.WindowsCommunicationsApps", "Microsoft.WindowsFeedbackHub", "Microsoft.WindowsMaps", "Microsoft.WindowsSoundRecorder", "Microsoft.ConnectivityStore", "Microsoft.ScreenSketch", "Microsoft.MixedReality.Portal", "Microsoft.ZuneMusic", "Microsoft.ZuneVideo", "Microsoft.MicrosoftOfficeHub", "MsTeams", "*EclipseManager*", "*ActiproSoftwareLLC*", "*AdobeSystemsIncorporated.AdobePhotoshopExpress*", "*Duolingo-LearnLanguagesforFree*", "*PandoraMediaInc*", "*CandyCrush*", "*BubbleWitch3Saga*", "*Wunderlist*", "*Flipboard*", "*Twitter*", "*Facebook*", "*Royal Revolt*", "*Sway*", "*Speed Test*", "*Dolby*", "*Viber*", "*ACGMediaPlayer*", "*Netflix*", "*OneCalendar*", "*LinkedInForWindows*", "*HiddenCityMysteryofShadows*", "*Hulu*", "*HiddenCity*", "*AdobePhotoshopExpress*", "*HotspotShieldFreeVPN*", "*Microsoft.Advertising.Xaml*" ], "InvokeScript": [ "\r\n $TeamsPath = \"$Env:LocalAppData\\Microsoft\\Teams\\Update.exe\"\r\n\r\n if (Test-Path $TeamsPath) {\r\n Write-Host \"Uninstalling Teams\"\r\n Start-Process $TeamsPath -ArgumentList -uninstall -wait\r\n\r\n Write-Host \"Deleting Teams directory\"\r\n Remove-Item $TeamsPath -Recurse -Force\r\n }\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/debloat" }, "WPFTweaksRestorePoint": { "Content": "Create Restore Point", "Description": "Creates a restore point at runtime in case a revert is needed from WinUtil modifications", "category": "Essential Tweaks", "panel": "1", "Checked": "False", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore", "Name": "SystemRestorePointCreationFrequency", "Type": "DWord", "Value": "0", "OriginalValue": "1440" } ], "InvokeScript": [ "\r\n if (-not (Get-ComputerRestorePoint)) {\r\n Enable-ComputerRestore -Drive $Env:SystemDrive\r\n }\r\n\r\n Checkpoint-Computer -Description \"System Restore Point created by WinUtil\" -RestorePointType MODIFY_SETTINGS\r\n Write-Host \"System Restore Point Created Successfully\" -ForegroundColor Green\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/restorepoint" }, "WPFTweaksEndTaskOnTaskbar": { "Content": "Enable End Task With Right Click", "Description": "Enables option to end task when right clicking a program in the taskbar", "category": "Essential Tweaks", "panel": "1", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\TaskbarDeveloperSettings", "Name": "TaskbarEndTask", "Type": "DWord", "Value": "1", "OriginalValue": "" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/endtaskontaskbar" }, "WPFTweaksPowershell7Tele": { "Content": "Disable Powershell 7 Telemetry", "Description": "This will create an Environment Variable called 'POWERSHELL_TELEMETRY_OPTOUT' with a value of '1' which will tell Powershell 7 to not send Telemetry Data.", "category": "Essential Tweaks", "panel": "1", "InvokeScript": [ "[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '1', 'Machine')" ], "UndoScript": [ "[Environment]::SetEnvironmentVariable('POWERSHELL_TELEMETRY_OPTOUT', '', 'Machine')" ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/powershell7tele" }, "WPFTweaksStorage": { "Content": "Disable Storage Sense", "Description": "Storage Sense deletes temp files automatically.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\StorageSense\\Parameters\\StoragePolicy", "Name": "01", "Type": "DWord", "Value": "0", "OriginalValue": "1" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/storage" }, "WPFTweaksRemoveCopilot": { "Content": "Disable Microsoft Copilot", "Description": "Disables MS Copilot AI built into Windows since 23H2.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsCopilot", "Name": "TurnOffWindowsCopilot", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\WindowsCopilot", "Name": "TurnOffWindowsCopilot", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "ShowCopilotButton", "Type": "DWord", "Value": "0", "OriginalValue": "1" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\Shell\\Copilot", "Name": "IsCopilotAvailable", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\Shell\\Copilot", "Name": "CopilotDisabledReason", "Type": "String", "Value": "IsEnabledForGeographicRegionFailed", "OriginalValue": "" }, { "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsCopilot", "Name": "AllowCopilotRuntime", "Type": "DWord", "Value": "0", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Blocked", "Name": "{CB3B0003-8088-4EDE-8769-8B354AB2FF8C}", "Type": "String", "Value": "", "OriginalValue": "" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\Shell\\Copilot\\BingChat", "Name": "IsUserEligible", "Type": "DWord", "Value": "0", "OriginalValue": "" } ], "InvokeScript": [ "\r\n Write-Host \"Remove Copilot\"\r\n Get-AppxPackage -AllUsers *Copilot* | Remove-AppxPackage -AllUsers\r\n Get-AppxPackage -AllUsers Microsoft.MicrosoftOfficeHub | Remove-AppxPackage -AllUsers\r\n\r\n $Appx = (Get-AppxPackage *MicrosoftWindows.Client.CoreAI*).PackageFullName\r\n if ($Appx) {\r\n $Sid = (Get-LocalUser $Env:UserName).Sid.Value\r\n New-Item \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\$Sid\\$Appx\" -Force\r\n Remove-AppxPackage $Appx\r\n }\r\n " ], "UndoScript": [ "\r\n Write-Host \"Install Copilot\"\r\n winget install --name Copilot --source msstore --accept-package-agreements --accept-source-agreements --silent\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/removecopilot" }, "WPFTweaksWPBT": { "Content": "Disable Windows Platform Binary Table (WPBT)", "Description": "If enabled then allows your computer vendor to execute a program each time it boots. It enables computer vendors to force install anti-theft software, software drivers, or a software program conveniently. This could also be a security risk.", "category": "Essential Tweaks", "panel": "1", "registry": [ { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Session Manager", "Name": "DisableWpbtExecution", "Value": "1", "OriginalValue": "", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/wpbt" }, "WPFTweaksRazerBlock": { "Content": "Block Razer Software Installs", "Description": "Blocks ALL Razer Software installations. The hardware works fine without any software. WARNING: this will also block all Windows third-party driver installations.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\DriverSearching", "Name": "SearchOrderConfig", "Value": "0", "OriginalValue": "1", "Type": "DWord" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Device Installer", "Name": "DisableCoInstallers", "Value": "1", "OriginalValue": "0", "Type": "DWord" } ], "InvokeScript": [ "\r\n $RazerPath = \"C:\\Windows\\Installer\\Razer\"\r\n\r\n if (Test-Path $RazerPath) {\r\n Remove-Item $RazerPath\\* -Recurse -Force\r\n }\r\n else {\r\n New-Item -Path $RazerPath -ItemType Directory\r\n }\r\n\r\n icacls $RazerPath /deny \"Everyone:(W)\"\r\n " ], "UndoScript": [ "\r\n icacls \"C:\\Windows\\Installer\\Razer\" /remove:d Everyone\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/razerblock" }, "WPFTweaksDisableNotifications": { "Content": "Disable Notification Tray/Calendar", "Description": "Disables all Notifications INCLUDING Calendar", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKCU:\\Software\\Policies\\Microsoft\\Windows\\Explorer", "Name": "DisableNotificationCenter", "Type": "DWord", "Value": "1", "OriginalValue": "" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\PushNotifications", "Name": "ToastEnabled", "Type": "DWord", "Value": "0", "OriginalValue": "1" } ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablenotifications" }, "WPFTweaksBlockAdobeNet": { "Content": "Adobe Network Block", "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "InvokeScript": [ "\r\n $hostsUrl = \"https://github.com/Ruddernation-Designs/Adobe-URL-Block-List/raw/refs/heads/master/hosts\"\r\n $hosts = \"$env:SystemRoot\\System32\\drivers\\etc\\hosts\"\r\n\r\n Copy-Item $hosts \"$env:SystemRoot\\System32\\drivers\\etc\\hosts\\$hosts.bak\"\r\n Invoke-WebRequest $hostsUrl -OutFile $hosts\r\n ipconfig /flushdns\r\n\r\n Write-Host \"Added Adobe url block list from host file\"\r\n " ], "UndoScript": [ "\r\n $hosts = \"$env:SystemRoot\\System32\\drivers\\etc\\hosts\"\r\n $backup = \"$env:SystemRoot\\System32\\drivers\\etc\\hosts\\$hosts.bak\"\r\n\r\n Remove-Item $hosts\r\n ipconfig /flushdns\r\n\r\n Write-Host \"Removed Adobe url block list from host file\"\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/blockadobenet" }, "WPFTweaksRightClickMenu": { "Content": "Set Classic Right-Click Menu ", "Description": "Great Windows 11 tweak to bring back good context menus when right clicking things in explorer.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "InvokeScript": [ "\r\n New-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\ { 86ca1aa0-34aa-4e8b-a509-50c905bae2a2 }\" -Name \"InprocServer32\" -force -value \"\"\r\n Write-Host Restarting explorer.exe ...\r\n Stop-Process -Name \"explorer\" -Force\r\n " ], "UndoScript": [ "\r\n Remove-Item -Path \"HKCU:\\Software\\Classes\\CLSID\\ { 86ca1aa0-34aa-4e8b-a509-50c905bae2a2 }\" -Recurse -Confirm:$false -Force\r\n # Restarting Explorer in the Undo Script might not be necessary, as the Registry change without restarting Explorer does work, but just to make sure.\r\n Write-Host Restarting explorer.exe ...\r\n Stop-Process -Name \"explorer\" -Force\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/rightclickmenu" }, "WPFTweaksDiskCleanup": { "Content": "Run Disk Cleanup", "Description": "Runs Disk Cleanup on Drive C: and removes old Windows Updates.", "category": "Essential Tweaks", "panel": "1", "InvokeScript": [ "\r\n cleanmgr.exe /d C: /VERYLOWDISK\r\n Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/diskcleanup" }, "WPFTweaksDeleteTempFiles": { "Content": "Delete Temporary Files", "Description": "Erases TEMP Folders", "category": "Essential Tweaks", "panel": "1", "InvokeScript": [ "\r\n Remove-Item -Path \"$Env:Temp\\*\" -Recurse -Force\r\n Remove-Item -Path \"$Env:SystemRoot\\Temp\\*\" -Recurse -Force\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/deletetempfiles" }, "WPFTweaksIPv46": { "Content": "Prefer IPv4 over IPv6", "Description": "To set the IPv4 preference can have latency and security benefits on private networks where IPv6 is not configured.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters", "Name": "DisabledComponents", "Value": "32", "OriginalValue": "0", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/essential-tweaks/ipv46" }, "WPFTweaksTeredo": { "Content": "Disable Teredo", "Description": "Teredo network tunneling is a ipv6 feature that can cause additional latency, but may cause problems with some games", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters", "Name": "DisabledComponents", "Value": "1", "OriginalValue": "0", "Type": "DWord" } ], "InvokeScript": [ "netsh interface teredo set state disabled" ], "UndoScript": [ "netsh interface teredo set state default" ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/teredo" }, "WPFTweaksDisableIPv6": { "Content": "Disable IPv6", "Description": "Disables IPv6.", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters", "Name": "DisabledComponents", "Value": "255", "OriginalValue": "0", "Type": "DWord" } ], "InvokeScript": [ "Disable-NetAdapterBinding -Name * -ComponentID ms_tcpip6" ], "UndoScript": [ "Enable-NetAdapterBinding -Name * -ComponentID ms_tcpip6" ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disableipv6" }, "WPFTweaksDisableBGapps": { "Content": "Disable Background Apps", "Description": "Disables all Microsoft Store apps from running in the background, which has to be done individually since Win11", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\BackgroundAccessApplications", "Name": "GlobalUserDisabled", "Value": "1", "OriginalValue": "0", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablebgapps" }, "WPFTweaksDisableFSO": { "Content": "Disable Fullscreen Optimizations", "Description": "Disables FSO in all applications. NOTE: This will disable Color Management in Exclusive Fullscreen", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "registry": [ { "Path": "HKCU:\\System\\GameConfigStore", "Name": "GameDVR_DXGIHonorFSEWindowsCompatible", "Value": "1", "OriginalValue": "0", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/disablefso" }, "WPFToggleDarkMode": { "Content": "Dark Theme for Windows", "Description": "Enable/Disable Dark Mode.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", "Name": "AppsUseLightTheme", "Value": "0", "OriginalValue": "1", "DefaultState": "false", "Type": "DWord" }, { "Path": "HKCU:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", "Name": "SystemUsesLightTheme", "Value": "0", "OriginalValue": "1", "DefaultState": "false", "Type": "DWord" } ], "InvokeScript": [ "\r\n Invoke-WinUtilExplorerUpdate\r\n if ($sync.ThemeButton.Content -eq [char]0xF08C) {\r\n Invoke-WinutilThemeChange -theme \"Auto\"\r\n }\r\n " ], "UndoScript": [ "\r\n Invoke-WinUtilExplorerUpdate\r\n if ($sync.ThemeButton.Content -eq [char]0xF08C) {\r\n Invoke-WinutilThemeChange -theme \"Auto\"\r\n }\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/darkmode" }, "WPFToggleBingSearch": { "Content": "Bing Search in Start Menu", "Description": "If enable then includes web search results from Bing in your Start Menu search.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Search", "Name": "BingSearchEnabled", "Value": "1", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/bingsearch" }, "WPFToggleNumLock": { "Content": "NumLock on Startup", "Description": "Toggle the Num Lock key state when your computer starts.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKU:\\.Default\\Control Panel\\Keyboard", "Name": "InitialKeyboardIndicators", "Value": "2", "OriginalValue": "0", "DefaultState": "false", "Type": "DWord" }, { "Path": "HKCU:\\Control Panel\\Keyboard", "Name": "InitialKeyboardIndicators", "Value": "2", "OriginalValue": "0", "DefaultState": "false", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/numlock" }, "WPFToggleVerboseLogon": { "Content": "Verbose Messages During Logon", "Description": "Show detailed messages during the login process for troubleshooting and diagnostics.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", "Name": "VerboseStatus", "Value": "1", "OriginalValue": "0", "DefaultState": "false", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/verboselogon" }, "WPFToggleStartMenuRecommendations": { "Content": "Recommendations in Start Menu", "Description": "If disabled then you will not see recommendations in the Start Menu.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Microsoft\\PolicyManager\\current\\device\\Start", "Name": "HideRecommendedSection", "Value": "0", "OriginalValue": "1", "DefaultState": "true", "Type": "DWord" }, { "Path": "HKLM:\\SOFTWARE\\Microsoft\\PolicyManager\\current\\device\\Education", "Name": "IsEducationEnvironment", "Value": "0", "OriginalValue": "1", "DefaultState": "true", "Type": "DWord" }, { "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\Explorer", "Name": "HideRecommendedSection", "Value": "0", "OriginalValue": "1", "DefaultState": "true", "Type": "DWord" } ], "InvokeScript": [ "\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n " ], "UndoScript": [ "\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/wpftogglestartmenurecommendations" }, "WPFToggleHideSettingsHome": { "Content": "Remove Settings Home Page", "Description": "Removes the Home page in the Windows Settings app.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", "Name": "SettingsPageVisibility", "Type": "String", "Value": "hide:home", "OriginalValue": "show:home", "DefaultState": "false" } ] }, "WPFToggleMouseAcceleration": { "Content": "Mouse Acceleration", "Description": "If Enabled then Cursor movement is affected by the speed of your physical mouse movements.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Control Panel\\Mouse", "Name": "MouseSpeed", "Value": "1", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" }, { "Path": "HKCU:\\Control Panel\\Mouse", "Name": "MouseThreshold1", "Value": "6", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" }, { "Path": "HKCU:\\Control Panel\\Mouse", "Name": "MouseThreshold2", "Value": "10", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/mouseacceleration" }, "WPFToggleStickyKeys": { "Content": "Sticky Keys", "Description": "If Enabled then 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.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Control Panel\\Accessibility\\StickyKeys", "Name": "Flags", "Value": "510", "OriginalValue": "58", "DefaultState": "true", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/stickykeys" }, "WPFToggleNewOutlook": { "Content": "New Outlook", "Description": "If disabled it removes the toggle for new Outlook, disables the new Outlook migration and makes sure the Outlook Application actually uses the old Outlook.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\SOFTWARE\\Microsoft\\Office\\16.0\\Outlook\\Preferences", "Name": "UseNewOutlook", "Value": "1", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Microsoft\\Office\\16.0\\Outlook\\Options\\General", "Name": "HideNewOutlookToggle", "Value": "0", "OriginalValue": "1", "DefaultState": "true", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Policies\\Microsoft\\Office\\16.0\\Outlook\\Options\\General", "Name": "DoNewOutlookAutoMigration", "Value": "0", "OriginalValue": "0", "DefaultState": "false", "Type": "DWord" }, { "Path": "HKCU:\\Software\\Policies\\Microsoft\\Office\\16.0\\Outlook\\Preferences", "Name": "NewOutlookMigrationUserSetting", "Value": "0", "OriginalValue": "", "DefaultState": "true", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/newoutlook" }, "WPFToggleMultiplaneOverlay": { "Content": "Disable Multiplane Overlay", "Description": "Disable the Multiplane Overlay which can sometimes cause issues with Graphics Cards.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKLM:\\SOFTWARE\\Microsoft\\Windows\\Dwm", "Name": "OverlayTestMode", "Value": "5", "OriginalValue": "", "DefaultState": "false", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/multplaneoverlay" }, "WPFToggleHiddenFiles": { "Content": "Show Hidden Files", "Description": "If Enabled then Hidden Files will be shown.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "Hidden", "Value": "1", "OriginalValue": "0", "DefaultState": "false", "Type": "DWord" } ], "InvokeScript": [ "\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n " ], "UndoScript": [ "\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/hiddenfiles" }, "WPFToggleShowExt": { "Content": "Show File Extensions", "Description": "If enabled then File extensions (e.g., .txt, .jpg) are visible.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "HideFileExt", "Value": "0", "OriginalValue": "1", "DefaultState": "false", "Type": "DWord" } ], "InvokeScript": [ "\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n " ], "UndoScript": [ "\r\n Invoke-WinUtilExplorerUpdate -action \"restart\"\r\n " ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/showext" }, "WPFToggleTaskbarSearch": { "Content": "Search Button in Taskbar", "Description": "If Enabled Search Button will be on the taskbar.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Search", "Name": "SearchboxTaskbarMode", "Value": "1", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbarsearch" }, "WPFToggleTaskView": { "Content": "Task View Button in Taskbar", "Description": "If Enabled then Task View Button in Taskbar will be shown.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "ShowTaskViewButton", "Value": "1", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskview" }, "WPFToggleTaskbarAlignment": { "Content": "Center Taskbar Items", "Description": "[Windows 11] If Enabled then the Taskbar Items will be shown on the Center, otherwise the Taskbar Items will be shown on the Left.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "TaskbarAl", "Value": "1", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/taskbaralignment" }, "WPFToggleDetailedBSoD": { "Content": "Detailed BSoD", "Description": "If Enabled then you will see a detailed Blue Screen of Death (BSOD) with more information.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\CrashControl", "Name": "DisplayParameters", "Value": "1", "OriginalValue": "0", "DefaultState": "false", "Type": "DWord" }, { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\CrashControl", "Name": "DisableEmoticon", "Value": "1", "OriginalValue": "0", "DefaultState": "false", "Type": "DWord" } ], "link": "https://winutil.christitus.com/dev/tweaks/customize-preferences/detailedbsod" }, "WPFToggleS3Sleep": { "Content": "S3 Sleep", "Description": "Toggles between Modern Standby and S3 sleep.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Power", "Name": "PlatformAoAcOverride", "Value": "0", "OriginalValue": "", "DefaultState": "false", "Type": "DWord" } ] }, "WPFOOSUbutton": { "Content": "Run OO Shutup 10", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Type": "Button", "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/oosubutton" }, "WPFchangedns": { "Content": "DNS", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Type": "Combobox", "ComboItems": "Default DHCP Google Cloudflare Cloudflare_Malware Cloudflare_Malware_Adult Open_DNS Quad9 AdGuard_Ads_Trackers AdGuard_Ads_Trackers_Malware_Adult", "link": "https://winutil.christitus.com/dev/tweaks/z--advanced-tweaks---caution/changedns" }, "WPFAddUltPerf": { "Content": "Add and Activate Ultimate Performance Profile", "category": "Performance Plans", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/tweaks/performance-plans/addultperf" }, "WPFRemoveUltPerf": { "Content": "Remove Ultimate Performance Profile", "category": "Performance Plans", "panel": "2", "Type": "Button", "ButtonWidth": "300", "link": "https://winutil.christitus.com/dev/tweaks/performance-plans/removeultperf" }, "WPFTweaksDisableExplorerAutoDiscovery": { "Content": "Disable Explorer Automatic Folder Discovery", "Description": "Windows Explorer automatically tries to guess the type of the folder based on its contents, slowing down the browsing experience.", "category": "Essential Tweaks", "panel": "1", "InvokeScript": [ "\r\n # Previously detected folders\r\n $bags = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\Bags\"\r\n\r\n # Folder types lookup table\r\n $bagMRU = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\BagMRU\"\r\n\r\n # Flush Explorer view database\r\n Remove-Item -Path $bags -Recurse -Force\r\n Write-Host \"Removed $bags\"\r\n\r\n Remove-Item -Path $bagMRU -Recurse -Force\r\n Write-Host \"Removed $bagMRU\"\r\n\r\n # Every folder\r\n $allFolders = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\Bags\\AllFolders\\Shell\"\r\n\r\n if (!(Test-Path $allFolders)) {\r\n New-Item -Path $allFolders -Force\r\n Write-Host \"Created $allFolders\"\r\n }\r\n\r\n # Generic view\r\n New-ItemProperty -Path $allFolders -Name \"FolderType\" -Value \"NotSpecified\" -PropertyType String -Force\r\n Write-Host \"Set FolderType to NotSpecified\"\r\n\r\n Write-Host Please sign out and back in, or restart your computer to apply the changes!\r\n " ], "UndoScript": [ "\r\n # Previously detected folders\r\n $bags = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\Bags\"\r\n\r\n # Folder types lookup table\r\n $bagMRU = \"HKCU:\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\BagMRU\"\r\n\r\n # Flush Explorer view database\r\n Remove-Item -Path $bags -Recurse -Force\r\n Write-Host \"Removed $bags\"\r\n\r\n Remove-Item -Path $bagMRU -Recurse -Force\r\n Write-Host \"Removed $bagMRU\"\r\n\r\n Write-Host Please sign out and back in, or restart your computer to apply the changes!\r\n " ] }, "WPFToggleDisableCrossDeviceResume": { "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.", "category": "Customize Preferences", "panel": "2", "Type": "Toggle", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\CrossDeviceResume\\Configuration", "Name": "IsResumeAllowed", "Value": "1", "OriginalValue": "0", "DefaultState": "true", "Type": "DWord" } ] }, "WPFTweaksSpotifyGODMODE": { "Content": "Spotify Ad-Block (HOSTS)", "Description": "Bloquea anuncios de Spotify añadiendo entradas al archivo HOSTS.", "category": "GODMODE by JosemaCT", "panel": "1", "InvokeScript": [ "$hosts = \"$env:SystemRoot\\System32\\drivers\\etc\\hosts\"\r\n$entries = \"`n0.0.0.0 pubads.g.doubleclick.net`n0.0.0.0 securepubads.g.doubleclick.net`n0.0.0.0 gads.pubmatic.com`n0.0.0.0 ads.pubmatic.com`n0.0.0.0 spclient.wg.spotify.com\"\r\nAdd-Content -Path $hosts -Value $entries" ] }, "WPFTweaksActivationGODMODE": { "Content": "Activar Windows", "Description": "Activa Windows usando el script de activated.win.", "category": "GODMODE by JosemaCT", "panel": "1", "InvokeScript": [ "irm https://get.activated.win | iex" ] }, "WPFTweaksVisualGODMODE": { "Content": "Optimizar Efectos Visuales", "Description": "Ajusta los efectos visuales para mejor rendimiento manteniendo suavizado de fuentes.", "category": "GODMODE by JosemaCT", "panel": "1", "registry": [ { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\VisualEffects", "Name": "VisualFXSetting", "Type": "DWord", "Value": "3", "OriginalValue": "1" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "AnimateControlsAndElements", "Type": "DWord", "Value": "1", "OriginalValue": "1" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "SaveTaskbarThumbnailPreviews", "Type": "DWord", "Value": "1", "OriginalValue": "1" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "DragFullWindows", "Type": "DWord", "Value": "1", "OriginalValue": "1" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "DropShadow", "Type": "DWord", "Value": "1", "OriginalValue": "1" }, { "Path": "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", "Name": "FontSmoothing", "Type": "DWord", "Value": "1", "OriginalValue": "1" } ] }, "WPFTweaksSvcHostGODMODE": { "Content": "SvcHost Split Threshold", "Description": "Optimiza la división de procesos SvcHost para sistemas con mucha RAM.", "category": "GODMODE by JosemaCT", "panel": "1", "registry": [ { "Path": "HKLM:\\SYSTEM\\ControlSet001\\Control", "Name": "SvcHostSplitThresholdInKB", "Type": "DWord", "Value": "16777216", "OriginalValue": "380000" } ] }, "WPFTweaksOfficeGODMODE": { "Content": "Microsoft Office (Local)", "Description": "Instala Microsoft Office desde la carpeta local ZZ-instal office-ZZ.", "category": "GODMODE by JosemaCT", "panel": "1", "InvokeScript": [ "Push-Location -Path \"$PSScriptRoot\\ZZ-instal office-ZZ\"\r\nif (Test-Path \"setup.exe\") { Start-Process -FilePath \"setup.exe\" -ArgumentList \"/configure Config_Office.xml\" -Wait }\r\nPop-Location" ] } } '@ | ConvertFrom-Json $inputXML = @' Install Tweaks Config Updates