From 3903eaaa24127041896f43a6a5040892f0b8d376 Mon Sep 17 00:00:00 2001 From: "Mr.k" Date: Tue, 6 Aug 2024 23:35:17 +0300 Subject: [PATCH] Code Formatting of Repo - Add Preprocessing to Compilation Process - Introduction of Dev/Build Tools to WinUtil (Although very simple at the moment) (#2383) * Replace Tabs with Spaces to follow the conventions * Add Preprocessing in Compiler * Compile from Anywhere you want - Running 'Compile.ps1' Works in any directory you call it from * Code Formatting Changes * Result of Preprocessing Step in 'Compile.ps1' Script - Remove Trailing Whitespace Characters * Make Preprocessing more advanced * Move Preprocessing to a separate script file * Make Self Modification impossible for 'tools/Do-PreProcessing.ps1' Script - Make the workingdir same as sync.PSScriptRoot for consistency * Revert commit b5dffd671ff4f870026e4d384f393c0491692ab7 * Patched a Bug of some Excluded Files not actually get excluded in 'Get-ChildItem' PS Cmdlet * Update Replace Regex for Code Formatting in 'Do-PreProcessing' Script Tool * Rename 'Do-PreProcessing' to 'Invoke-Preprocessing' - Update some Comments * Make 'Invoke-Preprocessing' Modular - Update RegEx to handle more cases - Update Documentation - Add Validations & Useful feedback upon error * Replace Tabs with Spaces to follow the conventions - 'applications.json' File * Code Formatting Changes - 'Copy-Files' Private Function * Update Replace Regex for Code Formatting in 'Invoke-Preprocessing' Script Tool * Replace Tabs with Spaces to follow the conventions - Make 'ExcludedFiles' validation step check all filepaths before finally checking if any has failed * Result of 'Invoke-Preprocessing' Script * Update Replace Regex for Code Formatting in 'Invoke-Preprocessing' Script Tool --- .github/workflows/close-discussion.yml | 2 +- .github/workflows/issue-slash-commands.yaml | 2 +- .github/workflows/sponsors.yml | 2 +- .github/workflows/unittests.yaml | 2 +- Compile.ps1 | 71 +- config/applications.json | 5904 ++++++++--------- config/dns.json | 2 +- config/tweaks.json | 30 +- docs/KnownIssues.md | 2 +- functions/private/ConvertTo-Icon.ps1 | 7 +- functions/private/Copy-Files.ps1 | 27 +- functions/private/Get-LocalizedYesNo.ps1 | 2 +- functions/private/Get-Oscdimg.ps1 | 6 +- functions/private/Get-TabXaml.ps1 | 36 +- functions/private/Get-WPFObjectName.ps1 | 46 +- .../private/Get-WinUtilInstallerProcess.ps1 | 6 +- functions/private/Get-WinUtilToggleStatus.ps1 | 94 +- functions/private/Get-WinUtilVariables.ps1 | 5 +- functions/private/Get-WinUtilWingetLatest.ps1 | 5 +- .../Get-WinUtilWingetPrerequisites.ps1 | 5 +- functions/private/Install-WinUtilChoco.ps1 | 3 +- .../private/Install-WinUtilProgramChoco.ps1 | 42 +- functions/private/Install-WinUtilWinget.ps1 | 14 +- functions/private/Invoke-MicroWin-Helper.ps1 | 1102 ++- .../private/Invoke-WinUtilBingSearch.ps1 | 18 +- .../private/Invoke-WinUtilCurrentSystem.ps1 | 38 +- functions/private/Invoke-WinUtilDarkMode.ps1 | 18 +- .../private/Invoke-WinUtilDetailedBSoD.ps1 | 18 +- .../private/Invoke-WinUtilFeatureInstall.ps1 | 30 +- functions/private/Invoke-WinUtilGPU.ps1 | 4 +- .../private/Invoke-WinUtilHiddenFiles.ps1 | 16 +- .../Invoke-WinUtilMouseAcceleration.ps1 | 18 +- functions/private/Invoke-WinUtilNumLock.ps1 | 15 +- functions/private/Invoke-WinUtilScript.ps1 | 19 +- functions/private/Invoke-WinUtilShowExt.ps1 | 18 +- .../private/Invoke-WinUtilSnapFlyout.ps1 | 18 +- .../private/Invoke-WinUtilSnapSuggestion.ps1 | 18 +- .../private/Invoke-WinUtilSnapWindow.ps1 | 18 +- functions/private/Invoke-WinUtilSponsors.ps1 | 5 +- .../private/Invoke-WinUtilStickyKeys.ps1 | 18 +- functions/private/Invoke-WinUtilTaskView.ps1 | 16 +- .../Invoke-WinUtilTaskbarAlignment.ps1 | 16 +- .../private/Invoke-WinUtilTaskbarSearch.ps1 | 16 +- .../private/Invoke-WinUtilTaskbarWidgets.ps1 | 16 +- functions/private/Invoke-WinUtilTweaks.ps1 | 22 +- .../private/Invoke-WinUtilVerboseLogon.ps1 | 18 +- .../private/Invoke-WinUtilWingetProgram.ps1 | 8 +- functions/private/Remove-WinUtilAPPX.ps1 | 13 +- functions/private/Set-WinUtilDNS.ps1 | 16 +- functions/private/Set-WinUtilProgressbar.ps1 | 7 +- functions/private/Set-WinUtilRegistry.ps1 | 13 +- .../private/Set-WinUtilScheduledTask.ps1 | 19 +- functions/private/Set-WinUtilService.ps1 | 6 +- functions/private/Set-WinUtilTaskbarItem.ps1 | 2 +- functions/private/Set-WinUtilUiTheme.ps1 | 33 +- .../private/Test-WinUtilPackageManager.ps1 | 9 +- .../private/Update-WinUtilProgramWinget.ps1 | 2 +- functions/public/Invoke-ScratchDialog.ps1 | 3 +- functions/public/Invoke-WPFButton.ps1 | 6 +- functions/public/Invoke-WPFCloseButton.ps1 | 2 +- functions/public/Invoke-WPFControlPanel.ps1 | 4 +- functions/public/Invoke-WPFFeatureInstall.ps1 | 6 +- functions/public/Invoke-WPFFixesNetwork.ps1 | 2 +- functions/public/Invoke-WPFFixesUpdate.ps1 | 10 +- functions/public/Invoke-WPFFixesWinget.ps1 | 2 +- functions/public/Invoke-WPFGetInstalled.ps1 | 10 +- functions/public/Invoke-WPFGetIso.ps1 | 58 +- functions/public/Invoke-WPFImpex.ps1 | 15 +- functions/public/Invoke-WPFInstall.ps1 | 13 +- functions/public/Invoke-WPFInstallUpgrade.ps1 | 4 +- functions/public/Invoke-WPFMicrowin.ps1 | 747 +-- functions/public/Invoke-WPFOOSU.ps1 | 5 +- functions/public/Invoke-WPFPanelDISM.ps1 | 2 +- functions/public/Invoke-WPFPresets.ps1 | 8 +- functions/public/Invoke-WPFRunspace.ps1 | 5 +- functions/public/Invoke-WPFShortcut.ps1 | 5 +- functions/public/Invoke-WPFTab.ps1 | 3 +- functions/public/Invoke-WPFToggle.ps1 | 2 +- functions/public/Invoke-WPFTweakPS7.ps1 | 4 +- .../public/Invoke-WPFUltimatePerformance.ps1 | 10 +- functions/public/Invoke-WPFUnInstall.ps1 | 15 +- functions/public/Invoke-WPFUpdatesdefault.ps1 | 2 +- functions/public/Invoke-WPFUpdatesdisable.ps1 | 2 +- .../public/Invoke-WPFUpdatessecurity.ps1 | 2 +- functions/public/Invoke-WPFtweaksbutton.ps1 | 13 +- functions/public/Invoke-WPFundoall.ps1 | 10 +- gpedit-home.ps1 | 2 +- lint/PSScriptAnalyser.ps1 | 2 +- overrides/main.html | 2 +- pester/configs.Tests.ps1 | 16 +- scripts/main.ps1 | 62 +- scripts/start.ps1 | 3 +- tools/Invoke-Preprocessing.ps1 | 139 + winget.ps1 | 12 +- 94 files changed, 4523 insertions(+), 4623 deletions(-) create mode 100644 tools/Invoke-Preprocessing.ps1 diff --git a/.github/workflows/close-discussion.yml b/.github/workflows/close-discussion.yml index 6dc7c557..de919c13 100644 --- a/.github/workflows/close-discussion.yml +++ b/.github/workflows/close-discussion.yml @@ -40,4 +40,4 @@ jobs: exit 1 fi done - shell: bash \ No newline at end of file + shell: bash diff --git a/.github/workflows/issue-slash-commands.yaml b/.github/workflows/issue-slash-commands.yaml index a83b432c..ff23c3ab 100644 --- a/.github/workflows/issue-slash-commands.yaml +++ b/.github/workflows/issue-slash-commands.yaml @@ -42,4 +42,4 @@ jobs: ISSUE_NUMBER: ${{ github.event.issue.number }} run: | echo Closing the issue... - gh issue close $ISSUE_NUMBER --repo ${{ github.repository }} \ No newline at end of file + gh issue close $ISSUE_NUMBER --repo ${{ github.repository }} diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yml index d7668b4a..b6b21d18 100644 --- a/.github/workflows/sponsors.yml +++ b/.github/workflows/sponsors.yml @@ -23,4 +23,4 @@ jobs: uses: JamesIves/github-pages-deploy-action@v4 with: branch: main - folder: '.' \ No newline at end of file + folder: '.' diff --git a/.github/workflows/unittests.yaml b/.github/workflows/unittests.yaml index 02879545..5e1f2b0f 100644 --- a/.github/workflows/unittests.yaml +++ b/.github/workflows/unittests.yaml @@ -37,4 +37,4 @@ jobs: shell: pwsh env: - TEMP: ${{ runner.temp }} \ No newline at end of file + TEMP: ${{ runner.temp }} diff --git a/Compile.ps1 b/Compile.ps1 index e5399475..22ce7d5b 100644 --- a/Compile.ps1 +++ b/Compile.ps1 @@ -1,13 +1,15 @@ param ( [switch]$Debug, - [switch]$Run + [switch]$Run, + [switch]$SkipPreprocessing ) $OFS = "`r`n" $scriptname = "winutil.ps1" +$workingdir = $PSScriptRoot # Variable to sync between runspaces $sync = [Hashtable]::Synchronized(@{}) -$sync.PSScriptRoot = $PSScriptRoot +$sync.PSScriptRoot = $workingdir $sync.configs = @{} function Update-Progress { @@ -15,12 +17,12 @@ function Update-Progress { [Parameter(Mandatory, position=0)] [string]$StatusMessage, - [Parameter(Mandatory, position=1)] - [ValidateRange(0,100)] + [Parameter(Mandatory, position=1)] + [ValidateRange(0,100)] [int]$Percent, - [Parameter(position=2)] - [string]$Activity = "Compiling" + [Parameter(position=2)] + [string]$Activity = "Compiling" ) Write-Progress -Activity $Activity -Status $StatusMessage -PercentComplete $Percent @@ -34,6 +36,17 @@ $header = @" ################################################################################################################ "@ +if (-NOT $SkipPreprocessing) { + Update-Progress "Pre-req: Running Preprocessor..." 0 + + # Dot source the 'Invoke-Preprocessing' Function from 'tools/Invoke-Preprocessing.ps1' Script + $preprocessingFilePath = ".\tools\Invoke-Preprocessing.ps1" + . "$(($workingdir -replace ('\\$', '')) + '\' + ($preprocessingFilePath -replace ('\.\\', '')))" + + $excludedFiles = @('.\.git\', '.\.gitignore', '.\.gitattributes', '.\.github\CODEOWNERS', '.\LICENSE', '.\winutil.ps1', "$preprocessingFilePath", '.\docs\changelog.md', '*.png', '*.exe') + $msg = "Pre-req: Code Formatting" + Invoke-Preprocessing -WorkingDir "$workingdir" -ExcludedFiles $excludedFiles -ProgressStatusMessage $msg +} # Create the script in memory. Update-Progress "Pre-req: Allocating Memory" 0 @@ -43,14 +56,14 @@ Update-Progress "Adding: Header" 5 $script_content.Add($header) Update-Progress "Adding: Version" 10 -$script_content.Add($(Get-Content .\scripts\start.ps1).replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)")) +$script_content.Add($(Get-Content "$workingdir\scripts\start.ps1").replace('#{replaceme}',"$(Get-Date -Format yy.MM.dd)")) Update-Progress "Adding: Functions" 20 -Get-ChildItem .\functions -Recurse -File | ForEach-Object { +Get-ChildItem "$workingdir\functions" -Recurse -File | ForEach-Object { $script_content.Add($(Get-Content $psitem.FullName)) } Update-Progress "Adding: Config *.json" 40 -Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object { +Get-ChildItem "$workingdir\config" | Where-Object {$psitem.extension -eq ".json"} | ForEach-Object { $json = (Get-Content $psitem.FullName).replace("'","''") @@ -65,15 +78,15 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach- # Use **HTML decimal/hex codes instead**, as using HTML Entity Codes will result in XML parse Error when running the compiled script. for ($i = 0; $i -lt $firstLevelJsonList.Count; $i += 1) { $firstLevelName = $firstLevelJsonList[$i] - if ($jsonAsObject.$firstLevelName.content -ne $null) { + if ($jsonAsObject.$firstLevelName.content -ne $null) { $jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('&','&').replace('“','“').replace('”','”').replace("'",''').replace('<','<').replace('>','>').replace('—','—') $jsonAsObject.$firstLevelName.content = $jsonAsObject.$firstLevelName.content.replace('''',"'") # resolves the Double Apostrophe caused by the first replace function in the main loop } if ($jsonAsObject.$firstLevelName.description -ne $null) { $jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('&','&').replace('“','“').replace('”','”').replace("'",''').replace('<','<').replace('>','>').replace('—','—') $jsonAsObject.$firstLevelName.description = $jsonAsObject.$firstLevelName.description.replace('''',"'") # resolves the Double Apostrophe caused by the first replace function in the main loop - } - } + } + } # Add 'WPFInstall' as a prefix to every entry-name in 'applications.json' file if ($psitem.Name -eq "applications.json") { @@ -95,10 +108,10 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach- $script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" )) } -$xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''") +$xaml = (Get-Content "$workingdir\xaml\inputXML.xaml").replace("'","''") # Dot-source the Get-TabXaml function -. .\functions\private\Get-TabXaml.ps1 +. "$workingdir\functions\private\Get-TabXaml.ps1" Update-Progress "Building: Xaml " 75 $appXamlContent = Get-TabXaml "applications" 5 @@ -114,30 +127,28 @@ $xaml = $xaml -replace "{{InstallPanel_features}}", $featuresXamlContent $script_content.Add($(Write-output "`$inputXML = '$xaml'")) -$script_content.Add($(Get-Content .\scripts\main.ps1)) +$script_content.Add($(Get-Content "$workingdir\scripts\main.ps1")) -if ($Debug){ +if ($Debug) { Update-Progress "Writing debug files" 95 - $appXamlContent | Out-File -FilePath ".\xaml\inputApp.xaml" -Encoding ascii - $tweaksXamlContent | Out-File -FilePath ".\xaml\inputTweaks.xaml" -Encoding ascii - $featuresXamlContent | Out-File -FilePath ".\xaml\inputFeatures.xaml" -Encoding ascii -} -else { + $appXamlContent | Out-File -FilePath "$workingdir\xaml\inputApp.xaml" -Encoding ascii + $tweaksXamlContent | Out-File -FilePath "$workingdir\xaml\inputTweaks.xaml" -Encoding ascii + $featuresXamlContent | Out-File -FilePath "$workingdir\xaml\inputFeatures.xaml" -Encoding ascii +} else { Update-Progress "Removing temporary files" 99 - Remove-Item ".\xaml\inputApp.xaml" -ErrorAction SilentlyContinue - Remove-Item ".\xaml\inputTweaks.xaml" -ErrorAction SilentlyContinue - Remove-Item ".\xaml\inputFeatures.xaml" -ErrorAction SilentlyContinue + Remove-Item "$workingdir\xaml\inputApp.xaml" -ErrorAction SilentlyContinue + Remove-Item "$workingdir\xaml\inputTweaks.xaml" -ErrorAction SilentlyContinue + Remove-Item "$workingdir\xaml\inputFeatures.xaml" -ErrorAction SilentlyContinue } -Set-Content -Path $scriptname -Value ($script_content -join "`r`n") -Encoding ascii +Set-Content -Path "$workingdir\$scriptname" -Value ($script_content -join "`r`n") -Encoding ascii Write-Progress -Activity "Compiling" -Completed -if ($run){ +if ($run) { try { - Start-Process -FilePath "pwsh" -ArgumentList ".\$scriptname" - } - catch { - Start-Process -FilePath "powershell" -ArgumentList ".\$scriptname" + Start-Process -FilePath "pwsh" -ArgumentList "$workingdir\$scriptname" + } catch { + Start-Process -FilePath "powershell" -ArgumentList "$workingdir\$scriptname" } } diff --git a/config/applications.json b/config/applications.json index a275ac47..c7ad5a7e 100644 --- a/config/applications.json +++ b/config/applications.json @@ -1,2954 +1,2954 @@ { - "1password": { - "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" - }, - "7zip": { - "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" - }, - "adobe": { - "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" - }, - "advancedip": { - "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" - }, - "affine": { - "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" - }, - "aimp": { - "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" - }, - "alacritty": { - "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" - }, - "anaconda3": { - "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" - }, - "angryipscanner": { - "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" - }, - "anki": { - "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" - }, - "anydesk": { - "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": "AnyDeskSoftwareGmbH.AnyDesk" - }, - "ATLauncher": { - "category": "Games", - "choco": "na", - "content": "ATLauncher", - "description": "ATLauncher is a Launcher for Minecraft which integrates multiple different ModPacks to allow you to download and install ModPacks easily and quickly.", - "link": "https://github.com/ATLauncher/ATLauncher", - "winget": "ATLauncher.ATLauncher" - }, - "audacity": { - "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" - }, - "autoruns": { - "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" - }, - "rdcman": { - "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" - }, - "autohotkey": { - "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" - }, - "azuredatastudio": { - "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" - }, - "barrier": { - "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" - }, - "bat": { - "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" - }, - "bitwarden": { - "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" - }, - "bleachbit": { - "category": "Utilities", - "choco": "bleachbit", - "content": "BleachBit", - "description": "Clean Your System and Free Disk Space", - "link": "https://www.bleachbit.org/", - "winget": "BleachBit.BleachBit" - }, - "blender": { - "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" - }, - "brave": { - "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" - }, - "bulkcrapuninstaller": { - "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" - }, - "bulkrenameutility": { - "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" - }, - "AdvancedRenamer": { - "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" - }, - "calibre": { - "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" - }, - "carnac": { - "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" - }, - "cemu": { - "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" - }, - "chatterino": { - "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" - }, - "chrome": { - "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" - }, - "chromium": { - "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" - }, - "arc": { - "category": "Browsers", - "choco": "na", - "content": "Arc", - "description": "Arc is a Chromium based browser, known for it's clean and modern design.", - "link": "https://arc.net/", - "winget": "TheBrowserCompany.Arc" - }, - "clementine": { - "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" - }, - "clink": { - "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" - }, - "clonehero": { - "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" - }, - "cmake": { - "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" - }, - "copyq": { - "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" - }, - "cpuz": { - "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" - }, - "crystaldiskinfo": { - "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" - }, - "capframex": { - "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" - }, - "crystaldiskmark": { - "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" - }, - "darktable": { - "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" - }, - "DaxStudio": { - "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" - }, - "ddu": { - "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": "ddu" - }, - "deluge": { - "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" - }, - "devtoys": { - "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" - }, - "digikam": { - "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" - }, - "discord": { - "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" - }, - "ditto": { - "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" - }, - "dockerdesktop": { - "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" - }, - "dotnet3": { - "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" - }, - "dotnet5": { - "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" - }, - "dotnet6": { - "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" - }, - "dotnet7": { - "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" - }, - "dotnet8": { - "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" - }, - "dmt": { - "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 customize handling multiple monitors and even lock the mouse on specific monitor. Useful for full screen games and apps that does not handle well a second monitor or helps the workflow." - }, - "duplicati": { - "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" - }, - "eaapp": { - "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" - }, - "eartrumpet": { - "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" - }, - "edge": { - "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" - }, - "efibooteditor": { - "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" - }, - "emulationstation": { - "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" - }, - "epicgames": { - "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" - }, - "errorlookup": { - "category": "Utilities", - "choco": "na", - "content": "Windows Error Code Lookup", - "description": "ErrorLookup is a tool for looking up Windows error codes and their descriptions.", - "link": "https://github.com/HenryPP/ErrorLookup", - "winget": "Henry++.ErrorLookup" - }, - "esearch": { - "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" - }, - "espanso": { - "category": "Utilities", - "choco": "espanso", - "content": "Espanso", - "description": "Cross-platform and open-source Text Expander written in Rust", - "link": "https://espanso.org/", - "winget": "Espanso.Espanso" - }, - "etcher": { - "category": "Utilities", - "choco": "etcher", - "content": "Etcher USB Creator", - "description": "Etcher is a powerful tool for creating bootable USB drives with ease.", - "link": "https://www.balena.io/etcher/", - "winget": "Balena.Etcher" - }, - "falkon": { - "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" - }, - "fastfetch": { - "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" - }, - "ferdium": { - "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" - }, - "ffmpeg": { - "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.", - "link": "https://ffmpeg.org/", - "winget": "Gyan.FFmpeg" - }, - "fileconverter": { - "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" - }, - "files": { - "category": "Utilities", - "choco": "files", - "content": "Files", - "description": "Alternative file explorer.", - "link": "https://github.com/files-community/Files", - "winget": "na" - }, - "firealpaca": { - "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" - }, - "firefox": { - "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" - }, - "firefoxesr": { - "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" - }, - "flameshot": { - "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" - }, - "lightshot": { - "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" - }, - "floorp": { - "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" - }, - "flow": { - "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" - }, - "flux": { - "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" - }, - "foobar": { - "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" - }, - "foxpdfeditor": { - "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" - }, - "foxpdfreader": { - "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" - }, - "freecad": { - "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" - }, - "fxsound": { - "category": "Multimedia Tools", - "choco": "fxsound", - "content": "FxSound", - "description": "FxSound is a cutting-edge audio enhancement software that elevates your listening experience across all media.", - "link": "https://www.fxsound.com/", - "winget": "FxSoundLLC.FxSound" - }, - "fzf": { - "category": "Utilities", - "choco": "fzf", - "content": "Fzf", - "description": "A command-line fuzzy finder", - "link": "https://github.com/junegunn/fzf/", - "winget": "junegunn.fzf" - }, - "geforcenow": { - "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" - }, - "gimp": { - "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" - }, - "git": { - "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" - }, - "gitbutler": { - "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" - }, - "gitextensions": { - "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" - }, - "githubcli": { - "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" - }, - "githubdesktop": { - "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" - }, - "gitkrakenclient": { - "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" - }, - "glaryutilities": { - "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" - }, - "godotengine": { - "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" - }, - "gog": { - "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" - }, - "gitify": { - "category": "Development", - "choco": "na", - "content": "Gitify", - "description": "GitHub notifications on your menu bar.", - "link": "https://www.gitify.io/", - "winget": "Gitify.Gitify" - }, - "golang": { - "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" - }, - "googledrive": { - "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.Drive" - }, - "gpuz": { - "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" - }, - "greenshot": { - "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" - }, - "gsudo": { - "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" - }, - "guilded": { - "category": "Communications", - "choco": "na", - "content": "Guilded", - "description": "Guilded is a communication and productivity platform that includes chat, scheduling, and collaborative tools for gaming and communities.", - "link": "https://www.guilded.gg/", - "winget": "Guilded.Guilded" - }, - "handbrake": { - "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" - }, - "harmonoid": { - "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" - }, - "heidisql": { - "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" - }, - "helix": { - "category": "Development", - "choco": "helix", - "content": "Helix", - "description": "Helix is a neovim alternative built in rust.", - "link": "https://helix-editor.com/", - "winget": "Helix.Helix" - }, - "heroiclauncher": { - "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" - }, - "hexchat": { - "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" - }, - "hwinfo": { - "category": "Utilities", - "choco": "hwinfo", - "content": "HWiNFO", - "description": "HWiNFO provides comprehensive hardware information and diagnostics for Windows.", - "link": "https://www.hwinfo.com/", - "winget": "REALiX.HWiNFO" - }, - "hwmonitor": { - "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" - }, - "imageglass": { - "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" - }, - "imgburn": { - "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": "http://www.imgburn.com/", - "winget": "LIGHTNINGUK.ImgBurn" - }, - "inkscape": { - "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" - }, - "itch": { - "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" - }, - "itunes": { - "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" - }, - "jami": { - "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" - }, - "java8": { - "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" - }, - "java11": { - "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" - }, - "java17": { - "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" - }, - "java21": { - "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" - }, - "jdownloader": { - "category": "Utilities", - "choco": "jdownloader", - "content": "JDownloader", - "description": "JDownloader is a feature-rich download manager with support for various file hosting services.", - "link": "http://jdownloader.org/", - "winget": "AppWork.JDownloader" - }, - "jellyfinmediaplayer": { - "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" - }, - "jellyfinserver": { - "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" - }, - "jetbrains": { - "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" - }, - "joplin": { - "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" - }, - "jpegview": { - "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" - }, - "kdeconnect": { - "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" - }, - "kdenlive": { - "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" - }, - "keepass": { - "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" - }, - "klite": { - "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" - }, - "kodi": { - "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" - }, - "krita": { - "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" - }, - "lazygit": { - "category": "Development", - "choco": "lazygit", - "content": "Lazygit", - "description": "Simple terminal UI for git commands", - "link": "https://github.com/jesseduffield/lazygit/", - "winget": "JesseDuffield.lazygit" - }, - "libreoffice": { - "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" - }, - "librewolf": { - "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" - }, - "linkshellextension": { - "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" - }, - "linphone": { - "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" - }, - "livelywallpaper": { - "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" - }, - "localsend": { - "category": "Utilities", - "choco": "localsend.install", - "content": "LocalSend", - "description": "An open source cross-platform alternative to AirDrop.", - "link": "https://localsend.org/", - "winget": "LocalSend.LocalSend" - }, - "lockhunter": { - "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" - }, - "logseq": { - "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" - }, - "malwarebytes": { - "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" - }, - "masscode": { - "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" - }, - "matrix": { - "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" - }, - "meld": { - "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" - }, - "ModernFlyouts": { - "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" - }, - "monitorian": { - "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" - }, - "moonlight": { - "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" - }, - "Motrix": { - "category": "Utilities", - "choco": "motrix", - "content": "Motrix Download Manager", - "description": "A full-featured download manager.", - "link": "https://motrix.app/", - "winget": "agalwood.Motrix" - }, - "mpchc": { - "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" - }, - "mremoteng": { - "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" - }, - "msedgeredirect": { - "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" - }, - "msiafterburner": { - "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" - }, - "mullvadvpn": { - "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" - }, - "BorderlessGaming": { - "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" - }, - "EqualizerAPO": { - "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" - }, - "CompactGUI": { - "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" - }, - "ExifCleaner": { - "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" - }, - "mullvadbrowser": { - "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" - }, - "musescore": { - "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" - }, - "musicbee": { - "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" - }, - "mp3tag": { - "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" - }, - "tagscanner": { - "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" - }, - "nanazip": { - "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" - }, - "netbird": { - "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" - }, - "naps2": { - "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" - }, - "neofetchwin": { - "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" - }, - "neovim": { - "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" - }, - "nextclouddesktop": { - "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" - }, - "nglide": { - "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": "http://www.zeus-software.com/downloads/nglide", - "winget": "ZeusSoftware.nGlide" - }, - "nmap": { - "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" - }, - "nodejs": { - "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" - }, - "nodejslts": { - "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" - }, - "nomacs": { - "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" - }, - "notepadplus": { - "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++" - }, - "nuget": { - "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" - }, - "nushell": { - "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" - }, - "nvclean": { - "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" - }, - "nvm": { - "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" - }, - "obs": { - "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" - }, - "obsidian": { - "category": "Document", - "choco": "obsidian", - "content": "Obsidian", - "description": "Obsidian is a powerful note-taking and knowledge management application.", - "link": "https://obsidian.md/", - "winget": "Obsidian.Obsidian" - }, - "okular": { - "category": "Document", - "choco": "okular", - "content": "Okular", - "description": "Okular is a versatile document viewer with advanced features.", - "link": "https://okular.kde.org/", - "winget": "KDE.Okular" - }, - "onedrive": { - "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" - }, - "onlyoffice": { - "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" - }, - "OPAutoClicker": { - "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" - }, - "openhashtab": { - "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" - }, - "openoffice": { - "category": "Document", - "choco": "openoffice", - "content": "Apache OpenOffice", - "description": "Apache OpenOffice is an open-source office software suite for word processing, spreadsheets, presentations, and more.", - "link": "https://www.openoffice.org/", - "winget": "Apache.OpenOffice" - }, - "openrgb": { - "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": "CalcProgrammer1.OpenRGB" - }, - "openscad": { - "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" - }, - "openshell": { - "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" - }, - "OpenVPN": { - "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" - }, - "OVirtualBox": { - "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" - }, - "ownclouddesktop": { - "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" - }, - "Paintdotnet": { - "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" - }, - "parsec": { - "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" - }, - "pdf24creator": { - "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" - }, - "pdfsam": { - "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" - }, - "peazip": { - "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" - }, - "piimager": { - "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" - }, - "playnite": { - "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" - }, - "plex": { - "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" - }, - "plexdesktop": { - "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" - }, - "Portmaster": { - "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" - }, - "posh": { - "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" - }, - "postman": { - "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" - }, - "powerautomate": { - "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" - }, - "powerbi": { - "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" - }, - "powershell": { - "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" - }, - "powertoys": { - "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" - }, - "prismlauncher": { - "category": "Games", - "choco": "prismlauncher", - "content": "Prism Launcher", - "description": "Prism Launcher is a game launcher and manager designed to provide a clean and intuitive interface for organizing and launching your games.", - "link": "https://prismlauncher.org/", - "winget": "PrismLauncher.PrismLauncher" - }, - "processlasso": { - "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" - }, - "spotify": { - "category": "Multimedia Tools", - "choco": "spotify", - "content": "Spotify", - "description": "Spotify is a digital music service that gives you access to millions of songs, podcasts, and videos from artists all over the world.", - "link": "https://www.spotify.com/", - "winget": "Spotify.Spotify" - }, - "processmonitor": { - "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" - }, - "orcaslicer": { - "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" - }, - "prucaslicer": { - "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" - }, - "psremoteplay": { - "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" - }, - "putty": { - "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" - }, - "python3": { - "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.12" - }, - "qbittorrent": { - "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" - }, - "transmission": { - "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" - }, - "tixati": { - "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" - }, - "qtox": { - "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" - }, - "quicklook": { - "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" - }, - "rainmeter": { - "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" - }, - "revo": { - "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" - }, - "WiseProgramUninstaller": { - "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" - }, - "revolt": { - "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" - }, - "ripgrep": { - "category": "Utilities", - "choco": "ripgrep", - "content": "Ripgrep", - "description": "Fast and powerful commandline search tool", - "link": "https://github.com/BurntSushi/ripgrep/", - "winget": "BurntSushi.ripgrep.MSVC" - }, - "rufus": { - "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" - }, - "rustdesk": { - "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" - }, - "rustlang": { - "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" - }, - "sagethumbs": { - "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" - }, - "samsungmagician": { - "category": "Utilities", - "choco": "samsung-magician", - "content": "Samsung Magician", - "description": "Samsung Magician is a utility for managing and optimizing Samsung SSDs.", - "link": "https://semiconductor.samsung.com/consumer-storage/magician/", - "winget": "Samsung.SamsungMagician" - }, - "sandboxie": { - "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" - }, - "sdio": { - "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://sourceforge.net/projects/snappy-driver-installer-origin", - "winget": "GlennDelahoy.SnappyDriverInstallerOrigin" - }, - "session": { - "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": "Oxen.Session" - }, - "sharex": { - "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" - }, - "nilesoftShell": { - "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" - }, - "sidequest": { - "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" - }, - "signal": { - "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" - }, - "signalrgb": { - "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" - }, - "simplenote": { - "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" - }, - "simplewall": { - "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" - }, - "skype": { - "category": "Communications", - "choco": "skype", - "content": "Skype", - "description": "Skype is a widely used communication platform offering video calls, voice calls, and instant messaging services.", - "link": "https://www.skype.com/", - "winget": "Microsoft.Skype" - }, - "slack": { - "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" - }, - "spacedrive": { - "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" - }, - "spacesniffer": { - "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" - }, - "spotube": { - "category": "Multimedia Tools", - "choco": "spotube", - "content": "Spotube", - "description": "Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! ", - "link": "https://github.com/KRTirtho/spotube", - "winget": "KRTirtho.Spotube" - }, - "starship": { - "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" - }, - "steam": { - "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" - }, - "strawberry": { - "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" - }, - "stremio": { - "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." - }, - "sublimemerge": { - "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" - }, - "sublimetext": { - "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" - }, - "sumatra": { - "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" - }, - "pdfgear": { - "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" - }, - "sunshine": { - "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" - }, - "superf4": { - "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" - }, - "swift": { - "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" - }, - "synctrayzor": { - "category": "Utilities", - "choco": "synctrayzor", - "content": "SyncTrayzor", - "description": "Windows tray utility / filesystem watcher / launcher for Syncthing", - "link": "https://github.com/canton7/SyncTrayzor/", - "winget": "SyncTrayzor.SyncTrayzor" - }, - "sqlmanagementstudio": { - "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" - }, - "tabby": { - "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" - }, - "tailscale": { - "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" - }, - "TcNoAccSwitcher": { - "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" - }, - "tcpview": { - "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" - }, - "teams": { - "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" - }, - "teamviewer": { - "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" - }, - "telegram": { - "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" - }, - "unigram": { - "category": "Communications", - "choco": "na", - "content": "Unigram", - "description": "Unigram - Telegram for Windows", - "link": "https://unigramdev.github.io/", - "winget": "Telegram.Unigram" - }, - "terminal": { - "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" - }, - "Thonny": { - "category": "Development", - "choco": "thonny", - "content": "Thonny Python IDE", - "description": "Python IDE for beginners.", - "link": "https://github.com/thonny/thonny", - "winget": "AivarAnnamaa.Thonny" - }, - "MuEditor": { - "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" - }, - "thorium": { - "category": "Browsers", - "choco": "na", - "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": "http://thorium.rocks/", - "winget": "Alex313031.Thorium.AVX2" - }, - "thunderbird": { - "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" - }, - "betterbird": { - "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" - }, - "tidal": { - "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" - }, - "tor": { - "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" - }, - "totalcommander": { - "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" - }, - "treesize": { - "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" - }, - "ttaskbar": { - "category": "Utilities", - "choco": "translucenttb", - "content": "Translucent Taskbar", - "description": "Translucent Taskbar is a tool that allows you to customize the transparency of the Windows taskbar.", - "link": "https://github.com/TranslucentTB/TranslucentTB", - "winget": "9PF4KZ2VN4W9" - }, - "twinkletray": { - "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" - }, - "ubisoft": { - "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" - }, - "ungoogled": { - "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" - }, - "unity": { - "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" - }, - "vagrant": { - "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" - }, - "vc2015_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" - }, - "vc2015_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" - }, - "ventoy": { - "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" - }, - "vesktop": { - "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" - }, - "viber": { - "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": "Viber.Viber" - }, - "videomass": { - "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" - }, - "visualstudio": { - "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" - }, - "vivaldi": { - "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" - }, - "vlc": { - "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" - }, - "voicemeeter": { - "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" - }, - "VoicemeeterPotato": { - "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" - }, - "vrdesktopstreamer": { - "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" - }, - "vscode": { - "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" - }, - "vscodium": { - "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" - }, - "waterfox": { - "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" - }, - "wazuh": { - "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" - }, - "wezterm": { - "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" - }, - "windowspchealth": { - "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" - }, - "WindowGrid": { - "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" - }, - "wingetui": { - "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": "SomePythonThings.WingetUIStore" - }, - "winmerge": { - "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" - }, - "winpaletter": { - "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" - }, - "winrar": { - "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" - }, - "winscp": { - "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" - }, - "wireguard": { - "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" - }, - "wireshark": { - "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" - }, - "wisetoys": { - "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" - }, - "TeraCopy": { - "category": "Utilities", - "choco": "TeraCopy", - "content": "TeraCopy", - "description": "Copy your files faster and more securely", - "link": "https://codesector.com/teracopy", - "winget": "CodeSector.TeraCopy" - }, - "wizfile": { - "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" - }, - "wiztree": { - "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" - }, - "xdm": { - "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" - }, - "xeheditor": { - "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" - }, - "xemu": { - "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" - }, - "xnview": { - "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" - }, - "xournal": { - "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++" - }, - "xpipe": { - "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" - }, - "yarn": { - "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" - }, - "ytdlp": { - "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" - }, - "zerotierone": { - "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" - }, - "zim": { - "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" - }, - "znote": { - "category": "Document", - "choco": "na", - "content": "Znote", - "description": "Znote is a note-taking application.", - "link": "https://znote.io/", - "winget": "alagrede.znote" - }, - "zoom": { - "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" - }, - "zoomit": { - "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" - }, - "zotero": { - "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" - }, - "zoxide": { - "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" - }, - "zulip": { - "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" - }, - "syncthingtray": { - "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" - }, - "miniconda": { - "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" - }, - "pixi": { - "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" - }, - "temurin": { - "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" - }, - "intelpresentmon": { - "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" - }, - "pyenvwin": { - "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" - }, - "tightvnc": { - "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" - }, - "ultravnc": { - "category": "Utilities", - "choco": "ultravnc", - "content": "UltraVNC", - "description": "UltraVNC is a powerful, easy to use and free - remote pc access softwares - 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" - }, - "windowsfirewallcontrol": { - "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" - }, - "vistaswitcher": { - "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" - }, - "autodarkmode": { - "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" - }, - "AmbieWhiteNoise": { - "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" - }, - "magicwormhole": { - "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" - }, - "croc": { - "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" - }, - "qgis": { - "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" - }, - "smplayer": { - "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" - }, - "glazewm": { - "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" - }, - "fancontrol": { - "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" - }, - "fnm": { - "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" - }, - "Windhawk": { - "category": "Utilities", - "choco": "windhawk", - "content": "Windhawk", - "description": "The customization marketplace for Windows programs", - "link": "https://windhawk.net", - "winget": "RamenSoftware.Windhawk" - }, - "ForceAutoHDR": { - "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" - }, - "JoyToKey": { - "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" - }, - "nditools": { - "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" - }, - "kicad": { - "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" - }, - "FormatFactory": { - "category": "Utilities", - "choco": "formatfactory", - "content": "Format Factory", - "description":"FormatFactory is an ad-supported freeware multimedia converter that can convert video, audio, and picture files. It is also capable of ripping DVDs and CDs to other file formats, as well as creating .iso images. It can also join multiple video files together into one.", - "link": "http://www.pcfreetime.com/formatfactory/", - "winget": "na" - }, - "dropox": { - "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" - }, - "OFGB": { - "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" - }, - "PaleMoon": { - "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" - }, - "Shotcut": { - "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" - }, - "LenovoLegionToolkit": { - "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" - }, - "PulsarEdit": { - "category": "Development", - "choco": "pulsar", - "content": "Pulsar", - "description": "A Community-led Hyper-Hackable Text Editor", - "link": "https://pulsar-edit.dev/", - "winget": "Pulsar-Edit.Pulsar" - }, - "Aegisub": { - "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" - }, - "SubtitleEdit": { - "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" - }, - "Fork": { - "category": "Development", - "choco": "git-fork", - "content": "Fork", - "description": "Fork - a fast and friendly git client.", - "link": "https://git-fork.com/", - "winget": "Fork.Fork" - } + "1password": { + "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" + }, + "7zip": { + "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" + }, + "adobe": { + "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" + }, + "advancedip": { + "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" + }, + "affine": { + "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" + }, + "aimp": { + "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" + }, + "alacritty": { + "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" + }, + "anaconda3": { + "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" + }, + "angryipscanner": { + "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" + }, + "anki": { + "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" + }, + "anydesk": { + "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": "AnyDeskSoftwareGmbH.AnyDesk" + }, + "ATLauncher": { + "category": "Games", + "choco": "na", + "content": "ATLauncher", + "description": "ATLauncher is a Launcher for Minecraft which integrates multiple different ModPacks to allow you to download and install ModPacks easily and quickly.", + "link": "https://github.com/ATLauncher/ATLauncher", + "winget": "ATLauncher.ATLauncher" + }, + "audacity": { + "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" + }, + "autoruns": { + "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" + }, + "rdcman": { + "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" + }, + "autohotkey": { + "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" + }, + "azuredatastudio": { + "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" + }, + "barrier": { + "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" + }, + "bat": { + "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" + }, + "bitwarden": { + "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" + }, + "bleachbit": { + "category": "Utilities", + "choco": "bleachbit", + "content": "BleachBit", + "description": "Clean Your System and Free Disk Space", + "link": "https://www.bleachbit.org/", + "winget": "BleachBit.BleachBit" + }, + "blender": { + "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" + }, + "brave": { + "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" + }, + "bulkcrapuninstaller": { + "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" + }, + "bulkrenameutility": { + "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" + }, + "AdvancedRenamer": { + "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" + }, + "calibre": { + "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" + }, + "carnac": { + "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" + }, + "cemu": { + "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" + }, + "chatterino": { + "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" + }, + "chrome": { + "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" + }, + "chromium": { + "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" + }, + "arc": { + "category": "Browsers", + "choco": "na", + "content": "Arc", + "description": "Arc is a Chromium based browser, known for it's clean and modern design.", + "link": "https://arc.net/", + "winget": "TheBrowserCompany.Arc" + }, + "clementine": { + "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" + }, + "clink": { + "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" + }, + "clonehero": { + "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" + }, + "cmake": { + "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" + }, + "copyq": { + "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" + }, + "cpuz": { + "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" + }, + "crystaldiskinfo": { + "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" + }, + "capframex": { + "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" + }, + "crystaldiskmark": { + "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" + }, + "darktable": { + "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" + }, + "DaxStudio": { + "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" + }, + "ddu": { + "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": "ddu" + }, + "deluge": { + "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" + }, + "devtoys": { + "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" + }, + "digikam": { + "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" + }, + "discord": { + "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" + }, + "ditto": { + "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" + }, + "dockerdesktop": { + "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" + }, + "dotnet3": { + "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" + }, + "dotnet5": { + "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" + }, + "dotnet6": { + "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" + }, + "dotnet7": { + "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" + }, + "dotnet8": { + "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" + }, + "dmt": { + "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 customize handling multiple monitors and even lock the mouse on specific monitor. Useful for full screen games and apps that does not handle well a second monitor or helps the workflow." + }, + "duplicati": { + "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" + }, + "eaapp": { + "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" + }, + "eartrumpet": { + "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" + }, + "edge": { + "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" + }, + "efibooteditor": { + "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" + }, + "emulationstation": { + "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" + }, + "epicgames": { + "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" + }, + "errorlookup": { + "category": "Utilities", + "choco": "na", + "content": "Windows Error Code Lookup", + "description": "ErrorLookup is a tool for looking up Windows error codes and their descriptions.", + "link": "https://github.com/HenryPP/ErrorLookup", + "winget": "Henry++.ErrorLookup" + }, + "esearch": { + "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" + }, + "espanso": { + "category": "Utilities", + "choco": "espanso", + "content": "Espanso", + "description": "Cross-platform and open-source Text Expander written in Rust", + "link": "https://espanso.org/", + "winget": "Espanso.Espanso" + }, + "etcher": { + "category": "Utilities", + "choco": "etcher", + "content": "Etcher USB Creator", + "description": "Etcher is a powerful tool for creating bootable USB drives with ease.", + "link": "https://www.balena.io/etcher/", + "winget": "Balena.Etcher" + }, + "falkon": { + "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" + }, + "fastfetch": { + "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" + }, + "ferdium": { + "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" + }, + "ffmpeg": { + "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.", + "link": "https://ffmpeg.org/", + "winget": "Gyan.FFmpeg" + }, + "fileconverter": { + "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" + }, + "files": { + "category": "Utilities", + "choco": "files", + "content": "Files", + "description": "Alternative file explorer.", + "link": "https://github.com/files-community/Files", + "winget": "na" + }, + "firealpaca": { + "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" + }, + "firefox": { + "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" + }, + "firefoxesr": { + "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" + }, + "flameshot": { + "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" + }, + "lightshot": { + "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" + }, + "floorp": { + "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" + }, + "flow": { + "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" + }, + "flux": { + "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" + }, + "foobar": { + "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" + }, + "foxpdfeditor": { + "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" + }, + "foxpdfreader": { + "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" + }, + "freecad": { + "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" + }, + "fxsound": { + "category": "Multimedia Tools", + "choco": "fxsound", + "content": "FxSound", + "description": "FxSound is a cutting-edge audio enhancement software that elevates your listening experience across all media.", + "link": "https://www.fxsound.com/", + "winget": "FxSoundLLC.FxSound" + }, + "fzf": { + "category": "Utilities", + "choco": "fzf", + "content": "Fzf", + "description": "A command-line fuzzy finder", + "link": "https://github.com/junegunn/fzf/", + "winget": "junegunn.fzf" + }, + "geforcenow": { + "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" + }, + "gimp": { + "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" + }, + "git": { + "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" + }, + "gitbutler": { + "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" + }, + "gitextensions": { + "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" + }, + "githubcli": { + "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" + }, + "githubdesktop": { + "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" + }, + "gitkrakenclient": { + "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" + }, + "glaryutilities": { + "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" + }, + "godotengine": { + "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" + }, + "gog": { + "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" + }, + "gitify": { + "category": "Development", + "choco": "na", + "content": "Gitify", + "description": "GitHub notifications on your menu bar.", + "link": "https://www.gitify.io/", + "winget": "Gitify.Gitify" + }, + "golang": { + "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" + }, + "googledrive": { + "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.Drive" + }, + "gpuz": { + "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" + }, + "greenshot": { + "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" + }, + "gsudo": { + "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" + }, + "guilded": { + "category": "Communications", + "choco": "na", + "content": "Guilded", + "description": "Guilded is a communication and productivity platform that includes chat, scheduling, and collaborative tools for gaming and communities.", + "link": "https://www.guilded.gg/", + "winget": "Guilded.Guilded" + }, + "handbrake": { + "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" + }, + "harmonoid": { + "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" + }, + "heidisql": { + "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" + }, + "helix": { + "category": "Development", + "choco": "helix", + "content": "Helix", + "description": "Helix is a neovim alternative built in rust.", + "link": "https://helix-editor.com/", + "winget": "Helix.Helix" + }, + "heroiclauncher": { + "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" + }, + "hexchat": { + "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" + }, + "hwinfo": { + "category": "Utilities", + "choco": "hwinfo", + "content": "HWiNFO", + "description": "HWiNFO provides comprehensive hardware information and diagnostics for Windows.", + "link": "https://www.hwinfo.com/", + "winget": "REALiX.HWiNFO" + }, + "hwmonitor": { + "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" + }, + "imageglass": { + "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" + }, + "imgburn": { + "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": "http://www.imgburn.com/", + "winget": "LIGHTNINGUK.ImgBurn" + }, + "inkscape": { + "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" + }, + "itch": { + "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" + }, + "itunes": { + "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" + }, + "jami": { + "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" + }, + "java8": { + "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" + }, + "java11": { + "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" + }, + "java17": { + "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" + }, + "java21": { + "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" + }, + "jdownloader": { + "category": "Utilities", + "choco": "jdownloader", + "content": "JDownloader", + "description": "JDownloader is a feature-rich download manager with support for various file hosting services.", + "link": "http://jdownloader.org/", + "winget": "AppWork.JDownloader" + }, + "jellyfinmediaplayer": { + "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" + }, + "jellyfinserver": { + "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" + }, + "jetbrains": { + "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" + }, + "joplin": { + "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" + }, + "jpegview": { + "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" + }, + "kdeconnect": { + "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" + }, + "kdenlive": { + "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" + }, + "keepass": { + "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" + }, + "klite": { + "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" + }, + "kodi": { + "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" + }, + "krita": { + "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" + }, + "lazygit": { + "category": "Development", + "choco": "lazygit", + "content": "Lazygit", + "description": "Simple terminal UI for git commands", + "link": "https://github.com/jesseduffield/lazygit/", + "winget": "JesseDuffield.lazygit" + }, + "libreoffice": { + "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" + }, + "librewolf": { + "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" + }, + "linkshellextension": { + "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" + }, + "linphone": { + "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" + }, + "livelywallpaper": { + "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" + }, + "localsend": { + "category": "Utilities", + "choco": "localsend.install", + "content": "LocalSend", + "description": "An open source cross-platform alternative to AirDrop.", + "link": "https://localsend.org/", + "winget": "LocalSend.LocalSend" + }, + "lockhunter": { + "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" + }, + "logseq": { + "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" + }, + "malwarebytes": { + "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" + }, + "masscode": { + "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" + }, + "matrix": { + "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" + }, + "meld": { + "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" + }, + "ModernFlyouts": { + "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" + }, + "monitorian": { + "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" + }, + "moonlight": { + "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" + }, + "Motrix": { + "category": "Utilities", + "choco": "motrix", + "content": "Motrix Download Manager", + "description": "A full-featured download manager.", + "link": "https://motrix.app/", + "winget": "agalwood.Motrix" + }, + "mpchc": { + "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" + }, + "mremoteng": { + "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" + }, + "msedgeredirect": { + "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" + }, + "msiafterburner": { + "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" + }, + "mullvadvpn": { + "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" + }, + "BorderlessGaming": { + "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" + }, + "EqualizerAPO": { + "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" + }, + "CompactGUI": { + "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" + }, + "ExifCleaner": { + "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" + }, + "mullvadbrowser": { + "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" + }, + "musescore": { + "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" + }, + "musicbee": { + "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" + }, + "mp3tag": { + "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" + }, + "tagscanner": { + "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" + }, + "nanazip": { + "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" + }, + "netbird": { + "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" + }, + "naps2": { + "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" + }, + "neofetchwin": { + "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" + }, + "neovim": { + "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" + }, + "nextclouddesktop": { + "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" + }, + "nglide": { + "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": "http://www.zeus-software.com/downloads/nglide", + "winget": "ZeusSoftware.nGlide" + }, + "nmap": { + "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" + }, + "nodejs": { + "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" + }, + "nodejslts": { + "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" + }, + "nomacs": { + "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" + }, + "notepadplus": { + "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++" + }, + "nuget": { + "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" + }, + "nushell": { + "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" + }, + "nvclean": { + "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" + }, + "nvm": { + "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" + }, + "obs": { + "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" + }, + "obsidian": { + "category": "Document", + "choco": "obsidian", + "content": "Obsidian", + "description": "Obsidian is a powerful note-taking and knowledge management application.", + "link": "https://obsidian.md/", + "winget": "Obsidian.Obsidian" + }, + "okular": { + "category": "Document", + "choco": "okular", + "content": "Okular", + "description": "Okular is a versatile document viewer with advanced features.", + "link": "https://okular.kde.org/", + "winget": "KDE.Okular" + }, + "onedrive": { + "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" + }, + "onlyoffice": { + "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" + }, + "OPAutoClicker": { + "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" + }, + "openhashtab": { + "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" + }, + "openoffice": { + "category": "Document", + "choco": "openoffice", + "content": "Apache OpenOffice", + "description": "Apache OpenOffice is an open-source office software suite for word processing, spreadsheets, presentations, and more.", + "link": "https://www.openoffice.org/", + "winget": "Apache.OpenOffice" + }, + "openrgb": { + "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": "CalcProgrammer1.OpenRGB" + }, + "openscad": { + "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" + }, + "openshell": { + "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" + }, + "OpenVPN": { + "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" + }, + "OVirtualBox": { + "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" + }, + "ownclouddesktop": { + "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" + }, + "Paintdotnet": { + "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" + }, + "parsec": { + "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" + }, + "pdf24creator": { + "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" + }, + "pdfsam": { + "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" + }, + "peazip": { + "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" + }, + "piimager": { + "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" + }, + "playnite": { + "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" + }, + "plex": { + "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" + }, + "plexdesktop": { + "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" + }, + "Portmaster": { + "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" + }, + "posh": { + "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" + }, + "postman": { + "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" + }, + "powerautomate": { + "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" + }, + "powerbi": { + "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" + }, + "powershell": { + "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" + }, + "powertoys": { + "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" + }, + "prismlauncher": { + "category": "Games", + "choco": "prismlauncher", + "content": "Prism Launcher", + "description": "Prism Launcher is a game launcher and manager designed to provide a clean and intuitive interface for organizing and launching your games.", + "link": "https://prismlauncher.org/", + "winget": "PrismLauncher.PrismLauncher" + }, + "processlasso": { + "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" + }, + "spotify": { + "category": "Multimedia Tools", + "choco": "spotify", + "content": "Spotify", + "description": "Spotify is a digital music service that gives you access to millions of songs, podcasts, and videos from artists all over the world.", + "link": "https://www.spotify.com/", + "winget": "Spotify.Spotify" + }, + "processmonitor": { + "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" + }, + "orcaslicer": { + "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" + }, + "prucaslicer": { + "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" + }, + "psremoteplay": { + "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" + }, + "putty": { + "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" + }, + "python3": { + "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.12" + }, + "qbittorrent": { + "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" + }, + "transmission": { + "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" + }, + "tixati": { + "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" + }, + "qtox": { + "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" + }, + "quicklook": { + "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" + }, + "rainmeter": { + "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" + }, + "revo": { + "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" + }, + "WiseProgramUninstaller": { + "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" + }, + "revolt": { + "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" + }, + "ripgrep": { + "category": "Utilities", + "choco": "ripgrep", + "content": "Ripgrep", + "description": "Fast and powerful commandline search tool", + "link": "https://github.com/BurntSushi/ripgrep/", + "winget": "BurntSushi.ripgrep.MSVC" + }, + "rufus": { + "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" + }, + "rustdesk": { + "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" + }, + "rustlang": { + "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" + }, + "sagethumbs": { + "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" + }, + "samsungmagician": { + "category": "Utilities", + "choco": "samsung-magician", + "content": "Samsung Magician", + "description": "Samsung Magician is a utility for managing and optimizing Samsung SSDs.", + "link": "https://semiconductor.samsung.com/consumer-storage/magician/", + "winget": "Samsung.SamsungMagician" + }, + "sandboxie": { + "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" + }, + "sdio": { + "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://sourceforge.net/projects/snappy-driver-installer-origin", + "winget": "GlennDelahoy.SnappyDriverInstallerOrigin" + }, + "session": { + "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": "Oxen.Session" + }, + "sharex": { + "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" + }, + "nilesoftShell": { + "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" + }, + "sidequest": { + "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" + }, + "signal": { + "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" + }, + "signalrgb": { + "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" + }, + "simplenote": { + "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" + }, + "simplewall": { + "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" + }, + "skype": { + "category": "Communications", + "choco": "skype", + "content": "Skype", + "description": "Skype is a widely used communication platform offering video calls, voice calls, and instant messaging services.", + "link": "https://www.skype.com/", + "winget": "Microsoft.Skype" + }, + "slack": { + "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" + }, + "spacedrive": { + "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" + }, + "spacesniffer": { + "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" + }, + "spotube": { + "category": "Multimedia Tools", + "choco": "spotube", + "content": "Spotube", + "description": "Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! ", + "link": "https://github.com/KRTirtho/spotube", + "winget": "KRTirtho.Spotube" + }, + "starship": { + "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" + }, + "steam": { + "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" + }, + "strawberry": { + "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" + }, + "stremio": { + "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." + }, + "sublimemerge": { + "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" + }, + "sublimetext": { + "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" + }, + "sumatra": { + "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" + }, + "pdfgear": { + "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" + }, + "sunshine": { + "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" + }, + "superf4": { + "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" + }, + "swift": { + "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" + }, + "synctrayzor": { + "category": "Utilities", + "choco": "synctrayzor", + "content": "SyncTrayzor", + "description": "Windows tray utility / filesystem watcher / launcher for Syncthing", + "link": "https://github.com/canton7/SyncTrayzor/", + "winget": "SyncTrayzor.SyncTrayzor" + }, + "sqlmanagementstudio": { + "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" + }, + "tabby": { + "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" + }, + "tailscale": { + "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" + }, + "TcNoAccSwitcher": { + "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" + }, + "tcpview": { + "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" + }, + "teams": { + "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" + }, + "teamviewer": { + "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" + }, + "telegram": { + "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" + }, + "unigram": { + "category": "Communications", + "choco": "na", + "content": "Unigram", + "description": "Unigram - Telegram for Windows", + "link": "https://unigramdev.github.io/", + "winget": "Telegram.Unigram" + }, + "terminal": { + "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" + }, + "Thonny": { + "category": "Development", + "choco": "thonny", + "content": "Thonny Python IDE", + "description": "Python IDE for beginners.", + "link": "https://github.com/thonny/thonny", + "winget": "AivarAnnamaa.Thonny" + }, + "MuEditor": { + "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" + }, + "thorium": { + "category": "Browsers", + "choco": "na", + "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": "http://thorium.rocks/", + "winget": "Alex313031.Thorium.AVX2" + }, + "thunderbird": { + "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" + }, + "betterbird": { + "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" + }, + "tidal": { + "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" + }, + "tor": { + "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" + }, + "totalcommander": { + "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" + }, + "treesize": { + "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" + }, + "ttaskbar": { + "category": "Utilities", + "choco": "translucenttb", + "content": "Translucent Taskbar", + "description": "Translucent Taskbar is a tool that allows you to customize the transparency of the Windows taskbar.", + "link": "https://github.com/TranslucentTB/TranslucentTB", + "winget": "9PF4KZ2VN4W9" + }, + "twinkletray": { + "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" + }, + "ubisoft": { + "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" + }, + "ungoogled": { + "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" + }, + "unity": { + "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" + }, + "vagrant": { + "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" + }, + "vc2015_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" + }, + "vc2015_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" + }, + "ventoy": { + "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" + }, + "vesktop": { + "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" + }, + "viber": { + "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": "Viber.Viber" + }, + "videomass": { + "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" + }, + "visualstudio": { + "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" + }, + "vivaldi": { + "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" + }, + "vlc": { + "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" + }, + "voicemeeter": { + "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" + }, + "VoicemeeterPotato": { + "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" + }, + "vrdesktopstreamer": { + "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" + }, + "vscode": { + "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" + }, + "vscodium": { + "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" + }, + "waterfox": { + "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" + }, + "wazuh": { + "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" + }, + "wezterm": { + "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" + }, + "windowspchealth": { + "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" + }, + "WindowGrid": { + "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" + }, + "wingetui": { + "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": "SomePythonThings.WingetUIStore" + }, + "winmerge": { + "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" + }, + "winpaletter": { + "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" + }, + "winrar": { + "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" + }, + "winscp": { + "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" + }, + "wireguard": { + "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" + }, + "wireshark": { + "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" + }, + "wisetoys": { + "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" + }, + "TeraCopy": { + "category": "Utilities", + "choco": "TeraCopy", + "content": "TeraCopy", + "description": "Copy your files faster and more securely", + "link": "https://codesector.com/teracopy", + "winget": "CodeSector.TeraCopy" + }, + "wizfile": { + "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" + }, + "wiztree": { + "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" + }, + "xdm": { + "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" + }, + "xeheditor": { + "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" + }, + "xemu": { + "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" + }, + "xnview": { + "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" + }, + "xournal": { + "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++" + }, + "xpipe": { + "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" + }, + "yarn": { + "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" + }, + "ytdlp": { + "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" + }, + "zerotierone": { + "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" + }, + "zim": { + "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" + }, + "znote": { + "category": "Document", + "choco": "na", + "content": "Znote", + "description": "Znote is a note-taking application.", + "link": "https://znote.io/", + "winget": "alagrede.znote" + }, + "zoom": { + "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" + }, + "zoomit": { + "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" + }, + "zotero": { + "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" + }, + "zoxide": { + "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" + }, + "zulip": { + "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" + }, + "syncthingtray": { + "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" + }, + "miniconda": { + "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" + }, + "pixi": { + "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" + }, + "temurin": { + "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" + }, + "intelpresentmon": { + "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" + }, + "pyenvwin": { + "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" + }, + "tightvnc": { + "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" + }, + "ultravnc": { + "category": "Utilities", + "choco": "ultravnc", + "content": "UltraVNC", + "description": "UltraVNC is a powerful, easy to use and free - remote pc access softwares - 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" + }, + "windowsfirewallcontrol": { + "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" + }, + "vistaswitcher": { + "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" + }, + "autodarkmode": { + "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" + }, + "AmbieWhiteNoise": { + "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" + }, + "magicwormhole": { + "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" + }, + "croc": { + "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" + }, + "qgis": { + "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" + }, + "smplayer": { + "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" + }, + "glazewm": { + "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" + }, + "fancontrol": { + "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" + }, + "fnm": { + "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" + }, + "Windhawk": { + "category": "Utilities", + "choco": "windhawk", + "content": "Windhawk", + "description": "The customization marketplace for Windows programs", + "link": "https://windhawk.net", + "winget": "RamenSoftware.Windhawk" + }, + "ForceAutoHDR": { + "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" + }, + "JoyToKey": { + "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" + }, + "nditools": { + "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" + }, + "kicad": { + "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" + }, + "FormatFactory": { + "category": "Utilities", + "choco": "formatfactory", + "content": "Format Factory", + "description":"FormatFactory is an ad-supported freeware multimedia converter that can convert video, audio, and picture files. It is also capable of ripping DVDs and CDs to other file formats, as well as creating .iso images. It can also join multiple video files together into one.", + "link": "http://www.pcfreetime.com/formatfactory/", + "winget": "na" + }, + "dropox": { + "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" + }, + "OFGB": { + "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" + }, + "PaleMoon": { + "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" + }, + "Shotcut": { + "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" + }, + "LenovoLegionToolkit": { + "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" + }, + "PulsarEdit": { + "category": "Development", + "choco": "pulsar", + "content": "Pulsar", + "description": "A Community-led Hyper-Hackable Text Editor", + "link": "https://pulsar-edit.dev/", + "winget": "Pulsar-Edit.Pulsar" + }, + "Aegisub": { + "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" + }, + "SubtitleEdit": { + "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" + }, + "Fork": { + "category": "Development", + "choco": "git-fork", + "content": "Fork", + "description": "Fork - a fast and friendly git client.", + "link": "https://git-fork.com/", + "winget": "Fork.Fork" + } } diff --git a/config/dns.json b/config/dns.json index 8f5ca14c..6c2ffbbd 100644 --- a/config/dns.json +++ b/config/dns.json @@ -47,4 +47,4 @@ "Primary6": "2a10:50c0::bad1:ff", "Secondary6": "2a10:50c0::bad2:ff" } -} \ No newline at end of file +} diff --git a/config/tweaks.json b/config/tweaks.json index 9dd7a719..610e1c5e 100644 --- a/config/tweaks.json +++ b/config/tweaks.json @@ -2432,7 +2432,7 @@ # Check if the SystemRestorePointCreationFrequency value exists $exists = Get-ItemProperty -path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -ErrorAction SilentlyContinue - if($null -eq $exists){ + if($null -eq $exists) { write-host 'Changing system to allow multiple restore points per day' Set-ItemProperty -Path \"HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SystemRestore\" -Name \"SystemRestorePointCreationFrequency\" -Value \"0\" -Type DWord -Force -ErrorAction Stop | Out-Null } @@ -2666,17 +2666,16 @@ $OneDrivePath = $($env:OneDrive) Write-Host \"Removing OneDrive\" $regPath = \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OneDriveSetup.exe\" - if (Test-Path $regPath){ + if (Test-Path $regPath) { $OneDriveUninstallString = Get-ItemPropertyValue \"$regPath\" -Name \"UninstallString\" $OneDriveExe, $OneDriveArgs = $OneDriveUninstallString.Split(\" \") Start-Process -FilePath $OneDriveExe -ArgumentList \"$OneDriveArgs /silent\" -NoNewWindow -Wait - } - else{ + } else { Write-Host \"Onedrive dosn't seem to be installed anymore\" -ForegroundColor Red return } # Check if OneDrive got Uninstalled - if (-not (Test-Path $regPath)){ + if (-not (Test-Path $regPath)) { Write-Host \"Copy downloaded Files from the OneDrive Folder to Root UserProfile\" Start-Process -FilePath powershell -ArgumentList \"robocopy '$($OneDrivePath)' '$($env:USERPROFILE.TrimEnd())\\' /mov /e /xj\" -NoNewWindow -Wait @@ -2738,8 +2737,7 @@ Write-Host \"Please Note - The OneDrive folder at $OneDrivePath may still have items in it. You must manually delete it, but all the files should already be copied to the base user folder.\" Write-Host \"If there are Files missing afterwards, please Login to Onedrive.com and Download them manually\" -ForegroundColor Yellow Start-Sleep 5 - } - else{ + } else { Write-Host \"Something went Wrong during the Unistallation of OneDrive\" -ForegroundColor Red } " @@ -2939,8 +2937,7 @@ try { Invoke-WebRequest -Uri $remoteHostsUrl -OutFile $tempHostsPath Write-Output \"Downloaded the remote HOSTS file to a temporary location.\" - } - catch { + } catch { Write-Error \"Failed to download the HOSTS file. Error: $_\" } @@ -2966,8 +2963,7 @@ $combinedContent | Set-Content $localHostsPath -Encoding ASCII Write-Output \"Successfully added the AdobeNetBlock.\" } - } - catch { + } catch { Write-Error \"Error during processing: $_\" } @@ -2978,8 +2974,7 @@ try { Invoke-Expression \"ipconfig /flushdns\" Write-Output \"DNS cache flushed successfully.\" - } - catch { + } catch { Write-Error \"Failed to flush DNS cache. Error: $_\" } " @@ -2992,8 +2987,7 @@ # Load the content of the HOSTS file try { $hostsContent = Get-Content $localHostsPath -ErrorAction Stop - } - catch { + } catch { Write-Error \"Failed to load the HOSTS file. Error: $_\" return } @@ -3019,8 +3013,7 @@ try { $newContent | Set-Content $localHostsPath -Encoding ASCII Write-Output \"Successfully removed the AdobeNetBlock section from the HOSTS file.\" - } - catch { + } catch { Write-Error \"Failed to write back to the HOSTS file. Error: $_\" } @@ -3028,8 +3021,7 @@ try { Invoke-Expression \"ipconfig /flushdns\" Write-Output \"DNS cache flushed successfully.\" - } - catch { + } catch { Write-Error \"Failed to flush DNS cache. Error: $_\" } " diff --git a/docs/KnownIssues.md b/docs/KnownIssues.md index b95a0d68..0e834676 100644 --- a/docs/KnownIssues.md +++ b/docs/KnownIssues.md @@ -176,4 +176,4 @@ Get-Service -Name "XboxGipSvc" | Set-Service -StartupType Automatic 7. **ISO File Integrity:** Ensure that the ISO file you are trying to mount is uncorrupted. Try mounting a different ISO file to see if the issue persists. -* If the problem persists after trying these steps, additional troubleshooting is required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you use to mount the ISO. \ No newline at end of file +* If the problem persists after trying these steps, additional troubleshooting is required. Consider seeking assistance from Microsoft support or community forums for more specific guidance based on your system configuration and the software you use to mount the ISO. diff --git a/functions/private/ConvertTo-Icon.ps1 b/functions/private/ConvertTo-Icon.ps1 index 44f4d6be..ce06327e 100644 --- a/functions/private/ConvertTo-Icon.ps1 +++ b/functions/private/ConvertTo-Icon.ps1 @@ -57,9 +57,9 @@ function ConvertTo-Icon { #> param( - [Parameter(Mandatory=$true, position=0)] + [Parameter(Mandatory, position=0)] [string]$bitmapPath, - [Parameter(Mandatory=$true, position=1)] + [Parameter(Mandatory, position=1)] [string]$iconPath, [Parameter(position=2)] [bool]$overrideIconFile = $true @@ -86,8 +86,7 @@ function ConvertTo-Icon { $icon.Save($file) $file.Close() $icon.Dispose() - } - else { + } else { throw [System.IO.FileNotFoundException] "[ConvertTo-Icon] The provided bitmap File Path is not found at '$bitmapPath'." } } diff --git a/functions/private/Copy-Files.ps1 b/functions/private/Copy-Files.ps1 index 447df38c..33342916 100644 --- a/functions/private/Copy-Files.ps1 +++ b/functions/private/Copy-Files.ps1 @@ -10,39 +10,34 @@ function Copy-Files { #> param ( - [string] $Path, - [string] $Destination, - [switch] $Recurse = $false, - [switch] $Force = $false + [string]$Path, + [string]$Destination, + [switch]$Recurse = $false, + [switch]$Force = $false ) try { - $files = Get-ChildItem -Path $path -Recurse:$recurse - Write-Host "Copy $($files.Count)(s) from $path to $destination" + $files = Get-ChildItem -Path $path -Recurse:$recurse + Write-Host "Copy $($files.Count)(s) from $path to $destination" - foreach($file in $files) - { + foreach ($file in $files) { $status = "Copy files {0} on {1}: {2}" -f $counter, $files.Count, $file.Name Write-Progress -Activity "Copy Windows files" -Status $status -PercentComplete ($counter++/$files.count*100) $restpath = $file.FullName -Replace $path, '' - if($file.PSIsContainer -eq $true) - { + if ($file.PSIsContainer -eq $true) { Write-Debug "Creating $($destination + $restpath)" New-Item ($destination+$restpath) -Force:$force -Type Directory -ErrorAction SilentlyContinue - } - else - { + } else { Write-Debug "Copy from $($file.FullName) to $($destination+$restpath)" Copy-Item $file.FullName ($destination+$restpath) -ErrorAction SilentlyContinue -Force:$force Set-ItemProperty -Path ($destination+$restpath) -Name IsReadOnly -Value $false } } Write-Progress -Activity "Copy Windows files" -Status "Ready" -Completed - } - Catch{ + } catch { Write-Warning "Unable to Copy all the files due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Get-LocalizedYesNo.ps1 b/functions/private/Get-LocalizedYesNo.ps1 index 227bf8dd..0c8e9390 100644 --- a/functions/private/Get-LocalizedYesNo.ps1 +++ b/functions/private/Get-LocalizedYesNo.ps1 @@ -31,4 +31,4 @@ function Get-LocalizedYesNo { # Return the array of characters return $charactersArray - } \ No newline at end of file + } diff --git a/functions/private/Get-Oscdimg.ps1 b/functions/private/Get-Oscdimg.ps1 index 38ea3b2c..4680a39b 100644 --- a/functions/private/Get-Oscdimg.ps1 +++ b/functions/private/Get-Oscdimg.ps1 @@ -1,15 +1,17 @@ function Get-Oscdimg { <# - .DESCRIPTION This function will download oscdimg file from github Release folders and put it into env:temp folder .EXAMPLE Get-Oscdimg #> - param( [Parameter(Mandatory=$true)] + + param( + [Parameter(Mandatory, position=0)] [string]$oscdimgPath ) + $oscdimgPath = "$env:TEMP\oscdimg.exe" $downloadUrl = "https://github.com/ChrisTitusTech/winutil/raw/main/releases/oscdimg.exe" Invoke-RestMethod -Uri $downloadUrl -OutFile $oscdimgPath diff --git a/functions/private/Get-TabXaml.ps1 b/functions/private/Get-TabXaml.ps1 index 231af7af..5eef6417 100644 --- a/functions/private/Get-TabXaml.ps1 +++ b/functions/private/Get-TabXaml.ps1 @@ -1,19 +1,23 @@ function Get-TabXaml { <# - .SYNOPSIS - Generates XAML for a tab in the WinUtil GUI - This function is used to generate the XAML for the applications tab in the WinUtil GUI - It takes the tabname and the number of columns to display the applications in as input and returns the XAML for the tab as output - .PARAMETER tabname - The name of the tab to generate XAML for - Note: the 'tabname' parameter must equal one of the json files found in $sync.configs variable - Otherwise, it'll throw an exception - .PARAMETER columncount - The number of columns to display the applications in, default is 0 - .OUTPUTS - The XAML for the tab - .EXAMPLE - Get-TabXaml "applications" 3 + .SYNOPSIS + Generates XAML for a tab in the WinUtil GUI + This function is used to generate the XAML for the applications tab in the WinUtil GUI + It takes the tabname and the number of columns to display the applications in as input and returns the XAML for the tab as output + + .PARAMETER tabname + The name of the tab to generate XAML for + Note: the 'tabname' parameter must equal one of the json files found in $sync.configs variable + Otherwise, it'll throw an exception + + .PARAMETER columncount + The number of columns to display the applications in, default is 0 + + .OUTPUTS + The XAML for the tab + + .EXAMPLE + Get-TabXaml "applications" 3 #> @@ -115,7 +119,7 @@ function Get-TabXaml { } # Dot-source the Get-WPFObjectName function - . .\functions\private\Get-WPFObjectName + . "$($sync.PSScriptRoot)\functions\private\Get-WPFObjectName.ps1" $categorycontent = $($category -replace '^.__', '') $categoryname = Get-WPFObjectName -type "Label" -name $categorycontent @@ -188,7 +192,7 @@ function Get-TabXaml { # else it is a checkbox default { - $checkedStatus = If ($appInfo.Checked -eq $null) {""} Else {" IsChecked=""$($appInfo.Checked)"""} + $checkedStatus = If ($appInfo.Checked -eq $null) {""} else {" IsChecked=""$($appInfo.Checked)"""} if ($appInfo.Link -eq $null) { $blockXml += $precal_indent + " - param( [Parameter(Mandatory=$true)] - $type, - $name -) + param( + [Parameter(Mandatory, position=0)] + [string]$type, -$Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', '' + [Parameter(position=1)] + [string]$name + ) -return $Output - -} \ No newline at end of file + $Output = $("WPF"+$type+$name) -replace '[^a-zA-Z0-9]', '' + return $Output +} diff --git a/functions/private/Get-WinUtilInstallerProcess.ps1 b/functions/private/Get-WinUtilInstallerProcess.ps1 index eae26476..c1103697 100644 --- a/functions/private/Get-WinUtilInstallerProcess.ps1 +++ b/functions/private/Get-WinUtilInstallerProcess.ps1 @@ -14,11 +14,11 @@ function Get-WinUtilInstallerProcess { param($Process) - if ($Null -eq $Process){ + if ($Null -eq $Process) { return $false } - if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue){ + if (Get-Process -Id $Process.Id -ErrorAction SilentlyContinue) { return $true } return $false -} \ No newline at end of file +} diff --git a/functions/private/Get-WinUtilToggleStatus.ps1 b/functions/private/Get-WinUtilToggleStatus.ps1 index 56d8d14d..019978a4 100644 --- a/functions/private/Get-WinUtilToggleStatus.ps1 +++ b/functions/private/Get-WinUtilToggleStatus.ps1 @@ -13,125 +13,112 @@ Function Get-WinUtilToggleStatus { #> Param($ToggleSwitch) - if($ToggleSwitch -eq "WPFToggleDarkMode"){ + if($ToggleSwitch -eq "WPFToggleDarkMode") { $app = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').AppsUseLightTheme $system = (Get-ItemProperty -path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize').SystemUsesLightTheme - if($app -eq 0 -and $system -eq 0){ + if($app -eq 0 -and $system -eq 0) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleBingSearch"){ + if($ToggleSwitch -eq "WPFToggleBingSearch") { $bingsearch = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Search').BingSearchEnabled - if($bingsearch -eq 0){ + if($bingsearch -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleNumLock"){ + if($ToggleSwitch -eq "WPFToggleNumLock") { $numlockvalue = (Get-ItemProperty -path 'HKCU:\Control Panel\Keyboard').InitialKeyboardIndicators - if($numlockvalue -eq 2){ + if($numlockvalue -eq 2) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleVerboseLogon"){ + if($ToggleSwitch -eq "WPFToggleVerboseLogon") { $VerboseStatusvalue = (Get-ItemProperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System').VerboseStatus - if($VerboseStatusvalue -eq 1){ + if($VerboseStatusvalue -eq 1) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleShowExt"){ + if($ToggleSwitch -eq "WPFToggleShowExt") { $hideextvalue = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').HideFileExt - if($hideextvalue -eq 0){ + if($hideextvalue -eq 0) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleSnapWindow"){ + if($ToggleSwitch -eq "WPFToggleSnapWindow") { $hidesnap = (Get-ItemProperty -path 'HKCU:\Control Panel\Desktop').WindowArrangementActive - if($hidesnap -eq 0){ + if($hidesnap -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleSnapFlyout"){ + if($ToggleSwitch -eq "WPFToggleSnapFlyout") { $hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').EnableSnapAssistFlyout - if($hidesnap -eq 0){ + if($hidesnap -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleSnapSuggestion"){ + if($ToggleSwitch -eq "WPFToggleSnapSuggestion") { $hidesnap = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').SnapAssist - if($hidesnap -eq 0){ + if($hidesnap -eq 0) { return $false - } - else{ + } else { return $true } } - if($ToggleSwitch -eq "WPFToggleMouseAcceleration"){ + if($ToggleSwitch -eq "WPFToggleMouseAcceleration") { $MouseSpeed = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseSpeed $MouseThreshold1 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold1 $MouseThreshold2 = (Get-ItemProperty -path 'HKCU:\Control Panel\Mouse').MouseThreshold2 - if($MouseSpeed -eq 1 -and $MouseThreshold1 -eq 6 -and $MouseThreshold2 -eq 10){ + if($MouseSpeed -eq 1 -and $MouseThreshold1 -eq 6 -and $MouseThreshold2 -eq 10) { return $true - } - else{ + } else { return $false } } - if($ToggleSwitch -eq "WPFToggleTaskbarSearch"){ + if($ToggleSwitch -eq "WPFToggleTaskbarSearch") { $SearchButton = (Get-ItemProperty -path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search").SearchboxTaskbarMode - if($SearchButton -eq 0){ + if($SearchButton -eq 0) { return $false - } - else{ + } else { return $true } } if ($ToggleSwitch -eq "WPFToggleStickyKeys") { $StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags - if($StickyKeys -eq 58){ + if($StickyKeys -eq 58) { return $false - } - else{ + } else { return $true } } if ($ToggleSwitch -eq "WPFToggleTaskView") { $TaskView = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').ShowTaskViewButton - if($TaskView -eq 0){ + if($TaskView -eq 0) { return $false - } - else{ + } else { return $true } } if ($ToggleSwitch -eq "WPFToggleHiddenFiles") { $HiddenFiles = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').Hidden - if($HiddenFiles -eq 0){ + if($HiddenFiles -eq 0) { return $false - } - else{ + } else { return $true } } @@ -140,8 +127,7 @@ Function Get-WinUtilToggleStatus { $TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa if($TaskbarWidgets -eq 0) { return $false - } - else{ + } else { return $true } } @@ -149,8 +135,7 @@ Function Get-WinUtilToggleStatus { $TaskbarAlignment = (Get-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskbarAl if($TaskbarAlignment -eq 0) { return $false - } - else{ + } else { return $true } } @@ -158,8 +143,7 @@ Function Get-WinUtilToggleStatus { $DetailedBSoD = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl').DisplayParameters if($DetailedBSoD -eq 0) { return $false - } - else{ + } else { return $true } } diff --git a/functions/private/Get-WinUtilVariables.ps1 b/functions/private/Get-WinUtilVariables.ps1 index 56f36eb9..17d25393 100644 --- a/functions/private/Get-WinUtilVariables.ps1 +++ b/functions/private/Get-WinUtilVariables.ps1 @@ -14,13 +14,12 @@ function Get-WinUtilVariables { $keys = ($sync.keys).where{ $_ -like "WPF*" } if ($Type) { $output = $keys | ForEach-Object { - Try { + try { $objType = $sync["$psitem"].GetType().Name if ($Type -contains $objType) { Write-Output $psitem } - } - Catch { + } catch { <#I am here so errors don't get outputted for a couple variables that don't have the .GetType() attribute#> } } diff --git a/functions/private/Get-WinUtilWingetLatest.ps1 b/functions/private/Get-WinUtilWingetLatest.ps1 index 7a860e64..6555386e 100644 --- a/functions/private/Get-WinUtilWingetLatest.ps1 +++ b/functions/private/Get-WinUtilWingetLatest.ps1 @@ -8,7 +8,7 @@ function Get-WinUtilWingetLatest { # Invoke-WebRequest is notoriously slow when the byte progress is displayed. The following lines disable the progress bar and reset them at the end of the function $PreviousProgressPreference = $ProgressPreference $ProgressPreference = "silentlyContinue" - Try{ + try { # Grabs the latest release of Winget from the Github API for the install process. $response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop $latestVersion = $response.tag_name #Stores version number of latest release. @@ -19,8 +19,7 @@ function Get-WinUtilWingetLatest { Invoke-WebRequest -Uri $licenseWingetUrl -OutFile $ENV:TEMP\License1.xml # The only pain is that the msixbundle for winget-cli is 246MB. In some situations this can take a bit, with slower connections. Invoke-WebRequest -Uri $assetUrl -OutFile $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle - } - Catch{ + } catch { throw [WingetFailedInstall]::new('Failed to get latest Winget release and license') } $ProgressPreference = $PreviousProgressPreference diff --git a/functions/private/Get-WinUtilWingetPrerequisites.ps1 b/functions/private/Get-WinUtilWingetPrerequisites.ps1 index 4949d191..6c886702 100644 --- a/functions/private/Get-WinUtilWingetPrerequisites.ps1 +++ b/functions/private/Get-WinUtilWingetPrerequisites.ps1 @@ -17,13 +17,12 @@ function Get-WinUtilWingetPrerequisites { $fileUIXaml = "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v${versionUIXamlPatch}/Microsoft.UI.Xaml.${versionUIXamlMinor}.x64.appx" # Write-Host "$fileUIXaml" - Try{ + try { Write-Host "Downloading Microsoft.VCLibs Dependency..." Invoke-WebRequest -Uri $fileVCLibs -OutFile $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx Write-Host "Downloading Microsoft.UI.Xaml Dependency...`n" Invoke-WebRequest -Uri $fileUIXaml -OutFile $ENV:TEMP\Microsoft.UI.Xaml.x64.appx - } - Catch{ + } catch { throw [WingetFailedInstall]::new('Failed to install prerequsites') } } diff --git a/functions/private/Install-WinUtilChoco.ps1 b/functions/private/Install-WinUtilChoco.ps1 index 24716bb1..37655b9c 100644 --- a/functions/private/Install-WinUtilChoco.ps1 +++ b/functions/private/Install-WinUtilChoco.ps1 @@ -18,8 +18,7 @@ function Install-WinUtilChoco { Set-ExecutionPolicy Bypass -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) -ErrorAction Stop powershell choco feature enable -n allowGlobalConfirmation - } - Catch { + } catch { Write-Host "===========================================" -Foregroundcolor Red Write-Host "-- Chocolatey failed to install ---" -Foregroundcolor Red Write-Host "===========================================" -Foregroundcolor Red diff --git a/functions/private/Install-WinUtilProgramChoco.ps1 b/functions/private/Install-WinUtilProgramChoco.ps1 index 029398f5..b66c88b9 100644 --- a/functions/private/Install-WinUtilProgramChoco.ps1 +++ b/functions/private/Install-WinUtilProgramChoco.ps1 @@ -33,26 +33,26 @@ function Install-WinUtilProgramChoco { Write-Host "===========================================" Write-Host "-- Configuring Chocolatey pacakages ---" Write-Host "===========================================" - Foreach ($Program in $ProgramsToInstall){ + Foreach ($Program in $ProgramsToInstall) { Write-Progress -Activity "$manage Applications" -Status "$manage $($Program.choco) $($x + 1) of $count" -PercentComplete $($x/$count*100) - if($manage -eq "Installing"){ + if($manage -eq "Installing") { write-host "Starting install of $($Program.choco) with Chocolatey." - try{ + try { $tryUpgrade = $false - $installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt" + $installOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.install-command.output.txt" New-Item -ItemType File -Path $installOutputFilePath - $chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode + $chocoInstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "install $($Program.choco) -y" -Wait -PassThru -RedirectStandardOutput $installOutputFilePath).ExitCode if(($chocoInstallStatus -eq 0) -AND (Test-Path -Path $installOutputFilePath)) { $keywordsFound = Get-Content -Path $installOutputFilePath | Where-Object {$_ -match "reinstall" -OR $_ -match "already installed"} - if ($keywordsFound) { - $tryUpgrade = $true - } + if ($keywordsFound) { + $tryUpgrade = $true + } } - # TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command. - if ($tryUpgrade) { - throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed." - } - if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)){ + # TODO: Implement the Upgrade part using 'choco upgrade' command, this will make choco consistent with WinGet, as WinGet tries to Upgrade when you use the install command. + if ($tryUpgrade) { + throw "Automatic Upgrade for Choco isn't implemented yet, a feature to make it consistent with WinGet, the install command using choco simply failed because $($Program.choco) is already installed." + } + if(($chocoInstallStatus -eq 0) -AND ($tryUpgrade -eq $false)) { Write-Host "$($Program.choco) installed successfully using Chocolatey." $X++ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) }) @@ -69,13 +69,13 @@ function Install-WinUtilProgramChoco { } } - if($manage -eq "Uninstalling"){ + if($manage -eq "Uninstalling") { write-host "Starting uninstall of $($Program.choco) with Chocolatey." - try{ - $uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt" + try { + $uninstallOutputFilePath = "$env:TEMP\Install-WinUtilProgramChoco.uninstall-command.output.txt" New-Item -ItemType File -Path $uninstallOutputFilePath - $chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode - if($chocoUninstallStatus -eq 0){ + $chocoUninstallStatus = $(Start-Process -FilePath "choco" -ArgumentList "uninstall $($Program.choco) -y" -Wait -PassThru).ExitCode + if($chocoUninstallStatus -eq 0) { Write-Host "$($Program.choco) uninstalled successfully using Chocolatey." $x++ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value ($x/$count) }) @@ -90,13 +90,13 @@ function Install-WinUtilProgramChoco { $x++ $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Error" -value ($x/$count) }) } - } + } } Write-Progress -Activity "$manage Applications" -Status "Finished" -Completed # Cleanup leftovers files - if(Test-Path -Path $installOutputFilePath){ Remove-Item -Path $installOutputFilePath } - if(Test-Path -Path $uninstallOutputFilePath){ Remove-Item -Path $uninstallOutputFilePath } + if(Test-Path -Path $installOutputFilePath) { Remove-Item -Path $installOutputFilePath } + if(Test-Path -Path $uninstallOutputFilePath) { Remove-Item -Path $uninstallOutputFilePath } return; } diff --git a/functions/private/Install-WinUtilWinget.ps1 b/functions/private/Install-WinUtilWinget.ps1 index 881a138f..dd561118 100644 --- a/functions/private/Install-WinUtilWinget.ps1 +++ b/functions/private/Install-WinUtilWinget.ps1 @@ -9,7 +9,7 @@ function Install-WinUtilWinget { #> $isWingetInstalled = Test-WinUtilPackageManager -winget - Try { + try { if ($isWingetInstalled -eq "installed") { Write-Host "`nWinget is already installed.`r" -ForegroundColor Green return @@ -21,7 +21,7 @@ function Install-WinUtilWinget { # Gets the computer's information - if ($null -eq $sync.ComputerInfo){ + if ($null -eq $sync.ComputerInfo) { $ComputerInfo = Get-ComputerInfo -ErrorAction Stop } else { $ComputerInfo = $sync.ComputerInfo @@ -41,8 +41,8 @@ function Install-WinUtilWinget { Get-WinUtilWingetLatest Write-Host "Installing Winget w/ Prerequsites`r" Add-AppxProvisionedPackage -Online -PackagePath $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle -DependencyPackagePath $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx, $ENV:TEMP\Microsoft.UI.Xaml.x64.appx -LicensePath $ENV:TEMP\License1.xml - Write-Host "Manually adding Winget Sources, from Winget CDN." - Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time. + Write-Host "Manually adding Winget Sources, from Winget CDN." + Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time. Write-Host "Winget Installed" -ForegroundColor Green Write-Host "Enabling NuGet and Module..." Install-PackageProvider -Name NuGet -Force @@ -50,17 +50,17 @@ function Install-WinUtilWinget { # Winget only needs a refresh of the environment variables to be used. Write-Output "Refreshing Environment Variables...`n" $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") - } Catch { + } catch { Write-Host "Failure detected while installing via GitHub method. Continuing with Chocolatey method as fallback." -ForegroundColor Red # In case install fails via GitHub method. - Try { + try { # Install Choco if not already present Install-WinUtilChoco Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget-cli" Write-Host "Winget Installed" -ForegroundColor Green Write-Output "Refreshing Environment Variables...`n" $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") - } Catch { + } catch { throw [WingetFailedInstall]::new('Failed to install!') } } diff --git a/functions/private/Invoke-MicroWin-Helper.ps1 b/functions/private/Invoke-MicroWin-Helper.ps1 index ace66cf7..d0cd1c9e 100644 --- a/functions/private/Invoke-MicroWin-Helper.ps1 +++ b/functions/private/Invoke-MicroWin-Helper.ps1 @@ -1,19 +1,20 @@ function Test-CompatibleImage() { -<# + <# + .SYNOPSIS + Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version - .SYNOPSIS - Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version - - .PARAMETER Name - imgVersion - The version of the Windows image - desiredVersion - The version to compare the image version with - -#> + .PARAMETER Name + imgVersion - The version of the Windows image + desiredVersion - The version to compare the image version with + #> param ( - [Parameter(Mandatory = $true, Position=0)] [string] $imgVersion, - [Parameter(Mandatory = $true, Position=1)] [Version] $desiredVersion + [Parameter(Mandatory, position=0)] + [string]$imgVersion, + + [Parameter(Mandatory, position=1)] + [Version]$desiredVersion ) try { @@ -24,645 +25,600 @@ function Test-CompatibleImage() { } } -function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender = $false) { -<# +function Remove-Features([switch]$dumpFeatures = $false, [switch]$keepDefender = $false) { + <# + .SYNOPSIS + Removes certain features from ISO image - .SYNOPSIS - Removes certain features from ISO image + .PARAMETER Name + dumpFeatures - Dumps all features found in the ISO into a file called allfeaturesdump.txt. This file can be examined and used to decide what to remove. + keepDefender - Should Defender be removed from the ISO? - .PARAMETER Name - dumpFeatures - Dumps all features found in the ISO into a file called allfeaturesdump.txt. This file can be examined and used to decide what to remove. - keepDefender - Should Defender be removed from the ISO? + .EXAMPLE + Remove-Features -keepDefender:$false + #> + try { + $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName + if ($dumpFeatures) { + $featlist > allfeaturesdump.txt + } - .EXAMPLE - Remove-Features -keepDefender:$false + $featlist = $featlist | Where-Object { + $_ -NotLike "*Printing*" -AND + $_ -NotLike "*TelnetClient*" -AND + $_ -NotLike "*PowerShell*" -AND + $_ -NotLike "*NetFx*" -AND + $_ -NotLike "*Media*" -AND + $_ -NotLike "*NFS*" + } -#> - try - { - $featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName - if ($dumpFeatures) - { - $featlist > allfeaturesdump.txt - } + if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }} - $featlist = $featlist | Where-Object { - $_ -NotLike "*Printing*" -AND - $_ -NotLike "*TelnetClient*" -AND - $_ -NotLike "*PowerShell*" -AND - $_ -NotLike "*NetFx*" -AND - $_ -NotLike "*Media*" -AND - $_ -NotLike "*NFS*" - } - - if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }} - - foreach($feature in $featlist) - { - $status = "Removing feature $feature" - Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100) - Write-Debug "Removing feature $feature" - Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart - } - Write-Progress -Activity "Removing features" -Status "Ready" -Completed - Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in \Sources." - } - catch - { - Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed" - } + foreach($feature in $featlist) { + $status = "Removing feature $feature" + Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100) + Write-Debug "Removing feature $feature" + Disable-WindowsOptionalFeature -Path "$scratchDir" -FeatureName $feature -Remove -ErrorAction SilentlyContinue -NoRestart + } + Write-Progress -Activity "Removing features" -Status "Ready" -Completed + Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in \Sources." + } catch { + Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed" + } } -function Remove-Packages -{ - try - { - $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName +function Remove-Packages { + try { + $pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName - $pkglist = $pkglist | Where-Object { - $_ -NotLike "*ApplicationModel*" -AND - $_ -NotLike "*indows-Client-LanguagePack*" -AND - $_ -NotLike "*LanguageFeatures-Basic*" -AND - $_ -NotLike "*Package_for_ServicingStack*" -AND - $_ -NotLike "*.NET*" -AND - $_ -NotLike "*Store*" -AND - $_ -NotLike "*VCLibs*" -AND - $_ -NotLike "*AAD.BrokerPlugin", - $_ -NotLike "*LockApp*" -AND - $_ -NotLike "*Notepad*" -AND - $_ -NotLike "*immersivecontrolpanel*" -AND - $_ -NotLike "*ContentDeliveryManager*" -AND - $_ -NotLike "*PinningConfirMationDialog*" -AND - $_ -NotLike "*SecHealthUI*" -AND - $_ -NotLike "*SecureAssessmentBrowser*" -AND - $_ -NotLike "*PrintDialog*" -AND - $_ -NotLike "*AssignedAccessLockApp*" -AND - $_ -NotLike "*OOBENetworkConnectionFlow*" -AND - $_ -NotLike "*Apprep.ChxApp*" -AND - $_ -NotLike "*CBS*" -AND - $_ -NotLike "*OOBENetworkCaptivePortal*" -AND - $_ -NotLike "*PeopleExperienceHost*" -AND - $_ -NotLike "*ParentalControls*" -AND - $_ -NotLike "*Win32WebViewHost*" -AND - $_ -NotLike "*InputApp*" -AND - $_ -NotLike "*AccountsControl*" -AND - $_ -NotLike "*AsyncTextService*" -AND - $_ -NotLike "*CapturePicker*" -AND - $_ -NotLike "*CredDialogHost*" -AND - $_ -NotLike "*BioEnrollMent*" -AND - $_ -NotLike "*ShellExperienceHost*" -AND - $_ -NotLike "*DesktopAppInstaller*" -AND - $_ -NotLike "*WebMediaExtensions*" -AND - $_ -NotLike "*WMIC*" -AND - $_ -NotLike "*UI.XaML*" - } + $pkglist = $pkglist | Where-Object { + $_ -NotLike "*ApplicationModel*" -AND + $_ -NotLike "*indows-Client-LanguagePack*" -AND + $_ -NotLike "*LanguageFeatures-Basic*" -AND + $_ -NotLike "*Package_for_ServicingStack*" -AND + $_ -NotLike "*.NET*" -AND + $_ -NotLike "*Store*" -AND + $_ -NotLike "*VCLibs*" -AND + $_ -NotLike "*AAD.BrokerPlugin", + $_ -NotLike "*LockApp*" -AND + $_ -NotLike "*Notepad*" -AND + $_ -NotLike "*immersivecontrolpanel*" -AND + $_ -NotLike "*ContentDeliveryManager*" -AND + $_ -NotLike "*PinningConfirMationDialog*" -AND + $_ -NotLike "*SecHealthUI*" -AND + $_ -NotLike "*SecureAssessmentBrowser*" -AND + $_ -NotLike "*PrintDialog*" -AND + $_ -NotLike "*AssignedAccessLockApp*" -AND + $_ -NotLike "*OOBENetworkConnectionFlow*" -AND + $_ -NotLike "*Apprep.ChxApp*" -AND + $_ -NotLike "*CBS*" -AND + $_ -NotLike "*OOBENetworkCaptivePortal*" -AND + $_ -NotLike "*PeopleExperienceHost*" -AND + $_ -NotLike "*ParentalControls*" -AND + $_ -NotLike "*Win32WebViewHost*" -AND + $_ -NotLike "*InputApp*" -AND + $_ -NotLike "*AccountsControl*" -AND + $_ -NotLike "*AsyncTextService*" -AND + $_ -NotLike "*CapturePicker*" -AND + $_ -NotLike "*CredDialogHost*" -AND + $_ -NotLike "*BioEnrollMent*" -AND + $_ -NotLike "*ShellExperienceHost*" -AND + $_ -NotLike "*DesktopAppInstaller*" -AND + $_ -NotLike "*WebMediaExtensions*" -AND + $_ -NotLike "*WMIC*" -AND + $_ -NotLike "*UI.XaML*" + } - foreach ($pkg in $pkglist) - { - try { - $status = "Removing $pkg" - Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100) - Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue - } - catch { - # This can happen if the package that is being removed is a permanent one, like FodMetadata - Write-Host "Could not remove OS package $($pkg)" - continue - } - } - Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed - } - catch - { - Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed" - } + foreach ($pkg in $pkglist) { + try { + $status = "Removing $pkg" + Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100) + Remove-WindowsPackage -Path "$scratchDir" -PackageName $pkg -NoRestart -ErrorAction SilentlyContinue + } catch { + # This can happen if the package that is being removed is a permanent one, like FodMetadata + Write-Host "Could not remove OS package $($pkg)" + continue + } + } + Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed + } catch { + Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed" + } } -function Remove-ProvisionedPackages([switch] $keepSecurity = $false) -{ -<# - - .SYNOPSIS +function Remove-ProvisionedPackages([switch]$keepSecurity = $false) { + <# + .SYNOPSIS Removes AppX packages from a Windows image during MicroWin processing - .PARAMETER Name + .PARAMETER Name keepSecurity - Boolean that determines whether to keep "Microsoft.SecHealthUI" (Windows Security) in the Windows image - .EXAMPLE + .EXAMPLE Remove-ProvisionedPackages -keepSecurity:$false + #> + $appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object { + $_.PackageName -NotLike "*AppInstaller*" -AND + $_.PackageName -NotLike "*Store*" -and + $_.PackageName -NotLike "*dism*" -and + $_.PackageName -NotLike "*Foundation*" -and + $_.PackageName -NotLike "*FodMetadata*" -and + $_.PackageName -NotLike "*LanguageFeatures*" -and + $_.PackageName -NotLike "*Notepad*" -and + $_.PackageName -NotLike "*Printing*" -and + $_.PackageName -NotLike "*Wifi*" -and + $_.PackageName -NotLike "*Foundation*" + } -#> - $appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object { - $_.PackageName -NotLike "*AppInstaller*" -AND - $_.PackageName -NotLike "*Store*" -and - $_.PackageName -NotLike "*dism*" -and - $_.PackageName -NotLike "*Foundation*" -and - $_.PackageName -NotLike "*FodMetadata*" -and - $_.PackageName -NotLike "*LanguageFeatures*" -and - $_.PackageName -NotLike "*Notepad*" -and - $_.PackageName -NotLike "*Printing*" -and - $_.PackageName -NotLike "*Wifi*" -and - $_.PackageName -NotLike "*Foundation*" - } - - if ($?) - { - if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }} - $counter = 0 - foreach ($appx in $appxProvisionedPackages) - { - $status = "Removing Provisioned $($appx.PackageName)" - Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) - try { - Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue - } - catch { - Write-Host "Application $($appx.PackageName) could not be removed" - continue - } - } - Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed - } - else - { - Write-Host "Could not get Provisioned App information. Skipping process..." + if ($?) { + if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }} + $counter = 0 + foreach ($appx in $appxProvisionedPackages) { + $status = "Removing Provisioned $($appx.PackageName)" + Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) + try { + Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue + } catch { + Write-Host "Application $($appx.PackageName) could not be removed" + continue + } + } + Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed + } else { + Write-Host "Could not get Provisioned App information. Skipping process..." } } -function Copy-ToUSB([string] $fileToCopy) -{ - foreach ($volume in Get-Volume) { - if ($volume -and $volume.FileSystemLabel -ieq "ventoy") { - $destinationPath = "$($volume.DriveLetter):\" - #Copy-Item -Path $fileToCopy -Destination $destinationPath -Force - # Get the total size of the file - $totalSize = (Get-Item $fileToCopy).length +function Copy-ToUSB([string]$fileToCopy) { + foreach ($volume in Get-Volume) { + if ($volume -and $volume.FileSystemLabel -ieq "ventoy") { + $destinationPath = "$($volume.DriveLetter):\" + #Copy-Item -Path $fileToCopy -Destination $destinationPath -Force + # Get the total size of the file + $totalSize = (Get-Item $fileToCopy).length - Copy-Item -Path $fileToCopy -Destination $destinationPath -Verbose -Force -Recurse -Container -PassThru | - ForEach-Object { - # Calculate the percentage completed - $completed = ($_.BytesTransferred / $totalSize) * 100 + Copy-Item -Path $fileToCopy -Destination $destinationPath -Verbose -Force -Recurse -Container -PassThru | + ForEach-Object { + # Calculate the percentage completed + $completed = ($_.BytesTransferred / $totalSize) * 100 - # Display the progress bar - Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB)) - } + # Display the progress bar + Write-Progress -Activity "Copying File" -Status "Progress" -PercentComplete $completed -CurrentOperation ("{0:N2} MB / {1:N2} MB" -f ($_.BytesTransferred / 1MB), ($totalSize / 1MB)) + } - Write-Host "File copied to Ventoy drive $($volume.DriveLetter)" - return - } - } - Write-Host "Ventoy USB Key is not inserted" + Write-Host "File copied to Ventoy drive $($volume.DriveLetter)" + return + } + } + Write-Host "Ventoy USB Key is not inserted" } -function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [switch] $Directory = $false) -{ - if(([string]::IsNullOrEmpty($pathToDelete))) { return } - if (-not (Test-Path -Path "$($pathToDelete)")) { return } +function Remove-FileOrDirectory([string]$pathToDelete, [string]$mask = "", [switch]$Directory = $false) { + if(([string]::IsNullOrEmpty($pathToDelete))) { return } + if (-not (Test-Path -Path "$($pathToDelete)")) { return } - $yesNo = Get-LocalizedYesNo - Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer." + $yesNo = Get-LocalizedYesNo + Write-Host "[INFO] In Your local takeown expects '$($yesNo[0])' as a Yes answer." - # Specify the path to the directory - # $directoryPath = "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" - # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null - # icacls "$($directoryPath)" /q /c /t /reset > $null - # icacls $directoryPath /setowner "*S-1-5-32-544" - # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - # Remove-Item -Path $directoryPath -Recurse -Force + # Specify the path to the directory + # $directoryPath = "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" + # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null + # icacls "$($directoryPath)" /q /c /t /reset > $null + # icacls $directoryPath /setowner "*S-1-5-32-544" + # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + # Remove-Item -Path $directoryPath -Recurse -Force - # # Grant full control to BUILTIN\Administrators using icacls - # $directoryPath = "$($scratchDir)\Windows\System32\WebThreatDefSvc" - # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null - # icacls "$($directoryPath)" /q /c /t /reset > $null - # icacls $directoryPath /setowner "*S-1-5-32-544" - # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - # Remove-Item -Path $directoryPath -Recurse -Force + # # Grant full control to BUILTIN\Administrators using icacls + # $directoryPath = "$($scratchDir)\Windows\System32\WebThreatDefSvc" + # takeown /a /r /d $yesNo[0] /f "$($directoryPath)" > $null + # icacls "$($directoryPath)" /q /c /t /reset > $null + # icacls $directoryPath /setowner "*S-1-5-32-544" + # icacls $directoryPath /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + # Remove-Item -Path $directoryPath -Recurse -Force - $itemsToDelete = [System.Collections.ArrayList]::new() + $itemsToDelete = [System.Collections.ArrayList]::new() - if ($mask -eq "") - { - Write-Debug "Adding $($pathToDelete) to array." - [void]$itemsToDelete.Add($pathToDelete) - } - else - { - Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)" - if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory } - else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse } - } + if ($mask -eq "") { + Write-Debug "Adding $($pathToDelete) to array." + [void]$itemsToDelete.Add($pathToDelete) + } else { + Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)" + if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory } else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse } + } - foreach($itemToDelete in $itemsToDelete) - { - $status = "Deleting $($itemToDelete)" - Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100) + foreach($itemToDelete in $itemsToDelete) { + $status = "Deleting $($itemToDelete)" + Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100) - if (Test-Path -Path "$($itemToDelete)" -PathType Container) - { - $status = "Deleting directory: $($itemToDelete)" + if (Test-Path -Path "$($itemToDelete)" -PathType Container) { + $status = "Deleting directory: $($itemToDelete)" - takeown /r /d $yesNo[0] /a /f "$($itemToDelete)" - icacls "$($itemToDelete)" /q /c /t /reset - icacls $itemToDelete /setowner "*S-1-5-32-544" - icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - Remove-Item -Force -Recurse "$($itemToDelete)" - } - elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf) - { - $status = "Deleting file: $($itemToDelete)" + takeown /r /d $yesNo[0] /a /f "$($itemToDelete)" + icacls "$($itemToDelete)" /q /c /t /reset + icacls $itemToDelete /setowner "*S-1-5-32-544" + icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + Remove-Item -Force -Recurse "$($itemToDelete)" + } + elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf) { + $status = "Deleting file: $($itemToDelete)" - takeown /a /f "$($itemToDelete)" - icacls "$($itemToDelete)" /q /c /t /reset - icacls "$($itemToDelete)" /setowner "*S-1-5-32-544" - icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q - Remove-Item -Force "$($itemToDelete)" - } - } - Write-Progress -Activity "Removing Items" -Status "Ready" -Completed + takeown /a /f "$($itemToDelete)" + icacls "$($itemToDelete)" /q /c /t /reset + icacls "$($itemToDelete)" /setowner "*S-1-5-32-544" + icacls "$($itemToDelete)" /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q + Remove-Item -Force "$($itemToDelete)" + } + } + Write-Progress -Activity "Removing Items" -Status "Ready" -Completed } function New-Unattend { - # later if we wont to remove even more bloat EU requires MS to remove everything from English(world) - # Below is an example how to do it we probably should create a drop down with common locals - # - # - # - # - # en-US - # - # en-US - # en-US - # en-US - # en-US - # - # + # later if we wont to remove even more bloat EU requires MS to remove everything from English(world) + # Below is an example how to do it we probably should create a drop down with common locals + # + # + # + # + # en-US + # + # en-US + # en-US + # en-US + # en-US + # + # - # - # - # - # en-US - # en-US - # en-US - # en-US - # - # - # using here string to embedd unattend - # - # 1 - # net user administrator /active:yes - # + # + # + # + # en-US + # en-US + # en-US + # en-US + # + # + # using here string to embedd unattend + # + # 1 + # net user administrator /active:yes + # - # this section doesn't work in win10/???? -# -# -# 0 -# -# -# false -# + # this section doesn't work in win10/???? +# +# +# 0 +# +# +# false +# # - $unattend = @' - - - <#REPLACEME#> - - - - - 1 - CMD /C echo LAU GG>C:\Windows\LogAuditUser.txt - StartMenu - - - - - - - - true - false - false - true - true - true - 3 - - - - 1 - cmd.exe /c echo 23>c:\windows\csup.txt - - - 2 - CMD /C echo GG>C:\Windows\LogOobeSystem.txt - - - 3 - powershell -ExecutionPolicy Bypass -File c:\windows\FirstStartup.ps1 - - - - - + $unattend = @' + + + <#REPLACEME#> + + + + + 1 + CMD /C echo LAU GG>C:\Windows\LogAuditUser.txt + StartMenu + + + + + + + + true + false + false + true + true + true + 3 + + + + 1 + cmd.exe /c echo 23>c:\windows\csup.txt + + + 2 + CMD /C echo GG>C:\Windows\LogOobeSystem.txt + + + 3 + powershell -ExecutionPolicy Bypass -File c:\windows\FirstStartup.ps1 + + + + + '@ $specPass = @' - - 0 - - - false - - + + 0 + + + false + + '@ - if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false) - { - # Replace the placeholder text with an empty string to make it valid for Windows 10 Setup - $unattend = $unattend.Replace("<#REPLACEME#>", "").Trim() + if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false) { + # Replace the placeholder text with an empty string to make it valid for Windows 10 Setup + $unattend = $unattend.Replace("<#REPLACEME#>", "").Trim() + } else { + # Replace the placeholder text with the Specialize pass + $unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim() } - else - { - # Replace the placeholder text with the Specialize pass - $unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim() - } - $unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8 + $unattend | Out-File -FilePath "$env:temp\unattend.xml" -Force -Encoding utf8 } function New-CheckInstall { - # using here string to embedd firstrun - $checkInstall = @' - @echo off - if exist "C:\windows\cpu.txt" ( - echo C:\windows\cpu.txt exists - ) else ( - echo C:\windows\cpu.txt does not exist - ) - if exist "C:\windows\SerialNumber.txt" ( - echo C:\windows\SerialNumber.txt exists - ) else ( - echo C:\windows\SerialNumber.txt does not exist - ) - if exist "C:\unattend.xml" ( - echo C:\unattend.xml exists - ) else ( - echo C:\unattend.xml does not exist - ) - if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" ( - echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists - ) else ( - echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist - ) - if exist "C:\Windows\Panther\unattend.xml" ( - echo C:\Windows\Panther\unattend.xml exists - ) else ( - echo C:\Windows\Panther\unattend.xml does not exist - ) - if exist "C:\Windows\System32\Sysprep\unattend.xml" ( - echo C:\Windows\System32\Sysprep\unattend.xml exists - ) else ( - echo C:\Windows\System32\Sysprep\unattend.xml does not exist - ) - if exist "C:\Windows\FirstStartup.ps1" ( - echo C:\Windows\FirstStartup.ps1 exists - ) else ( - echo C:\Windows\FirstStartup.ps1 does not exist - ) - if exist "C:\Windows\winutil.ps1" ( - echo C:\Windows\winutil.ps1 exists - ) else ( - echo C:\Windows\winutil.ps1 does not exist - ) - if exist "C:\Windows\LogSpecialize.txt" ( - echo C:\Windows\LogSpecialize.txt exists - ) else ( - echo C:\Windows\LogSpecialize.txt does not exist - ) - if exist "C:\Windows\LogAuditUser.txt" ( - echo C:\Windows\LogAuditUser.txt exists - ) else ( - echo C:\Windows\LogAuditUser.txt does not exist - ) - if exist "C:\Windows\LogOobeSystem.txt" ( - echo C:\Windows\LogOobeSystem.txt exists - ) else ( - echo C:\Windows\LogOobeSystem.txt does not exist - ) - if exist "c:\windows\csup.txt" ( - echo c:\windows\csup.txt exists - ) else ( - echo c:\windows\csup.txt does not exist - ) - if exist "c:\windows\LogFirstRun.txt" ( - echo c:\windows\LogFirstRun.txt exists - ) else ( - echo c:\windows\LogFirstRun.txt does not exist - ) + # using here string to embedd firstrun + $checkInstall = @' + @echo off + if exist "C:\windows\cpu.txt" ( + echo C:\windows\cpu.txt exists + ) else ( + echo C:\windows\cpu.txt does not exist + ) + if exist "C:\windows\SerialNumber.txt" ( + echo C:\windows\SerialNumber.txt exists + ) else ( + echo C:\windows\SerialNumber.txt does not exist + ) + if exist "C:\unattend.xml" ( + echo C:\unattend.xml exists + ) else ( + echo C:\unattend.xml does not exist + ) + if exist "C:\Windows\Setup\Scripts\SetupComplete.cmd" ( + echo C:\Windows\Setup\Scripts\SetupComplete.cmd exists + ) else ( + echo C:\Windows\Setup\Scripts\SetupComplete.cmd does not exist + ) + if exist "C:\Windows\Panther\unattend.xml" ( + echo C:\Windows\Panther\unattend.xml exists + ) else ( + echo C:\Windows\Panther\unattend.xml does not exist + ) + if exist "C:\Windows\System32\Sysprep\unattend.xml" ( + echo C:\Windows\System32\Sysprep\unattend.xml exists + ) else ( + echo C:\Windows\System32\Sysprep\unattend.xml does not exist + ) + if exist "C:\Windows\FirstStartup.ps1" ( + echo C:\Windows\FirstStartup.ps1 exists + ) else ( + echo C:\Windows\FirstStartup.ps1 does not exist + ) + if exist "C:\Windows\winutil.ps1" ( + echo C:\Windows\winutil.ps1 exists + ) else ( + echo C:\Windows\winutil.ps1 does not exist + ) + if exist "C:\Windows\LogSpecialize.txt" ( + echo C:\Windows\LogSpecialize.txt exists + ) else ( + echo C:\Windows\LogSpecialize.txt does not exist + ) + if exist "C:\Windows\LogAuditUser.txt" ( + echo C:\Windows\LogAuditUser.txt exists + ) else ( + echo C:\Windows\LogAuditUser.txt does not exist + ) + if exist "C:\Windows\LogOobeSystem.txt" ( + echo C:\Windows\LogOobeSystem.txt exists + ) else ( + echo C:\Windows\LogOobeSystem.txt does not exist + ) + if exist "c:\windows\csup.txt" ( + echo c:\windows\csup.txt exists + ) else ( + echo c:\windows\csup.txt does not exist + ) + if exist "c:\windows\LogFirstRun.txt" ( + echo c:\windows\LogFirstRun.txt exists + ) else ( + echo c:\windows\LogFirstRun.txt does not exist + ) '@ - $checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii + $checkInstall | Out-File -FilePath "$env:temp\checkinstall.cmd" -Force -Encoding Ascii } function New-FirstRun { - # using here string to embedd firstrun - $firstRun = @' - # Set the global error action preference to continue - $ErrorActionPreference = "Continue" - function Remove-RegistryValue - { - param ( - [Parameter(Mandatory = $true)] - [string]$RegistryPath, + # using here string to embedd firstrun + $firstRun = @' + # Set the global error action preference to continue + $ErrorActionPreference = "Continue" + function Remove-RegistryValue { + param ( + [Parameter(Mandatory = $true)] + [string]$RegistryPath, - [Parameter(Mandatory = $true)] - [string]$ValueName - ) + [Parameter(Mandatory = $true)] + [string]$ValueName + ) - # Check if the registry path exists - if (Test-Path -Path $RegistryPath) - { - $registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue + # Check if the registry path exists + if (Test-Path -Path $RegistryPath) { + $registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue - # Check if the registry value exists - if ($registryValue) - { - # Remove the registry value - Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force - Write-Host "Registry value '$ValueName' removed from '$RegistryPath'." - } - else - { - Write-Host "Registry value '$ValueName' not found in '$RegistryPath'." - } - } - else - { - Write-Host "Registry path '$RegistryPath' not found." - } - } + # Check if the registry value exists + if ($registryValue) { + # Remove the registry value + Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force + Write-Host "Registry value '$ValueName' removed from '$RegistryPath'." + } else { + Write-Host "Registry value '$ValueName' not found in '$RegistryPath'." + } + } else { + Write-Host "Registry path '$RegistryPath' not found." + } + } - function Stop-UnnecessaryServices - { - $servicesToExclude = @( - "AudioSrv", - "AudioEndpointBuilder", - "BFE", - "BITS", - "BrokerInfrastructure", - "CDPSvc", - "CDPUserSvc_dc2a4", - "CoreMessagingRegistrar", - "CryptSvc", - "DPS", - "DcomLaunch", - "Dhcp", - "DispBrokerDesktopSvc", - "Dnscache", - "DoSvc", - "DusmSvc", - "EventLog", - "EventSystem", - "FontCache", - "LSM", - "LanmanServer", - "LanmanWorkstation", - "MapsBroker", - "MpsSvc", - "OneSyncSvc_dc2a4", - "Power", - "ProfSvc", - "RpcEptMapper", - "RpcSs", - "SCardSvr", - "SENS", - "SamSs", - "Schedule", - "SgrmBroker", - "ShellHWDetection", - "Spooler", - "SysMain", - "SystemEventsBroker", - "TextInputManagementService", - "Themes", - "TrkWks", - "UserManager", - "VGAuthService", - "VMTools", - "WSearch", - "Wcmsvc", - "WinDefend", - "Winmgmt", - "WlanSvc", - "WpnService", - "WpnUserService_dc2a4", - "cbdhsvc_dc2a4", - "edgeupdate", - "gpsvc", - "iphlpsvc", - "mpssvc", - "nsi", - "sppsvc", - "tiledatamodelsvc", - "vm3dservice", - "webthreatdefusersvc_dc2a4", - "wscsvc" + function Stop-UnnecessaryServices { + $servicesToExclude = @( + "AudioSrv", + "AudioEndpointBuilder", + "BFE", + "BITS", + "BrokerInfrastructure", + "CDPSvc", + "CDPUserSvc_dc2a4", + "CoreMessagingRegistrar", + "CryptSvc", + "DPS", + "DcomLaunch", + "Dhcp", + "DispBrokerDesktopSvc", + "Dnscache", + "DoSvc", + "DusmSvc", + "EventLog", + "EventSystem", + "FontCache", + "LSM", + "LanmanServer", + "LanmanWorkstation", + "MapsBroker", + "MpsSvc", + "OneSyncSvc_dc2a4", + "Power", + "ProfSvc", + "RpcEptMapper", + "RpcSs", + "SCardSvr", + "SENS", + "SamSs", + "Schedule", + "SgrmBroker", + "ShellHWDetection", + "Spooler", + "SysMain", + "SystemEventsBroker", + "TextInputManagementService", + "Themes", + "TrkWks", + "UserManager", + "VGAuthService", + "VMTools", + "WSearch", + "Wcmsvc", + "WinDefend", + "Winmgmt", + "WlanSvc", + "WpnService", + "WpnUserService_dc2a4", + "cbdhsvc_dc2a4", + "edgeupdate", + "gpsvc", + "iphlpsvc", + "mpssvc", + "nsi", + "sppsvc", + "tiledatamodelsvc", + "vm3dservice", + "webthreatdefusersvc_dc2a4", + "wscsvc" ) - $runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name } - foreach($service in $runningServices) - { - Stop-Service -Name $service.Name -PassThru - Set-Service $service.Name -StartupType Manual - "Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber - } - } + $runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name } + foreach($service in $runningServices) { + Stop-Service -Name $service.Name -PassThru + Set-Service $service.Name -StartupType Manual + "Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber + } + } - "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber + "FirstStartup has worked" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber - $Theme = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" - Set-ItemProperty -Path $Theme -Name AppsUseLightTheme -Value 1 - Set-ItemProperty -Path $Theme -Name SystemUsesLightTheme -Value 1 + $Theme = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" + Set-ItemProperty -Path $Theme -Name AppsUseLightTheme -Value 1 + Set-ItemProperty -Path $Theme -Name SystemUsesLightTheme -Value 1 - # figure this out later how to set updates to security only - #Import-Module -Name PSWindowsUpdate; - #Stop-Service -Name wuauserv - #Set-WUSettings -MicrosoftUpdateEnabled -AutoUpdateOption 'Never' - #Start-Service -Name wuauserv + # figure this out later how to set updates to security only + #Import-Module -Name PSWindowsUpdate; + #Stop-Service -Name wuauserv + #Set-WUSettings -MicrosoftUpdateEnabled -AutoUpdateOption 'Never' + #Start-Service -Name wuauserv - Stop-UnnecessaryServices + Stop-UnnecessaryServices - $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar" - # Delete all files on the Taskbar - Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force - Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges" - Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges" - Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites" + $taskbarPath = "$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar" + # Delete all files on the Taskbar + Get-ChildItem -Path $taskbarPath -File | Remove-Item -Force + Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesRemovedChanges" + Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "FavoritesChanges" + Remove-RegistryValue -RegistryPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband" -ValueName "Favorites" - # Stop-Process -Name explorer -Force + # Stop-Process -Name explorer -Force - $process = Get-Process -Name "explorer" - Stop-Process -InputObject $process - # Wait for the process to exit - Wait-Process -InputObject $process - Start-Sleep -Seconds 3 + $process = Get-Process -Name "explorer" + Stop-Process -InputObject $process + # Wait for the process to exit + Wait-Process -InputObject $process + Start-Sleep -Seconds 3 - # Delete Edge Icon from the desktop - $edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk" - # Check if Edge shortcuts exist on the desktop - if ($edgeShortcutFiles) - { - foreach ($shortcutFile in $edgeShortcutFiles) - { - # Remove each Edge shortcut - Remove-Item -Path $shortcutFile.FullName -Force - Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop." - } - } - Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk" - Remove-Item -Path "C:\Users\Default\Desktop\*.lnk" + # Delete Edge Icon from the desktop + $edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk" + # Check if Edge shortcuts exist on the desktop + if ($edgeShortcutFiles) { + foreach ($shortcutFile in $edgeShortcutFiles) { + # Remove each Edge shortcut + Remove-Item -Path $shortcutFile.FullName -Force + Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop." + } + } + Remove-Item -Path "$env:USERPROFILE\Desktop\*.lnk" + Remove-Item -Path "C:\Users\Default\Desktop\*.lnk" - # ************************************************ - # Create WinUtil shortcut on the desktop - # - $desktopPath = "$($env:USERPROFILE)\Desktop" - # Specify the target PowerShell command - $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" - # Specify the path for the shortcut - $shortcutPath = Join-Path $desktopPath 'winutil.lnk' - # Create a shell object - $shell = New-Object -ComObject WScript.Shell + # ************************************************ + # Create WinUtil shortcut on the desktop + # + $desktopPath = "$($env:USERPROFILE)\Desktop" + # Specify the target PowerShell command + $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" + # Specify the path for the shortcut + $shortcutPath = Join-Path $desktopPath 'winutil.lnk' + # Create a shell object + $shell = New-Object -ComObject WScript.Shell - # Create a shortcut object - $shortcut = $shell.CreateShortcut($shortcutPath) + # Create a shortcut object + $shortcut = $shell.CreateShortcut($shortcutPath) - if (Test-Path -Path "c:\Windows\cttlogo.png") - { - $shortcut.IconLocation = "c:\Windows\cttlogo.png" - } + if (Test-Path -Path "c:\Windows\cttlogo.png") { + $shortcut.IconLocation = "c:\Windows\cttlogo.png" + } - # Set properties of the shortcut - $shortcut.TargetPath = "powershell.exe" - $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" - # Save the shortcut - $shortcut.Save() + # Set properties of the shortcut + $shortcut.TargetPath = "powershell.exe" + $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" + # Save the shortcut + $shortcut.Save() - # Make the shortcut have 'Run as administrator' property on - $bytes = [System.IO.File]::ReadAllBytes($shortcutPath) - # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex - $bytes[0x15] = $bytes[0x15] -bor 0x20 - [System.IO.File]::WriteAllBytes($shortcutPath, $bytes) + # Make the shortcut have 'Run as administrator' property on + $bytes = [System.IO.File]::ReadAllBytes($shortcutPath) + # Set byte value at position 0x15 in hex, or 21 in decimal, from the value 0x00 to 0x20 in hex + $bytes[0x15] = $bytes[0x15] -bor 0x20 + [System.IO.File]::WriteAllBytes($shortcutPath, $bytes) - Write-Host "Shortcut created at: $shortcutPath" - # - # Done create WinUtil shortcut on the desktop - # ************************************************ + Write-Host "Shortcut created at: $shortcutPath" + # + # Done create WinUtil shortcut on the desktop + # ************************************************ - Start-Process explorer + Start-Process explorer '@ - $firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force + $firstRun | Out-File -FilePath "$env:temp\FirstStartup.ps1" -Force } diff --git a/functions/private/Invoke-WinUtilBingSearch.ps1 b/functions/private/Invoke-WinUtilBingSearch.ps1 index 21574b68..b7527bcb 100644 --- a/functions/private/Invoke-WinUtilBingSearch.ps1 +++ b/functions/private/Invoke-WinUtilBingSearch.ps1 @@ -9,26 +9,22 @@ function Invoke-WinUtilBingSearch { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Bing Search" $value = 1 - } - else { + } else { Write-Host "Disabling Bing Search" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search" Set-ItemProperty -Path $Path -Name BingSearchEnabled -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilCurrentSystem.ps1 b/functions/private/Invoke-WinUtilCurrentSystem.ps1 index a65ef60c..505942b5 100644 --- a/functions/private/Invoke-WinUtilCurrentSystem.ps1 +++ b/functions/private/Invoke-WinUtilCurrentSystem.ps1 @@ -14,7 +14,7 @@ Function Invoke-WinUtilCurrentSystem { $CheckBox ) - if ($checkbox -eq "winget"){ + if ($checkbox -eq "winget") { $originalEncoding = [Console]::OutputEncoding [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() @@ -31,9 +31,9 @@ Function Invoke-WinUtilCurrentSystem { } } - if($CheckBox -eq "tweaks"){ + if($CheckBox -eq "tweaks") { - if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} + if(!(Test-Path 'HKU:\')) {New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} $ScheduledTasks = Get-ScheduledTask $sync.configs.tweaks | Get-Member -MemberType NoteProperty | ForEach-Object { @@ -44,59 +44,57 @@ Function Invoke-WinUtilCurrentSystem { $scheduledtaskKeys = $sync.configs.tweaks.$Config.scheduledtask $serviceKeys = $sync.configs.tweaks.$Config.service - if($registryKeys -or $scheduledtaskKeys -or $serviceKeys){ + if($registryKeys -or $scheduledtaskKeys -or $serviceKeys) { $Values = @() - Foreach ($tweaks in $registryKeys){ - Foreach($tweak in $tweaks){ + Foreach ($tweaks in $registryKeys) { + Foreach($tweak in $tweaks) { - if(test-path $tweak.Path){ + if(test-path $tweak.Path) { $actualValue = Get-ItemProperty -Name $tweak.Name -Path $tweak.Path -ErrorAction SilentlyContinue | Select-Object -ExpandProperty $($tweak.Name) $expectedValue = $tweak.Value - if ($expectedValue -notlike $actualValue){ + if ($expectedValue -notlike $actualValue) { $values += $False } - } - else { + } else { $values += $False } } } - Foreach ($tweaks in $scheduledtaskKeys){ - Foreach($tweak in $tweaks){ + Foreach ($tweaks in $scheduledtaskKeys) { + Foreach($tweak in $tweaks) { $task = $ScheduledTasks | Where-Object {$($psitem.TaskPath + $psitem.TaskName) -like "\$($tweak.name)"} - if($task){ + if($task) { $actualValue = $task.State $expectedValue = $tweak.State - if ($expectedValue -ne $actualValue){ + if ($expectedValue -ne $actualValue) { $values += $False } } } } - Foreach ($tweaks in $serviceKeys){ - Foreach($tweak in $tweaks){ + Foreach ($tweaks in $serviceKeys) { + Foreach($tweak in $tweaks) { $Service = Get-Service -Name $tweak.Name - if($Service){ + if($Service) { $actualValue = $Service.StartType $expectedValue = $tweak.StartupType - if ($expectedValue -ne $actualValue){ + if ($expectedValue -ne $actualValue) { $values += $False } } } } - if($values -notcontains $false){ + if($values -notcontains $false) { Write-Output $Config } } } } } - diff --git a/functions/private/Invoke-WinUtilDarkMode.ps1 b/functions/private/Invoke-WinUtilDarkMode.ps1 index 590da6eb..8ce369d3 100644 --- a/functions/private/Invoke-WinUtilDarkMode.ps1 +++ b/functions/private/Invoke-WinUtilDarkMode.ps1 @@ -9,12 +9,11 @@ Function Invoke-WinUtilDarkMode { #> Param($DarkMoveEnabled) - Try{ - if ($DarkMoveEnabled -eq $false){ + try { + if ($DarkMoveEnabled -eq $false) { Write-Host "Enabling Dark Mode" $DarkMoveValue = 0 - } - else { + } else { Write-Host "Disabling Dark Mode" $DarkMoveValue = 1 } @@ -22,15 +21,12 @@ Function Invoke-WinUtilDarkMode { $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" Set-ItemProperty -Path $Path -Name AppsUseLightTheme -Value $DarkMoveValue Set-ItemProperty -Path $Path -Name SystemUsesLightTheme -Value $DarkMoveValue - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilDetailedBSoD.ps1 b/functions/private/Invoke-WinUtilDetailedBSoD.ps1 index ad871558..691313c9 100644 --- a/functions/private/Invoke-WinUtilDetailedBSoD.ps1 +++ b/functions/private/Invoke-WinUtilDetailedBSoD.ps1 @@ -8,27 +8,23 @@ Function Invoke-WinUtilDetailedBSoD { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Detailed BSoD" $value = 1 - } - else { + } else { Write-Host "Disabling Detailed BSoD" $value =0 } $Path = "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl" Set-ItemProperty -Path $Path -Name DisplayParameters -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilFeatureInstall.ps1 b/functions/private/Invoke-WinUtilFeatureInstall.ps1 index 4b3a0f65..72a22d9a 100644 --- a/functions/private/Invoke-WinUtilFeatureInstall.ps1 +++ b/functions/private/Invoke-WinUtilFeatureInstall.ps1 @@ -13,19 +13,16 @@ function Invoke-WinUtilFeatureInstall { $x = 0 $CheckBox | ForEach-Object { - if($sync.configs.feature.$psitem.feature){ - Foreach( $feature in $sync.configs.feature.$psitem.feature ){ - Try{ + 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*"){ + } 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{ + } else { Write-Warning "Unable to Install $feature due to unhandled exception" Write-Warning $psitem.Exception.StackTrace @@ -33,21 +30,18 @@ function Invoke-WinUtilFeatureInstall { } } } - if($sync.configs.feature.$psitem.InvokeScript){ - Foreach( $script in $sync.configs.feature.$psitem.InvokeScript ){ - Try{ + 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*"){ + } 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{ + } 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 diff --git a/functions/private/Invoke-WinUtilGPU.ps1 b/functions/private/Invoke-WinUtilGPU.ps1 index 13e4fb76..926f2794 100644 --- a/functions/private/Invoke-WinUtilGPU.ps1 +++ b/functions/private/Invoke-WinUtilGPU.ps1 @@ -11,11 +11,11 @@ function Invoke-WinUtilGPU { ) foreach ($gpu in $gpuInfo) { - foreach ($gpuPattern in $lowPowerGPUs){ + foreach ($gpuPattern in $lowPowerGPUs) { if ($gpu.Name -like $gpuPattern) { return $false } } } return $true -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilHiddenFiles.ps1 b/functions/private/Invoke-WinUtilHiddenFiles.ps1 index 81b3d6bb..5309d2c3 100644 --- a/functions/private/Invoke-WinUtilHiddenFiles.ps1 +++ b/functions/private/Invoke-WinUtilHiddenFiles.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilHiddenFiles { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Hidden Files" $value = 1 - } - else { + } else { Write-Host "Disabling Hidden Files" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name Hidden -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilMouseAcceleration.ps1 b/functions/private/Invoke-WinUtilMouseAcceleration.ps1 index 34375170..f29bdeee 100644 --- a/functions/private/Invoke-WinUtilMouseAcceleration.ps1 +++ b/functions/private/Invoke-WinUtilMouseAcceleration.ps1 @@ -9,14 +9,13 @@ Function Invoke-WinUtilMouseAcceleration { #> Param($MouseAccelerationEnabled) - Try{ - if ($MouseAccelerationEnabled -eq $false){ + try { + if ($MouseAccelerationEnabled -eq $false) { Write-Host "Enabling Mouse Acceleration" $MouseSpeed = 1 $MouseThreshold1 = 6 $MouseThreshold2 = 10 - } - else { + } else { Write-Host "Disabling Mouse Acceleration" $MouseSpeed = 0 $MouseThreshold1 = 0 @@ -28,15 +27,12 @@ Function Invoke-WinUtilMouseAcceleration { Set-ItemProperty -Path $Path -Name MouseSpeed -Value $MouseSpeed Set-ItemProperty -Path $Path -Name MouseThreshold1 -Value $MouseThreshold1 Set-ItemProperty -Path $Path -Name MouseThreshold2 -Value $MouseThreshold2 - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilNumLock.ps1 b/functions/private/Invoke-WinUtilNumLock.ps1 index d625b033..fd7eb969 100644 --- a/functions/private/Invoke-WinUtilNumLock.ps1 +++ b/functions/private/Invoke-WinUtilNumLock.ps1 @@ -6,12 +6,11 @@ function Invoke-WinUtilNumLock { Indicates whether to enable or disable Numlock on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Numlock on startup" $value = 2 - } - else { + } else { Write-Host "Disabling Numlock on startup" $value = 0 } @@ -23,12 +22,10 @@ function Invoke-WinUtilNumLock { } Catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilScript.ps1 b/functions/private/Invoke-WinUtilScript.ps1 index 4059f917..05cef26a 100644 --- a/functions/private/Invoke-WinUtilScript.ps1 +++ b/functions/private/Invoke-WinUtilScript.ps1 @@ -20,30 +20,25 @@ function Invoke-WinUtilScript { [scriptblock]$scriptblock ) - Try { + try { Write-Host "Running Script for $name" Invoke-Command $scriptblock -ErrorAction Stop - } - Catch [System.Management.Automation.CommandNotFoundException] { + } catch [System.Management.Automation.CommandNotFoundException] { Write-Warning "The specified command was not found." Write-Warning $PSItem.Exception.message - } - Catch [System.Management.Automation.RuntimeException] { + } catch [System.Management.Automation.RuntimeException] { Write-Warning "A runtime exception occurred." Write-Warning $PSItem.Exception.message - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "A security exception occurred." Write-Warning $PSItem.Exception.message - } - Catch [System.UnauthorizedAccessException] { + } catch [System.UnauthorizedAccessException] { Write-Warning "Access denied. You do not have permission to perform this operation." Write-Warning $PSItem.Exception.message - } - Catch { + } 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 } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilShowExt.ps1 b/functions/private/Invoke-WinUtilShowExt.ps1 index 0b5dee6e..c90265a8 100644 --- a/functions/private/Invoke-WinUtilShowExt.ps1 +++ b/functions/private/Invoke-WinUtilShowExt.ps1 @@ -6,26 +6,22 @@ function Invoke-WinUtilShowExt { Indicates whether to enable or disable Show file extentions #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Showing file extentions" $value = 0 - } - else { + } else { Write-Host "hiding file extensions" $value = 1 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name HideFileExt -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSnapFlyout.ps1 b/functions/private/Invoke-WinUtilSnapFlyout.ps1 index fb317ec9..bfb83c31 100644 --- a/functions/private/Invoke-WinUtilSnapFlyout.ps1 +++ b/functions/private/Invoke-WinUtilSnapFlyout.ps1 @@ -6,12 +6,11 @@ function Invoke-WinUtilSnapFlyout { Indicates whether to enable or disable Snap Assist Flyout on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Snap Assist Flyout On startup" $value = 1 - } - else { + } else { Write-Host "Disabling Snap Assist Flyout On startup" $value = 0 } @@ -20,15 +19,12 @@ function Invoke-WinUtilSnapFlyout { taskkill.exe /F /IM "explorer.exe" Set-ItemProperty -Path $Path -Name EnableSnapAssistFlyout -Value $value Start-Process "explorer.exe" - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSnapSuggestion.ps1 b/functions/private/Invoke-WinUtilSnapSuggestion.ps1 index 6fd35a14..f2358c73 100644 --- a/functions/private/Invoke-WinUtilSnapSuggestion.ps1 +++ b/functions/private/Invoke-WinUtilSnapSuggestion.ps1 @@ -6,12 +6,11 @@ function Invoke-WinUtilSnapSuggestion { Indicates whether to enable or disable Snap Assist Suggestions on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Snap Assist Suggestion On startup" $value = 1 - } - else { + } else { Write-Host "Disabling Snap Assist Suggestion On startup" $value = 0 } @@ -20,15 +19,12 @@ function Invoke-WinUtilSnapSuggestion { taskkill.exe /F /IM "explorer.exe" Set-ItemProperty -Path $Path -Name SnapAssist -Value $value Start-Process "explorer.exe" - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSnapWindow.ps1 b/functions/private/Invoke-WinUtilSnapWindow.ps1 index a52950d4..c76e1c7d 100644 --- a/functions/private/Invoke-WinUtilSnapWindow.ps1 +++ b/functions/private/Invoke-WinUtilSnapWindow.ps1 @@ -6,26 +6,22 @@ function Invoke-WinUtilSnapWindow { Indicates whether to enable or disable Snapping Windows on startup #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Snap Windows On startup | Relogin Required" $value = 1 - } - else { + } else { Write-Host "Disabling Snap Windows On startup | Relogin Required" $value = 0 } $Path = "HKCU:\Control Panel\Desktop" Set-ItemProperty -Path $Path -Name WindowArrangementActive -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilSponsors.ps1 b/functions/private/Invoke-WinUtilSponsors.ps1 index cf75dc27..54484500 100644 --- a/functions/private/Invoke-WinUtilSponsors.ps1 +++ b/functions/private/Invoke-WinUtilSponsors.ps1 @@ -37,9 +37,8 @@ Function Invoke-WinUtilSponsors { # Return the sponsors return $sponsors - } - catch { + } catch { Write-Error "An error occurred while fetching or processing the sponsors: $_" return $null } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilStickyKeys.ps1 b/functions/private/Invoke-WinUtilStickyKeys.ps1 index 69689f9f..b7d8860f 100644 --- a/functions/private/Invoke-WinUtilStickyKeys.ps1 +++ b/functions/private/Invoke-WinUtilStickyKeys.ps1 @@ -6,26 +6,22 @@ Function Invoke-WinUtilStickyKeys { Indicates whether to enable or disable Sticky Keys on startup #> Param($Enabled) - Try { - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Sticky Keys On startup" $value = 510 - } - else { + } else { Write-Host "Disabling Sticky Keys On startup" $value = 58 } $Path = "HKCU:\Control Panel\Accessibility\StickyKeys" Set-ItemProperty -Path $Path -Name Flags -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilTaskView.ps1 b/functions/private/Invoke-WinUtilTaskView.ps1 index b9963294..3af1beb6 100644 --- a/functions/private/Invoke-WinUtilTaskView.ps1 +++ b/functions/private/Invoke-WinUtilTaskView.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskView { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Task View" $value = 1 - } - else { + } else { Write-Host "Disabling Task View" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name ShowTaskViewButton -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 b/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 index 0c5e0dfa..e3f512f7 100644 --- a/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 +++ b/functions/private/Invoke-WinUtilTaskbarAlignment.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarAlignment { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Making Taskbar Alignment to the Center" $value = 1 - } - else { + } else { Write-Host "Making Taskbar Alignment to the Left" $value = 0 } $Path = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name "TaskbarAl" -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTaskbarSearch.ps1 b/functions/private/Invoke-WinUtilTaskbarSearch.ps1 index b297c023..b35d4816 100644 --- a/functions/private/Invoke-WinUtilTaskbarSearch.ps1 +++ b/functions/private/Invoke-WinUtilTaskbarSearch.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarSearch { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Search Button" $value = 1 - } - else { + } else { Write-Host "Disabling Search Button" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search\" Set-ItemProperty -Path $Path -Name SearchboxTaskbarMode -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 b/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 index 27077f55..f8b2ce3a 100644 --- a/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 +++ b/functions/private/Invoke-WinUtilTaskbarWidgets.ps1 @@ -9,25 +9,21 @@ function Invoke-WinUtilTaskbarWidgets { #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Taskbar Widgets" $value = 1 - } - else { + } else { Write-Host "Disabling Taskbar Widgets" $value = 0 } $Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Set-ItemProperty -Path $Path -Name TaskbarDa -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Invoke-WinUtilTweaks.ps1 b/functions/private/Invoke-WinUtilTweaks.ps1 index 90dee507..8bb06faf 100644 --- a/functions/private/Invoke-WinUtilTweaks.ps1 +++ b/functions/private/Invoke-WinUtilTweaks.ps1 @@ -22,7 +22,7 @@ function Invoke-WinUtilTweaks { ) Write-Debug "Tweaks: $($CheckBox)" - if($undo){ + if($undo) { $Values = @{ Registry = "OriginalValue" ScheduledTask = "OriginalState" @@ -30,8 +30,7 @@ function Invoke-WinUtilTweaks { ScriptType = "UndoScript" } - } - Else{ + } else { $Values = @{ Registry = "Value" ScheduledTask = "State" @@ -40,18 +39,18 @@ function Invoke-WinUtilTweaks { ScriptType = "InvokeScript" } } - if($sync.configs.tweaks.$CheckBox.ScheduledTask){ + 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){ + 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 memeber, which's the 'OriginalService' Property + # The check for !($undo) is required, without it the script will throw an error for accessing unavailable memeber, which's the 'OriginalService' Property if($KeepServiceStartup -AND !($undo)) { try { # Check if the service exists @@ -60,8 +59,7 @@ function Invoke-WinUtilTweaks { 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] { + } catch [System.ServiceProcess.ServiceNotFoundException] { Write-Warning "Service $($psitem.Name) was not found" } } @@ -72,13 +70,13 @@ function Invoke-WinUtilTweaks { } } } - if($sync.configs.tweaks.$CheckBox.registry){ + if($sync.configs.tweaks.$CheckBox.registry) { $sync.configs.tweaks.$CheckBox.registry | ForEach-Object { Write-Debug "$($psitem.Name) and state is $($psitem.$($values.registry))" Set-WinUtilRegistry -Name $psitem.Name -Path $psitem.Path -Type $psitem.Type -Value $psitem.$($values.registry) } } - if($sync.configs.tweaks.$CheckBox.$($values.ScriptType)){ + 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) @@ -86,8 +84,8 @@ function Invoke-WinUtilTweaks { } } - if(!$undo){ - if($sync.configs.tweaks.$CheckBox.appx){ + if(!$undo) { + if($sync.configs.tweaks.$CheckBox.appx) { $sync.configs.tweaks.$CheckBox.appx | ForEach-Object { Write-Debug "UNDO $($psitem.Name)" Remove-WinUtilAPPX -Name $psitem diff --git a/functions/private/Invoke-WinUtilVerboseLogon.ps1 b/functions/private/Invoke-WinUtilVerboseLogon.ps1 index 997050f9..9bed241c 100644 --- a/functions/private/Invoke-WinUtilVerboseLogon.ps1 +++ b/functions/private/Invoke-WinUtilVerboseLogon.ps1 @@ -6,26 +6,22 @@ function Invoke-WinUtilVerboseLogon { Indicates whether to enable or disable VerboseLogon messages #> Param($Enabled) - Try{ - if ($Enabled -eq $false){ + try { + if ($Enabled -eq $false) { Write-Host "Enabling Verbose Logon Messages" $value = 1 - } - else { + } else { Write-Host "Disabling Verbose Logon Messages" $value = 0 } $Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" Set-ItemProperty -Path $Path -Name VerboseStatus -Value $value - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Invoke-WinUtilWingetProgram.ps1 b/functions/private/Invoke-WinUtilWingetProgram.ps1 index 4b915677..e755e618 100644 --- a/functions/private/Invoke-WinUtilWingetProgram.ps1 +++ b/functions/private/Invoke-WinUtilWingetProgram.ps1 @@ -15,8 +15,7 @@ Function Invoke-WinUtilWingetProgram { #> param( - [Parameter(Mandatory, Position=0)] - $Programs, + [Parameter(Mandatory, Position=0)]$Programs, [Parameter(Mandatory, Position=1)] [ValidateSet("Install", "Uninstall")] @@ -47,10 +46,9 @@ Function Invoke-WinUtilWingetProgram { ) $commonArguments = "--id $wingetId --silent" - $arguments = if ($Action -eq "Install"){ + $arguments = if ($Action -eq "Install") { "install $commonArguments --accept-source-agreements --accept-package-agreements $(if ($scope) {" --scope $scope"})" - } - else { + } else { "uninstall $commonArguments" } diff --git a/functions/private/Remove-WinUtilAPPX.ps1 b/functions/private/Remove-WinUtilAPPX.ps1 index e54a3475..e90a101b 100644 --- a/functions/private/Remove-WinUtilAPPX.ps1 +++ b/functions/private/Remove-WinUtilAPPX.ps1 @@ -15,22 +15,19 @@ function Remove-WinUtilAPPX { $Name ) - Try { + try { Write-Host "Removing $Name" Get-AppxPackage "*$Name*" | Remove-AppxPackage -ErrorAction SilentlyContinue Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like "*$Name*" | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue - } - Catch [System.Exception] { + } catch [System.Exception] { if ($psitem.Exception.Message -like "*The requested operation requires elevation*") { Write-Warning "Unable to uninstall $name due to a Security Exception" - } - else { + } else { Write-Warning "Unable to uninstall $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } - } - Catch{ + } catch { Write-Warning "Unable to uninstall $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilDNS.ps1 b/functions/private/Set-WinUtilDNS.ps1 index 0810e6d2..3aa4f157 100644 --- a/functions/private/Set-WinUtilDNS.ps1 +++ b/functions/private/Set-WinUtilDNS.ps1 @@ -12,24 +12,22 @@ function Set-WinUtilDNS { #> param($DNSProvider) - if($DNSProvider -eq "Default"){return} - Try{ + 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"){ + Foreach ($Adapter in $Adapters) { + if($DNSProvider -eq "DHCP") { Set-DnsClientServerAddress -InterfaceIndex $Adapter.ifIndex -ResetServerAddresses - } - Else{ + } 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{ + } catch { Write-Warning "Unable to set DNS Provider due to an unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilProgressbar.ps1 b/functions/private/Set-WinUtilProgressbar.ps1 index 9ca0e0a1..3984380f 100644 --- a/functions/private/Set-WinUtilProgressbar.ps1 +++ b/functions/private/Set-WinUtilProgressbar.ps1 @@ -16,11 +16,10 @@ function Set-WinUtilProgressbar{ [int]$Percent, $Hide ) - if ($hide){ + if ($hide) { $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Collapsed"}) $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Collapsed"}) - } - else{ + } else { $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Visibility = "Visible"}) $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBar.Visibility = "Visible"}) } @@ -28,4 +27,4 @@ function Set-WinUtilProgressbar{ $sync.form.Dispatcher.Invoke([action]{$sync.ProgressBarLabel.Content.ToolTip = $label}) $sync.form.Dispatcher.Invoke([action]{ $sync.ProgressBar.Value = $percent}) -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilRegistry.ps1 b/functions/private/Set-WinUtilRegistry.ps1 index a5c67fbc..e3f66e2e 100644 --- a/functions/private/Set-WinUtilRegistry.ps1 +++ b/functions/private/Set-WinUtilRegistry.ps1 @@ -27,8 +27,8 @@ function Set-WinUtilRegistry { $Value ) - Try{ - if(!(Test-Path 'HKU:\')){New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS} + 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..." @@ -37,14 +37,11 @@ function Set-WinUtilRegistry { Write-Host "Set $Path\$Name to $Value" Set-ItemProperty -Path $Path -Name $Name -Type $Type -Value $Value -Force -ErrorAction Stop | Out-Null - } - Catch [System.Security.SecurityException] { + } catch [System.Security.SecurityException] { Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" - } - Catch [System.Management.Automation.ItemNotFoundException] { + } catch [System.Management.Automation.ItemNotFoundException] { Write-Warning $psitem.Exception.ErrorRecord - } - Catch{ + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Set-WinUtilScheduledTask.ps1 b/functions/private/Set-WinUtilScheduledTask.ps1 index 453f7793..e6ee2bef 100644 --- a/functions/private/Set-WinUtilScheduledTask.ps1 +++ b/functions/private/Set-WinUtilScheduledTask.ps1 @@ -19,27 +19,24 @@ function Set-WinUtilScheduledTask { $State ) - Try{ - if($State -eq "Disabled"){ + try { + if($State -eq "Disabled") { Write-Host "Disabling Scheduled Task $Name" Disable-ScheduledTask -TaskName $Name -ErrorAction Stop } - if($State -eq "Enabled"){ + 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*"){ + } catch [System.Exception] { + if($psitem.Exception.Message -like "*The system cannot find the file specified*") { Write-Warning "Scheduled Task $name was not Found" - } - Else{ + } else { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $psitem.Exception.Message } - } - Catch{ + } catch { Write-Warning "Unable to run script for $name due to unhandled exception" Write-Warning $psitem.Exception.StackTrace } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilService.ps1 b/functions/private/Set-WinUtilService.ps1 index e16b2597..d2a7d459 100644 --- a/functions/private/Set-WinUtilService.ps1 +++ b/functions/private/Set-WinUtilService.ps1 @@ -26,11 +26,9 @@ Function Set-WinUtilService { # Service exists, proceed with changing properties $service | Set-Service -StartupType $StartupType -ErrorAction Stop - } - catch [System.ServiceProcess.ServiceNotFoundException] { + } catch [System.ServiceProcess.ServiceNotFoundException] { Write-Warning "Service $Name was not found" - } - catch { + } catch { Write-Warning "Unable to set $Name due to unhandled exception" Write-Warning $_.Exception.Message } diff --git a/functions/private/Set-WinUtilTaskbarItem.ps1 b/functions/private/Set-WinUtilTaskbarItem.ps1 index 7f290fac..465ca4c3 100644 --- a/functions/private/Set-WinUtilTaskbarItem.ps1 +++ b/functions/private/Set-WinUtilTaskbarItem.ps1 @@ -83,4 +83,4 @@ function Set-WinUtilTaskbaritem { if ($description) { $sync["Form"].taskbarItemInfo.Description = $description } -} \ No newline at end of file +} diff --git a/functions/private/Set-WinUtilUiTheme.ps1 b/functions/private/Set-WinUtilUiTheme.ps1 index 46d55afa..45db1ab4 100644 --- a/functions/private/Set-WinUtilUiTheme.ps1 +++ b/functions/private/Set-WinUtilUiTheme.ps1 @@ -1,25 +1,24 @@ function Set-WinUtilUITheme { <# + .SYNOPSIS + Sets the theme of the XAML file - .SYNOPSIS - Sets the theme of the XAML file + .PARAMETER inputXML + A string representing the XAML object to modify - .PARAMETER inputXML - A string representing the XAML object to modify - - .PARAMETER themeName - The name of the theme to set the XAML to. Defaults to 'matrix' - - .EXAMPLE - Set-WinUtilUITheme -inputXAML $inputXAML + .PARAMETER themeName + The name of the theme to set the XAML to. Defaults to 'matrix' + .EXAMPLE + Set-WinUtilUITheme -inputXAML $inputXAML #> + param ( - [Parameter(Mandatory=$true, Position=0)] - [string] $inputXML, - [Parameter(Mandatory=$false, Position=1)] - [string] $themeName = 'matrix' + [Parameter(Mandatory, position=0)] + [string]$inputXML, + [Parameter(position=1)] + [string]$themeName = 'matrix' ) try { @@ -38,13 +37,11 @@ function Set-WinUtilUITheme { # Replace the key with the value in the input XML $inputXML = $inputXML.Replace($formattedKey, $value) } - } - else { + } else { Write-Host "Theme '$themeName' not found." } - } - catch { + } catch { Write-Warning "Unable to apply theme" Write-Warning $psitem.Exception.StackTrace } diff --git a/functions/private/Test-WinUtilPackageManager.ps1 b/functions/private/Test-WinUtilPackageManager.ps1 index 290d8adc..04feb83c 100644 --- a/functions/private/Test-WinUtilPackageManager.ps1 +++ b/functions/private/Test-WinUtilPackageManager.ps1 @@ -30,12 +30,12 @@ function Test-WinUtilPackageManager { } catch { Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)" $wingetExists = $false - } + } # If Winget is available, Parse it's Version and give proper information to Terminal Output. - # If it isn't available, the return of this funtion will be "not-installed", indicating that + # If it isn't available, the return of this funtion will be "not-installed", indicating that # Winget isn't installed/available on The System. - if ($wingetExists) { + if ($wingetExists) { # Check if Preview Version if ($wingetVersionFull.Contains("-preview")) { $wingetVersion = $wingetVersionFull.Trim("-preview") @@ -65,8 +65,7 @@ function Test-WinUtilPackageManager { if (!$wingetOutdated) { Write-Host " - Winget is Up to Date" -ForegroundColor Green $status = "installed" - } - else { + } else { Write-Host " - Winget is Out of Date" -ForegroundColor Red $status = "outdated" } diff --git a/functions/private/Update-WinUtilProgramWinget.ps1 b/functions/private/Update-WinUtilProgramWinget.ps1 index 6fac6741..0784657d 100644 --- a/functions/private/Update-WinUtilProgramWinget.ps1 +++ b/functions/private/Update-WinUtilProgramWinget.ps1 @@ -18,4 +18,4 @@ Function Update-WinUtilProgramWinget { $global:WinGetInstall = Start-Process -Verb runas powershell -ArgumentList "-command invoke-command -scriptblock {$wingetinstall} -argumentlist '$($ProgramsToInstall -join ",")'" -PassThru -} \ No newline at end of file +} diff --git a/functions/public/Invoke-ScratchDialog.ps1 b/functions/public/Invoke-ScratchDialog.ps1 index 9cf4ba90..53ffc8fd 100644 --- a/functions/public/Invoke-ScratchDialog.ps1 +++ b/functions/public/Invoke-ScratchDialog.ps1 @@ -18,8 +18,7 @@ function Invoke-ScratchDialog { $filePath = $Dialog.SelectedPath Write-Host "No ISO is chosen+ $filePath" - if ([string]::IsNullOrEmpty($filePath)) - { + if ([string]::IsNullOrEmpty($filePath)) { Write-Host "No Folder had chosen" return } diff --git a/functions/public/Invoke-WPFButton.ps1 b/functions/public/Invoke-WPFButton.ps1 index ff9210dd..92bec394 100644 --- a/functions/public/Invoke-WPFButton.ps1 +++ b/functions/public/Invoke-WPFButton.ps1 @@ -14,11 +14,11 @@ function Invoke-WPFButton { # 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){ + if (-not $sync.ProcessRunning) { Set-WinUtilProgressBar -label "" -percent 0 -hide $true } - Switch -Wildcard ($Button){ + Switch -Wildcard ($Button) { "WPFTab?BT" {Invoke-WPFTab $Button} "WPFinstall" {Invoke-WPFInstall} @@ -58,4 +58,4 @@ function Invoke-WPFButton { "WPFCloseButton" {Invoke-WPFCloseButton} "MicrowinScratchDirBT" {Invoke-ScratchDialog} } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFCloseButton.ps1 b/functions/public/Invoke-WPFCloseButton.ps1 index 8a784fc0..5ffff15a 100644 --- a/functions/public/Invoke-WPFCloseButton.ps1 +++ b/functions/public/Invoke-WPFCloseButton.ps1 @@ -9,4 +9,4 @@ function Invoke-WPFCloseButton { #> $sync["Form"].Close() Write-Host "Bye bye!" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFControlPanel.ps1 b/functions/public/Invoke-WPFControlPanel.ps1 index f5574a11..eb0fdb2a 100644 --- a/functions/public/Invoke-WPFControlPanel.ps1 +++ b/functions/public/Invoke-WPFControlPanel.ps1 @@ -10,7 +10,7 @@ function Invoke-WPFControlPanel { #> param($Panel) - switch ($Panel){ + switch ($Panel) { "WPFPanelcontrol" {cmd /c control} "WPFPanelnetwork" {cmd /c ncpa.cpl} "WPFPanelpower" {cmd /c powercfg.cpl} @@ -19,4 +19,4 @@ function Invoke-WPFControlPanel { "WPFPanelsystem" {cmd /c sysdm.cpl} "WPFPaneluser" {cmd /c "control userpasswords2"} } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFeatureInstall.ps1 b/functions/public/Invoke-WPFFeatureInstall.ps1 index 57cbc38e..dd9995d2 100644 --- a/functions/public/Invoke-WPFFeatureInstall.ps1 +++ b/functions/public/Invoke-WPFFeatureInstall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFFeatureInstall { #> - if($sync.ProcessRunning){ + 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 @@ -17,7 +17,7 @@ function Invoke-WPFFeatureInstall { Invoke-WPFRunspace -ArgumentList $Features -DebugPreference $DebugPreference -ScriptBlock { param($Features, $DebugPreference) $sync.ProcessRunning = $true - if ($Features.count -eq 1){ + 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" }) @@ -33,4 +33,4 @@ function Invoke-WPFFeatureInstall { Write-Host "--- A Reboot may be required ---" Write-Host "===================================" } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFixesNetwork.ps1 b/functions/public/Invoke-WPFFixesNetwork.ps1 index 94ba11bd..d7417528 100644 --- a/functions/public/Invoke-WPFFixesNetwork.ps1 +++ b/functions/public/Invoke-WPFFixesNetwork.ps1 @@ -26,4 +26,4 @@ function Invoke-WPFFixesNetwork { Write-Host "==========================================" Write-Host "-- Network Configuration has been Reset --" Write-Host "==========================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFixesUpdate.ps1 b/functions/public/Invoke-WPFFixesUpdate.ps1 index 27bd7406..ab3012c9 100644 --- a/functions/public/Invoke-WPFFixesUpdate.ps1 +++ b/functions/public/Invoke-WPFFixesUpdate.ps1 @@ -66,7 +66,7 @@ function Invoke-WPFFixesUpdate { ).Trim()} catch {0}) ` <# And the current percentage is greater than the previous one #>` -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk... ($percent%)" -PercentComplete $percent @@ -93,7 +93,7 @@ function Invoke-WPFFixesUpdate { ) -join '' ).TrimStart()} catch {0} ) -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent @@ -112,7 +112,7 @@ function Invoke-WPFFixesUpdate { [int]($_ -replace "\[" -replace "=" -replace " " -replace "%" -replace "\]") } catch {0}) ` -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM... ($percent%)" -PercentComplete $percent @@ -137,7 +137,7 @@ function Invoke-WPFFixesUpdate { ) -join '' ).TrimStart()} catch {0} ) -and $percent -gt $oldpercent - ){ + ) { # Update the progress bar $oldpercent = $percent Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent @@ -289,4 +289,4 @@ function Invoke-WPFFixesUpdate { 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 -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFFixesWinget.ps1 b/functions/public/Invoke-WPFFixesWinget.ps1 index d52b8141..f380c2ab 100644 --- a/functions/public/Invoke-WPFFixesWinget.ps1 +++ b/functions/public/Invoke-WPFFixesWinget.ps1 @@ -11,4 +11,4 @@ function Invoke-WPFFixesWinget { Install-WinUtilChoco Start-Process -FilePath "choco" -ArgumentList "install winget -y --force" -NoNewWindow -Wait -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFGetInstalled.ps1 b/functions/public/Invoke-WPFGetInstalled.ps1 index 9ef1c3ac..6f5a326a 100644 --- a/functions/public/Invoke-WPFGetInstalled.ps1 +++ b/functions/public/Invoke-WPFGetInstalled.ps1 @@ -10,13 +10,13 @@ function Invoke-WPFGetInstalled { #> param($checkbox) - if($sync.ProcessRunning){ + 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(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget"){ + if(((Test-WinUtilPackageManager -winget) -eq "not-installed") -and $checkbox -eq "winget") { return } @@ -26,17 +26,17 @@ function Invoke-WPFGetInstalled { $sync.ProcessRunning = $true $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" }) - if($checkbox -eq "winget"){ + if($checkbox -eq "winget") { Write-Host "Getting Installed Programs..." } - if($checkbox -eq "tweaks"){ + if($checkbox -eq "tweaks") { Write-Host "Getting Installed Tweaks..." } $Checkboxes = Invoke-WinUtilCurrentSystem -CheckBox $checkbox $sync.form.Dispatcher.invoke({ - foreach($checkbox in $Checkboxes){ + foreach($checkbox in $Checkboxes) { $sync.$checkbox.ischecked = $True } }) diff --git a/functions/public/Invoke-WPFGetIso.ps1 b/functions/public/Invoke-WPFGetIso.ps1 index 01390dc1..2db534c7 100644 --- a/functions/public/Invoke-WPFGetIso.ps1 +++ b/functions/public/Invoke-WPFGetIso.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFGetIso { Write-Host "Invoking WPFGetIso" - if($sync.ProcessRunning){ + if($sync.ProcessRunning) { $msg = "GetIso process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return @@ -18,22 +18,20 @@ function Invoke-WPFGetIso { Write-Host " _ __ __ _ " - Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ " - Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ " - Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | " - Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| " + Write-Host " /\/\ (_) ___ _ __ ___ / / /\ \ \(_) _ __ " + Write-Host " / \ | | / __|| '__| / _ \ \ \/ \/ /| || '_ \ " + Write-Host "/ /\/\ \| || (__ | | | (_) | \ /\ / | || | | | " + Write-Host "\/ \/|_| \___||_| \___/ \/ \/ |_||_| |_| " $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe' $oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf) Write-Host "oscdimg.exe on system: $oscdImgFound" - if (!$oscdImgFound) - { + if (!$oscdImgFound) { $downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked $sync.BusyMessage.Visibility="Hidden" - if (!$downloadFromGitHub) - { + if (!$downloadFromGitHub) { # only show the message to people who did check the box to download from github, if you check the box # you consent to downloading it, no need to show extra dialogs [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it using choco. This might take a long time.") @@ -42,8 +40,7 @@ function Invoke-WPFGetIso { Install-WinUtilChoco $chocoFound = [bool] (Get-Command -ErrorAction Ignore -Type Application choco) Write-Host "choco on system: $chocoFound" - if (!$chocoFound) - { + if (!$chocoFound) { [System.Windows.MessageBox]::Show("choco.exe is not found on the system, you need choco to download oscdimg.exe") return } @@ -51,8 +48,7 @@ function Invoke-WPFGetIso { Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install windows-adk-oscdimg" [System.Windows.MessageBox]::Show("oscdimg is installed, now close, reopen PowerShell terminal and re-launch winutil.ps1") return - } - else { + } else { [System.Windows.MessageBox]::Show("oscdimge.exe is not found on the system, winutil will now attempt do download and install it from github. This might take a long time.") Get-Oscdimg -oscdimgPath $oscdimgPath $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf @@ -60,8 +56,7 @@ function Invoke-WPFGetIso { $msg = "oscdimg was not downloaded can not proceed" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) return - } - else { + } else { Write-Host "oscdimg.exe was successfully downloaded from github" } } @@ -74,16 +69,14 @@ function Invoke-WPFGetIso { $openFileDialog.ShowDialog() | Out-Null $filePath = $openFileDialog.FileName - if ([string]::IsNullOrEmpty($filePath)) - { + if ([string]::IsNullOrEmpty($filePath)) { Write-Host "No ISO is chosen" $sync.BusyMessage.Visibility="Hidden" return } Write-Host "File path $($filePath)" - if (-not (Test-Path -Path $filePath -PathType Leaf)) - { + if (-not (Test-Path -Path $filePath -PathType Leaf)) { $msg = "File you've chosen doesn't exist" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) return @@ -98,20 +91,16 @@ function Invoke-WPFGetIso { # This is done to guarantee a dynamic solution, as the installation drive may be mounted to a letter different than C $driveSpace = (Get-Volume -DriveLetter ([IO.Path]::GetPathRoot([Environment]::GetFolderPath([Environment+SpecialFolder]::UserProfile)).Replace(":\", "").Trim())).SizeRemaining Write-Debug "Free space on installation drive: $($driveSpace) bytes" - if ($driveSpace -lt ($isoSize * 2)) - { + if ($driveSpace -lt ($isoSize * 2)) { # It's not critical and we _may_ continue. Output a warning Write-Warning "You may not have enough space for this operation. Proceed at your own risk." } - elseif ($driveSpace -lt $isoSize) - { + elseif ($driveSpace -lt $isoSize) { # It's critical and we can't continue. Output an error Write-Host "You don't have enough space for this operation. You need at least $([Math]::Round(($isoSize / ([Math]::Pow(1024, 2))) * 2, 2)) MB of free space to copy the ISO files to a temp directory and to be able to perform additional operations." Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return - } - else - { + } else { Write-Host "You have enough space for this operation." } @@ -151,14 +140,12 @@ function Invoke-WPFGetIso { } # Detect if the folders already exist and remove them - if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text)) - { + if (($sync.MicrowinMountDir.Text -ne "") -and (Test-Path -Path $sync.MicrowinMountDir.Text)) { try { Write-Host "Deleting temporary files from previous run. Please wait..." Remove-Item -Path $sync.MicrowinMountDir.Text -Recurse -Force Remove-Item -Path $sync.MicrowinScratchDir.Text -Recurse -Force - } - catch { + } catch { Write-Host "Could not delete temporary files. You need to delete those manually." } } @@ -199,16 +186,14 @@ function Invoke-WPFGetIso { $wimFile = "$mountDir\sources\install.wim" Write-Host "Getting image information $wimFile" - if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))) - { + if ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (-not (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf))) { $msg = "Neither install.wim nor install.esd exist in the image, this could happen if you use unofficial Windows images. Please don't use shady images from the internet, use only official images. Here are instructions how to download ISO images if the Microsoft website is not showing the link to download and ISO. https://www.techrepublic.com/article/how-to-download-a-windows-10-iso-file-without-using-the-media-creation-tool/" Write-Host $msg [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" throw } - elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)) - { + elseif ((-not (Test-Path -Path $wimFile -PathType Leaf)) -and (Test-Path -Path $wimFile.Replace(".wim", ".esd").Trim() -PathType Leaf)) { Write-Host "Install.esd found on the image. It needs to be converted to a WIM file in order to begin processing" $wimFile = $wimFile.Replace(".wim", ".esd").Trim() } @@ -221,8 +206,7 @@ function Invoke-WPFGetIso { $sync.MicrowinWindowsFlavors.SelectedIndex = 0 Write-Host "Finding suitable Pro edition. This can take some time. Do note that this is an automatic process that might not select the edition you want." Get-WindowsImage -ImagePath $wimFile | ForEach-Object { - if ((Get-WindowsImage -ImagePath $wimFile -Index $_.ImageIndex).EditionId -eq "Professional") - { + if ((Get-WindowsImage -ImagePath $wimFile -Index $_.ImageIndex).EditionId -eq "Professional") { # We have found the Pro edition $sync.MicrowinWindowsFlavors.SelectedIndex = $_.ImageIndex - 1 } @@ -247,5 +231,3 @@ function Invoke-WPFGetIso { $sync.ProcessRunning = $false Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" } - - diff --git a/functions/public/Invoke-WPFImpex.ps1 b/functions/public/Invoke-WPFImpex.ps1 index bbac24eb..9b03cc13 100644 --- a/functions/public/Invoke-WPFImpex.ps1 +++ b/functions/public/Invoke-WPFImpex.ps1 @@ -19,31 +19,30 @@ function Invoke-WPFImpex { $Config = $null ) - if ($type -eq "export"){ + if ($type -eq "export") { $FileBrowser = New-Object System.Windows.Forms.SaveFileDialog } - if ($type -eq "import"){ + if ($type -eq "import") { $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog } - if (-not $Config){ + if (-not $Config) { $FileBrowser.InitialDirectory = [Environment]::GetFolderPath('Desktop') $FileBrowser.Filter = "JSON Files (*.json)|*.json" $FileBrowser.ShowDialog() | Out-Null - if($FileBrowser.FileName -eq ""){ + if($FileBrowser.FileName -eq "") { return - } - else{ + } else { $Config = $FileBrowser.FileName } } - if ($type -eq "export"){ + if ($type -eq "export") { $jsonFile = Get-WinUtilCheckBoxes -unCheck $false $jsonFile | ConvertTo-Json | Out-File $FileBrowser.FileName -Force } - if ($type -eq "import"){ + if ($type -eq "import") { $jsonFile = Get-Content $Config | ConvertFrom-Json $flattenedJson = @() diff --git a/functions/public/Invoke-WPFInstall.ps1 b/functions/public/Invoke-WPFInstall.ps1 index ce0ffdeb..842681e8 100644 --- a/functions/public/Invoke-WPFInstall.ps1 +++ b/functions/public/Invoke-WPFInstall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFInstall { #> - if($sync.ProcessRunning){ + 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 @@ -23,7 +23,7 @@ function Invoke-WPFInstall { Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock { param($PackagesToInstall, $DebugPreference) - if ($PackagesToInstall.count -eq 1){ + if ($PackagesToInstall.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" }) @@ -43,15 +43,15 @@ function Invoke-WPFInstall { return $packagesWinget, $packagesChoco }.Invoke($PackagesToInstall) - try{ + try { $sync.ProcessRunning = $true $errorPackages = @() - if($packagesWinget.Count -gt 0){ + if($packagesWinget.Count -gt 0) { Install-WinUtilWinget $errorPackages += Invoke-WinUtilWingetProgram -Action Install -Programs $packagesWinget $errorPackages| ForEach-Object {if($_.choco -ne "na") {$packagesChoco += $_}} } - if($packagesChoco.Count -gt 0){ + if($packagesChoco.Count -gt 0) { Install-WinUtilChoco Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco } @@ -59,8 +59,7 @@ function Invoke-WPFInstall { Write-Host "-- Installs have finished ---" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) - } - Catch { + } catch { Write-Host "===========================================" Write-Host "Error: $_" Write-Host "===========================================" diff --git a/functions/public/Invoke-WPFInstallUpgrade.ps1 b/functions/public/Invoke-WPFInstallUpgrade.ps1 index c62dfe1d..e30f5f1f 100644 --- a/functions/public/Invoke-WPFInstallUpgrade.ps1 +++ b/functions/public/Invoke-WPFInstallUpgrade.ps1 @@ -5,11 +5,11 @@ function Invoke-WPFInstallUpgrade { Invokes the function that upgrades all installed programs using winget #> - if((Test-WinUtilPackageManager -winget) -eq "not-installed"){ + if((Test-WinUtilPackageManager -winget) -eq "not-installed") { return } - if(Get-WinUtilInstallerProcess -Process $global:WinGetInstall){ + 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 diff --git a/functions/public/Invoke-WPFMicrowin.ps1 b/functions/public/Invoke-WPFMicrowin.ps1 index 277f42bf..a91588b3 100644 --- a/functions/public/Invoke-WPFMicrowin.ps1 +++ b/functions/public/Invoke-WPFMicrowin.ps1 @@ -5,32 +5,32 @@ function Invoke-WPFMicrowin { #> - if($sync.ProcessRunning) { + if($sync.ProcessRunning) { $msg = "GetIso process is currently running." [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } - # Define the constants for Windows API + # Define the constants for Windows API Add-Type @" using System; using System.Runtime.InteropServices; public class PowerManagement { - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); - [FlagsAttribute] - public enum EXECUTION_STATE : uint { - ES_SYSTEM_REQUIRED = 0x00000001, - ES_DISPLAY_REQUIRED = 0x00000002, - ES_CONTINUOUS = 0x80000000, - } + [FlagsAttribute] + public enum EXECUTION_STATE : uint { + ES_SYSTEM_REQUIRED = 0x00000001, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_CONTINUOUS = 0x80000000, + } } "@ - # Prevent the machine from sleeping - [PowerManagement]::SetThreadExecutionState([PowerManagement]::EXECUTION_STATE::ES_CONTINUOUS -bor [PowerManagement]::EXECUTION_STATE::ES_SYSTEM_REQUIRED -bor [PowerManagement]::EXECUTION_STATE::ES_DISPLAY_REQUIRED) + # Prevent the machine from sleeping + [PowerManagement]::SetThreadExecutionState([PowerManagement]::EXECUTION_STATE::ES_CONTINUOUS -bor [PowerManagement]::EXECUTION_STATE::ES_SYSTEM_REQUIRED -bor [PowerManagement]::EXECUTION_STATE::ES_DISPLAY_REQUIRED) # Ask the user where to save the file $SaveDialog = New-Object System.Windows.Forms.SaveFileDialog @@ -40,470 +40,429 @@ public class PowerManagement { if ($SaveDialog.FileName -eq "") { Write-Host "No file name for the target image was specified" - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" + Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo" Write-Host "Target ISO location: $($SaveDialog.FileName)" - $index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim() - Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)" + $index = $sync.MicrowinWindowsFlavors.SelectedValue.Split(":")[0].Trim() + Write-Host "Index chosen: '$index' from $($sync.MicrowinWindowsFlavors.SelectedValue)" - $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked - $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked - $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked - $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked - $copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked - $injectDrivers = $sync.MicrowinInjectDrivers.IsChecked - $importDrivers = $sync.MicrowinImportDrivers.IsChecked + $keepPackages = $sync.WPFMicrowinKeepProvisionedPackages.IsChecked + $keepProvisionedPackages = $sync.WPFMicrowinKeepAppxPackages.IsChecked + $keepDefender = $sync.WPFMicrowinKeepDefender.IsChecked + $keepEdge = $sync.WPFMicrowinKeepEdge.IsChecked + $copyToUSB = $sync.WPFMicrowinCopyToUsb.IsChecked + $injectDrivers = $sync.MicrowinInjectDrivers.IsChecked + $importDrivers = $sync.MicrowinImportDrivers.IsChecked $mountDir = $sync.MicrowinMountDir.Text $scratchDir = $sync.MicrowinScratchDir.Text - # Detect if the Windows image is an ESD file and convert it to WIM - if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf)) - { - Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..." - Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max" - if ($?) - { + # Detect if the Windows image is an ESD file and convert it to WIM + if (-not (Test-Path -Path $mountDir\sources\install.wim -PathType Leaf) -and (Test-Path -Path $mountDir\sources\install.esd -PathType Leaf)) { + Write-Host "Exporting Windows image to a WIM file, keeping the index we want to work on. This can take several minutes, depending on the performance of your computer..." + Export-WindowsImage -SourceImagePath $mountDir\sources\install.esd -SourceIndex $index -DestinationImagePath $mountDir\sources\install.wim -CompressionType "Max" + if ($?) { Remove-Item -Path $mountDir\sources\install.esd -Force - # Since we've already exported the image index we wanted, switch to the first one - $index = 1 - } - else - { + # Since we've already exported the image index we wanted, switch to the first one + $index = 1 + } else { $msg = "The export process has failed and MicroWin processing cannot continue" Write-Host "Failed to export the image" [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error) - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return - } - } + } + } $imgVersion = (Get-WindowsImage -ImagePath $mountDir\sources\install.wim -Index $index).Version # Detect image version to avoid performing MicroWin processing on Windows 8 and earlier - if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false) - { - $msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image." + if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,10240,0))) -eq $false) { + $msg = "This image is not compatible with MicroWin processing. Make sure it isn't a Windows 8 or earlier image." $dlg_msg = $msg + "`n`nIf you want more information, the version of the image selected is $($imgVersion)`n`nIf an image has been incorrectly marked as incompatible, report an issue to the developers." - Write-Host $msg - [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation) - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Write-Host $msg + [System.Windows.MessageBox]::Show($dlg_msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Exclamation) + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - $mountDirExists = Test-Path $mountDir + $mountDirExists = Test-Path $mountDir $scratchDirExists = Test-Path $scratchDir - if (-not $mountDirExists -or -not $scratchDirExists) - { + if (-not $mountDirExists -or -not $scratchDirExists) { Write-Error "Required directories '$mountDirExists' '$scratchDirExists' and do not exist." - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - try { + try { - Write-Host "Mounting Windows image. This may take a while." + Write-Host "Mounting Windows image. This may take a while." Mount-WindowsImage -ImagePath "$mountDir\sources\install.wim" -Index $index -Path "$scratchDir" - if ($?) - { - Write-Host "Mounting complete! Performing removal of applications..." - } - else - { + if ($?) { + Write-Host "Mounting complete! Performing removal of applications..." + } else { Write-Host "Could not mount image. Exiting..." - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" return } - if ($importDrivers) - { - Write-Host "Exporting drivers from active installation..." - if (Test-Path "$env:TEMP\DRV_EXPORT") - { - Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force - } - if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text))) - { - Write-Host "Using specified driver source..." - dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host - if ($?) - { - # Don't add exported drivers yet, that is run later - Write-Host "Drivers have been exported successfully." - } - else - { - Write-Host "Failed to export drivers." - } - } - else - { - New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force - dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host - if ($?) - { - Write-Host "Adding exported drivers..." - dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host - } - else - { - Write-Host "Failed to export drivers. Continuing without importing them..." - } - if (Test-Path "$env:TEMP\DRV_EXPORT") - { - Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force - } - } - } + if ($importDrivers) { + Write-Host "Exporting drivers from active installation..." + if (Test-Path "$env:TEMP\DRV_EXPORT") { + Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force + } + if (($injectDrivers -and (Test-Path $sync.MicrowinDriverLocation.Text))) { + Write-Host "Using specified driver source..." + dism /english /online /export-driver /destination="$($sync.MicrowinDriverLocation.Text)" | Out-Host + if ($?) { + # Don't add exported drivers yet, that is run later + Write-Host "Drivers have been exported successfully." + } else { + Write-Host "Failed to export drivers." + } + } else { + New-Item -Path "$env:TEMP\DRV_EXPORT" -ItemType Directory -Force + dism /english /online /export-driver /destination="$env:TEMP\DRV_EXPORT" | Out-Host + if ($?) { + Write-Host "Adding exported drivers..." + dism /english /image="$scratchDir" /add-driver /driver="$env:TEMP\DRV_EXPORT" /recurse | Out-Host + } else { + Write-Host "Failed to export drivers. Continuing without importing them..." + } + if (Test-Path "$env:TEMP\DRV_EXPORT") { + Remove-Item "$env:TEMP\DRV_EXPORT" -Recurse -Force + } + } + } - if ($injectDrivers) - { - $driverPath = $sync.MicrowinDriverLocation.Text - if (Test-Path $driverPath) - { - Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " - dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host - } - else - { - Write-Host "Path to drivers is invalid continuing without driver injection" - } - } + if ($injectDrivers) { + $driverPath = $sync.MicrowinDriverLocation.Text + if (Test-Path $driverPath) { + Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " + dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host + } else { + Write-Host "Path to drivers is invalid continuing without driver injection" + } + } - Write-Host "Remove Features from the image" - Remove-Features -keepDefender:$keepDefender - Write-Host "Removing features complete!" + Write-Host "Remove Features from the image" + Remove-Features -keepDefender:$keepDefender + Write-Host "Removing features complete!" - if (!$keepPackages) - { - Write-Host "Removing OS packages" - Remove-Packages - } - if (!$keepProvisionedPackages) - { - Write-Host "Removing Appx Bloat" - Remove-ProvisionedPackages -keepSecurity:$keepDefender - } + if (!$keepPackages) { + Write-Host "Removing OS packages" + Remove-Packages + } + if (!$keepProvisionedPackages) { + Write-Host "Removing Appx Bloat" + Remove-ProvisionedPackages -keepSecurity:$keepDefender + } - # special code, for some reason when you try to delete some inbox apps - # we have to get and delete log files directory. - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\WebThreatDefSvc" -Directory + # special code, for some reason when you try to delete some inbox apps + # we have to get and delete log files directory. + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LogFiles\WMI\RtBackup" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\WebThreatDefSvc" -Directory - # Defender is hidden in 2 places we removed a feature above now need to remove it from the disk - if (!$keepDefender) - { - Write-Host "Removing Defender" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender" - } - if (!$keepEdge) - { - Write-Host "Removing Edge" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory - } + # Defender is hidden in 2 places we removed a feature above now need to remove it from the disk + if (!$keepDefender) { + Write-Host "Removing Defender" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Defender" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Defender" + } + if (!$keepEdge) { + Write-Host "Removing Edge" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Microsoft" -mask "*edge*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Microsoft" -mask "*edge*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*edge*" -Directory + } - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\SecurityHealthSystray.exe" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LocationNotificationWindows.exe" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Photo Viewer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Photo Viewer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Media Player" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Media Player" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Mail" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Mail" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Internet Explorer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Internet Explorer" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\GameBarPresenceWriter" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDriveSetup.exe" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDrive.ico" - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Windows.Search*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*narratorquickstart*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Xbox*" -Directory - Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*ParentalControls*" -Directory - Write-Host "Removal complete!" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\DiagTrack" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\InboxApps" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\SecurityHealthSystray.exe" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\LocationNotificationWindows.exe" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Photo Viewer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Photo Viewer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Media Player" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Media Player" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Windows Mail" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Windows Mail" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files (x86)\Internet Explorer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Program Files\Internet Explorer" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\GameBarPresenceWriter" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDriveSetup.exe" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\System32\OneDrive.ico" + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Windows.Search*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*narratorquickstart*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*Xbox*" -Directory + Remove-FileOrDirectory -pathToDelete "$($scratchDir)\Windows\SystemApps" -mask "*ParentalControls*" -Directory + Write-Host "Removal complete!" - Write-Host "Create unattend.xml" - New-Unattend - Write-Host "Done Create unattend.xml" - Write-Host "Copy unattend.xml file into the ISO" - New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\Panther" - Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force - New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep" - Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force - Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force - Write-Host "Done Copy unattend.xml" + Write-Host "Create unattend.xml" + New-Unattend + Write-Host "Done Create unattend.xml" + Write-Host "Copy unattend.xml file into the ISO" + New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\Panther" + Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\Panther\unattend.xml" -force + New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\Sysprep" + Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\Windows\System32\Sysprep\unattend.xml" -force + Copy-Item "$env:temp\unattend.xml" "$($scratchDir)\unattend.xml" -force + Write-Host "Done Copy unattend.xml" - Write-Host "Create FirstRun" - New-FirstRun - Write-Host "Done create FirstRun" - Write-Host "Copy FirstRun.ps1 into the ISO" - Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force - Write-Host "Done copy FirstRun.ps1" + Write-Host "Create FirstRun" + New-FirstRun + Write-Host "Done create FirstRun" + Write-Host "Copy FirstRun.ps1 into the ISO" + Copy-Item "$env:temp\FirstStartup.ps1" "$($scratchDir)\Windows\FirstStartup.ps1" -force + Write-Host "Done copy FirstRun.ps1" - Write-Host "Copy link to winutil.ps1 into the ISO" - $desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop" - New-Item -ItemType Directory -Force -Path "$desktopDir" - dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default" + Write-Host "Copy link to winutil.ps1 into the ISO" + $desktopDir = "$($scratchDir)\Windows\Users\Default\Desktop" + New-Item -ItemType Directory -Force -Path "$desktopDir" + dism /English /image:$($scratchDir) /set-profilepath:"$($scratchDir)\Windows\Users\Default" - # $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" - # $shortcutPath = "$desktopDir\WinUtil.lnk" - # $shell = New-Object -ComObject WScript.Shell - # $shortcut = $shell.CreateShortcut($shortcutPath) + # $command = "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command 'irm https://christitus.com/win | iex'" + # $shortcutPath = "$desktopDir\WinUtil.lnk" + # $shell = New-Object -ComObject WScript.Shell + # $shortcut = $shell.CreateShortcut($shortcutPath) - # if (Test-Path -Path "$env:TEMP\cttlogo.png") - # { - # $pngPath = "$env:TEMP\cttlogo.png" - # $icoPath = "$env:TEMP\cttlogo.ico" - # ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath - # Write-Host "ICO file created at: $icoPath" - # Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force - # Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force - # $shortcut.IconLocation = "c:\Windows\cttlogo.ico" - # } + # if (Test-Path -Path "$env:TEMP\cttlogo.png") + # { + # $pngPath = "$env:TEMP\cttlogo.png" + # $icoPath = "$env:TEMP\cttlogo.ico" + # ConvertTo-Icon -bitmapPath $pngPath -iconPath $icoPath + # Write-Host "ICO file created at: $icoPath" + # Copy-Item "$env:TEMP\cttlogo.png" "$($scratchDir)\Windows\cttlogo.png" -force + # Copy-Item "$env:TEMP\cttlogo.ico" "$($scratchDir)\Windows\cttlogo.ico" -force + # $shortcut.IconLocation = "c:\Windows\cttlogo.ico" + # } - # $shortcut.TargetPath = "powershell.exe" - # $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" - # $shortcut.Save() - # Write-Host "Shortcut to winutil created at: $shortcutPath" - # *************************** Automation black *************************** + # $shortcut.TargetPath = "powershell.exe" + # $shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command `"$command`"" + # $shortcut.Save() + # Write-Host "Shortcut to winutil created at: $shortcutPath" + # *************************** Automation black *************************** - Write-Host "Copy checkinstall.cmd into the ISO" - New-CheckInstall - Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force - Write-Host "Done copy checkinstall.cmd" + Write-Host "Copy checkinstall.cmd into the ISO" + New-CheckInstall + Copy-Item "$env:temp\checkinstall.cmd" "$($scratchDir)\Windows\checkinstall.cmd" -force + Write-Host "Done copy checkinstall.cmd" - Write-Host "Creating a directory that allows to bypass Wifi setup" - New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO" + Write-Host "Creating a directory that allows to bypass Wifi setup" + New-Item -ItemType Directory -Force -Path "$($scratchDir)\Windows\System32\OOBE\BYPASSNRO" - Write-Host "Loading registry" - reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" - reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" - reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" - reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" - reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" + Write-Host "Loading registry" + reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" + reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" + reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" + reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" + reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" - Write-Host "Disabling Teams" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" /t REG_DWORD /d 0 /f >$null 2>&1 - reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1 - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1 - reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1 - # Write-Host Error code $LASTEXITCODE - Write-Host "Done disabling Teams" + Write-Host "Disabling Teams" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" /t REG_DWORD /d 0 /f >$null 2>&1 + reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\Windows Chat" /v ChatIcon /t REG_DWORD /d 2 /f >$null 2>&1 + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f >$null 2>&1 + reg query "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Communications" /v "ConfigureChatAutoInstall" >$null 2>&1 + # Write-Host Error code $LASTEXITCODE + Write-Host "Done disabling Teams" - Write-Host "Bypassing system requirements (system image)" - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f + Write-Host "Bypassing system requirements (system image)" + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f - if (!$keepEdge) - { - Write-Host "Removing Edge icon from taskbar" - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Favorites" /f >$null 2>&1 - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "FavoritesChanges" /f >$null 2>&1 - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Pinned" /f >$null 2>&1 - reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "LayoutCycle" /f >$null 2>&1 - Write-Host "Edge icon removed from taskbar" - if (Test-Path "HKLM:\zSOFTWARE\WOW6432Node") - { - # Remove leftovers of 64-bit installations - # --- - # Remove registry values first... - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /va /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /va /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /va /f > $null 2>&1 - # ...then the registry keys - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f > $null 2>&1 - reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f > $null 2>&1 - } - } + if (!$keepEdge) { + Write-Host "Removing Edge icon from taskbar" + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Favorites" /f >$null 2>&1 + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "FavoritesChanges" /f >$null 2>&1 + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "Pinned" /f >$null 2>&1 + reg delete "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband" /v "LayoutCycle" /f >$null 2>&1 + Write-Host "Edge icon removed from taskbar" + if (Test-Path "HKLM:\zSOFTWARE\WOW6432Node") { + # Remove leftovers of 64-bit installations + # --- + # Remove registry values first... + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /va /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /va /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /va /f > $null 2>&1 + # ...then the registry keys + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" /f > $null 2>&1 + reg delete "HKLM\zSOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" /f > $null 2>&1 + } + } - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f - Write-Host "Setting all services to start manually" - reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f - # Write-Host $LASTEXITCODE + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f + Write-Host "Setting all services to start manually" + reg add "HKLM\zSOFTWARE\CurrentControlSet\Services" /v Start /t REG_DWORD /d 3 /f + # Write-Host $LASTEXITCODE - Write-Host "Enabling Local Accounts on OOBE" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f + Write-Host "Enabling Local Accounts on OOBE" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v "BypassNRO" /t REG_DWORD /d "1" /f - Write-Host "Disabling Sponsored Apps" - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OemPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f - reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f - reg add "HKLM\zSOFTWARE\Microsoft\PolicyManager\current\device\Start" /v "ConfigureStartPins" /t REG_SZ /d '{\"pinnedList\": [{}]}' /f - Write-Host "Done removing Sponsored Apps" + Write-Host "Disabling Sponsored Apps" + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OemPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f + reg add "HKLM\zSOFTWARE\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f + reg add "HKLM\zSOFTWARE\Microsoft\PolicyManager\current\device\Start" /v "ConfigureStartPins" /t REG_SZ /d '{\"pinnedList\": [{}]}' /f + Write-Host "Done removing Sponsored Apps" - Write-Host "Disabling Reserved Storage" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f + Write-Host "Disabling Reserved Storage" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager" /v "ShippedWithReserves" /t REG_DWORD /d 0 /f - Write-Host "Changing theme to dark. This only works on Activated Windows" - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f - reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f + Write-Host "Changing theme to dark. This only works on Activated Windows" + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "AppsUseLightTheme" /t REG_DWORD /d 0 /f + reg add "HKLM\zSOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v "SystemUsesLightTheme" /t REG_DWORD /d 0 /f - } catch { + } catch { Write-Error "An unexpected error occurred: $_" } finally { - Write-Host "Unmounting Registry..." - reg unload HKLM\zCOMPONENTS - reg unload HKLM\zDEFAULT - reg unload HKLM\zNTUSER - reg unload HKLM\zSOFTWARE - reg unload HKLM\zSYSTEM + Write-Host "Unmounting Registry..." + reg unload HKLM\zCOMPONENTS + reg unload HKLM\zDEFAULT + reg unload HKLM\zNTUSER + reg unload HKLM\zSOFTWARE + reg unload HKLM\zSYSTEM - Write-Host "Cleaning up image..." - dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase - Write-Host "Cleanup complete." + Write-Host "Cleaning up image..." + dism /English /image:$scratchDir /Cleanup-Image /StartComponentCleanup /ResetBase + Write-Host "Cleanup complete." - Write-Host "Unmounting image..." + Write-Host "Unmounting image..." Dismount-WindowsImage -Path $scratchDir -Save - } + } - try { + try { - Write-Host "Exporting image into $mountDir\sources\install2.wim" + Write-Host "Exporting image into $mountDir\sources\install2.wim" Export-WindowsImage -SourceImagePath "$mountDir\sources\install.wim" -SourceIndex $index -DestinationImagePath "$mountDir\sources\install2.wim" -CompressionType "Max" - Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim" - Remove-Item "$mountDir\sources\install.wim" - Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim" + Write-Host "Remove old '$mountDir\sources\install.wim' and rename $mountDir\sources\install2.wim" + Remove-Item "$mountDir\sources\install.wim" + Rename-Item "$mountDir\sources\install2.wim" "$mountDir\sources\install.wim" - if (-not (Test-Path -Path "$mountDir\sources\install.wim")) - { - Write-Error "Something went wrong and '$mountDir\sources\install.wim' doesn't exist. Please report this bug to the devs" - Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" - return - } - Write-Host "Windows image completed. Continuing with boot.wim." + if (-not (Test-Path -Path "$mountDir\sources\install.wim")) { + Write-Error "Something went wrong and '$mountDir\sources\install.wim' doesn't exist. Please report this bug to the devs" + Set-WinUtilTaskbaritem -state "Error" -value 1 -overlay "warning" + return + } + Write-Host "Windows image completed. Continuing with boot.wim." - # Next step boot image - Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir" + # Next step boot image + Write-Host "Mounting boot image $mountDir\sources\boot.wim into $scratchDir" Mount-WindowsImage -ImagePath "$mountDir\sources\boot.wim" -Index 2 -Path "$scratchDir" - if ($injectDrivers) - { - $driverPath = $sync.MicrowinDriverLocation.Text - if (Test-Path $driverPath) - { - Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " - dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host - } - else - { - Write-Host "Path to drivers is invalid continuing without driver injection" - } - } + if ($injectDrivers) { + $driverPath = $sync.MicrowinDriverLocation.Text + if (Test-Path $driverPath) { + Write-Host "Adding Windows Drivers image($scratchDir) drivers($driverPath) " + dism /English /image:$scratchDir /add-driver /driver:$driverPath /recurse | Out-Host + } else { + Write-Host "Path to drivers is invalid continuing without driver injection" + } + } - Write-Host "Loading registry..." - reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null - reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null - reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null - reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null - reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" >$null - Write-Host "Bypassing system requirements on the setup image" - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f - reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f - reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f - # Fix Computer Restarted Unexpectedly Error on New Bare Metal Install - reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f - } catch { + Write-Host "Loading registry..." + reg load HKLM\zCOMPONENTS "$($scratchDir)\Windows\System32\config\COMPONENTS" >$null + reg load HKLM\zDEFAULT "$($scratchDir)\Windows\System32\config\default" >$null + reg load HKLM\zNTUSER "$($scratchDir)\Users\Default\ntuser.dat" >$null + reg load HKLM\zSOFTWARE "$($scratchDir)\Windows\System32\config\SOFTWARE" >$null + reg load HKLM\zSYSTEM "$($scratchDir)\Windows\System32\config\SYSTEM" >$null + Write-Host "Bypassing system requirements on the setup image" + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zDEFAULT\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV1" /t REG_DWORD /d 0 /f + reg add "HKLM\zNTUSER\Control Panel\UnsupportedHardwareNotificationCache" /v "SV2" /t REG_DWORD /d 0 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassCPUCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassRAMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassSecureBootCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassStorageCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\LabConfig" /v "BypassTPMCheck" /t REG_DWORD /d 1 /f + reg add "HKLM\zSYSTEM\Setup\MoSetup" /v "AllowUpgradesWithUnsupportedTPMOrCPU" /t REG_DWORD /d 1 /f + # Fix Computer Restarted Unexpectedly Error on New Bare Metal Install + reg add "HKLM\zSYSTEM\Setup\Status\ChildCompletion" /v "setup.exe" /t REG_DWORD /d 3 /f + } catch { Write-Error "An unexpected error occurred: $_" } finally { - Write-Host "Unmounting Registry..." - reg unload HKLM\zCOMPONENTS - reg unload HKLM\zDEFAULT - reg unload HKLM\zNTUSER - reg unload HKLM\zSOFTWARE - reg unload HKLM\zSYSTEM + Write-Host "Unmounting Registry..." + reg unload HKLM\zCOMPONENTS + reg unload HKLM\zDEFAULT + reg unload HKLM\zNTUSER + reg unload HKLM\zSOFTWARE + reg unload HKLM\zSYSTEM - Write-Host "Unmounting image..." + Write-Host "Unmounting image..." Dismount-WindowsImage -Path $scratchDir -Save - Write-Host "Creating ISO image" + Write-Host "Creating ISO image" - # if we downloaded oscdimg from github it will be in the temp directory so use it - # if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe - $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe' - $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf - if (!$oscdImgFound) - { - $oscdimgPath = "oscdimg.exe" - } + # if we downloaded oscdimg from github it will be in the temp directory so use it + # if it is not in temp it is part of ADK and is in global PATH so just set it to oscdimg.exe + $oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe' + $oscdImgFound = Test-Path $oscdimgPath -PathType Leaf + if (!$oscdImgFound) { + $oscdimgPath = "oscdimg.exe" + } - Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath" - - $oscdimgProc = Start-Process -FilePath "$oscdimgPath" -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin `"$mountDir`" `"$($SaveDialog.FileName)`"" -Wait -PassThru -NoNewWindow - - $LASTEXITCODE = $oscdimgProc.ExitCode - - Write-Host "OSCDIMG Error Level : $($oscdimgProc.ExitCode)" + Write-Host "[INFO] Using oscdimg.exe from: $oscdimgPath" + + $oscdimgProc = Start-Process -FilePath "$oscdimgPath" -ArgumentList "-m -o -u2 -udfver102 -bootdata:2#p0,e,b$mountDir\boot\etfsboot.com#pEF,e,b$mountDir\efi\microsoft\boot\efisys.bin `"$mountDir`" `"$($SaveDialog.FileName)`"" -Wait -PassThru -NoNewWindow + + $LASTEXITCODE = $oscdimgProc.ExitCode + + Write-Host "OSCDIMG Error Level : $($oscdimgProc.ExitCode)" - if ($copyToUSB) - { - Write-Host "Copying target ISO to the USB drive" - Copy-ToUSB("$($SaveDialog.FileName)") - if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." } - } + if ($copyToUSB) { + Write-Host "Copying target ISO to the USB drive" + Copy-ToUSB("$($SaveDialog.FileName)") + if ($?) { Write-Host "Done Copying target ISO to USB drive!" } else { Write-Host "ISO copy failed." } + } - Write-Host " _____ " - Write-Host "(____ \ " - Write-Host " _ \ \ ___ ____ ____ " - Write-Host "| | | / _ \| _ \ / _ ) " - Write-Host "| |__/ / |_| | | | ( (/ / " - Write-Host "|_____/ \___/|_| |_|\____) " + Write-Host " _____ " + Write-Host "(____ \ " + Write-Host " _ \ \ ___ ____ ____ " + Write-Host "| | | / _ \| _ \ / _ ) " + Write-Host "| |__/ / |_| | | | ( (/ / " + Write-Host "|_____/ \___/|_| |_|\____) " - # Check if the ISO was successfully created - CTT edit - if ($LASTEXITCODE -eq 0) { - Write-Host "`n`nPerforming Cleanup..." - Remove-Item -Recurse -Force "$($scratchDir)" - Remove-Item -Recurse -Force "$($mountDir)" - $msg = "Done. ISO image is located here: $($SaveDialog.FileName)" - Write-Host $msg - Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" - [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information) - } else { - Write-Host "ISO creation failed. The "$($mountDir)" directory has not been removed." - try - { - # This creates a new Win32 exception from which we can extract a message in the system language. - # Now, this will NOT throw an exception - $exitCode = New-Object System.ComponentModel.Win32Exception($LASTEXITCODE) - Write-Host "Reason: $($exitCode.Message)" - } - catch - { - # Could not get error description from Windows APIs - } - } + # Check if the ISO was successfully created - CTT edit + if ($LASTEXITCODE -eq 0) { + Write-Host "`n`nPerforming Cleanup..." + Remove-Item -Recurse -Force "$($scratchDir)" + Remove-Item -Recurse -Force "$($mountDir)" + $msg = "Done. ISO image is located here: $($SaveDialog.FileName)" + Write-Host $msg + Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" + [System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information) + } else { + Write-Host "ISO creation failed. The "$($mountDir)" directory has not been removed." + try { + # This creates a new Win32 exception from which we can extract a message in the system language. + # Now, this will NOT throw an exception + $exitCode = New-Object System.ComponentModel.Win32Exception($LASTEXITCODE) + Write-Host "Reason: $($exitCode.Message)" + } catch { + # Could not get error description from Windows APIs + } + } - $sync.MicrowinOptionsPanel.Visibility = 'Collapsed' + $sync.MicrowinOptionsPanel.Visibility = 'Collapsed' - #$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso" + #$sync.MicrowinFinalIsoLocation.Text = "$env:temp\microwin.iso" $sync.MicrowinFinalIsoLocation.Text = "$($SaveDialog.FileName)" - # Allow the machine to sleep again (optional) - [PowerManagement]::SetThreadExecutionState(0) - $sync.ProcessRunning = $false - } -} \ No newline at end of file + # Allow the machine to sleep again (optional) + [PowerManagement]::SetThreadExecutionState(0) + $sync.ProcessRunning = $false + } +} diff --git a/functions/public/Invoke-WPFOOSU.ps1 b/functions/public/Invoke-WPFOOSU.ps1 index 4d61c83f..e2522d3d 100644 --- a/functions/public/Invoke-WPFOOSU.ps1 +++ b/functions/public/Invoke-WPFOOSU.ps1 @@ -10,11 +10,10 @@ function Invoke-WPFOOSU { 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 { + } catch { Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red } finally { $ProgressPreference = $Initial_ProgressPreference } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFPanelDISM.ps1 b/functions/public/Invoke-WPFPanelDISM.ps1 index a1d266cf..31b36364 100644 --- a/functions/public/Invoke-WPFPanelDISM.ps1 +++ b/functions/public/Invoke-WPFPanelDISM.ps1 @@ -27,4 +27,4 @@ function Invoke-WPFPanelDISM { Write-Host '`n(3/4) DISM' -ForegroundColor Green; DISM /Online /Cleanup-Image /Restorehealth; Write-Host '`n(4/4) SFC - 2nd scan' -ForegroundColor Green; sfc /scannow; Read-Host '`nPress Enter to Continue'" -verb runas -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFPresets.ps1 b/functions/public/Invoke-WPFPresets.ps1 index dde2ce78..1595a8f1 100644 --- a/functions/public/Invoke-WPFPresets.ps1 +++ b/functions/public/Invoke-WPFPresets.ps1 @@ -20,10 +20,9 @@ function Invoke-WPFPresets { [bool]$imported = $false ) - if($imported -eq $true){ + if($imported -eq $true) { $CheckBoxesToCheck = $preset - } - Else{ + } else { $CheckBoxesToCheck = $sync.configs.preset.$preset } @@ -39,8 +38,7 @@ function Invoke-WPFPresets { foreach ($CheckBox in $CheckBoxes) { $checkboxName = $CheckBox.Key - if (-not $CheckBoxesToCheck) - { + if (-not $CheckBoxesToCheck) { $sync.$checkboxName.IsChecked = $false continue } diff --git a/functions/public/Invoke-WPFRunspace.ps1 b/functions/public/Invoke-WPFRunspace.ps1 index cb624ef3..dfb3a6cd 100644 --- a/functions/public/Invoke-WPFRunspace.ps1 +++ b/functions/public/Invoke-WPFRunspace.ps1 @@ -38,12 +38,11 @@ function Invoke-WPFRunspace { $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) - { + if ($script:handle.IsCompleted) { $script:powershell.EndInvoke($script:handle) $script:powershell.Dispose() $sync.runspace.Dispose() $sync.runspace.Close() [System.GC]::Collect() } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFShortcut.ps1 b/functions/public/Invoke-WPFShortcut.ps1 index d82f6ccd..6b25bdfe 100644 --- a/functions/public/Invoke-WPFShortcut.ps1 +++ b/functions/public/Invoke-WPFShortcut.ps1 @@ -21,10 +21,9 @@ function Invoke-WPFShortcut { Switch ($ShortcutToAdd) { "WinUtil" { # Use Powershell 7 if installed and fallback to PS5 if not - if (Get-Command "pwsh" -ErrorAction SilentlyContinue){ + if (Get-Command "pwsh" -ErrorAction SilentlyContinue) { $shell = "pwsh.exe" - } - else{ + } else { $shell = "powershell.exe" } diff --git a/functions/public/Invoke-WPFTab.ps1 b/functions/public/Invoke-WPFTab.ps1 index 644348d9..7333467f 100644 --- a/functions/public/Invoke-WPFTab.ps1 +++ b/functions/public/Invoke-WPFTab.ps1 @@ -21,8 +21,7 @@ function Invoke-WPFTab { $sync[$PSItem.Name].IsChecked = $false # $tabNumber = [int]($PSItem.Name -replace "WPFTab","" -replace "BT","") - 1 # $sync.$tabNav.Items[$tabNumber].IsSelected = $false - } - else { + } else { $sync["$ClickedTab"].IsChecked = $true $tabNumber = [int]($ClickedTab-replace "WPFTab","" -replace "BT","") - 1 $sync.$tabNav.Items[$tabNumber].IsSelected = $true diff --git a/functions/public/Invoke-WPFToggle.ps1 b/functions/public/Invoke-WPFToggle.ps1 index fa1868f2..d0b79da1 100644 --- a/functions/public/Invoke-WPFToggle.ps1 +++ b/functions/public/Invoke-WPFToggle.ps1 @@ -15,7 +15,7 @@ function Invoke-WPFToggle { # Use this to get the name of the button #[System.Windows.MessageBox]::Show("$Button","Chris Titus Tech's Windows Utility","OK","Info") - Switch -Wildcard ($Button){ + Switch -Wildcard ($Button) { "WPFToggleDarkMode" {Invoke-WinUtilDarkMode -DarkMoveEnabled $(Get-WinUtilToggleStatus WPFToggleDarkMode)} "WPFToggleBingSearch" {Invoke-WinUtilBingSearch $(Get-WinUtilToggleStatus WPFToggleBingSearch)} diff --git a/functions/public/Invoke-WPFTweakPS7.ps1 b/functions/public/Invoke-WPFTweakPS7.ps1 index ac37e652..3e291c4c 100644 --- a/functions/public/Invoke-WPFTweakPS7.ps1 +++ b/functions/public/Invoke-WPFTweakPS7.ps1 @@ -26,13 +26,13 @@ function Invoke-WPFTweakPS7{ } } # Check if the Windows Terminal is installed and return if not (Prerequisite for the following code) - if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)){ + if (-not (Get-Command "wt" -ErrorAction SilentlyContinue)) { Write-Host "Windows Terminal not installed. Skipping Terminal preference" return } # Check if the Windows Terminal settings.json file exists and return if not (Prereqisite for the following code) $settingsPath = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json" - if (-not (Test-Path -Path $settingsPath)){ + if (-not (Test-Path -Path $settingsPath)) { Write-Host "Windows Terminal Settings file not found at $settingsPath" return } diff --git a/functions/public/Invoke-WPFUltimatePerformance.ps1 b/functions/public/Invoke-WPFUltimatePerformance.ps1 index d1a12780..8000b420 100644 --- a/functions/public/Invoke-WPFUltimatePerformance.ps1 +++ b/functions/public/Invoke-WPFUltimatePerformance.ps1 @@ -9,10 +9,10 @@ Function Invoke-WPFUltimatePerformance { #> param($State) - Try{ + try { # Check if Ultimate Performance plan is installed $ultimatePlan = powercfg -list | Select-String -Pattern "Ultimate Performance" - if($state -eq "Enable"){ + if($state -eq "Enable") { if ($ultimatePlan) { Write-Host "Ultimate Performance plan is already installed." } else { @@ -29,7 +29,7 @@ Function Invoke-WPFUltimatePerformance { } - elseif($state -eq "Disable"){ + elseif($state -eq "Disable") { if ($ultimatePlan) { # Extract the GUID of the Ultimate Performance plan $ultimatePlanGUID = $ultimatePlan.Line.Split()[3] @@ -47,7 +47,7 @@ Function Invoke-WPFUltimatePerformance { Write-Host "Ultimate Performance plan is not installed." } } - } Catch{ + } catch { Write-Warning $psitem.Exception.Message } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFUnInstall.ps1 b/functions/public/Invoke-WPFUnInstall.ps1 index ff8ff94e..19aec2d2 100644 --- a/functions/public/Invoke-WPFUnInstall.ps1 +++ b/functions/public/Invoke-WPFUnInstall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFUnInstall { #> - if($sync.ProcessRunning){ + 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 @@ -27,12 +27,12 @@ function Invoke-WPFUnInstall { $confirm = [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) - if($confirm -eq "No"){return} + if($confirm -eq "No") {return} Invoke-WPFRunspace -ArgumentList $PackagesToInstall -DebugPreference $DebugPreference -ScriptBlock { param($PackagesToInstall, $DebugPreference) - if ($PackagesToInstall.count -eq 1){ + if ($PackagesToInstall.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" }) @@ -51,14 +51,14 @@ function Invoke-WPFUnInstall { } return $packagesWinget, $packagesChoco }.Invoke($PackagesToInstall) - try{ + try { $sync.ProcessRunning = $true # Install all selected programs in new window - if($packagesWinget.Count -gt 0){ + if($packagesWinget.Count -gt 0) { Invoke-WinUtilWingetProgram -Action Uninstall -Programs $packagesWinget } - if($packagesChoco.Count -gt 0){ + if($packagesChoco.Count -gt 0) { Install-WinUtilProgramChoco -ProgramsToInstall $packagesChoco -Manage "Uninstalling" } @@ -66,8 +66,7 @@ function Invoke-WPFUnInstall { Write-Host "-- Uninstalls have finished ---" Write-Host "===========================================" $sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" }) - } - Catch { + } catch { Write-Host "===========================================" Write-Host "Error: $_" Write-Host "===========================================" diff --git a/functions/public/Invoke-WPFUpdatesdefault.ps1 b/functions/public/Invoke-WPFUpdatesdefault.ps1 index 3e1cebdd..0b786f32 100644 --- a/functions/public/Invoke-WPFUpdatesdefault.ps1 +++ b/functions/public/Invoke-WPFUpdatesdefault.ps1 @@ -42,4 +42,4 @@ function Invoke-WPFUpdatesdefault { Write-Host "===================================================" Write-Host "--- Windows Update Settings Reset to Default ---" Write-Host "===================================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFUpdatesdisable.ps1 b/functions/public/Invoke-WPFUpdatesdisable.ps1 index 3167039f..d3f28815 100644 --- a/functions/public/Invoke-WPFUpdatesdisable.ps1 +++ b/functions/public/Invoke-WPFUpdatesdisable.ps1 @@ -32,4 +32,4 @@ function Invoke-WPFUpdatesdisable { Write-Host "=================================" Write-Host "--- Updates ARE DISABLED ---" Write-Host "=================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFUpdatessecurity.ps1 b/functions/public/Invoke-WPFUpdatessecurity.ps1 index e310d6a4..ed7fe937 100644 --- a/functions/public/Invoke-WPFUpdatessecurity.ps1 +++ b/functions/public/Invoke-WPFUpdatessecurity.ps1 @@ -50,4 +50,4 @@ function Invoke-WPFUpdatessecurity { Write-Host "=================================" Write-Host "-- Updates Set to Recommended ---" Write-Host "=================================" -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFtweaksbutton.ps1 b/functions/public/Invoke-WPFtweaksbutton.ps1 index 99f40602..a389bcee 100644 --- a/functions/public/Invoke-WPFtweaksbutton.ps1 +++ b/functions/public/Invoke-WPFtweaksbutton.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFtweaksbutton { #> - if($sync.ProcessRunning){ + 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 @@ -16,7 +16,7 @@ function Invoke-WPFtweaksbutton { Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text - if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default"){ + 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 @@ -30,17 +30,16 @@ function Invoke-WPFtweaksbutton { $sync.ProcessRunning = $true - if ($Tweaks.count -eq 1){ + 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++){ + 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) }) + 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 @@ -55,4 +54,4 @@ function Invoke-WPFtweaksbutton { # $MessageIcon = [System.Windows.MessageBoxImage]::Information # [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon) } -} \ No newline at end of file +} diff --git a/functions/public/Invoke-WPFundoall.ps1 b/functions/public/Invoke-WPFundoall.ps1 index 62c4004b..826e1576 100644 --- a/functions/public/Invoke-WPFundoall.ps1 +++ b/functions/public/Invoke-WPFundoall.ps1 @@ -6,7 +6,7 @@ function Invoke-WPFundoall { #> - if($sync.ProcessRunning){ + 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 @@ -14,7 +14,7 @@ function Invoke-WPFundoall { $tweaks = (Get-WinUtilCheckBoxes)["WPFtweaks"] - if ($tweaks.count -eq 0){ + 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 @@ -24,14 +24,14 @@ function Invoke-WPFundoall { param($tweaks, $DebugPreference) $sync.ProcessRunning = $true - if ($tweaks.count -eq 1){ + 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++){ + 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) }) @@ -45,4 +45,4 @@ function Invoke-WPFundoall { Write-Host "==================================" } -} \ No newline at end of file +} diff --git a/gpedit-home.ps1 b/gpedit-home.ps1 index a4931963..43c552a3 100644 --- a/gpedit-home.ps1 +++ b/gpedit-home.ps1 @@ -1,4 +1,4 @@ Get-ChildItem @( "$env:SystemRoot\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package*.mum", "$env:SystemRoot\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package*.mum" -) | ForEach-Object { dism.exe /online /norestart /add-package:"$_" } \ No newline at end of file +) | ForEach-Object { dism.exe /online /norestart /add-package:"$_" } diff --git a/lint/PSScriptAnalyser.ps1 b/lint/PSScriptAnalyser.ps1 index 20a9080f..47feae83 100644 --- a/lint/PSScriptAnalyser.ps1 +++ b/lint/PSScriptAnalyser.ps1 @@ -22,4 +22,4 @@ # Note: if a rule is in both IncludeRules and ExcludeRules, the rule # will be excluded. ExcludeRules = @('PSAvoidUsingWriteHost') -} \ No newline at end of file +} diff --git a/overrides/main.html b/overrides/main.html index f680422d..f5f0eb39 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -2,4 +2,4 @@ {% block footer %} {# Empty block to override the footer #} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/pester/configs.Tests.ps1 b/pester/configs.Tests.ps1 index 6a0a76bd..dd2db7f3 100644 --- a/pester/configs.Tests.ps1 +++ b/pester/configs.Tests.ps1 @@ -25,19 +25,19 @@ Describe "Config Files" -ForEach @( name = "tweaks" undo = $true } -){ +) { Context "$name config file" { It "Imports with no errors" { $global:importedconfigs.$name | should -Not -BeNullOrEmpty } - if ($config){ + if ($config) { It "Imports should be the correct structure" { $applications = $global:importedconfigs.$name | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name $template = $config | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name $result = New-Object System.Collections.Generic.List[System.Object] Foreach ($application in $applications) { $compare = $global:importedconfigs.$name.$application | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name - if ($(Compare-Object $compare $template) -ne $null){ + if ($(Compare-Object $compare $template) -ne $null) { $result.Add($application) } } @@ -45,12 +45,12 @@ Describe "Config Files" -ForEach @( $result | Select-String "WPF*" | should -BeNullOrEmpty } } - if($undo){ + if($undo) { It "Tweaks should contain original Value" { $tweaks = $global:importedconfigs.$name | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty name $result = New-Object System.Collections.Generic.List[System.Object] - foreach ($tweak in $tweaks){ + foreach ($tweak in $tweaks) { $Originals = @( @{ name = "registry" @@ -65,10 +65,10 @@ Describe "Config Files" -ForEach @( value = "OriginalState" } ) - Foreach ($original in $Originals){ + Foreach ($original in $Originals) { $TotalCount = ($global:importedconfigs.$name.$tweak.$($original.name)).count $OriginalCount = ($global:importedconfigs.$name.$tweak.$($original.name).$($original.value) | Where-Object {$_}).count - if($TotalCount -ne $OriginalCount){ + if($TotalCount -ne $OriginalCount) { $result.Add("$Tweak,$($original.name)") } } @@ -78,4 +78,4 @@ Describe "Config Files" -ForEach @( } } -} \ No newline at end of file +} diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 248bf605..c1d476f4 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -11,7 +11,7 @@ $InitialSessionState.Variables.Add($hashVars) # Get every private function and add them to the session state $functions = (Get-ChildItem function:\).where{$_.name -like "*winutil*" -or $_.name -like "*WPF*"} -foreach ($function in $functions){ +foreach ($function in $functions) { $functionDefinition = Get-Content function:\$($function.name) $functionEntry = New-Object System.Management.Automation.Runspaces.SessionStateFunctionEntry -ArgumentList $($function.name), $functionDefinition @@ -55,12 +55,10 @@ $inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace "x:N", 'N' -repla if ((Get-WinUtilToggleStatus WPFToggleDarkMode) -eq $True) { if (Invoke-WinUtilGPU -eq $True) { $ctttheme = 'Matrix' - } - else { + } else { $ctttheme = 'Dark' } -} -else { +} else { $ctttheme = 'Classic' } $inputXML = Set-WinUtilUITheme -inputXML $inputXML -themeName $ctttheme @@ -90,9 +88,9 @@ try { $xaml.SelectNodes("//*[@Name]") | ForEach-Object {$sync["$("$($psitem.Name)")"] = $sync["Form"].FindName($psitem.Name)} $sync.keys | ForEach-Object { - if($sync.$psitem){ + if($sync.$psitem) { if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "CheckBox" ` - -and $sync["$psitem"].Name -like "WPFToggle*"){ + -and $sync["$psitem"].Name -like "WPFToggle*") { $sync["$psitem"].IsChecked = Get-WinUtilToggleStatus $sync["$psitem"].Name $sync["$psitem"].Add_Click({ @@ -101,14 +99,14 @@ $sync.keys | ForEach-Object { }) } - if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "ToggleButton"){ + if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "ToggleButton") { $sync["$psitem"].Add_Click({ [System.Object]$Sender = $args[0] Invoke-WPFButton $Sender.name }) } - if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "Button"){ + if($($sync["$psitem"].GetType() | Select-Object -ExpandProperty Name) -eq "Button") { $sync["$psitem"].Add_Click({ [System.Object]$Sender = $args[0] Invoke-WPFButton $Sender.name @@ -134,7 +132,7 @@ $sync.keys | ForEach-Object { # Load computer information in the background Invoke-WPFRunspace -ScriptBlock { - try{ + try { $oldProgressPreference = $ProgressPreference $ProgressPreference = "SilentlyContinue" $sync.ConfigLoaded = $False @@ -179,8 +177,7 @@ $commonKeyEvents = { return } - if ($_.Key -eq "Escape") - { + if ($_.Key -eq "Escape") { $sync.SearchBar.SelectAll() $sync.SearchBar.Text = "" $sync.SearchBarClearButton.Visibility = "Collapsed" @@ -188,8 +185,7 @@ $commonKeyEvents = { } # don't ask, I know what I'm doing, just go... - if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl")) - { + if (($_.Key -eq "Q" -and $_.KeyboardDevice.Modifiers -eq "Ctrl")) { $this.Close() } if ($_.KeyboardDevice.Modifiers -eq "Alt") { @@ -232,12 +228,9 @@ $sync["Form"].Add_MouseLeftButtonDown({ }) $sync["Form"].Add_MouseDoubleClick({ - if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal) - { + if ($sync["Form"].WindowState -eq [Windows.WindowState]::Normal) { $sync["Form"].WindowState = [Windows.WindowState]::Maximized; - } - else - { + } else { $sync["Form"].WindowState = [Windows.WindowState]::Normal; } }) @@ -283,11 +276,11 @@ Add-Type @" foreach ($proc in (Get-Process).where{ $_.MainWindowTitle -and $_.MainWindowTitle -like "*titus*" }) { # Check if the process's MainWindowHandle is valid - if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) { + if ($proc.MainWindowHandle -ne [System.IntPtr]::Zero) { Write-Debug "MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle) $($proc.MainWindowHandle)" $windowHandle = $proc.MainWindowHandle - } else { - Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)" + } else { + Write-Warning "Process found, but no MainWindowHandle: $($proc.Id) $($proc.MainWindowTitle)" } } @@ -328,9 +321,9 @@ Add-Type @" # maybe this is not the best place to load and execute config file? # maybe community can help? - if ($PARAM_CONFIG){ + if ($PARAM_CONFIG) { Invoke-WPFImpex -type "import" -Config $PARAM_CONFIG - if ($PARAM_RUN){ + if ($PARAM_RUN) { while ($sync.ProcessRunning) { Start-Sleep -Seconds 5 } @@ -377,8 +370,7 @@ $sync["SearchBar"].Add_TextChanged({ if ($sync.SearchBar.Text -ne "") { $sync.SearchBarClearButton.Visibility = "Visible" - } - else { + } else { $sync.SearchBarClearButton.Visibility = "Collapsed" } @@ -404,8 +396,7 @@ $sync["SearchBar"].Add_TextChanged({ if ($textBlock -ne $null) { $textBlock.Visibility = "Visible" } - } - else { + } else { $CheckBox.Value.Visibility = "Collapsed" # Set the corresponding text block visibility if ($textBlock -ne $null) { @@ -415,17 +406,16 @@ $sync["SearchBar"].Add_TextChanged({ } $activeCategories = $activeApplications | Select-Object -ExpandProperty category -Unique - foreach ($category in $activeCategories){ + foreach ($category in $activeCategories) { $label = $labels[$(Get-WPFObjectName -type "Label" -name $category)] $label.Visibility = "Visible" } - if ($activeCategories){ + if ($activeCategories) { $inactiveCategories = Compare-Object -ReferenceObject $allCategories -DifferenceObject $activeCategories -PassThru - } - else{ + } else { $inactiveCategories = $allCategories } - foreach ($category in $inactiveCategories){ + foreach ($category in $inactiveCategories) { $label = $labels[$(Get-WPFObjectName -type "Label" -name $category)] $label.Visibility = "Collapsed"} }) @@ -471,8 +461,7 @@ $sync["SettingsButton"].Add_Click({ Write-Debug "SettingsButton clicked" if ($sync["SettingsPopup"].IsOpen) { $sync["SettingsPopup"].IsOpen = $false - } - else { + } else { $sync["SettingsPopup"].IsOpen = $true } $_.Handled = $false @@ -528,8 +517,7 @@ $sync["SponsorMenuItem"].Add_Click({ # Append the sponsors to the authorInfo $sponsors | ForEach-Object { $authorInfo += "$_`n" } - } - catch { + } catch { $authorInfo += "An error occurred while fetching or processing the sponsors: $_`n" } diff --git a/scripts/start.ps1 b/scripts/start.ps1 index 4f68920a..73693260 100644 --- a/scripts/start.ps1 +++ b/scripts/start.ps1 @@ -45,8 +45,7 @@ $sync.configs = @{} $sync.ProcessRunning = $false # If script isn't running as admin, show error message and quit -If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544") -{ +If (([Security.Principal.WindowsIdentity]::GetCurrent()).Owner.Value -ne "S-1-5-32-544") { Write-Host "===========================================" -Foregroundcolor Red Write-Host "-- Scripts must be run as Administrator ---" -Foregroundcolor Red Write-Host "-- Right-Click Start -> Terminal(Admin) ---" -Foregroundcolor Red diff --git a/tools/Invoke-Preprocessing.ps1 b/tools/Invoke-Preprocessing.ps1 new file mode 100644 index 00000000..c9692fc6 --- /dev/null +++ b/tools/Invoke-Preprocessing.ps1 @@ -0,0 +1,139 @@ + function Invoke-Preprocessing { + <# + .SYNOPSIS + A function that does Code Formatting using RegEx, useful when trying to force specific coding standard(s) to a project. + + .PARAMETER ThrowExceptionOnEmptyFilesList + A switch which'll throw an exception upon not finding any files inside the provided 'WorkingDir'. + + .PARAMETER SkipExcludedFilesValidation + A switch to stop file path validation on 'ExcludedFiles' list. + + .PARAMETER ExcludedFiles + A list of file paths which're *relative to* 'WorkingDir' Folder, every item in the list can be pointing to File (doesn't end with '\') or Directory (ends with '\') or None-Existing File/Directory. + By default, it checks if everyitem exists, and throws an exception if one or more are not found (None-Existing), if you want to skip this validation, please consider providing the '-SkipExcludedFilesValidation' switch to skip this check. + + .PARAMETER WorkingDir + The folder to search inside recursively for files which're going to be Preprocessed (Code Formatted), unless they're found in 'ExcludedFiles' List. + Note: The path should be absolute, NOT relative. + + .PARAMETER ProgressStatusMessage + The status message used when displaying the progress bar, which's done through PowerShell 'Write-Progress' Cmdlet. + This's a Required Parameter, as the information displayed to terminal is useful when running this function, + which might take less than 1 sec to minutes depending on project's scale & hardware performance. + + .PARAMETER ProgressActivity + The activity message used when displaying the progress bar, which's done through PowerShell 'Write-Progress' Cmdlet, + This's an Optional Parameter, default value is 'Preprocessing', used in combination with 'ProgressStatusMessage' Parameter Value. + + .EXAMPLE + Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" + + Calls 'Invoke-Preprocessing' function using Named Paramters, with 'WorkingDir' (Mandatory Parameter) which's used as the base folder when searching for files recursively (using 'Get-ChildItem'), other two paramters are, in order from right to left, the Optional 'ExcludeFiles', which can be a path to a file, folder, or pattern-matched (like '*.png'), and the 'ProgressStatusMessage', which's used in Progress Bar. + + .EXAMPLE + Invoke-Preprocessing -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" -ProgressActivity "Re-Formatting Code" + + Same as Example No. 1, but uses 'ProgressActivity' which's used in Progress Bar. + + .EXAMPLE + Invoke-Preprocessing -ThrowExceptionOnEmptyFilesList -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" + + Same as Example No. 1, but will throw an exception when 'Invoke-Preprocessing' function doesn't find any files in 'WorkingDir' (not including 'ExcludedFiles' list). + + .EXAMPLE + Invoke-Preprocessing -Skip -WorkingDir "DRIVE:\Path\To\Folder\" -ExcludedFiles @('file.txt', '.\.git\', '*.png') -ProgressStatusMessage "Doing Preprocessing" + + Same as Example No. 1, but uses '-SkipExcludedFilesValidation', which'll skip the validation step for 'ExcludedFiles' list. This can be useful when 'ExcludedFiles' list is generated from another function, or from unreliable source (you can't guarantee every item in list is a valid path), but you want to silently continue through the function. + #> + + param ( + [Parameter(position=0)] + [switch]$SkipExcludedFilesValidation, + + [Parameter(position=1)] + [switch]$ThrowExceptionOnEmptyFilesList, + + [Parameter(Mandatory, position=2)] + [ValidateScript({[System.IO.Path]::IsPathRooted($_)})] + [string]$WorkingDir, + + [Parameter(position=3)] + [string[]]$ExcludedFiles, + + [Parameter(Mandatory, position=4)] + [string]$ProgressStatusMessage, + + [Parameter(position=5)] + [string]$ProgressActivity = "Preprocessing" + ) + + if (-NOT (Test-Path -PathType Container -Path "$WorkingDir")) { + throw "[Invoke-Preprocessing] Invalid Paramter Value for 'WorkingDir', passed value: '$WorkingDir'. Either the path is a File or Non-Existing/Invlid, please double check your code." + } + + $count = $ExcludedFiles.Count + if ((-NOT ($count -eq 0)) -AND (-NOT $SkipExcludedFilesValidation)) { + for ($i = 0; $i -lt $count; $i++) { + $excludedFile = $ExcludedFiles[$i] + $filePath = "$(($WorkingDir -replace ('\\$', '')) + '\' + ($excludedFile -replace ('\.\\', '')))" + if (-NOT (Get-ChildItem -Recurse -Path "$filePath" -File)) { + $failedFilesList += "'$filePath', " + } + } + $failedFilesList = $failedFilesList -replace (',\s*$', '') + if (-NOT $failedFilesList -eq "") { + throw "[Invoke-Preprocessing] One or more File Paths & File Patterns were not found, you can use '-SkipExcludedFilesValidation' switch to skip this check, and the failed files are: $failedFilesList" + } + } + + $files = Get-ChildItem $WorkingDir -Recurse -Exclude $ExcludedFiles -File + $numOfFiles = $files.Count + + if ($numOfFiles -eq 0) { + if ($ThrowExceptionOnEmptyFilesList) { + throw "[Invoke-Preprocessing] Found 0 Files to Preprocess inside 'WorkingDir' Directory and '-ThrowExceptionOnEmptyFilesList' Switch is provided, value of 'WorkingDir': '$WorkingDir'." + } else { + return # Do an early return, there's nothing else to do + } + } + + for ($i = 0; $i -lt $numOfFiles; $i++) { + $file = $files[$i] + + # If the file is in Exclude List, don't proceed to check/modify said file. + $fileIsExcluded = $False + for ($j = 0; $j -lt $excludedFiles.Count; $j++) { + $excluded = $excludedFiles[$j] + $strToCompare = ($excluded) -replace ('^\.\\', '') + if ($file.FullName.Contains("$strToCompare")) { + $fileIsExcluded = $True + break + } + } + + if ($fileIsExcluded) { + continue + } + + # TODO: + # make more formatting rules, and document them in WinUtil Official Documentation + (Get-Content "$file").TrimEnd() ` + -replace ('\t', ' ') ` + -replace ('\)\s*\{', ') {') ` + -replace ('(?if|for|foreach)\s*(?\([.*?]\))\s*\{', '${keyword} ${condition} {') ` + -replace ('\}\s*elseif\s*(?\([.*?]\))\s*\{', '} elseif ${condition} {') ` + -replace ('\}\s*else\s*\{', '} else {') ` + -replace ('Try\s*\{', 'try {') ` + -replace ('Catch\s*\{', 'catch {') ` + -replace ('\}\s*Catch', '} catch') ` + -replace ('\}\s*Catch\s*(?(\[.*?\]\s*(\,)?\s*)+)\s*\{', '} catch ${exceptions} {') ` + -replace ('\}\s*Catch\s*(?\[.*?\])\s*\{', '} catch ${exceptions} {') ` + -replace ('(?\[.*?\])\s*(?\$.*?(,|\s*\)))', '${parameter_type}${str_after_type}') ` + | Set-Content "$file" + + Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished $i out of $numOfFiles" -PercentComplete (($i/$numOfFiles)*100) + } + + Write-Progress -Activity $ProgressActivity -Status "$ProgressStatusMessage - Finished Task Successfully" -Completed +} diff --git a/winget.ps1 b/winget.ps1 index b7761cc2..861584f9 100644 --- a/winget.ps1 +++ b/winget.ps1 @@ -35,15 +35,15 @@ <# .SYNOPSIS - Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. + Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. .DESCRIPTION - Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. + Downloads and installs the latest version of winget and its dependencies. Updates the PATH variable if needed. This script is designed to be straightforward and easy to use, removing the hassle of manually downloading, installing, and configuring winget. To make the newly installed winget available for use, a system reboot may be required after running the script. This function should be run with administrative privileges. .EXAMPLE - winget-install + winget-install .PARAMETER DebugMode Enables debug mode, which shows additional information for debugging. .PARAMETER DisableCleanup @@ -57,10 +57,10 @@ This function should be run with administrative privileges. .PARAMETER Help Displays the full help information for the script. .NOTES - Version : 3.0.1 - Created by : asheroto + Version : 3.0.1 + Created by : asheroto .LINK - Project Site: https://github.com/asheroto/winget-install + Project Site: https://github.com/asheroto/winget-install #> [CmdletBinding()] param (