diff --git a/.github/workflows/close-old-issues.yaml b/.github/workflows/close-old-issues.yaml index 733a5707..b3dbf8f0 100644 --- a/.github/workflows/close-old-issues.yaml +++ b/.github/workflows/close-old-issues.yaml @@ -16,8 +16,20 @@ jobs: - name: Close inactive issues uses: actions/stale@v9.0.0 with: + # A list of labels to reference when looking through issues, + # and only when one (or even more) of these labels are found.. + # then skip this issue, and never try to stale and/or close it. exempt-issue-labels: "Keep Issue Open" - days-before-issue-close: 14 - close-issue-message: "This issue was closed because it has been inactive for 14 days" - debug-only: false # Make this field equal true if you want to test your configuration if it works or not + # Split it into two weeks, after one week the issue will be marked as stale, + # after another week have pasted without any update.. the issue will then be closed. + days-before-issue-stale: 7 + days-before-issue-close: 7 + # NEVER mark PRs as Stale or Close + this workflow should never have write permissions on PRs, EVER! + days-before-pr-stale: -1 + days-before-pr-close: -1 + # Sends a message for both the Stale and Close events of an issue. + stale-issue-message: "This issue was marked as stale because it has been inactive for 7 days" + close-issue-message: "This issue was closed because it has been inactive for 7 days since it was marked as stale" + # Make this field equal true if you want to test your configuration if it works correctly or not + debug-only: false repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pre-release.yaml b/.github/workflows/pre-release.yaml new file mode 100644 index 00000000..01b9a9f6 --- /dev/null +++ b/.github/workflows/pre-release.yaml @@ -0,0 +1,46 @@ +name: Pre-Release WinUtil + +on: + workflow_run: + workflows: ["Compile"] #Ensure Compile winget.ps1 is done + types: + - completed + workflow_dispatch: # Manual trigger added + +jobs: + build-runspace: + runs-on: windows-latest + outputs: + version: ${{ steps.extract_version.outputs.version }} + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Extract Version from winutil.ps1 + id: extract_version + run: | + $version = '' + Get-Content ./winutil.ps1 -TotalCount 30 | ForEach-Object { + if ($_ -match 'Version\s*:\s*(\d{2}\.\d{2}\.\d{2})') { + $version = $matches[1] + echo "version=$version" >> $GITHUB_ENV + echo "::set-output name=version::$version" + break + } + } + if (-not $version) { + Write-Error "Version not found in winutil.ps1" + exit 1 + } + shell: pwsh + + - name: Create and Upload Release + id: create_release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.extract_version.outputs.version }} + name: Pre-Release ${{ steps.extract_version.outputs.version }} + files: ./winutil.ps1 + prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fc3e679b..5bf217bb 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,10 +1,6 @@ name: Release WinUtil on: - workflow_run: - workflows: ["Compile"] #Ensure Compile winget.ps1 is done - types: - - completed workflow_dispatch: # Manual trigger added jobs: @@ -41,5 +37,6 @@ jobs: tag_name: ${{ steps.extract_version.outputs.version }} name: Release ${{ steps.extract_version.outputs.version }} files: ./winutil.ps1 + prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Compile.ps1 b/Compile.ps1 index 5fdec759..84217b37 100644 --- a/Compile.ps1 +++ b/Compile.ps1 @@ -1,5 +1,6 @@ param ( - [switch]$Debug + [switch]$Debug, + [switch]$Run ) $OFS = "`r`n" $scriptname = "winutil.ps1" @@ -63,13 +64,6 @@ Get-ChildItem .\config | Where-Object {$psitem.extension -eq ".json"} | ForEach- $sync.configs.$($psitem.BaseName) = $json | convertfrom-json $script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$json' `| convertfrom-json" )) } -Write-Progress -Activity "Compiling" -Status "Adding: Config *.cfg" -PercentComplete 45 -Get-ChildItem .\config | Where-Object {$PSItem.Extension -eq ".cfg"} | ForEach-Object { - $script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$(Get-Content $PSItem.FullName)'")) -} -Get-ChildItem .\config | Where-Object {$PSItem.Extension -eq ".cfg"} | ForEach-Object { - $script_content.Add($(Write-output "`$sync.configs.$($psitem.BaseName) = '$(Get-Content $PSItem.FullName)'")) -} $xaml = (Get-Content .\xaml\inputXML.xaml).replace("'","''") @@ -107,3 +101,13 @@ else { Set-Content -Path $scriptname -Value ($script_content -join "`r`n") -Encoding ascii Write-Progress -Activity "Compiling" -Completed + +if ($run){ + try { + Start-Process -FilePath "pwsh" -ArgumentList ".\$scriptname" + } + catch { + Start-Process -FilePath "powershell" -ArgumentList ".\$scriptname" + } + +} diff --git a/README.md b/README.md index 0716fdcd..e733e80a 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,9 @@ or by executing: iwr -useb https://christitus.com/win | iex ``` -if for some reason this site is not reachable from your country please try running it directly from github (replace `RELEASE_TAG` with current release that you are interested in, for example `v2024.06.05`) +if for some reason this site is not reachable from your country please try running it directly from github. ``` -irm "https://github.com/ChrisTitusTech/winutil/releases/download/RELEASE_TAG/winutil.ps1" | iex +irm "https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1" | iex ``` #### Automation diff --git a/config/applications.json b/config/applications.json index 0ab64a6e..35adf1fe 100644 --- a/config/applications.json +++ b/config/applications.json @@ -151,14 +151,6 @@ "link": "https://github.com/sharkdp/bat", "winget": "sharkdp.bat" }, - "WPFInstallbitcomet": { - "category": "Utilities", - "choco": "bitcomet", - "content": "BitComet", - "description": "BitComet is a free and open-source BitTorrent client that supports HTTP/FTP downloads and provides download management features.", - "link": "https://www.bitcomet.com/", - "winget": "CometNetwork.BitComet" - }, "WPFInstallbitwarden": { "category": "Utilities", "choco": "bitwarden", @@ -183,14 +175,6 @@ "link": "https://www.blender.org/", "winget": "BlenderFoundation.Blender" }, - "WPFInstallbluestacks": { - "category": "Games", - "choco": "bluestacks", - "content": "Bluestacks", - "description": "Bluestacks is an Android emulator for running mobile apps and games on a PC.", - "link": "https://www.bluestacks.com/", - "winget": "BlueStack.BlueStacks" - }, "WPFInstallbrave": { "category": "Browsers", "choco": "brave", @@ -215,6 +199,14 @@ "link": "https://www.bulkrenameutility.co.uk", "winget": "TGRMNSoftware.BulkRenameUtility" }, + "WPFInstallAdvancedRenamer": { + "category": "Utilities", + "choco": "advanced-renamer", + "content": "Advanced Renamer", + "description": "Advanced Renamer is a program for renaming multiple files and folders at once. By configuring renaming methods the names can be manipulated in various ways.", + "link": "https://www.advancedrenamer.com/", + "winget": "XP9MD3S1KFCPH1" + }, "WPFInstallcalibre": { "category": "Document", "choco": "calibre", @@ -311,14 +303,6 @@ "link": "https://copyq.readthedocs.io/", "winget": "hluk.CopyQ" }, - "WPFInstallditto": { - "category": "Utilities", - "choco": "ditto", - "content": "Ditto (Clipboard Manager)", - "description": "Ditto is an extension to the Windows Clipboard. You copy something to the Clipboard and Ditto takes what you copied and stores it in a database to retrieve at a later time.", - "link": "https://github.com/sabrogden/Ditto", - "winget": "Ditto.Ditto" - }, "WPFInstallcpuz": { "category": "Utilities", "choco": "cpu-z", @@ -389,7 +373,7 @@ "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": "9PGCV4V3BK4W" + "winget": "DevToys-app.DevToys" }, "WPFInstalldigikam": { "category": "Multimedia Tools", @@ -407,14 +391,17 @@ "link": "https://discord.com/", "winget": "Discord.Discord" }, - "WPFInstallditto": { +<<<<<<< purging-applications + "WPFInstallditto": { "category": "Utilities", "choco": "ditto", "content": "Ditto", "description": "Ditto is an extension to the standard windows clipboard.", - "link": "https://ditto-cp.sourceforge.io/", + "link": "https://github.com/sabrogden/Ditto", "winget": "Ditto.Ditto" }, +======= +>>>>>>> main "WPFInstalldockerdesktop": { "category": "Development", "choco": "docker-desktop", @@ -567,6 +554,14 @@ "link": "https://www.falkon.org/", "winget": "KDE.Falkon" }, + "WPFInstallfastfetch": { + "category": "Utilities", + "choco": "na", + "content": "Fastfetch", + "description": "Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way", + "link": "https://github.com/fastfetch-cli/fastfetch/", + "winget": "fastfetch" + }, "WPFInstallferdium": { "category": "Communications", "choco": "ferdium", @@ -591,7 +586,7 @@ "link": "https://file-converter.io/", "winget": "AdrienAllard.FileConverter" }, - "WPFInstallfiles": { + "WPFInstallfiles": { "category": "Utilities", "choco": "files", "content": "Files", @@ -695,14 +690,6 @@ "link": "https://www.freecadweb.org/", "winget": "FreeCAD.FreeCAD" }, - "WPFInstallorcaslicer": { - "category": "Multimedia Tools", - "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" - }, "WPFInstallfxsound": { "category": "Multimedia Tools", "choco": "fxsound", @@ -749,7 +736,7 @@ "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": "Git.Git;GitExtensionsTeam.GitExtensions" + "winget": "GitExtensionsTeam.GitExtensions" }, "WPFInstallgithubcli": { "category": "Development", @@ -757,7 +744,7 @@ "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": "Git.Git;GitHub.cli" + "winget": "GitHub.cli" }, "WPFInstallgithubdesktop": { "category": "Development", @@ -765,7 +752,7 @@ "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": "Git.Git;GitHub.GitHubDesktop" + "winget": "GitHub.GitHubDesktop" }, "WPFInstallgitkrakenclient": { "category": "Development", @@ -799,12 +786,20 @@ "link": "https://www.gog.com/galaxy", "winget": "GOG.Galaxy" }, + "WPFInstallgitify": { + "category": "Development", + "choco": "na", + "content": "Gitify", + "description": "GitHub notifications on your menu bar.", + "link": "https://www.gitify.io/", + "winget": "Gitify.Gitify" + }, "WPFInstallgolang": { "category": "Development", "choco": "golang", - "content": "GoLang", - "description": "GoLang (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.", - "link": "https://golang.org/", + "content": "Go", + "description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.", + "link": "https://go.dev/", "winget": "GoLang.Go" }, "WPFInstallgoogledrive": { @@ -975,14 +970,6 @@ "link": "https://www.oracle.com/java/", "winget": "EclipseAdoptium.Temurin.18.JRE" }, - "WPFInstalljava20": { - "category": "Development", - "choco": "na", - "content": "Azul Zulu JDK 20", - "description": "Azul Zulu JDK 20 is a distribution of the OpenJDK with long-term support, performance enhancements, and security updates.", - "link": "https://www.azul.com/downloads/zulu-community/", - "winget": "Azul.Zulu.20.JDK" - }, "WPFInstalljava21": { "category": "Development", "choco": "na", @@ -1287,9 +1274,17 @@ "link": "https://www.msi.com/Landing/afterburner", "winget": "Guru3D.Afterburner" }, + "WPFInstallmullvadvpn": { + "category": "Pro Tools", + "choco": "mullvad-app", + "content": "Mullvad VPN", + "description": "This is the VPN client software for the Mullvad VPN service.", + "link": "https://github.com/mullvad/mullvadvpn-app", + "winget": "MullvadVPN.MullvadVPN" + }, "WPFInstallBorderlessGaming": { "category": "Utilities", - "choco": "na", + "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", @@ -1303,14 +1298,6 @@ "link": "https://sourceforge.net/projects/equalizerapo", "winget": "na" }, - "WPFInstallFreeFileSync": { - "category": "Utilities", - "choco": "freefilesync", - "content": "FreeFileSync", - "description": "Synchronize Files and Folders", - "link": "https://freefilesync.org", - "winget": "na" - }, "WPFInstallCompactGUI": { "category": "Utilities", "choco": "compactgui", @@ -1359,6 +1346,14 @@ "link": "https://www.mp3tag.de/en/", "winget": "Mp3tag.Mp3tag" }, + "WPFInstalltagscanner": { + "category": "Multimedia Tools", + "choco": "tagscanner", + "content": "TagScanner (Tag Scanner)", + "description": "TagScanner is a powerful tool for organizing and managing your music collection", + "link": "https://www.xdlab.ru/en/", + "winget": "SergeySerkov.TagScanner" + }, "WPFInstallnanazip": { "category": "Utilities", "choco": "nanazip", @@ -1663,6 +1658,14 @@ "link": "https://www.plex.tv/your-media/", "winget": "Plex.PlexMediaServer" }, + "WPFInstallplexdesktop": { + "category": "Multimedia Tools", + "choco": "plex", + "content": "Plex Desktop", + "description": "Plex Desktop for Windows is the front end for Plex Media Server.", + "link": "https://www.plex.tv", + "winget": "Plex.Plex" + }, "WPFInstallPortmaster": { "category": "Pro Tools", "choco": "portmaster", @@ -1751,6 +1754,14 @@ "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon", "winget": "Microsoft.Sysinternals.ProcessMonitor" }, + "WPFInstallorcaslicer": { + "category": "Utilities", + "choco": "orcaslicer", + "content": "OrcaSlicer", + "description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)", + "link": "https://github.com/SoftFever/OrcaSlicer", + "winget": "SoftFever.OrcaSlicer" + }, "WPFInstallprucaslicer": { "category": "Utilities", "choco": "prusaslicer", @@ -1791,6 +1802,14 @@ "link": "https://www.qbittorrent.org/", "winget": "qBittorrent.qBittorrent" }, + "WPFInstalltransmission": { + "category": "Utilities", + "choco": "transmission", + "content": "Transmission", + "description": "Transmission is a cross-platform BitTorrent client that is open source, easy, powerful, and lean.", + "link": "https://transmissionbt.com/", + "winget": "Transmission.Transmission" + }, "WPFInstalltixati": { "category": "Utilities", "choco": "tixati.portable", @@ -1879,7 +1898,7 @@ "link": "https://www.rust-lang.org/", "winget": "Rustlang.Rust.MSVC" }, - "WPFInstallsagethumbs": { + "WPFInstallsagethumbs": { "category": "Utilities", "choco": "sagethumbs", "content": "SageThumbs", @@ -2007,7 +2026,7 @@ "link": "http://www.uderzo.it/main_products/space_sniffer/", "winget": "UderzoSoftware.SpaceSniffer" }, - "WPFInstallspotube": { + "WPFInstallspotube": { "category": "Multimedia Tools", "choco": "spotube", "content": "Spotube", @@ -2199,6 +2218,14 @@ "link": "https://github.com/thonny/thonny", "winget": "AivarAnnamaa.Thonny" }, + "WPFInstallMuEditor": { + "category": "Development", + "choco": "na", + "content": "Code With Mu (Mu Editor)", + "description": "Mu is a Python code editor for beginner programmers", + "link": "https://codewith.mu/", + "winget": "Mu.Mu" + }, "WPFInstallthorium": { "category": "Browsers", "choco": "na", @@ -2397,7 +2424,7 @@ "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": "Git.Git;Microsoft.VisualStudioCode" + "winget": "Microsoft.VisualStudioCode" }, "WPFInstallvscodium": { "category": "Development", @@ -2405,7 +2432,7 @@ "content": "VS Codium", "description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.", "link": "https://vscodium.com/", - "winget": "Git.Git;VSCodium.VSCodium" + "winget": "VSCodium.VSCodium" }, "WPFInstallwaterfox": { "category": "Browsers", @@ -2431,14 +2458,6 @@ "link": "https://wezfurlong.org/wezterm/index.html", "winget": "wez.wezterm" }, - "WPFInstallwindirstat": { - "category": "Utilities", - "choco": "windirstat", - "content": "WinDirStat", - "description": "WinDirStat is a disk usage statistics viewer and cleanup tool for Windows.", - "link": "https://windirstat.net/", - "winget": "WinDirStat.WinDirStat" - }, "WPFInstallwindowspchealth": { "category": "Utilities", "choco": "na", @@ -2818,7 +2837,7 @@ "WPFInstallForceAutoHDR": { "category": "Utilities", "choco": "na", - "content": "GUI That Forces Auto HDR In Unsupported Games", + "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" @@ -2831,6 +2850,7 @@ "link": "https://joytokey.net/en/", "winget": "JTKsoftware.JoyToKey" }, + "WPFInstallnditools": { "category": "Multimedia Tools", "choco": "na", @@ -2838,5 +2858,29 @@ "description":"NDI, or Network Device Interface, is a video connectivity standard that enables multimedia systems to identify and communicate with one another over IP and to encode, transmit, and receive high-quality, low latency, frame-accurate video and audio, and exchange metadata in real-time.", "link": "https://ndi.video/", "winget": "NDI.NDITools" + }, + "WPFInstallkicad": { + "category": "Pro 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" + }, + "WPFInstallFormatFactory": { + "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" + }, + "WPFInstalldropox": { + "category": "Utilities", + "choco": "na", + "content": "Dropbox", + "description":"The Dropbox desktop app! Save hard drive space, share and edit files and send for signature – all without the distraction of countless browser tabs.", + "link": "https://www.dropbox.com/en_GB/desktop", + "winget": "Dropbox.Dropbox" } } diff --git a/config/ooshutup10_factory.cfg b/config/ooshutup10_factory.cfg deleted file mode 100644 index 1ae2ecab..00000000 --- a/config/ooshutup10_factory.cfg +++ /dev/null @@ -1,227 +0,0 @@ -############################################################################ -# This file was created with O&O ShutUp10++ V1.9.1436 -# and can be imported onto another computer. -# -# Download the application at https://www.oo-software.com/shutup10 -# You can then import the file from within the program. -# -# Alternatively you can import it automatically over a command line. -# Simply use the following parameter: -# OOSU10.exe -# -# Selecting the Option /quiet ends the app right after the import and the -# user does not get any feedback about the import. -# -# We are always happy to answer any questions you may have! -# © 2015-2023 O&O Software GmbH, Berlin. All rights reserved. -# https://www.oo-software.com/ -############################################################################ - -P001 - -P002 - -P003 - -P004 - -P005 - -P006 - -P008 - -P026 - -P027 - -P028 - -P064 - -P065 - -P066 - -P067 - -P070 - -P069 - -P009 - -P010 - -P015 - -P068 - -P016 - -A001 - -A002 - -A003 - -A004 - -A006 - -A005 - -P007 - -P036 - -P025 - -P033 - -P023 - -P056 - -P057 - -P012 - -P034 - -P013 - -P035 - -P062 - -P063 - -P081 - -P047 - -P019 - -P048 - -P049 - -P020 - -P037 - -P011 - -P038 - -P050 - -P051 - -P018 - -P039 - -P021 - -P040 - -P022 - -P041 - -P014 - -P042 - -P052 - -P053 - -P054 - -P055 - -P029 - -P043 - -P030 - -P044 - -P031 - -P045 - -P032 - -P046 - -P058 - -P059 - -P060 - -P061 - -P071 - -P072 - -P073 - -P074 - -P075 - -P076 - -P077 - -P078 - -P079 - -P080 - -P024 - -S001 - -S002 - -S003 - -S008 - -E101 - -E201 - -E115 - -E215 - -E118 - -E218 - -E107 - -E207 - -E111 - -E211 - -E112 - -E212 - -E109 - -E209 - -E121 - -E221 - -E103 - -E203 - -E123 - -E223 - -E124 - -E224 - -E128 - -E228 - -E119 - -E219 - -E120 - -E220 - -E122 - -E222 - -E125 - -E225 - -E126 - -E226 - -E106 - -E206 - -E127 - -E227 - -E001 - -E002 - -E003 - -E008 - -E007 - -E010 - -E011 + -E012 + -E009 - -E004 - -E005 - -E013 - -E014 - -E006 - -Y001 - -Y002 - -Y003 - -Y004 - -Y005 - -Y006 - -Y007 - -C012 - -C002 - -C013 - -C007 - -C008 - -C009 - -C010 - -C011 - -C014 - -C015 - -C101 - -C201 - -C102 - -L001 - -L003 - -L004 - -L005 - -U001 - -U004 - -U005 - -U006 - -U007 - -W001 - -W011 - -W004 - -W005 - -W010 - -W009 - -P017 - -W006 - -W008 - -M006 - -M011 - -M010 - -O003 - -O001 - -S012 - -S013 - -S014 - -K001 - -K002 - -K005 - -M003 - -M015 - -M016 - -M017 - -M018 - -M019 - -M020 - -M021 - -M022 - -M001 - -M004 - -M005 - -M024 - -M012 - -M013 - -M014 - -N001 - diff --git a/config/ooshutup10_recommended.cfg b/config/ooshutup10_recommended.cfg deleted file mode 100644 index 53284193..00000000 --- a/config/ooshutup10_recommended.cfg +++ /dev/null @@ -1,231 +0,0 @@ -############################################################################ -# This file was created with O&O ShutUp10++ V1.9.1438 -# and can be imported onto another computer. -# -# Download the application at https://www.oo-software.com/shutup10 -# You can then import the file from within the program. -# -# Alternatively you can import it automatically over a command line. -# Simply use the following parameter: -# OOSU10.exe -# -# Selecting the Option /quiet ends the app right after the import and the -# user does not get any feedback about the import. -# -# We are always happy to answer any questions you may have! -# © 2015-2024 O&O Software GmbH, Berlin. All rights reserved. -# https://www.oo-software.com/ -############################################################################ - -P001 + -P002 + -P003 + -P004 + -P005 + -P006 + -P008 + -P026 + -P027 + -P028 + -P064 + -P065 + -P066 + -P067 + -P070 + -P069 + -P009 - -P010 + -P015 + -P068 - -P016 - -A001 + -A002 + -A003 + -A004 + -A006 + -A005 + -P007 + -P036 + -P025 + -P033 + -P023 + -P056 + -P057 - -P012 - -P034 - -P013 - -P035 - -P062 - -P063 - -P081 - -P047 - -P019 - -P048 - -P049 - -P020 - -P037 - -P011 - -P038 - -P050 - -P051 - -P018 - -P039 - -P021 - -P040 - -P022 - -P041 - -P014 - -P042 - -P052 - -P053 - -P054 - -P055 - -P029 - -P043 - -P030 - -P044 - -P031 - -P045 - -P032 - -P046 - -P058 - -P059 - -P060 - -P061 - -P071 - -P072 - -P073 - -P074 - -P075 - -P076 - -P077 - -P078 - -P079 - -P080 - -P024 + -S001 + -S002 + -S003 + -S008 - -E101 + -E201 + -E115 + -E215 + -E118 + -E218 + -E107 + -E207 + -E111 + -E211 + -E112 + -E212 + -E109 + -E209 + -E121 + -E221 + -E103 + -E203 + -E123 + -E223 + -E124 + -E224 + -E128 + -E228 + -E119 - -E219 - -E120 - -E220 - -E122 - -E222 - -E125 - -E225 - -E126 - -E226 - -E106 - -E206 - -E127 - -E227 - -E001 + -E002 + -E003 + -E008 + -E007 + -E010 + -E011 + -E012 + -E009 - -E004 - -E005 - -E013 - -E014 - -E006 - -Y001 + -Y002 + -Y003 + -Y004 + -Y005 + -Y006 + -Y007 + -C012 + -C002 + -C013 + -C007 + -C008 + -C009 + -C010 + -C011 + -C014 + -C015 + -C101 + -C201 + -C102 + -C103 + -C203 + -L001 + -L003 + -L004 - -L005 - -U001 + -U004 + -U005 + -U006 + -U007 + -W001 + -W011 + -W004 - -W005 - -W010 - -W009 - -P017 + -W006 - -W008 - -M006 + -M011 - -M010 + -O003 - -O001 - -S012 - -S013 - -S014 - -K001 + -K002 + -K005 + -M003 + -M015 + -M016 + -M017 - -M018 + -M019 - -M020 + -M021 + -M022 + -M001 + -M004 + -M005 + -M024 + -M026 + -M027 + -M012 - -M013 - -M014 - -N001 - \ No newline at end of file diff --git a/config/preset.json b/config/preset.json index cabe8037..f19742d0 100644 --- a/config/preset.json +++ b/config/preset.json @@ -1,11 +1,11 @@ { "Standard": [ "WPFTweaksAH", + "WPFTweaksConsumerFeatures", "WPFTweaksDVR", "WPFTweaksHiber", "WPFTweaksHome", "WPFTweaksLoc", - "WPFTweaksOO", "WPFTweaksServices", "WPFTweaksStorage", "WPFTweaksTele", @@ -17,8 +17,8 @@ "WPFTweaksTeredo" ], "Minimal": [ + "WPFTweaksConsumerFeatures", "WPFTweaksHome", - "WPFTweaksOO", "WPFTweaksServices", "WPFTweaksTele" ] diff --git a/config/tweaks.json b/config/tweaks.json index 4af9dc79..849e4c13 100644 --- a/config/tweaks.json +++ b/config/tweaks.json @@ -58,7 +58,7 @@ "powercfg.exe /hibernate on" ] }, - "WPFToggleTweaksLaptopHybernation": { + "WPFTweaksLaptopHibernation": { "Content": "Set Hibernation as default (good for laptops)", "Description": "Most modern laptops have connected stadby enabled which drains the battery, this sets hibernation as default which will not drain the battery. See issue https://github.com/ChrisTitusTech/winutil/issues/1399", "category": "Essential Tweaks", @@ -1223,11 +1223,6 @@ "StartupType": "Automatic", "OriginalType": "Automatic" }, - { - "Name": "WwanSvc", - "StartupType": "Manual", - "OriginalType": "Manual" - }, { "Name": "XblAuthManager", "StartupType": "Manual", @@ -1585,6 +1580,22 @@ } ] }, + "WPFTweaksConsumerFeatures":{ + "Content": "Disable ConsumerFeatures", + "Description": "Windows 10 will not automatically install any games, third-party apps, or application links from the Windows Store for the signed-in user. Some default Apps will be inaccessible (eg. Phone Link)", + "category": "Essential Tweaks", + "panel": "1", + "Order": "a003_", + "registry": [ + { + "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent", + "OriginalValue": "0", + "Name": "DisableWindowsConsumerFeatures", + "Value": "1", + "Type": "DWord" + } + ] + }, "WPFTweaksTele": { "Content": "Disable Telemetry", "Description": "Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.", @@ -1743,13 +1754,6 @@ "Value": "0", "Type": "DWord" }, - { - "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent", - "OriginalValue": "0", - "Name": "DisableWindowsConsumerFeatures", - "Value": "1", - "Type": "DWord" - }, { "Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules", "OriginalValue": "0", @@ -2313,20 +2317,6 @@ "Invoke-WPFTweakPS7 -action \"PS5\"" ] }, - "WPFTweaksOO": { - "Content": "Run OO Shutup", - "Description": "Runs OO Shutup and applies the recommended Tweaks. https://www.oo-software.com/en/shutup10", - "category": "Essential Tweaks", - "panel": "1", - "Order": "a009_", - "ToolTip": "Runs OO Shutup and applies the recommended Tweaks https://www.oo-software.com/en/shutup10", - "InvokeScript": [ - "Invoke-WPFOOSU -action \"recommended\"" - ], - "UndoScript": [ - "Invoke-WPFOOSU -action \"undo\"" - ] - }, "WPFTweaksStorage": { "Content": "Disable Storage Sense", "Description": "Storage Sense deletes temp files automatically.", @@ -2342,17 +2332,15 @@ }, "WPFTweaksRemoveEdge": { "Content": "Remove Microsoft Edge - NOT RECOMMENDED", - "Description": "Removes MS Edge when it gets reinstalled by updates.", + "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: AveYo", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Order": "a029_", "InvokeScript": [ " #:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat - - curl.exe -s \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -o $ENV:temp\\edgeremoval.bat + Invoke-WebRequest -Uri \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -OutFile \"$ENV:TEMP\\edgeremoval.bat\" Start-Process $ENV:temp\\edgeremoval.bat - " ], "UndoScript": [ @@ -2408,12 +2396,12 @@ "WPFTweaksDisableLMS1": { "Content": "Disable Intel MM (vPro LMS)", "Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.", - "category": "Essential Tweaks", + "category": "z__Advanced Tweaks - CAUTION", "panel": "1", - "Order": "a0015_", + "Order": "a026_", "InvokeScript": [ " - Write-Host \"Kill OneDrive process\" + Write-Host \"Kill LMS\" $serviceName = \"LMS\" Write-Host \"Stopping and disabling service: $serviceName\" Stop-Service -Name $serviceName -Force -ErrorAction SilentlyContinue; @@ -2457,8 +2445,7 @@ ], "UndoScript": [ " - Write-Host \"Install Microsoft Edge\" - taskkill.exe /F /IM \"OneDrive.exe\" + Write-Host \"LMS vPro needs to be redownloaded from intel.com\" " ] @@ -2719,7 +2706,7 @@ }, "WPFTweaksBlockAdobeNet": { "Content": "Adobe Network Block", - "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. ", + "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Order": "a021_", @@ -2982,28 +2969,6 @@ } ] }, - "WPFTweaksEnableipsix": { - "Content": "Enable IPv6", - "Description": "Enables IPv6.", - "category": "z__Advanced Tweaks - CAUTION", - "panel": "1", - "Order": "a023_", - "registry": [ - { - "Path": "HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters", - "Name": "DisabledComponents", - "Value": "0", - "OriginalValue": "0", - "Type": "DWord" - } - ], - "InvokeScript": [ - "Enable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6" - ], - "UndoScript": [ - "Disable-NetAdapterBinding -Name \"*\" -ComponentID ms_tcpip6" - ] - }, "WPFToggleDarkMode": { "Content": "Dark Theme", "Description": "Enable/Disable Dark Mode.", @@ -3081,11 +3046,19 @@ "Description": "If Enabled then Sticky Keys is activated - Sticky keys is an accessibility feature of some graphical user interfaces which assists users who have physical disabilities or help users reduce repetitive strain injury.", "category": "Customize Preferences", "panel": "2", - "Order": "a069_", + "Order": "a070_", + "Type": "Toggle" + }, + "WPFToggleTaskbarSearch": { + "Content": "Taskbar Search", + "Description": "If Enabled Search Button will be on the taskbar.", + "category": "Customize Preferences", + "panel": "2", + "Order": "a068_", "Type": "Toggle" }, "WPFOOSUbutton": { - "Content": "Customize OO Shutup Tweaks", + "Content": "Run OO Shutup 10", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Order": "a039_", @@ -3096,7 +3069,7 @@ "Description": "If Enabled then Widgets Icon in Taskbar will be shown.", "category": "Customize Preferences", "panel": "2", - "Order": "a068_", + "Order": "a069_", "Type": "Toggle" }, "WPFchangedns": { @@ -3141,5 +3114,13 @@ "panel": "2", "Order": "a082_", "Type": "300" + }, + "WPFToggleTaskView": { + "Content": "Task View", + "Description": "If Enabled then Task View Icon in Taskbar will be shown.", + "category": "Customize Preferences", + "panel": "2", + "Order": "a069_", + "Type": "Toggle" } } diff --git a/functions/private/Get-LocalizedYesNo.ps1 b/functions/private/Get-LocalizedYesNo.ps1 index db7c046e..723c0562 100644 --- a/functions/private/Get-LocalizedYesNo.ps1 +++ b/functions/private/Get-LocalizedYesNo.ps1 @@ -27,60 +27,6 @@ function Get-LocalizedYesNo { $regexPattern = '([a-zA-Z])' $charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value } - Write-Debug "According to takeown.exe local Yes is $charactersArray[0]" - # Return the array of characters - return $charactersArray - } - - -function Get-LocalizedYesNoTakeown { - <# - .SYNOPSIS - This function runs takeown.exe and captures its output to extract yes no in a localized Windows - - .DESCRIPTION - The function retrieves lines from the output of takeown.exe until there are at least 2 characters - captured in a specific format, such as "Yes=, No=". - - .EXAMPLE - $yesNoArray = Get-LocalizedYesNo - Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])" - #> - - # Run takeown.exe and capture its output - $takeownOutput = & takeown.exe /? | Out-String - - # Parse the output and retrieve lines until there are at least 2 characters in the array - $found = $false - $charactersArray = @() - foreach ($line in $takeownOutput -split "`r`n") - { - # skip everything before /D flag help - if ($found) - { - # now that /D is found start looking for a single character in double quotes - # in help text there is another string in double quotes but it is not a single character - $regexPattern = '"([a-zA-Z])"' - - $charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value } - - # if ($charactersArray.Count -gt 0) { - # Write-Output "Extracted symbols: $($matches -join ', ')" - # } else { - # Write-Output "No matches found." - # } - - if ($charactersArray.Count -ge 2) - { - break - } - } - elseif ($line -match "/D ") - { - $found = $true - } - } - Write-Debug "According to takeown.exe local Yes is $charactersArray[0]" # Return the array of characters return $charactersArray diff --git a/functions/private/Get-WinUtilToggleStatus.ps1 b/functions/private/Get-WinUtilToggleStatus.ps1 index 95499ef1..249b4541 100644 --- a/functions/private/Get-WinUtilToggleStatus.ps1 +++ b/functions/private/Get-WinUtilToggleStatus.ps1 @@ -98,6 +98,15 @@ Function Get-WinUtilToggleStatus { return $false } } + if($ToggleSwitch -eq "WPFToggleTaskbarSearch"){ + $SearchButton = (Get-ItemProperty -path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search").SearchboxTaskbarMode + if($SearchButton -eq 0){ + return $false + } + else{ + return $true + } + } if ($ToggleSwitch -eq "WPFToggleStickyKeys") { $StickyKeys = (Get-ItemProperty -path 'HKCU:\Control Panel\Accessibility\StickyKeys').Flags if($StickyKeys -eq 58){ @@ -107,6 +116,15 @@ Function Get-WinUtilToggleStatus { return $true } } + if ($ToggleSwitch -eq "WPFToggleTaskView") { + $TaskView = (Get-ItemProperty -path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced').ShowTaskViewButton + if($TaskView -eq 0){ + return $false + } + else{ + return $true + } + } if ($ToggleSwitch -eq "WPFToggleTaskbarWidgets") { $TaskbarWidgets = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced").TaskBarDa if($TaskbarWidgets -eq 0) { diff --git a/functions/private/Invoke-MicroWin-Helper.ps1 b/functions/private/Invoke-MicroWin-Helper.ps1 index f34adb35..c5fdff8a 100644 --- a/functions/private/Invoke-MicroWin-Helper.ps1 +++ b/functions/private/Invoke-MicroWin-Helper.ps1 @@ -1,19 +1,3 @@ -function Invoke-MicroWin-Helper { -<# - - .SYNOPSIS - checking unit tests - - .PARAMETER Name - no parameters - - .EXAMPLE - placeholder - -#> - -} - function Test-CompatibleImage() { <# @@ -175,7 +159,13 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false) { $status = "Removing Provisioned $($appx.PackageName)" Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) - Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue + 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 } diff --git a/functions/private/Invoke-WinUtilGPU.ps1 b/functions/private/Invoke-WinUtilGPU.ps1 index e5436f82..13e4fb76 100644 --- a/functions/private/Invoke-WinUtilGPU.ps1 +++ b/functions/private/Invoke-WinUtilGPU.ps1 @@ -1,29 +1,21 @@ function Invoke-WinUtilGPU { $gpuInfo = Get-CimInstance Win32_VideoController - - foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*NVIDIA*") { - return $true # NVIDIA GPU found - } - } + + # GPUs to blacklist from using Demanding Theming + $lowPowerGPUs = ( + "*NVIDIA GeForce*M*", + "*NVIDIA GeForce*Laptop*", + "*NVIDIA GeForce*GT*", + "*AMD Radeon(TM)*", + "*UHD*" + ) foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*AMD Radeon RX*") { - return $true # AMD GPU Found - } - } - foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*UHD*") { - return $false # Intel Intergrated GPU Found - } - } - foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*AMD Radeon(TM)*") { - return $false # AMD Intergrated GPU Found + 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-WinUtilTaskView.ps1 b/functions/private/Invoke-WinUtilTaskView.ps1 new file mode 100644 index 00000000..b9963294 --- /dev/null +++ b/functions/private/Invoke-WinUtilTaskView.ps1 @@ -0,0 +1,34 @@ +function Invoke-WinUtilTaskView { + <# + + .SYNOPSIS + Enable/Disable Task View + + .PARAMETER Enabled + Indicates whether to enable or disable Task View + + #> + Param($Enabled) + Try{ + if ($Enabled -eq $false){ + Write-Host "Enabling Task View" + $value = 1 + } + 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] { + Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" + } + Catch [System.Management.Automation.ItemNotFoundException] { + Write-Warning $psitem.Exception.ErrorRecord + } + Catch{ + 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 new file mode 100644 index 00000000..e022cf89 --- /dev/null +++ b/functions/private/Invoke-WinUtilTaskbarSearch.ps1 @@ -0,0 +1,34 @@ +function Invoke-WinUtilTaskbarSearch { + <# + + .SYNOPSIS + Enable/Disable Taskbar Widgets + + .PARAMETER Enabled + Indicates whether to enable or disable Taskbar Widgets + + #> + Param($Enabled) + Try{ + if ($Enabled -eq $false){ + Write-Host "Enabling Search Button" + $value = 1 + } + 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] { + Write-Warning "Unable to set $Path\$Name to $Value due to a Security Exception" + } + Catch [System.Management.Automation.ItemNotFoundException] { + Write-Warning $psitem.Exception.ErrorRecord + } + Catch{ + Write-Warning "Unable to set $Name due to unhandled exception" + Write-Warning $psitem.Exception.StackTrace + } +} diff --git a/functions/private/Show-CustomDialog.ps1 b/functions/private/Show-CustomDialog.ps1 index e102c43e..505c7a8d 100644 --- a/functions/private/Show-CustomDialog.ps1 +++ b/functions/private/Show-CustomDialog.ps1 @@ -178,17 +178,67 @@ $cttLogoPath = @" $winutilTextBlock.Foreground = $foregroundColor $winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block $stackPanel.Children.Add($winutilTextBlock) - # Add TextBlock for information with text wrapping and margins $messageTextBlock = New-Object Windows.Controls.TextBlock - $messageTextBlock.Text = $Message $messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping $messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left $messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top $messageTextBlock.Margin = New-Object Windows.Thickness(10) # Add margins around the text block + + # Define the Regex to find hyperlinks formatted as HTML tags + $regex = [regex]::new('([^<]+)') + $lastPos = 0 + + # Iterate through each match and add regular text and hyperlinks + foreach ($match in $regex.Matches($Message)) { + # Add the text before the hyperlink, if any + $textBefore = $Message.Substring($lastPos, $match.Index - $lastPos) + if ($textBefore.Length -gt 0) { + $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textBefore))) + } + + # Create and add the hyperlink + $hyperlink = New-Object Windows.Documents.Hyperlink + $hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value) + $hyperlink.Inlines.Add($match.Groups[2].Value) + $hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline + $hyperlink.Foreground = $foregroundColor + $hyperlink.Add_Click({ + param($sender, $args) + Start-Process $sender.NavigateUri.AbsoluteUri + }) + $hyperlink.Add_MouseEnter({ + param($sender, $args) + $sender.Foreground = [Windows.Media.Brushes]::LightGray + }) + $hyperlink.Add_MouseLeave({ + param($sender, $args) + $sender.Foreground = $foregroundColor + }) + + $messageTextBlock.Inlines.Add($hyperlink) + + # Update the last position + $lastPos = $match.Index + $match.Length + } + + # Add any remaining text after the last hyperlink + if ($lastPos -lt $Message.Length) { + $textAfter = $Message.Substring($lastPos) + $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textAfter))) + } + + # If no matches, add the entire message as a run + if ($regex.Matches($Message).Count -eq 0) { + $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($Message))) + } + + + # Add the TextBlock to the Grid $grid.Children.Add($messageTextBlock) [Windows.Controls.Grid]::SetRow($messageTextBlock, 1) # Set the row to the second row (0-based index) + # Add OK button $okButton = New-Object Windows.Controls.Button $okButton.Content = "OK" diff --git a/functions/public/Invoke-WPFButton.ps1 b/functions/public/Invoke-WPFButton.ps1 index 75ac3917..5ca1dc78 100644 --- a/functions/public/Invoke-WPFButton.ps1 +++ b/functions/public/Invoke-WPFButton.ps1 @@ -26,7 +26,7 @@ function Invoke-WPFButton { "WPFclear" {Invoke-WPFPresets -preset $null -imported $true} "WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"} "WPFtweaksbutton" {Invoke-WPFtweaksbutton} - "WPFOOSUbutton" {Invoke-WPFOOSU -action "customize"} + "WPFOOSUbutton" {Invoke-WPFOOSU} "WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enabled"} "WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disabled"} "WPFundoall" {Invoke-WPFundoall} diff --git a/functions/public/Invoke-WPFOOSU.ps1 b/functions/public/Invoke-WPFOOSU.ps1 index 97f64e89..c47b04bf 100644 --- a/functions/public/Invoke-WPFOOSU.ps1 +++ b/functions/public/Invoke-WPFOOSU.ps1 @@ -1,43 +1,20 @@ function Invoke-WPFOOSU { <# .SYNOPSIS - Downloads and runs OO Shutup 10 with or without config files - .PARAMETER action - Specifies how OOSU should be started - customize: Opens the OOSU GUI - recommended: Loads and applies the recommended OOSU policies silently - undo: Resets all policies to factory silently + Downloads and runs OO Shutup 10 #> - - param ( - [ValidateSet("customize", "recommended", "undo")] - [string]$action - ) - - $OOSU_filepath = "$ENV:temp\OOSU10.exe" - - $Initial_ProgressPreference = $ProgressPreference - $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest - Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath - - switch ($action) - { - "customize"{ - Write-Host "Starting OO Shutup 10 ..." - Start-Process $OOSU_filepath - } - "recommended"{ - $oosu_config = "$ENV:temp\ooshutup10_recommended.cfg" - $sync.configs.ooshutup10_recommended | Out-File -FilePath $oosu_config -Force - Write-Host "Applying recommended OO Shutup 10 Policies" - Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait - } - "undo"{ - $oosu_config = "$ENV:temp\ooshutup10_factory.cfg" - $sync.configs.ooshutup10_factory | Out-File -FilePath $oosu_config -Force - Write-Host "Resetting all OO Shutup 10 Policies" - Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait - } + try { + $OOSU_filepath = "$ENV:temp\OOSU10.exe" + $Initial_ProgressPreference = $ProgressPreference + $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest + Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath + Write-Host "Starting OO Shutup 10 ..." + Start-Process $OOSU_filepath } - $ProgressPreference = $Initial_ProgressPreference -} + 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-WPFPanelAutologin.ps1 b/functions/public/Invoke-WPFPanelAutologin.ps1 index 5291869a..6a2da7b7 100644 --- a/functions/public/Invoke-WPFPanelAutologin.ps1 +++ b/functions/public/Invoke-WPFPanelAutologin.ps1 @@ -5,6 +5,8 @@ function Invoke-WPFPanelAutologin { Enables autologin using Sysinternals Autologon.exe #> - curl.exe -ss "https://live.sysinternals.com/Autologon.exe" -o $env:temp\autologin.exe # Official Microsoft recommendation https://learn.microsoft.com/en-us/sysinternals/downloads/autologon - cmd /c $env:temp\autologin.exe /accepteula -} \ No newline at end of file + + # Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon + Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe" + cmd /c "$env:temp\autologin.exe" /accepteula +} diff --git a/functions/public/Invoke-WPFToggle.ps1 b/functions/public/Invoke-WPFToggle.ps1 index a3c94875..9d923edb 100644 --- a/functions/public/Invoke-WPFToggle.ps1 +++ b/functions/public/Invoke-WPFToggle.ps1 @@ -28,5 +28,7 @@ function Invoke-WPFToggle { "WPFToggleMouseAcceleration" {Invoke-WinUtilMouseAcceleration $(Get-WinUtilToggleStatus WPFToggleMouseAcceleration)} "WPFToggleStickyKeys" {Invoke-WinUtilStickyKeys $(Get-WinUtilToggleStatus WPFToggleStickyKeys)} "WPFToggleTaskbarWidgets" {Invoke-WinUtilTaskbarWidgets $(Get-WinUtilToggleStatus WPFToggleTaskbarWidgets)} + "WPFToggleTaskbarSearch" {Invoke-WinUtilTaskbarSearch $(Get-WinUtilToggleStatus WPFToggleTaskbarSearch)} + "WPFToggleTaskView" {Invoke-WinUtilTaskView $(Get-WinUtilToggleStatus WPFToggleTaskView)} } } diff --git a/functions/public/Invoke-WPFUnInstall.ps1 b/functions/public/Invoke-WPFUnInstall.ps1 index e7ba2b08..f3a9c64f 100644 --- a/functions/public/Invoke-WPFUnInstall.ps1 +++ b/functions/public/Invoke-WPFUnInstall.ps1 @@ -15,7 +15,7 @@ function Invoke-WPFUnInstall { $PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"] if ($PackagesToInstall.Count -eq 0) { - $WarningMsg = "Please select the program(s) to install" + $WarningMsg = "Please select the program(s) to uninstall" [System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } @@ -74,4 +74,4 @@ function Invoke-WPFUnInstall { } $sync.ProcessRunning = $False } -} \ No newline at end of file +} diff --git a/logs/test b/logs/test deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 23978ab7..48bf2b67 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -133,9 +133,17 @@ $sync.keys | ForEach-Object { # Load computer information in the background Invoke-WPFRunspace -ScriptBlock { - $sync.ConfigLoaded = $False - $sync.ComputerInfo = Get-ComputerInfo - $sync.ConfigLoaded = $True + try{ + $oldProgressPreference = $ProgressPreference + $ProgressPreference = "SilentlyContinue" + $sync.ConfigLoaded = $False + $sync.ComputerInfo = Get-ComputerInfo + $sync.ConfigLoaded = $True + } + finally{ + $ProgressPreference = "Continue" + } + } | Out-Null #=========================================================================== @@ -145,9 +153,6 @@ Invoke-WPFRunspace -ScriptBlock { # Print the logo Invoke-WPFFormVariables -# Install Winget if not already present -Install-WinUtilWinget - # Set the titlebar $sync["Form"].title = $sync["Form"].title + " " + $sync.version # Set the commands that will run when the form is closed @@ -282,19 +287,37 @@ Add-Type @" } } - # need to experiemnt more - # setting icon for the windows is still not working - # $pngUrl = "https://christitus.com/images/logo-full.png" - # $pngPath = "$env:TEMP\cttlogo.png" - # $iconPath = "$env:TEMP\cttlogo.ico" - # # Download the PNG file - # Invoke-WebRequest -Uri $pngUrl -OutFile $pngPath - # if (Test-Path -Path $pngPath) { - # ConvertTo-Icon -bitmapPath $pngPath -iconPath $iconPath - # } - # $icon = [System.Drawing.Icon]::ExtractAssociatedIcon($iconPath) - # Write-Host $icon.Handle - # [Window]::SendMessage($windowHandle, 0x80, [IntPtr]::Zero, $icon.Handle) + + # Using a TaskbarItem Overlay until someone figures out how to replace the icon correctly + + # URL of the image + $imageUrl = "https://christitus.com/images/logo-full.png" + + # Download the image + $imagePath = "$env:TEMP\logo-full.png" + Invoke-WebRequest -Uri $imageUrl -OutFile $imagePath + + # Read the image file as a byte array + $imageBytes = [System.IO.File]::ReadAllBytes($imagePath) + + # Convert the byte array to a Base64 string + $base64String = [System.Convert]::ToBase64String($imageBytes) + + # Create a streaming image by streaming the base64 string to a bitmap streamsource + $bitmap = New-Object System.Windows.Media.Imaging.BitmapImage + $bitmap.BeginInit() + $bitmap.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($base64String) + $bitmap.EndInit() + $bitmap.Freeze() + + # Ensure TaskbarItemInfo is created if not already + if (-not $sync["Form"].TaskbarItemInfo) { + $sync["Form"].TaskbarItemInfo = New-Object System.Windows.Shell.TaskbarItemInfo + } + + # Set the overlay icon for the taskbar + $sync["Form"].TaskbarItemInfo.Overlay = $bitmap + $rect = New-Object RECT [Window]::GetWindowRect($windowHandle, [ref]$rect) @@ -467,14 +490,12 @@ $sync["AboutMenuItem"].Add_Click({ # Handle Export menu item click Write-Debug "About clicked" $sync["SettingsPopup"].IsOpen = $false - # Example usage $authorInfo = @" -Author : @christitustech -Runspace : @DeveloperDurp -GUI : @KonTy -MicroWin : @KonTy -GitHub : https://github.com/ChrisTitusTech/winutil -Version : $($sync.version) +Author : @christitustech +Runspace : @DeveloperDurp +MicroWin : @KonTy +GitHub : ChrisTitusTech/winutil +Version : $($sync.version) "@ Show-CustomDialog -Message $authorInfo -Width 400 }) diff --git a/winutil.ps1 b/winutil.ps1 index 5c119f62..6c783f31 100644 --- a/winutil.ps1 +++ b/winutil.ps1 @@ -8,7 +8,7 @@ Author : Chris Titus @christitustech Runspace Author: @DeveloperDurp GitHub : https://github.com/ChrisTitusTech - Version : 24.06.20 + Version : 24.06.28 #> param ( [switch]$Debug, @@ -45,7 +45,7 @@ Add-Type -AssemblyName System.Windows.Forms # Variable to sync between runspaces $sync = [Hashtable]::Synchronized(@{}) $sync.PSScriptRoot = $PSScriptRoot -$sync.version = "24.06.20" +$sync.version = "24.06.28" $sync.configs = @{} $sync.ProcessRunning = $false @@ -170,60 +170,6 @@ function Get-LocalizedYesNo { # Return the array of characters return $charactersArray } - - -function Get-LocalizedYesNoTakeown { - <# - .SYNOPSIS - This function runs takeown.exe and captures its output to extract yes no in a localized Windows - - .DESCRIPTION - The function retrieves lines from the output of takeown.exe until there are at least 2 characters - captured in a specific format, such as "Yes=, No=". - - .EXAMPLE - $yesNoArray = Get-LocalizedYesNo - Write-Host "Yes=$($yesNoArray[0]), No=$($yesNoArray[1])" - #> - - # Run takeown.exe and capture its output - $takeownOutput = & takeown.exe /? | Out-String - - # Parse the output and retrieve lines until there are at least 2 characters in the array - $found = $false - $charactersArray = @() - foreach ($line in $takeownOutput -split "`r`n") - { - # skip everything before /D flag help - if ($found) - { - # now that /D is found start looking for a single character in double quotes - # in help text there is another string in double quotes but it is not a single character - $regexPattern = '"([a-zA-Z])"' - - $charactersArray = [regex]::Matches($line, $regexPattern) | ForEach-Object { $_.Groups[1].Value } - - # if ($charactersArray.Count -gt 0) { - # Write-Output "Extracted symbols: $($matches -join ', ')" - # } else { - # Write-Output "No matches found." - # } - - if ($charactersArray.Count -ge 2) - { - break - } - } - elseif ($line -match "/D ") - { - $found = $true - } - } - - Write-Debug "According to takeown.exe local Yes is $charactersArray[0]" - # Return the array of characters - return $charactersArray - } function Get-Oscdimg { <# @@ -1011,22 +957,6 @@ function Install-WinUtilWinget { } } } -function Invoke-MicroWin-Helper { -<# - - .SYNOPSIS - checking unit tests - - .PARAMETER Name - no parameters - - .EXAMPLE - placeholder - -#> - -} - function Test-CompatibleImage() { <# @@ -1188,7 +1118,13 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false) { $status = "Removing Provisioned $($appx.PackageName)" Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100) - Remove-AppxProvisionedPackage -Path $scratchDir -PackageName $appx.PackageName -ErrorAction SilentlyContinue + 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 } @@ -1899,32 +1835,24 @@ function Invoke-WinUtilFeatureInstall { } function Invoke-WinUtilGPU { $gpuInfo = Get-CimInstance Win32_VideoController - - foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*NVIDIA*") { - return $true # NVIDIA GPU found - } - } + + # GPUs to blacklist from using Demanding Theming + $lowPowerGPUs = ( + "*NVIDIA GeForce*M*", + "*NVIDIA GeForce*Laptop*", + "*NVIDIA GeForce*GT*", + "*AMD Radeon(TM)*", + "*UHD*" + ) foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*AMD Radeon RX*") { - return $true # AMD GPU Found - } - } - foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*UHD*") { - return $false # Intel Intergrated GPU Found - } - } - foreach ($gpu in $gpuInfo) { - $gpuName = $gpu.Name - if ($gpuName -like "*AMD Radeon(TM)*") { - return $false # AMD Intergrated GPU Found + foreach ($gpuPattern in $lowPowerGPUs){ + if ($gpu.Name -like $gpuPattern) { + return $false + } } } + return $true } Function Invoke-WinUtilMouseAcceleration { <# @@ -2810,17 +2738,67 @@ $cttLogoPath = @" $winutilTextBlock.Foreground = $foregroundColor $winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block $stackPanel.Children.Add($winutilTextBlock) - # Add TextBlock for information with text wrapping and margins $messageTextBlock = New-Object Windows.Controls.TextBlock - $messageTextBlock.Text = $Message $messageTextBlock.TextWrapping = [Windows.TextWrapping]::Wrap # Enable text wrapping $messageTextBlock.HorizontalAlignment = [Windows.HorizontalAlignment]::Left $messageTextBlock.VerticalAlignment = [Windows.VerticalAlignment]::Top $messageTextBlock.Margin = New-Object Windows.Thickness(10) # Add margins around the text block + + # Define the Regex to find hyperlinks formatted as HTML tags + $regex = [regex]::new('([^<]+)') + $lastPos = 0 + + # Iterate through each match and add regular text and hyperlinks + foreach ($match in $regex.Matches($Message)) { + # Add the text before the hyperlink, if any + $textBefore = $Message.Substring($lastPos, $match.Index - $lastPos) + if ($textBefore.Length -gt 0) { + $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textBefore))) + } + + # Create and add the hyperlink + $hyperlink = New-Object Windows.Documents.Hyperlink + $hyperlink.NavigateUri = New-Object System.Uri($match.Groups[1].Value) + $hyperlink.Inlines.Add($match.Groups[2].Value) + $hyperlink.TextDecorations = [Windows.TextDecorations]::None # Remove underline + $hyperlink.Foreground = $foregroundColor + $hyperlink.Add_Click({ + param($sender, $args) + Start-Process $sender.NavigateUri.AbsoluteUri + }) + $hyperlink.Add_MouseEnter({ + param($sender, $args) + $sender.Foreground = [Windows.Media.Brushes]::LightGray + }) + $hyperlink.Add_MouseLeave({ + param($sender, $args) + $sender.Foreground = $foregroundColor + }) + + $messageTextBlock.Inlines.Add($hyperlink) + + # Update the last position + $lastPos = $match.Index + $match.Length + } + + # Add any remaining text after the last hyperlink + if ($lastPos -lt $Message.Length) { + $textAfter = $Message.Substring($lastPos) + $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($textAfter))) + } + + # If no matches, add the entire message as a run + if ($regex.Matches($Message).Count -eq 0) { + $messageTextBlock.Inlines.Add((New-Object Windows.Documents.Run($Message))) + } + + + # Add the TextBlock to the Grid $grid.Children.Add($messageTextBlock) [Windows.Controls.Grid]::SetRow($messageTextBlock, 1) # Set the row to the second row (0-based index) + # Add OK button $okButton = New-Object Windows.Controls.Button $okButton.Content = "OK" @@ -3026,7 +3004,7 @@ function Invoke-WPFButton { "WPFclear" {Invoke-WPFPresets -preset $null -imported $true} "WPFclearWinget" {Invoke-WPFPresets -preset $null -imported $true -CheckBox "WPFInstall"} "WPFtweaksbutton" {Invoke-WPFtweaksbutton} - "WPFOOSUbutton" {Invoke-WPFOOSU -action "customize"} + "WPFOOSUbutton" {Invoke-WPFOOSU} "WPFAddUltPerf" {Invoke-WPFUltimatePerformance -State "Enabled"} "WPFRemoveUltPerf" {Invoke-WPFUltimatePerformance -State "Disabled"} "WPFundoall" {Invoke-WPFundoall} @@ -4414,45 +4392,22 @@ public class PowerManagement { function Invoke-WPFOOSU { <# .SYNOPSIS - Downloads and runs OO Shutup 10 with or without config files - .PARAMETER action - Specifies how OOSU should be started - customize: Opens the OOSU GUI - recommended: Loads and applies the recommended OOSU policies silently - undo: Resets all policies to factory silently + Downloads and runs OO Shutup 10 #> - - param ( - [ValidateSet("customize", "recommended", "undo")] - [string]$action - ) - - $OOSU_filepath = "$ENV:temp\OOSU10.exe" - - $Initial_ProgressPreference = $ProgressPreference - $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest - Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath - - switch ($action) - { - "customize"{ - Write-Host "Starting OO Shutup 10 ..." - Start-Process $OOSU_filepath - } - "recommended"{ - $oosu_config = "$ENV:temp\ooshutup10_recommended.cfg" - $sync.configs.ooshutup10_recommended | Out-File -FilePath $oosu_config -Force - Write-Host "Applying recommended OO Shutup 10 Policies" - Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait - } - "undo"{ - $oosu_config = "$ENV:temp\ooshutup10_factory.cfg" - $sync.configs.ooshutup10_factory | Out-File -FilePath $oosu_config -Force - Write-Host "Resetting all OO Shutup 10 Policies" - Start-Process $OOSU_filepath -ArgumentList "$oosu_config /quiet" -Wait - } + try { + $OOSU_filepath = "$ENV:temp\OOSU10.exe" + $Initial_ProgressPreference = $ProgressPreference + $ProgressPreference = "SilentlyContinue" # Disables the Progress Bar to drasticly speed up Invoke-WebRequest + Invoke-WebRequest -Uri "https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe" -OutFile $OOSU_filepath + Write-Host "Starting OO Shutup 10 ..." + Start-Process $OOSU_filepath } - $ProgressPreference = $Initial_ProgressPreference + catch { + Write-Host "Error Downloading and Running OO Shutup 10" -ForegroundColor Red + } + finally { + $ProgressPreference = $Initial_ProgressPreference + } } function Invoke-WPFPanelAutologin { <# @@ -4461,8 +4416,10 @@ function Invoke-WPFPanelAutologin { Enables autologin using Sysinternals Autologon.exe #> - curl.exe -ss "https://live.sysinternals.com/Autologon.exe" -o $env:temp\autologin.exe # Official Microsoft recommendation https://learn.microsoft.com/en-us/sysinternals/downloads/autologon - cmd /c $env:temp\autologin.exe /accepteula + + # Official Microsoft recommendation: https://learn.microsoft.com/en-us/sysinternals/downloads/autologon + Invoke-WebRequest -Uri "https://live.sysinternals.com/Autologon.exe" -OutFile "$env:temp\autologin.exe" + cmd /c "$env:temp\autologin.exe" /accepteula } function Invoke-WPFPanelDISM { <# @@ -5153,7 +5110,7 @@ function Invoke-WPFUnInstall { $PackagesToInstall = (Get-WinUtilCheckBoxes)["Install"] if ($PackagesToInstall.Count -eq 0) { - $WarningMsg = "Please select the program(s) to install" + $WarningMsg = "Please select the program(s) to uninstall" [System.Windows.MessageBox]::Show($WarningMsg, $AppTitle, [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning) return } @@ -5659,6 +5616,14 @@ $sync.configs.applications = '{ "link": "https://copyq.readthedocs.io/", "winget": "hluk.CopyQ" }, + "WPFInstallditto": { + "category": "Utilities", + "choco": "ditto", + "content": "Ditto (Clipboard Manager)", + "description": "Ditto is an extension to the Windows Clipboard. You copy something to the Clipboard and Ditto takes what you copied and stores it in a database to retrieve at a later time.", + "link": "https://github.com/sabrogden/Ditto", + "winget": "Ditto.Ditto" + }, "WPFInstallcpuz": { "category": "Utilities", "choco": "cpu-z", @@ -5729,7 +5694,7 @@ $sync.configs.applications = '{ "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": "9PGCV4V3BK4W" + "winget": "DevToys-app.DevToys" }, "WPFInstalldigikam": { "category": "Multimedia Tools", @@ -5747,14 +5712,6 @@ $sync.configs.applications = '{ "link": "https://discord.com/", "winget": "Discord.Discord" }, - "WPFInstallditto": { - "category": "Utilities", - "choco": "ditto", - "content": "Ditto", - "description": "Ditto is an extension to the standard windows clipboard.", - "link": "https://ditto-cp.sourceforge.io/", - "winget": "Ditto.Ditto" - }, "WPFInstalldockerdesktop": { "category": "Development", "choco": "docker-desktop", @@ -6035,14 +5992,6 @@ $sync.configs.applications = '{ "link": "https://www.freecadweb.org/", "winget": "FreeCAD.FreeCAD" }, - "WPFInstallorcaslicer": { - "category": "Multimedia Tools", - "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" - }, "WPFInstallfxsound": { "category": "Multimedia Tools", "choco": "fxsound", @@ -6089,7 +6038,7 @@ $sync.configs.applications = '{ "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": "Git.Git;GitExtensionsTeam.GitExtensions" + "winget": "GitExtensionsTeam.GitExtensions" }, "WPFInstallgithubcli": { "category": "Development", @@ -6097,7 +6046,7 @@ $sync.configs.applications = '{ "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": "Git.Git;GitHub.cli" + "winget": "GitHub.cli" }, "WPFInstallgithubdesktop": { "category": "Development", @@ -6105,7 +6054,7 @@ $sync.configs.applications = '{ "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": "Git.Git;GitHub.GitHubDesktop" + "winget": "GitHub.GitHubDesktop" }, "WPFInstallgitkrakenclient": { "category": "Development", @@ -6139,12 +6088,20 @@ $sync.configs.applications = '{ "link": "https://www.gog.com/galaxy", "winget": "GOG.Galaxy" }, + "WPFInstallgitify": { + "category": "Development", + "choco": "na", + "content": "Gitify", + "description": "GitHub notifications on your menu bar.", + "link": "https://www.gitify.io/", + "winget": "Gitify.Gitify" + }, "WPFInstallgolang": { "category": "Development", "choco": "golang", - "content": "GoLang", - "description": "GoLang (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.", - "link": "https://golang.org/", + "content": "Go", + "description": "Go (or Golang) is a statically typed, compiled programming language designed for simplicity, reliability, and efficiency.", + "link": "https://go.dev/", "winget": "GoLang.Go" }, "WPFInstallgoogledrive": { @@ -6315,14 +6272,6 @@ $sync.configs.applications = '{ "link": "https://www.oracle.com/java/", "winget": "EclipseAdoptium.Temurin.18.JRE" }, - "WPFInstalljava20": { - "category": "Development", - "choco": "na", - "content": "Azul Zulu JDK 20", - "description": "Azul Zulu JDK 20 is a distribution of the OpenJDK with long-term support, performance enhancements, and security updates.", - "link": "https://www.azul.com/downloads/zulu-community/", - "winget": "Azul.Zulu.20.JDK" - }, "WPFInstalljava21": { "category": "Development", "choco": "na", @@ -6627,9 +6576,17 @@ $sync.configs.applications = '{ "link": "https://www.msi.com/Landing/afterburner", "winget": "Guru3D.Afterburner" }, + "WPFInstallmullvadvpn": { + "category": "Pro Tools", + "choco": "mullvad-app", + "content": "Mullvad VPN", + "description": "This is the VPN client software for the Mullvad VPN service.", + "link": "https://github.com/mullvad/mullvadvpn-app", + "winget": "MullvadVPN.MullvadVPN" + }, "WPFInstallBorderlessGaming": { "category": "Utilities", - "choco": "na", + "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", @@ -6643,14 +6600,6 @@ $sync.configs.applications = '{ "link": "https://sourceforge.net/projects/equalizerapo", "winget": "na" }, - "WPFInstallFreeFileSync": { - "category": "Utilities", - "choco": "freefilesync", - "content": "FreeFileSync", - "description": "Synchronize Files and Folders", - "link": "https://freefilesync.org", - "winget": "na" - }, "WPFInstallCompactGUI": { "category": "Utilities", "choco": "compactgui", @@ -7003,6 +6952,14 @@ $sync.configs.applications = '{ "link": "https://www.plex.tv/your-media/", "winget": "Plex.PlexMediaServer" }, + "WPFInstallplexdesktop": { + "category": "Multimedia Tools", + "choco": "plex", + "content": "Plex Desktop", + "description": "Plex Desktop for Windows is the front end for Plex Media Server.", + "link": "https://www.plex.tv", + "winget": "Plex.Plex" + }, "WPFInstallPortmaster": { "category": "Pro Tools", "choco": "portmaster", @@ -7091,6 +7048,14 @@ $sync.configs.applications = '{ "link": "https://docs.microsoft.com/en-us/sysinternals/downloads/procmon", "winget": "Microsoft.Sysinternals.ProcessMonitor" }, + "WPFInstallorcaslicer": { + "category": "Utilities", + "choco": "orcaslicer", + "content": "OrcaSlicer", + "description": "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.)", + "link": "https://github.com/SoftFever/OrcaSlicer", + "winget": "SoftFever.OrcaSlicer" + }, "WPFInstallprucaslicer": { "category": "Utilities", "choco": "prusaslicer", @@ -7737,7 +7702,7 @@ $sync.configs.applications = '{ "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": "Git.Git;Microsoft.VisualStudioCode" + "winget": "Microsoft.VisualStudioCode" }, "WPFInstallvscodium": { "category": "Development", @@ -7745,7 +7710,7 @@ $sync.configs.applications = '{ "content": "VS Codium", "description": "VSCodium is a community-driven, freely-licensed binary distribution of Microsoft's VS Code.", "link": "https://vscodium.com/", - "winget": "Git.Git;VSCodium.VSCodium" + "winget": "VSCodium.VSCodium" }, "WPFInstallwaterfox": { "category": "Browsers", @@ -8158,7 +8123,7 @@ $sync.configs.applications = '{ "WPFInstallForceAutoHDR": { "category": "Utilities", "choco": "na", - "content": "GUI That Forces Auto HDR In Unsupported Games", + "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" @@ -8178,6 +8143,30 @@ $sync.configs.applications = '{ "description": "NDI, or Network Device Interface, is a video connectivity standard that enables multimedia systems to identify and communicate with one another over IP and to encode, transmit, and receive high-quality, low latency, frame-accurate video and audio, and exchange metadata in real-time.", "link": "https://ndi.video/", "winget": "NDI.NDITools" + }, + "WPFInstallkicad": { + "category": "Pro 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" + }, + "WPFInstallFormatFactory": { + "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" + }, + "WPFInstalldropox": { + "category": "Utilities", + "choco": "na", + "content": "Dropbox", + "description": "The Dropbox desktop app! Save hard drive space, share and edit files and send for signature ? all without the distraction of countless browser tabs.", + "link": "https://www.dropbox.com/en_GB/desktop", + "winget": "Dropbox.Dropbox" } }' | convertfrom-json $sync.configs.dns = '{ @@ -8475,11 +8464,11 @@ $sync.configs.feature = '{ $sync.configs.preset = '{ "Standard": [ "WPFTweaksAH", + "WPFTweaksConsumerFeatures", "WPFTweaksDVR", "WPFTweaksHiber", "WPFTweaksHome", "WPFTweaksLoc", - "WPFTweaksOO", "WPFTweaksServices", "WPFTweaksStorage", "WPFTweaksTele", @@ -8491,8 +8480,8 @@ $sync.configs.preset = '{ "WPFTweaksTeredo" ], "Minimal": [ + "WPFTweaksConsumerFeatures", "WPFTweaksHome", - "WPFTweaksOO", "WPFTweaksServices", "WPFTweaksTele" ] @@ -9819,11 +9808,6 @@ $sync.configs.tweaks = '{ "StartupType": "Automatic", "OriginalType": "Automatic" }, - { - "Name": "WwanSvc", - "StartupType": "Manual", - "OriginalType": "Manual" - }, { "Name": "XblAuthManager", "StartupType": "Manual", @@ -10181,6 +10165,22 @@ $sync.configs.tweaks = '{ } ] }, + "WPFTweaksConsumerFeatures": { + "Content": "Disable ConsumerFeatures", + "Description": "Windows 10 will not automatically install any games, third-party apps, or application links from the Windows Store for the signed-in user. Some default Apps will be inaccessible (eg. Phone Link)", + "category": "Essential Tweaks", + "panel": "1", + "Order": "a003_", + "registry": [ + { + "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent", + "OriginalValue": "0", + "Name": "DisableWindowsConsumerFeatures", + "Value": "1", + "Type": "DWord" + } + ] + }, "WPFTweaksTele": { "Content": "Disable Telemetry", "Description": "Disables Microsoft Telemetry. Note: This will lock many Edge Browser settings. Microsoft spies heavily on you when using the Edge browser.", @@ -10339,13 +10339,6 @@ $sync.configs.tweaks = '{ "Value": "0", "Type": "DWord" }, - { - "Path": "HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\CloudContent", - "OriginalValue": "0", - "Name": "DisableWindowsConsumerFeatures", - "Value": "1", - "Type": "DWord" - }, { "Path": "HKCU:\\SOFTWARE\\Microsoft\\Siuf\\Rules", "OriginalValue": "0", @@ -10909,20 +10902,6 @@ $sync.configs.tweaks = '{ "Invoke-WPFTweakPS7 -action \"PS5\"" ] }, - "WPFTweaksOO": { - "Content": "Run OO Shutup", - "Description": "Runs OO Shutup and applies the recommended Tweaks. https://www.oo-software.com/en/shutup10", - "category": "Essential Tweaks", - "panel": "1", - "Order": "a009_", - "ToolTip": "Runs OO Shutup and applies the recommended Tweaks https://www.oo-software.com/en/shutup10", - "InvokeScript": [ - "Invoke-WPFOOSU -action \"recommended\"" - ], - "UndoScript": [ - "Invoke-WPFOOSU -action \"undo\"" - ] - }, "WPFTweaksStorage": { "Content": "Disable Storage Sense", "Description": "Storage Sense deletes temp files automatically.", @@ -10938,17 +10917,15 @@ $sync.configs.tweaks = '{ }, "WPFTweaksRemoveEdge": { "Content": "Remove Microsoft Edge - NOT RECOMMENDED", - "Description": "Removes MS Edge when it gets reinstalled by updates.", + "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: AveYo", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Order": "a029_", "InvokeScript": [ " #:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat - - curl.exe -s \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -o $ENV:temp\\edgeremoval.bat + Invoke-WebRequest -Uri \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -OutFile \"$ENV:TEMP\\edgeremoval.bat\" Start-Process $ENV:temp\\edgeremoval.bat - " ], "UndoScript": [ @@ -11003,12 +10980,12 @@ $sync.configs.tweaks = '{ "WPFTweaksDisableLMS1": { "Content": "Disable Intel MM (vPro LMS)", "Description": "Intel LMS service is always listening on all ports and could be a huge security risk. There is no need to run LMS on home machines and even in the Enterprise there are better solutions.", - "category": "Essential Tweaks", + "category": "z__Advanced Tweaks - CAUTION", "panel": "1", - "Order": "a0015_", + "Order": "a026_", "InvokeScript": [ " - Write-Host \"Kill OneDrive process\" + Write-Host \"Kill LMS\" $serviceName = \"LMS\" Write-Host \"Stopping and disabling service: $serviceName\" Stop-Service -Name $serviceName -Force -ErrorAction SilentlyContinue; @@ -11052,8 +11029,7 @@ $sync.configs.tweaks = '{ ], "UndoScript": [ " - Write-Host \"Install Microsoft Edge\" - taskkill.exe /F /IM \"OneDrive.exe\" + Write-Host \"LMS vPro needs to be redownloaded from intel.com\" " ] @@ -11314,7 +11290,7 @@ $sync.configs.tweaks = '{ }, "WPFTweaksBlockAdobeNet": { "Content": "Adobe Network Block", - "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. ", + "Description": "Reduce user interruptions by selectively blocking connections to Adobe's activation and telemetry servers. Credit: Ruddernation-Designs", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Order": "a021_", @@ -11680,7 +11656,7 @@ $sync.configs.tweaks = '{ "Type": "Toggle" }, "WPFOOSUbutton": { - "Content": "Customize OO Shutup Tweaks", + "Content": "Run OO Shutup 10", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Order": "a039_", @@ -11738,922 +11714,6 @@ $sync.configs.tweaks = '{ "Type": "300" } }' | convertfrom-json -$sync.configs.ooshutup10_factory = '############################################################################ -# This file was created with O&O ShutUp10++ V1.9.1436 -# and can be imported onto another computer. -# -# Download the application at https://www.oo-software.com/shutup10 -# You can then import the file from within the program. -# -# Alternatively you can import it automatically over a command line. -# Simply use the following parameter: -# OOSU10.exe -# -# Selecting the Option /quiet ends the app right after the import and the -# user does not get any feedback about the import. -# -# We are always happy to answer any questions you may have! -# ? 2015-2023 O&O Software GmbH, Berlin. All rights reserved. -# https://www.oo-software.com/ -############################################################################ - -P001 - -P002 - -P003 - -P004 - -P005 - -P006 - -P008 - -P026 - -P027 - -P028 - -P064 - -P065 - -P066 - -P067 - -P070 - -P069 - -P009 - -P010 - -P015 - -P068 - -P016 - -A001 - -A002 - -A003 - -A004 - -A006 - -A005 - -P007 - -P036 - -P025 - -P033 - -P023 - -P056 - -P057 - -P012 - -P034 - -P013 - -P035 - -P062 - -P063 - -P081 - -P047 - -P019 - -P048 - -P049 - -P020 - -P037 - -P011 - -P038 - -P050 - -P051 - -P018 - -P039 - -P021 - -P040 - -P022 - -P041 - -P014 - -P042 - -P052 - -P053 - -P054 - -P055 - -P029 - -P043 - -P030 - -P044 - -P031 - -P045 - -P032 - -P046 - -P058 - -P059 - -P060 - -P061 - -P071 - -P072 - -P073 - -P074 - -P075 - -P076 - -P077 - -P078 - -P079 - -P080 - -P024 - -S001 - -S002 - -S003 - -S008 - -E101 - -E201 - -E115 - -E215 - -E118 - -E218 - -E107 - -E207 - -E111 - -E211 - -E112 - -E212 - -E109 - -E209 - -E121 - -E221 - -E103 - -E203 - -E123 - -E223 - -E124 - -E224 - -E128 - -E228 - -E119 - -E219 - -E120 - -E220 - -E122 - -E222 - -E125 - -E225 - -E126 - -E226 - -E106 - -E206 - -E127 - -E227 - -E001 - -E002 - -E003 - -E008 - -E007 - -E010 - -E011 + -E012 + -E009 - -E004 - -E005 - -E013 - -E014 - -E006 - -Y001 - -Y002 - -Y003 - -Y004 - -Y005 - -Y006 - -Y007 - -C012 - -C002 - -C013 - -C007 - -C008 - -C009 - -C010 - -C011 - -C014 - -C015 - -C101 - -C201 - -C102 - -L001 - -L003 - -L004 - -L005 - -U001 - -U004 - -U005 - -U006 - -U007 - -W001 - -W011 - -W004 - -W005 - -W010 - -W009 - -P017 - -W006 - -W008 - -M006 - -M011 - -M010 - -O003 - -O001 - -S012 - -S013 - -S014 - -K001 - -K002 - -K005 - -M003 - -M015 - -M016 - -M017 - -M018 - -M019 - -M020 - -M021 - -M022 - -M001 - -M004 - -M005 - -M024 - -M012 - -M013 - -M014 - -N001 -' -$sync.configs.ooshutup10_recommended = '############################################################################ -# This file was created with O&O ShutUp10++ V1.9.1438 -# and can be imported onto another computer. -# -# Download the application at https://www.oo-software.com/shutup10 -# You can then import the file from within the program. -# -# Alternatively you can import it automatically over a command line. -# Simply use the following parameter: -# OOSU10.exe -# -# Selecting the Option /quiet ends the app right after the import and the -# user does not get any feedback about the import. -# -# We are always happy to answer any questions you may have! -# ? 2015-2024 O&O Software GmbH, Berlin. All rights reserved. -# https://www.oo-software.com/ -############################################################################ - -P001 + -P002 + -P003 + -P004 + -P005 + -P006 + -P008 + -P026 + -P027 + -P028 + -P064 + -P065 + -P066 + -P067 + -P070 + -P069 + -P009 - -P010 + -P015 + -P068 - -P016 - -A001 + -A002 + -A003 + -A004 + -A006 + -A005 + -P007 + -P036 + -P025 + -P033 + -P023 + -P056 + -P057 - -P012 - -P034 - -P013 - -P035 - -P062 - -P063 - -P081 - -P047 - -P019 - -P048 - -P049 - -P020 - -P037 - -P011 - -P038 - -P050 - -P051 - -P018 - -P039 - -P021 - -P040 - -P022 - -P041 - -P014 - -P042 - -P052 - -P053 - -P054 - -P055 - -P029 - -P043 - -P030 - -P044 - -P031 - -P045 - -P032 - -P046 - -P058 - -P059 - -P060 - -P061 - -P071 - -P072 - -P073 - -P074 - -P075 - -P076 - -P077 - -P078 - -P079 - -P080 - -P024 + -S001 + -S002 + -S003 + -S008 - -E101 + -E201 + -E115 + -E215 + -E118 + -E218 + -E107 + -E207 + -E111 + -E211 + -E112 + -E212 + -E109 + -E209 + -E121 + -E221 + -E103 + -E203 + -E123 + -E223 + -E124 + -E224 + -E128 + -E228 + -E119 - -E219 - -E120 - -E220 - -E122 - -E222 - -E125 - -E225 - -E126 - -E226 - -E106 - -E206 - -E127 - -E227 - -E001 + -E002 + -E003 + -E008 + -E007 + -E010 + -E011 + -E012 + -E009 - -E004 - -E005 - -E013 - -E014 - -E006 - -Y001 + -Y002 + -Y003 + -Y004 + -Y005 + -Y006 + -Y007 + -C012 + -C002 + -C013 + -C007 + -C008 + -C009 + -C010 + -C011 + -C014 + -C015 + -C101 + -C201 + -C102 + -C103 + -C203 + -L001 + -L003 + -L004 - -L005 - -U001 + -U004 + -U005 + -U006 + -U007 + -W001 + -W011 + -W004 - -W005 - -W010 - -W009 - -P017 + -W006 - -W008 - -M006 + -M011 - -M010 + -O003 - -O001 - -S012 - -S013 - -S014 - -K001 + -K002 + -K005 + -M003 + -M015 + -M016 + -M017 - -M018 + -M019 - -M020 + -M021 + -M022 + -M001 + -M004 + -M005 + -M024 + -M026 + -M027 + -M012 - -M013 - -M014 - -N001 -' -$sync.configs.ooshutup10_factory = '############################################################################ -# This file was created with O&O ShutUp10++ V1.9.1436 -# and can be imported onto another computer. -# -# Download the application at https://www.oo-software.com/shutup10 -# You can then import the file from within the program. -# -# Alternatively you can import it automatically over a command line. -# Simply use the following parameter: -# OOSU10.exe -# -# Selecting the Option /quiet ends the app right after the import and the -# user does not get any feedback about the import. -# -# We are always happy to answer any questions you may have! -# ? 2015-2023 O&O Software GmbH, Berlin. All rights reserved. -# https://www.oo-software.com/ -############################################################################ - -P001 - -P002 - -P003 - -P004 - -P005 - -P006 - -P008 - -P026 - -P027 - -P028 - -P064 - -P065 - -P066 - -P067 - -P070 - -P069 - -P009 - -P010 - -P015 - -P068 - -P016 - -A001 - -A002 - -A003 - -A004 - -A006 - -A005 - -P007 - -P036 - -P025 - -P033 - -P023 - -P056 - -P057 - -P012 - -P034 - -P013 - -P035 - -P062 - -P063 - -P081 - -P047 - -P019 - -P048 - -P049 - -P020 - -P037 - -P011 - -P038 - -P050 - -P051 - -P018 - -P039 - -P021 - -P040 - -P022 - -P041 - -P014 - -P042 - -P052 - -P053 - -P054 - -P055 - -P029 - -P043 - -P030 - -P044 - -P031 - -P045 - -P032 - -P046 - -P058 - -P059 - -P060 - -P061 - -P071 - -P072 - -P073 - -P074 - -P075 - -P076 - -P077 - -P078 - -P079 - -P080 - -P024 - -S001 - -S002 - -S003 - -S008 - -E101 - -E201 - -E115 - -E215 - -E118 - -E218 - -E107 - -E207 - -E111 - -E211 - -E112 - -E212 - -E109 - -E209 - -E121 - -E221 - -E103 - -E203 - -E123 - -E223 - -E124 - -E224 - -E128 - -E228 - -E119 - -E219 - -E120 - -E220 - -E122 - -E222 - -E125 - -E225 - -E126 - -E226 - -E106 - -E206 - -E127 - -E227 - -E001 - -E002 - -E003 - -E008 - -E007 - -E010 - -E011 + -E012 + -E009 - -E004 - -E005 - -E013 - -E014 - -E006 - -Y001 - -Y002 - -Y003 - -Y004 - -Y005 - -Y006 - -Y007 - -C012 - -C002 - -C013 - -C007 - -C008 - -C009 - -C010 - -C011 - -C014 - -C015 - -C101 - -C201 - -C102 - -L001 - -L003 - -L004 - -L005 - -U001 - -U004 - -U005 - -U006 - -U007 - -W001 - -W011 - -W004 - -W005 - -W010 - -W009 - -P017 - -W006 - -W008 - -M006 - -M011 - -M010 - -O003 - -O001 - -S012 - -S013 - -S014 - -K001 - -K002 - -K005 - -M003 - -M015 - -M016 - -M017 - -M018 - -M019 - -M020 - -M021 - -M022 - -M001 - -M004 - -M005 - -M024 - -M012 - -M013 - -M014 - -N001 -' -$sync.configs.ooshutup10_recommended = '############################################################################ -# This file was created with O&O ShutUp10++ V1.9.1438 -# and can be imported onto another computer. -# -# Download the application at https://www.oo-software.com/shutup10 -# You can then import the file from within the program. -# -# Alternatively you can import it automatically over a command line. -# Simply use the following parameter: -# OOSU10.exe -# -# Selecting the Option /quiet ends the app right after the import and the -# user does not get any feedback about the import. -# -# We are always happy to answer any questions you may have! -# ? 2015-2024 O&O Software GmbH, Berlin. All rights reserved. -# https://www.oo-software.com/ -############################################################################ - -P001 + -P002 + -P003 + -P004 + -P005 + -P006 + -P008 + -P026 + -P027 + -P028 + -P064 + -P065 + -P066 + -P067 + -P070 + -P069 + -P009 - -P010 + -P015 + -P068 - -P016 - -A001 + -A002 + -A003 + -A004 + -A006 + -A005 + -P007 + -P036 + -P025 + -P033 + -P023 + -P056 + -P057 - -P012 - -P034 - -P013 - -P035 - -P062 - -P063 - -P081 - -P047 - -P019 - -P048 - -P049 - -P020 - -P037 - -P011 - -P038 - -P050 - -P051 - -P018 - -P039 - -P021 - -P040 - -P022 - -P041 - -P014 - -P042 - -P052 - -P053 - -P054 - -P055 - -P029 - -P043 - -P030 - -P044 - -P031 - -P045 - -P032 - -P046 - -P058 - -P059 - -P060 - -P061 - -P071 - -P072 - -P073 - -P074 - -P075 - -P076 - -P077 - -P078 - -P079 - -P080 - -P024 + -S001 + -S002 + -S003 + -S008 - -E101 + -E201 + -E115 + -E215 + -E118 + -E218 + -E107 + -E207 + -E111 + -E211 + -E112 + -E212 + -E109 + -E209 + -E121 + -E221 + -E103 + -E203 + -E123 + -E223 + -E124 + -E224 + -E128 + -E228 + -E119 - -E219 - -E120 - -E220 - -E122 - -E222 - -E125 - -E225 - -E126 - -E226 - -E106 - -E206 - -E127 - -E227 - -E001 + -E002 + -E003 + -E008 + -E007 + -E010 + -E011 + -E012 + -E009 - -E004 - -E005 - -E013 - -E014 - -E006 - -Y001 + -Y002 + -Y003 + -Y004 + -Y005 + -Y006 + -Y007 + -C012 + -C002 + -C013 + -C007 + -C008 + -C009 + -C010 + -C011 + -C014 + -C015 + -C101 + -C201 + -C102 + -C103 + -C203 + -L001 + -L003 + -L004 - -L005 - -U001 + -U004 + -U005 + -U006 + -U007 + -W001 + -W011 + -W004 - -W005 - -W010 - -W009 - -P017 + -W006 - -W008 - -M006 + -M011 - -M010 + -O003 - -O001 - -S012 - -S013 - -S014 - -K001 + -K002 + -K005 + -M003 + -M015 + -M016 + -M017 - -M018 + -M019 - -M020 + -M021 + -M022 + -M001 + -M004 + -M005 + -M024 + -M026 + -M027 + -M012 - -M013 - -M014 - -N001 -' $inputXML = '