From 4de47581c458a57f2c57dae2ecdacb6919d46255 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:14:45 +1000
Subject: [PATCH 01/23] fix wrong variable quoting in file path command
---
bin/winapps | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bin/winapps b/bin/winapps
index 5779f3c..cf48202 100755
--- a/bin/winapps
+++ b/bin/winapps
@@ -588,7 +588,7 @@ function waRunCommand() {
+auto-reconnect \
/drive:media,"$REMOVABLE_MEDIA" \
/wm-class:"$FULL_NAME" \
- /app:program:"$WIN_EXECUTABLE",icon:"$ICON",name:$"FULL_NAME",cmd:\""$FILE_PATH"\" \
+ /app:program:"$WIN_EXECUTABLE",icon:"$ICON",name:"$FULL_NAME",cmd:\""$FILE_PATH"\" \
/v:"$RDP_IP" &>/dev/null &
# Capture the process ID.
From 6e9e633616daaacc60fe87e0c4d5755c76ab5162 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:19:56 +1000
Subject: [PATCH 02/23] Fix typo in EC_NO_SUDO comment
---
setup.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/setup.sh b/setup.sh
index 7b77254..d1438a6 100755
--- a/setup.sh
+++ b/setup.sh
@@ -21,7 +21,7 @@ readonly EC_BAD_ARGUMENT="2" # Unsupported argument passed to script.
readonly EC_EXISTING_INSTALL="3" # Existing conflicting WinApps installation.
readonly EC_NO_CONFIG="4" # Absence of a valid WinApps configuration file.
readonly EC_MISSING_DEPS="5" # Missing dependencies.
-readonly EC_NO_SUDO="6" # Insufficient privilages to invoke superuser access.
+readonly EC_NO_SUDO="6" # Insufficient privileges to invoke superuser access.
readonly EC_NOT_IN_GROUP="7" # Current user not in group 'libvirt' and/or 'kvm'.
readonly EC_VM_OFF="8" # Windows 'libvirt' VM powered off.
readonly EC_VM_PAUSED="9" # Windows 'libvirt' VM paused.
From ba2ec0a047429db57f91f93d0a190c320d0d6bed Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:26:27 +1000
Subject: [PATCH 03/23] fix spacing for Shortcut Name comments
---
setup.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.sh b/setup.sh
index 7b77254..e89a602 100755
--- a/setup.sh
+++ b/setup.sh
@@ -1279,7 +1279,7 @@ function waConfigureApp() {
# Source 'Info' File Containing:
# - The Application Name (FULL_NAME)
- # - The Shortcut Nsame (NAME)
+ # - The Shortcut Name (NAME)
# - Application Categories (CATEGORIES)
# - Executable Path (WIN_EXECUTABLE)
# - Supported MIME Types (MIME_TYPES)
@@ -1379,7 +1379,7 @@ function waConfigureApps() {
for OSA in "${OSA_LIST[@]}"; do
# Source 'Info' File Containing:
# - The Application Name (FULL_NAME)
- # - The Shortcut Nsame (NAME)
+ # - The Shortcut Name (NAME)
# - Application Categories (CATEGORIES)
# - Executable Path (WIN_EXECUTABLE)
# - Supported MIME Types (MIME_TYPES)
From 4136b1d6c0f2e32581416bb6c56513bf070c5ec9 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:55:02 +1000
Subject: [PATCH 04/23] fix spelling
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8389b90..a4dc4eb 100644
--- a/README.md
+++ b/README.md
@@ -398,7 +398,7 @@ RDP_SCALE="100"
# This improves compatibility with most desktop environments (DEs).
# ATTENTION: The Filesystem Hierarchy Standard (FHS) recommends /media instead. Verify your system's configuration.
# - To manually mount devices, you may optionally use /mnt.
-# REFERRENCE: https://wiki.archlinux.org/title/Udisks#Mount_to_/media
+# REFERENCE: https://wiki.archlinux.org/title/Udisks#Mount_to_/media
REMOVABLE_MEDIA="/run/media"
# [ADDITIONAL FREERDP FLAGS & ARGUMENTS]
From 0f3b43d92af096bae2e3a0a00fa984b01e947006 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:55:24 +1000
Subject: [PATCH 05/23] fix typo in PrintArrayData parameter comment
---
install/ExtractPrograms.ps1 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/install/ExtractPrograms.ps1 b/install/ExtractPrograms.ps1
index fcfbf3d..b8a5333 100644
--- a/install/ExtractPrograms.ps1
+++ b/install/ExtractPrograms.ps1
@@ -49,7 +49,7 @@ Function GetApplicationIcon {
# Args:
# - 'Names': An array of application names.
# - 'Paths': An array of executable paths.
-# - 'Source': The source of the applications (e.g. Windows Registry, Package manangers, Universal Windows Platform (UWP), etc.)
+# - 'Source': The source of the applications (e.g. Windows Registry, Package managers, Universal Windows Platform (UWP), etc.)
function PrintArrayData {
param (
[string[]]$Names,
From 1c79a78c09e385f463aa03bb3beba7fe2e8f9d1d Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:55:58 +1000
Subject: [PATCH 06/23] docs: fix typo in libvirt CPU pinning section
---
docs/libvirt.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/libvirt.md b/docs/libvirt.md
index 0f0ddc1..d32ef37 100644
--- a/docs/libvirt.md
+++ b/docs/libvirt.md
@@ -193,7 +193,7 @@ Together, these components form a powerful and flexible virtualization stack, wi
Example 1:
- CPU cores share the same singular L3 cache, so this cannot be optimised.
- - CPU cores utilise different L1 and L2 caches, so isolatng corresponding thread pairs will help improve performance.
+ - CPU cores utilise different L1 and L2 caches, so isolating corresponding thread pairs will help improve performance.
- Thus, if limiting the virtual machine to a maximum of 4 threads, there are 10 possible optimal configurations:
- T0+T4
- T1+T5
From e4d4b915d51c7405429f6f6d1489b25fb05b53d9 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:57:24 +1000
Subject: [PATCH 07/23] Fix User Agent Switcher instructions
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 8389b90..531869a 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ WinApps works by:
- The GNU/Linux `/home` directory is accessible within Windows via the `\\tsclient\home` mount.
- Integration with `Nautilus`, allowing you to right-click files to open them with specific Windows applications based on the file MIME type.
- The [official taskbar widget](https://github.com/winapps-org/WinApps-Launcher) enables seamless administration of the Windows subsystem and offers an easy way to launch Windows applications.
-- Microsoft Office links (e.g. ms-word://) from the host system are automatically opened in the Windows subsystem. (Note: You may need to use an [User Agent switcher](https://github.com/ray-lothian/UserAgent-Switcher/) Browser Extension and set the User-Agent to Windows, as as the Office webapps typically hide the "Open in Desktop App" option for Linux users.)
+- Microsoft Office links (e.g. ms-word://) from the host system are automatically opened in the Windows subsystem. (Note: You may need to use a [User Agent Switcher](https://github.com/ray-lothian/UserAgent-Switcher/) browser extension and set the User-Agent to Windows, as the Office webapps typically hide the "Open in Desktop App" option for Linux users.)
## Supported Applications
**WinApps supports *ALL* Windows applications.**
From e62155cba5990391fc25061cef498824934ff0b6 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Thu, 31 Jul 2025 12:57:47 +1000
Subject: [PATCH 08/23] fix: correct user source path comment
---
setup.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.sh b/setup.sh
index bce4b83..cd09fcc 100755
--- a/setup.sh
+++ b/setup.sh
@@ -40,7 +40,7 @@ readonly USER_BIN_PATH="${HOME}/.local/bin" # UNIX path to 'bin' dir
readonly USER_BIN_PATH_WIN='\\tsclient\home\.local\bin' # WINDOWS path to 'bin' directory for a '--user' WinApps installation.
# 'SOURCE'
readonly SYS_SOURCE_PATH="${SYS_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
-readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
+readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--user' WinApps installation.
# 'APP'
readonly SYS_APP_PATH="/usr/share/applications" # UNIX path to 'applications' directory for a '--system' WinApps installation.
readonly USER_APP_PATH="${HOME}/.local/share/applications" # UNIX path to 'applications' directory for a '--user' WinApps installation.
@@ -104,7 +104,7 @@ SUDO="" # Set to "sudo" if the user specifies '--system', or "" if the u
BIN_PATH="" # Set to $SYS_BIN_PATH if the user specifies '--system', or $USER_BIN_PATH if the user specifies '--user'.
APP_PATH="" # Set to $SYS_APP_PATH if the user specifies '--system', or $USER_APP_PATH if the user specifies '--user'.
APPDATA_PATH="" # Set to $SYS_APPDATA_PATH if the user specifies '--system', or $USER_APPDATA_PATH if the user specifies '--user'.
-SOURCE_PATH="" # Set to $SYS_SOURCE_PATH if the user specifies '--system', or $USER_SOURCE_PATH if the user specifies '--user'.
+SOURCE_PATH="" # Set to $SYS_SOURCE_PATH if the user specifies '--user', or $USER_SOURCE_PATH if the user specifies '--user'.
# INSTALLATION PROCESS
INSTALLED_EXES=() # List of executable file names of officially supported applications that have already been configured during the current installation process.
From 26854d91373c02c8a1ca4d6039e6c05a94878db4 Mon Sep 17 00:00:00 2001
From: Rohan Barar
Date: Thu, 31 Jul 2025 13:06:49 +1000
Subject: [PATCH 09/23] fix erroneous change by Codex
---
setup.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/setup.sh b/setup.sh
index cd09fcc..4ff09bf 100755
--- a/setup.sh
+++ b/setup.sh
@@ -104,7 +104,7 @@ SUDO="" # Set to "sudo" if the user specifies '--system', or "" if the u
BIN_PATH="" # Set to $SYS_BIN_PATH if the user specifies '--system', or $USER_BIN_PATH if the user specifies '--user'.
APP_PATH="" # Set to $SYS_APP_PATH if the user specifies '--system', or $USER_APP_PATH if the user specifies '--user'.
APPDATA_PATH="" # Set to $SYS_APPDATA_PATH if the user specifies '--system', or $USER_APPDATA_PATH if the user specifies '--user'.
-SOURCE_PATH="" # Set to $SYS_SOURCE_PATH if the user specifies '--user', or $USER_SOURCE_PATH if the user specifies '--user'.
+SOURCE_PATH="" # Set to $SYS_SOURCE_PATH if the user specifies '--system', or $USER_SOURCE_PATH if the user specifies '--user'.
# INSTALLATION PROCESS
INSTALLED_EXES=() # List of executable file names of officially supported applications that have already been configured during the current installation process.
From a23fd713e73d29dce226d173724598f86c31b4b1 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Fri, 1 Aug 2025 16:50:37 +1000
Subject: [PATCH 10/23] Fix disk mapping example
---
compose.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/compose.yaml b/compose.yaml
index 955f0fc..8888a01 100644
--- a/compose.yaml
+++ b/compose.yaml
@@ -44,6 +44,6 @@ services:
# NOTE: 'disk1' will be mounted as the main drive. THIS DISK WILL BE FORMATTED BY DOCKER.
# All following disks (disk2, ...) WILL NOT BE FORMATTED.
# - /dev/disk/by-id/:/disk1
- # - dev/disk/by-id/:/disk2
+ # - /dev/disk/by-id/:/disk2
# group_add: # uncomment this line and the next one for using rootless podman containers
# - keep-groups # to make /dev/kvm work with podman. needs "crun" installed, "runc" will not work! Add your user to the 'kvm' group or another that can access /dev/kvm.
From cc13aac4655b22da8f86c1cef2e698e67db38d8a Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Fri, 1 Aug 2025 16:51:17 +1000
Subject: [PATCH 11/23] docs: fix grammar in docker instructions
---
docs/docker.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/docker.md b/docs/docker.md
index 47b1d5d..7b92b94 100644
--- a/docs/docker.md
+++ b/docs/docker.md
@@ -13,8 +13,8 @@ Although WinApps supports using `QEMU+KVM+libvirt` as a backend for running Wind
> [!IMPORTANT]
> The iptables kernel module must be loaded for folder sharing with the host to work.
-> Check that the output of `lsmod | grep ip_tables` and `lsmod | grep iptable_nat` is non empty.
-> If the output of one of the previous command is empty, run `echo -e "ip_tables\niptable_nat" | sudo tee /etc/modules-load.d/iptables.conf` and reboot.
+> Check that the output of `lsmod | grep ip_tables` and `lsmod | grep iptable_nat` is non-empty.
+> If the output of one of the previous commands is empty, run `echo -e "ip_tables\niptable_nat" | sudo tee /etc/modules-load.d/iptables.conf` and reboot.
## `Docker`
### Installation
From 8cac5af98366aafee7bb5c3b52de3da901c101b1 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Fri, 1 Aug 2025 16:51:42 +1000
Subject: [PATCH 12/23] docs: fix grammar in detected file comment
---
setup.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/setup.sh b/setup.sh
index 4ff09bf..490f7fc 100755
--- a/setup.sh
+++ b/setup.sh
@@ -1156,7 +1156,7 @@ function waFindInstalled() {
echo "IF EXIST \"${WIN_EXECUTABLE}\" ECHO ${APPLICATION} >> ${TMP_INST_FILE_PATH_WIN}" >>"$BATCH_SCRIPT_PATH"
done
- # Append a command to the batch script to run the PowerShell script and store it's output in the 'detected' file.
+ # Append a command to the batch script to run the PowerShell script and store its output in the 'detected' file.
# shellcheck disable=SC2129 # Silence warning regarding repeated redirects.
echo "powershell.exe -ExecutionPolicy Bypass -File ${PS_SCRIPT_HOME_PATH_WIN} > ${DETECTED_FILE_PATH_WIN}" >>"$BATCH_SCRIPT_PATH"
From 708ad60d1cdb0d3a7e5d72b9788e0fe07ea35771 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Fri, 1 Aug 2025 16:56:16 +1000
Subject: [PATCH 13/23] fix script conditional
---
oem/install.bat | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/oem/install.bat b/oem/install.bat
index 018c510..b387507 100644
--- a/oem/install.bat
+++ b/oem/install.bat
@@ -2,7 +2,7 @@
reg import %~dp0\RDPApps.reg
-if exists %~dp0\Container.reg (
+if exist %~dp0\Container.reg (
reg import %~dp0\Container.reg
)
From 92686f0ae44c12034d8f4deadb09dbfbfefedb84 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Fri, 1 Aug 2025 17:09:05 +1000
Subject: [PATCH 14/23] Fix grammar in license
---
LICENSE.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/LICENSE.md b/LICENSE.md
index cab3299..19a36a7 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -8,7 +8,7 @@ Due to lack of a license, it is All Rights Reserved by the original author.
We have tried contacting Fmstrat about this, but they abandoned the project and did not reply nor apply an open-source license to the project.
However, almost all parts of the codebase have been rewritten and all new contributions require a Contributor License Agreement ([for individuals](https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5), [for legal entities](https://gist.github.com/oskardotglobal/75a8cc056e56a439fa6a1551129ae47f)) to be signed. Therefore, the below license is applied to all new contributions made to the project.
-Refer to a specific file for it's respective license.
+Refer to a specific file for its respective license.
# GNU AFFERO GENERAL PUBLIC LICENSE
From f0aa7d6fb8f024212a670f32280cdf5d42ac5b5d Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Fri, 1 Aug 2025 17:10:02 +1000
Subject: [PATCH 15/23] docs: clarify removable media comment
---
bin/winapps | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bin/winapps b/bin/winapps
index 1f73b5d..8781d3b 100755
--- a/bin/winapps
+++ b/bin/winapps
@@ -158,7 +158,7 @@ function dprint() {
[ "$DEBUG" = "true" ] && echo "[$(date)-$RUNID] $1" >>"$LOG_PATH"
}
# Name: 'waFixRemovableMedia'
-# Role: If user left REMOVABLE_MEDIA config null,fallback to /run/media for udisks defaults ,warning.
+# Role: If REMOVABLE_MEDIA is empty, default to /run/media (udisks default) and show a warning.
function waFixRemovableMedia() {
if [ -z "$REMOVABLE_MEDIA" ]; then
REMOVABLE_MEDIA="/run/media" # Default for udisks
From fdecd7a8da4043d155582490b26205216e38aca6 Mon Sep 17 00:00:00 2001
From: Rohan Barar
Date: Fri, 1 Aug 2025 17:17:05 +1000
Subject: [PATCH 16/23] clarified shutdown error text
---
bin/winapps | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/bin/winapps b/bin/winapps
index 8781d3b..fc90efa 100755
--- a/bin/winapps
+++ b/bin/winapps
@@ -107,15 +107,15 @@ Please run:
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows failed to resume."
;;
"$EC_FAIL_DESTROY")
- dprint "ERROR: WINDOWS FAILED TO IMMEDIATELY UNGRACEFULLY SHUT DOWN WINDOWS. EXITING."
- notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Failed to ungracefully shut down Windows."
+ dprint "ERROR: FAILED TO FORCE STOP WINDOWS. EXITING."
+ notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Failed to forcibly stop Windows."
;;
"$EC_SD_TIMEOUT")
dprint "ERROR: WINDOWS TOOK TOO LONG TO SHUT DOWN. EXITING."
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows took too long to shut down."
;;
"$EC_DIE_TIMEOUT")
- dprint "ERROR: WINDOWS TOOK TOO LONG TO SHUT DOWN. EXITING."
+ dprint "ERROR: WINDOWS TOOK TOO LONG TO DIE. EXITING."
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows took too long to die."
;;
"$EC_RESTART_TIMEOUT")
From e8037948f46ff5f343204e9cee549ba1fb9a935d Mon Sep 17 00:00:00 2001
From: Rohan Barar
Date: Fri, 1 Aug 2025 18:48:16 +1000
Subject: [PATCH 17/23] various improvements to install.bat
---
oem/install.bat | 75 ++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 58 insertions(+), 17 deletions(-)
diff --git a/oem/install.bat b/oem/install.bat
index b387507..504cace 100644
--- a/oem/install.bat
+++ b/oem/install.bat
@@ -1,25 +1,66 @@
@echo off
+title WinApps Setup Wizard
-reg import %~dp0\RDPApps.reg
-
-if exist %~dp0\Container.reg (
- reg import %~dp0\Container.reg
+REM Check for administrative privileges
+fltmc >nul 2>&1 || (
+ echo [INFO] Script not running as administrator. Attempting to relaunch with elevation...
+ powershell -Command "Start-Process '%~f0' -Verb runAs"
+ exit /b 0
)
-REM Create network profile cleanup scheduled task
-copy %~dp0\NetProfileCleanup.ps1 %windir%
-set "taskname=NetworkProfileCleanup"
-set "command=powershell.exe -ExecutionPolicy Bypass -File "%windir%\NetProfileCleanup.ps1^""
+REM Confirm the user wants to proceed with setup
+echo ============================================
+echo WinApps Setup Wizard
+echo ============================================
+echo.
+echo Press any key to continue or close this window to cancel...
+pause >nul
+echo.
+echo [INFO] Starting setup...
-schtasks /query /tn "%taskname%" >nul 2>&1
+REM Apply RDP and system configuration tweaks
+echo [INFO] Importing "RDPApps.reg"...
+reg import "%~dp0RDPApps.reg" >nul 2>&1
if %ERRORLEVEL% equ 0 (
- echo Task "%taskname%" already exists, deleting it first...
- schtasks /delete /tn "%taskname%" /f
-)
-
-schtasks /create /tn "%taskname%" /tr "%command%" /sc onstart /ru "SYSTEM" /rl HIGHEST /f
-if %ERRORLEVEL% equ 0 (
- echo Scheduled task "%taskname%" created successfully.
+ echo [SUCCESS] Imported "RDPApps.reg".
) else (
- echo Failed to create scheduled task.
+ echo [ERROR] Failed to import "RDPApps.reg".
)
+
+REM Configure the system clock to use UTC instead of local time
+if exist "%~dp0Container.reg" (
+ echo [INFO] Importing "Container.reg"...
+ reg import "%~dp0Container.reg" >nul 2>&1
+ if %ERRORLEVEL% equ 0 (
+ echo [SUCCESS] Imported "Container.reg".
+ ) else (
+ echo [ERROR] Failed to import "Container.reg".
+ )
+) else (
+ echo [WARNING] "Container.reg" not found. Skipping...
+)
+
+REM Create a startup task to clean up stale network profiles
+echo [INFO] Creating network profile cleanup task...
+
+REM Initialise values required to create the startup task
+set "scriptpath=%windir%\NetProfileCleanup.ps1"
+set "taskname=WinApps_NetworkProfileCleanup"
+set "command=powershell.exe -ExecutionPolicy Bypass -File ""%scriptpath%"""
+
+REM Copy the script to the Windows directory
+copy /Y "%~dp0NetProfileCleanup.ps1" "%scriptpath%" >nul
+if %ERRORLEVEL% neq 0 (
+ echo [ERROR] Failed to copy "NetProfileCleanup.ps1" to "%windir%".
+) else (
+ schtasks /create /tn "%taskname%" /tr "%command%" /sc onstart /ru "SYSTEM" /rl HIGHEST /f >nul 2>&1
+ if %ERRORLEVEL% equ 0 (
+ echo [SUCCESS] Created scheduled task "%taskname%".
+ ) else (
+ echo [ERROR] Failed to create scheduled task "%taskname%".
+ )
+)
+
+echo.
+echo Press any key to exit...
+pause >nul
\ No newline at end of file
From 6a7b57a064a2bbd4d5e52c2bb54c73127d46be59 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Fri, 1 Aug 2025 08:49:38 +0000
Subject: [PATCH 18/23] [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---
oem/install.bat | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/oem/install.bat b/oem/install.bat
index 504cace..92bcc38 100644
--- a/oem/install.bat
+++ b/oem/install.bat
@@ -63,4 +63,4 @@ if %ERRORLEVEL% neq 0 (
echo.
echo Press any key to exit...
-pause >nul
\ No newline at end of file
+pause >nul
From a04103b88c7b4af286d105530d08c538a47ef53f Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Fri, 1 Aug 2025 22:04:48 +1000
Subject: [PATCH 19/23] fix: use string compare for path check
---
setup.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/setup.sh b/setup.sh
index 490f7fc..d514bcc 100755
--- a/setup.sh
+++ b/setup.sh
@@ -151,7 +151,7 @@ function waGetSourceCode() {
SCRIPT_DIR_PATH=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")
# Check if winapps is currently installed on $SOURCE_PATH
- if [[ -f "$SCRIPT_DIR_PATH/winapps" && "$SCRIPT_DIR_PATH" -ne "$SOURCE_PATH" ]]; then
+ if [[ -f "$SCRIPT_DIR_PATH/winapps" && "$SCRIPT_DIR_PATH" != "$SOURCE_PATH" ]]; then
# Display a warning.
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You are running a WinApps installation located outside of default location '${SOURCE_PATH}'. A new installation will be created."
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You might want to remove your old installation on '${SCRIPT_DIR_PATH}'."
From 88f1e4e96e557240bf76cba890607cc4d86d6b02 Mon Sep 17 00:00:00 2001
From: Rohan Barar <57999059+KernelGhost@users.noreply.github.com>
Date: Sat, 2 Aug 2025 21:42:59 +1000
Subject: [PATCH 20/23] Update ExtractPrograms.ps1
fixed erroneous comments
---
install/ExtractPrograms.ps1 | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/install/ExtractPrograms.ps1 b/install/ExtractPrograms.ps1
index b8a5333..537e94c 100644
--- a/install/ExtractPrograms.ps1
+++ b/install/ExtractPrograms.ps1
@@ -240,7 +240,7 @@ function AppSearchUWP {
PrintArrayData -Names $exeNames -Paths $exePaths -Source "uwp"
}
-# Name: 'AppSearchWinReg'
+# Name: 'AppSearchChocolatey'
# Role: Search for chocolatey shims.
function AppSearchChocolatey {
# Initialise empty arrays.
@@ -272,7 +272,7 @@ function AppSearchChocolatey {
}
}
-# Name: 'AppSearchWinReg'
+# Name: 'AppSearchScoop'
# Role: Search for scoop shims.
function AppSearchScoop {
# Initialise empty arrays.
From c25ea7c2fce28f732af2a613b18594d5670128cc Mon Sep 17 00:00:00 2001
From: Rohan Barar
Date: Sat, 2 Aug 2025 22:41:32 +1000
Subject: [PATCH 21/23] integrate libvirtd group support + document in install
guide + remove NixOS patch
---
.DS_Store | Bin 0 -> 8196 bytes
bin/winapps | 5 +++--
docs/libvirt.md | 2 ++
packages/.DS_Store | Bin 0 -> 6148 bytes
packages/winapps/.DS_Store | Bin 0 -> 6148 bytes
packages/winapps/default.nix | 1 -
packages/winapps/winapps.patch | 11 -----------
7 files changed, 5 insertions(+), 14 deletions(-)
create mode 100644 .DS_Store
create mode 100644 packages/.DS_Store
create mode 100644 packages/winapps/.DS_Store
delete mode 100644 packages/winapps/winapps.patch
diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..d24f42c413b1b4aaac5336577b2667ab26e864d7
GIT binary patch
literal 8196
zcmeHM&2AGh5FR%v-82Ov1X3?ZD{-w#soDs{CFF-v2?}Zg2muP&CbUsD>!`aSpsG^N
z@D98JSDu7-;RN5Zd=n%MH*aqsLmK1x08mw1x_kVhEEt2n|Pn$=Hvz
z)^HMPWPFbqS(pq(n8ZW4%A7<=Ybz}SmVrqIICsxdiw5|Fsr>x``c{9bqJSCls7pc0
z>f3ZHZxjy9yMXWB!0(39+S(5>m&wjwT5uMeyz{nxAV>A66%E63>+m(-HKg>tlk1lE
zqT3lY3)d?$h+5sCbEp8_b_XVJUUq}F9F^rTXom`0*BwsI$u$ehM@Plt-4%CzbK`i$
zJ-WBPw&HFSH;#{U&W&5Q@9#Eyem{_()vQREBZV&O`&0P^S7y#1>W6_ZgMGBH^);%{
zQ>s#pn$Qm+`F;m2&vDhDRq9ha$&_r@R)r{4k
zUD~EHMr=Uu(ALyZf2Pn&3jK^;DfAXSn(pl!&on-2p4#y7JvQC?|VdP1fTqg2t{NktQYAqBC>+ru|svpS-TJ*}-mU!RH?2KJ2H&%h~o9ByJ{nNX1VMySs+nSfwX3_~%n4&cCD1pa{Er
zfb|OLAh{A8Z3$)px8w}-~XTUSz7lk1D1ia7!cWNy;_FF$q(VQG3VMY
z>N`{}Y&X_gK_FB*4z1F0=+i$8aqYsCF(sqNTB8N!ufGVm2w91J{;Sxr;?EiQ4Vyp%
A(EtDd
literal 0
HcmV?d00001
diff --git a/bin/winapps b/bin/winapps
index fc90efa..306890b 100755
--- a/bin/winapps
+++ b/bin/winapps
@@ -301,9 +301,10 @@ function waGetFreeRDPCommand() {
function waCheckGroupMembership() {
# Identify groups the current user belongs to.
# shellcheck disable=SC2155 # Silence warnings regarding masking return values through simultaneous declaration and assignment.
- local USER_GROUPS=$(groups "$(whoami)")
+ local USER_GROUPS=$(id -nG "$(whoami)")
- if ! (echo "$USER_GROUPS" | grep -q -E "\blibvirt\b") || ! (echo "$USER_GROUPS" | grep -q -E "\bkvm\b"); then
+ if ! echo "$USER_GROUPS" | grep -qE '\b(libvirt|libvirtd)\b' || \
+ ! echo "$USER_GROUPS" | grep -qE '\bkvm\b'; then
waThrowExit "$EC_NOT_IN_GROUP"
fi
}
diff --git a/docs/libvirt.md b/docs/libvirt.md
index d32ef37..1b41038 100644
--- a/docs/libvirt.md
+++ b/docs/libvirt.md
@@ -46,6 +46,8 @@ Together, these components form a powerful and flexible virtualization stack, wi
sudo reboot # Reboot the system to ensure the user is added to the relevant groups.
```
+ Note: On NixOS, the group name for libvirt is `libvirtd` and not `libvirt`. In addition, user and group management on NixOS is handled through the Nix configuration files and not via traditional tools like `usermod`. Please see "Adding User to a group" on [this NixOS Wiki page](https://wiki.nixos.org/wiki/User_management).
+
Note: Due to a known bug in `rpm-ostree`, which affects various distributions such as Silverblue, Bazzite, Bluefin, Kinoite, Aurora, UCore, and others, the commands provided earlier may not properly add your user to all required groups. If the `groups $USER` command does not show your user as being part of the necessary groups, you'll need to manually add these groups to `/etc/group` if they are present in `/usr/lib/group`.
To resolve this:
diff --git a/packages/.DS_Store b/packages/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..b6729e2aa9bcd87fa58d4e3c560ae83e03cf6034
GIT binary patch
literal 6148
zcmeH~&rjPh6vv;TqbX=o4j}btY1aY;l?ucqE9|fX1IaHN$9)Ap1
z{*wJW+xOW9t#pXnK*e{`$vzaq^LD$3!GLWw>H$~qT?bT#Ho(H
zj|XXzkDAS2VqvlJVX5j>y%p~?yi`RvibmtS6Aiy}>sYBYeyB(Bx1?Wm{nZ1NjiMy$
z4|PJ)>m%gHNs{$c(NW{9m+Rcn40tuK*7fU?NxQwTnW)
zQCB(wj=(H|Mbq^8{QvU&{eL#ewHyIQ;9U_AmBa9`gHN(&>)gljSu5dZa5j!Bjp`H>
i_BhrRK8ovbZ5WeWfd*Dfqv(OT9|4WQ6^_7vCGZC{udlNJ
literal 0
HcmV?d00001
diff --git a/packages/winapps/.DS_Store b/packages/winapps/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..053967660478598e167eabc9e3bdc9f4ad5074eb
GIT binary patch
literal 6148
zcmeHKyH3ME5S)b+k`J?H
zx3}Z7r|{kZkoj(X2}}Wu>5ABE7@DrD59};5iek^$p+SooUhq7q{yw4H3D$VPBkpm`
zf4gZmt7WrUvO-_)iavWc<49SrWVPgMx#O1X7AriRuns3Iqh?42Qh`(;6-WjCu>$Pb
zYU7Dx##A5`NCmzW(EmfBE7riy(S98adVJUQk)j&Mc9$TQnAgD0kt;NDD$%JDR}67F
z^CjwPVCU#`i0#bh#Lf~o6tUfzFIEnzju}&dRG_cGxlgCs|F7vk-2eNeoTUP(z@Jh;
zMvL3UoSziEb?|Z8YYY93{%NeWa)#a^fD>)S7e{qP$E>S?oukp2H##v70;)?|D)1W$
Fd;kKuDZT&z
literal 0
HcmV?d00001
diff --git a/packages/winapps/default.nix b/packages/winapps/default.nix
index 75b7b64..8a48b25 100644
--- a/packages/winapps/default.nix
+++ b/packages/winapps/default.nix
@@ -37,7 +37,6 @@ stdenv.mkDerivation rec {
];
patches = [
- ./winapps.patch
./setup.patch
];
diff --git a/packages/winapps/winapps.patch b/packages/winapps/winapps.patch
deleted file mode 100644
index 478d0ac..0000000
--- a/packages/winapps/winapps.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/bin/winapps
-+++ b/bin/winapps
-@@ -295,7 +295,7 @@ function waCheckGroupMembership() {
- # shellcheck disable=SC2155 # Silence warnings regarding masking return values through simultaneous declaration and assignment.
- local USER_GROUPS=$(groups "$(whoami)")
-
-- if ! (echo "$USER_GROUPS" | grep -q -E "\blibvirt\b") || ! (echo "$USER_GROUPS" | grep -q -E "\bkvm\b"); then
-+ if ! (echo "$USER_GROUPS" | grep -q -E "\blibvirtd\b") || ! (echo "$USER_GROUPS" | grep -q -E "\bkvm\b"); then
- waThrowExit "$EC_NOT_IN_GROUP"
- fi
- }
From 887e282443bad6285f7cb228ca3374471cd4be11 Mon Sep 17 00:00:00 2001
From: Rohan Barar
Date: Sat, 2 Aug 2025 22:48:42 +1000
Subject: [PATCH 22/23] remove '.DS_Store' files + update gitignore
---
.DS_Store | Bin 8196 -> 0 bytes
.gitignore | 2 ++
packages/.DS_Store | Bin 6148 -> 0 bytes
packages/winapps/.DS_Store | Bin 6148 -> 0 bytes
4 files changed, 2 insertions(+)
delete mode 100644 .DS_Store
delete mode 100644 packages/.DS_Store
delete mode 100644 packages/winapps/.DS_Store
diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index d24f42c413b1b4aaac5336577b2667ab26e864d7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 8196
zcmeHM&2AGh5FR%v-82Ov1X3?ZD{-w#soDs{CFF-v2?}Zg2muP&CbUsD>!`aSpsG^N
z@D98JSDu7-;RN5Zd=n%MH*aqsLmK1x08mw1x_kVhEEt2n|Pn$=Hvz
z)^HMPWPFbqS(pq(n8ZW4%A7<=Ybz}SmVrqIICsxdiw5|Fsr>x``c{9bqJSCls7pc0
z>f3ZHZxjy9yMXWB!0(39+S(5>m&wjwT5uMeyz{nxAV>A66%E63>+m(-HKg>tlk1lE
zqT3lY3)d?$h+5sCbEp8_b_XVJUUq}F9F^rTXom`0*BwsI$u$ehM@Plt-4%CzbK`i$
zJ-WBPw&HFSH;#{U&W&5Q@9#Eyem{_()vQREBZV&O`&0P^S7y#1>W6_ZgMGBH^);%{
zQ>s#pn$Qm+`F;m2&vDhDRq9ha$&_r@R)r{4k
zUD~EHMr=Uu(ALyZf2Pn&3jK^;DfAXSn(pl!&on-2p4#y7JvQC?|VdP1fTqg2t{NktQYAqBC>+ru|svpS-TJ*}-mU!RH?2KJ2H&%h~o9ByJ{nNX1VMySs+nSfwX3_~%n4&cCD1pa{Er
zfb|OLAh{A8Z3$)px8w}-~XTUSz7lk1D1ia7!cWNy;_FF$q(VQG3VMY
z>N`{}Y&X_gK_FB*4z1F0=+i$8aqYsCF(sqNTB8N!ufGVm2w91J{;Sxr;?EiQ4Vyp%
A(EtDd
diff --git a/.gitignore b/.gitignore
index c000e0c..403937f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
/.idea
/.vscode
/result
+.DS_Store
+**/.DS_Store
diff --git a/packages/.DS_Store b/packages/.DS_Store
deleted file mode 100644
index b6729e2aa9bcd87fa58d4e3c560ae83e03cf6034..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6148
zcmeH~&rjPh6vv;TqbX=o4j}btY1aY;l?ucqE9|fX1IaHN$9)Ap1
z{*wJW+xOW9t#pXnK*e{`$vzaq^LD$3!GLWw>H$~qT?bT#Ho(H
zj|XXzkDAS2VqvlJVX5j>y%p~?yi`RvibmtS6Aiy}>sYBYeyB(Bx1?Wm{nZ1NjiMy$
z4|PJ)>m%gHNs{$c(NW{9m+Rcn40tuK*7fU?NxQwTnW)
zQCB(wj=(H|Mbq^8{QvU&{eL#ewHyIQ;9U_AmBa9`gHN(&>)gljSu5dZa5j!Bjp`H>
i_BhrRK8ovbZ5WeWfd*Dfqv(OT9|4WQ6^_7vCGZC{udlNJ
diff --git a/packages/winapps/.DS_Store b/packages/winapps/.DS_Store
deleted file mode 100644
index 053967660478598e167eabc9e3bdc9f4ad5074eb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6148
zcmeHKyH3ME5S)b+k`J?H
zx3}Z7r|{kZkoj(X2}}Wu>5ABE7@DrD59};5iek^$p+SooUhq7q{yw4H3D$VPBkpm`
zf4gZmt7WrUvO-_)iavWc<49SrWVPgMx#O1X7AriRuns3Iqh?42Qh`(;6-WjCu>$Pb
zYU7Dx##A5`NCmzW(EmfBE7riy(S98adVJUQk)j&Mc9$TQnAgD0kt;NDD$%JDR}67F
z^CjwPVCU#`i0#bh#Lf~o6tUfzFIEnzju}&dRG_cGxlgCs|F7vk-2eNeoTUP(z@Jh;
zMvL3UoSziEb?|Z8YYY93{%NeWa)#a^fD>)S7e{qP$E>S?oukp2H##v70;)?|D)1W$
Fd;kKuDZT&z
From 44f9df793dfbf8d2185cbcf49964139a0d3507cd Mon Sep 17 00:00:00 2001
From: Rohan Barar
Date: Sat, 2 Aug 2025 23:03:32 +1000
Subject: [PATCH 23/23] update setup.patch to match change in
9c0564cca429d1f4eb181643dab48448d414270a
---
packages/winapps/setup.patch | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/winapps/setup.patch b/packages/winapps/setup.patch
index b7c95fb..ed23bfb 100644
--- a/packages/winapps/setup.patch
+++ b/packages/winapps/setup.patch
@@ -7,9 +7,9 @@ index 0debe4d..6aeea08 100755
readonly USER_BIN_PATH_WIN='\\tsclient\home\.local\bin' # WINDOWS path to 'bin' directory for a '--user' WinApps installation.
# 'SOURCE'
-readonly SYS_SOURCE_PATH="${SYS_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
--readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
+-readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--user' WinApps installation.
+readonly SYS_SOURCE_PATH="@out@/src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
-+readonly USER_SOURCE_PATH="@out@/src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
++readonly USER_SOURCE_PATH="@out@/src" # UNIX path to WinApps source directory for a '--user' WinApps installation.
# 'APP'
readonly SYS_APP_PATH="/usr/share/applications" # UNIX path to 'applications' directory for a '--system' WinApps installation.
readonly USER_APP_PATH="${HOME}/.local/share/applications" # UNIX path to 'applications' directory for a '--user' WinApps installation.