diff --git a/README.md b/README.md
index 5b727f5..beaba31 100644
--- a/README.md
+++ b/README.md
@@ -1,100 +1,33 @@
-# winapps
-The winapps main project
+# winapps-mac
+The winapps main project
Originally created by fmstrat https://github.com/Fmstrat/winapps/
-Run Windows apps such as Microsoft Office/Adobe in Linux (Ubuntu/Fedora) and GNOME/KDE as if they were a part of the native OS, including Nautilus integration for right clicking on files of specific mime types to open them.
-
-
-
-## How it works
-WinApps was created as an easy, one command way to include apps running inside a VM (or on any RDP server) directly into GNOME as if they were native applications. WinApps works by:
-- Running a Windows RDP server in a background VM container
-- Checking the RDP server for installed applications such as Microsoft Office
-- If those programs are installed, it creates shortcuts leveraging FreeRDP for both the CLI and the GNOME tray
-- Files in your home directory are accessible via the `\\tsclient\home` mount inside the VM
-- You can right click on any files in your home directory to open with an application, too
-
-## Currently supported applications
-### WinApps supports ***ANY*** installed application on your system.
-
-It does this by:
-1. Scanning your system for offically configured applications (below)
-2. Scanning your system for any other EXE files with install records in the Windows Registry
-
-Any officially configured applications will have support for high-resolution icons and mime types for automatically detecting what files can be opened by each application. Any other detected executable files will leverage the icons pulled from the EXE.
-
-Note: The officially configured application list below is fueled by the community, and therefore some apps may be untested by the WinApps team.
-
-
-
-
Adobe Acrobat Pro (X)
-
Adobe Acrobat Reader (DC)
-
-
-
Adobe After Effects (CC)
-
Adobe Audition (CC)
-
-
-
Adobe Bridge (CS6, CC)
-
Adobe Creative Cloud (CC)
-
-
-
Adobe Illustrator (CC)
-
Adobe InDesign (CC)
-
-
-
Adobe Lightroom (CC)
-
Command Prompt (cmd.exe)
-
-
-
Explorer (File Manager)
-
Internet Explorer (11)
-
-
-
Microsoft Access (2016, 2019, o365)
-
Microsoft Excel (2016, 2019, o365)
-
-
-
Microsoft Word (2016, 2019, o365)
-
Microsoft OneNote (2016, 2019, o365)
-
-
-
Microsoft Outlook (2016, 2019, o365)
-
Microsoft PowerPoint (2016, 2019, o365)
-
-
-
Microsoft Publisher (2016, 2019, o365)
-
Powershell
-
-
-
Windows (Full RDP session)
-
-
-
-
## Installation
### Step 1: Set up a Windows Virtual Machine
-The best solution for running a VM as a subsystem for WinApps would be KVM. KVM is a CPU and memory-efficient virtualization engine bundled with most major Linux distributions. To set up the VM for WinApps, follow this guide:
+The best solution for running a VM as a subsystem for WinApps would be KVM. KVM is a CPU and memory-efficient virtualization engine. To set up the VM for WinApps, follow this guide:
-- [Creating a Virtual Machine in KVM](docs/KVM.md)
+- [Creating a Virtual Machine in KVM using UTM](docs/UTM.md)
If you already have a Virtual Machine or server you wish to use with WinApps, you will need to merge `install/RDPApps.reg` into the VM's Windows Registry. If this VM is in KVM and you want to use auto-IP detection, you will need to name the machine `RDPWindows`. Directions for both of these can be found in the guide linked above.
### Step 2: Download the repo and prerequisites
To get things going, use:
``` bash
-sudo apt install -y freerdp2-x11
+brew install --cask xquartz # reboot after installing this
+brew install coreutils freerdp
git clone https://github.com/winapps-org/winapps.git
cd winapps
```
+
+
### Step 3: Creating your WinApps configuration file
You will need to create a `~/.config/winapps/winapps.conf` configuration file with the following information in it:
``` bash
RDP_USER="MyWindowsUser"
RDP_PASS="MyWindowsPassword"
#RDP_DOMAIN="MYDOMAIN"
-#RDP_IP="192.168.123.111"
+RDP_IP="127.0.0.1"
#RDP_SCALE=100
#RDP_FLAGS=""
#MULTIMON="true"
@@ -104,7 +37,6 @@ The username and password should be a full user account and password, such as th
Options:
- When using a pre-existing non-KVM RDP server, you can use the `RDP_IP` to specify it's location
-- If you are running a VM in KVM with NAT enabled, leave `RDP_IP` commented out and WinApps will auto-detect the right local IP
- For domain users, you can uncomment and change `RDP_DOMAIN`
- On high-resolution (UHD) displays, you can set `RDP_SCALE` to the scale you would like [100|140|160|180]
- To add flags to the FreeRDP call, such as `/audio-mode:1` to pass in a mic, use the `RDP_FLAGS` configuration option
@@ -125,24 +57,6 @@ If this step fails, try restarting the VM, or your problem could be related to:
- Incorrect user credentials in `~/.config/winapps/winapps.conf`
- Not merging `install/RDPApps.reg` into the VM
-Then the final step is to run the installer which will prompt you for a system or user install:
-``` bash
-./installer.sh
-```
-This will take you through the following process:
-
-
-
-
-## Adding pre-defined applications
-Adding applications with custom icons and mime types to the installer is easy. Simply copy one of the application configurations in the `apps` folder, and:
-- Edit the variables for the application
-- Replace the `icon.svg` with an SVG for the application (appropriately licensed)
-- Re-run the installer
-- Submit a Pull Request to add it to WinApps officially
-
-When running the installer, it will check for if any configured apps are installed, and if they are it will create the appropriate shortcuts on the host OS.
-
## Running applications manually
WinApps offers a manual mode for running applications that are not configured. This is completed with the `manual` flag. Executables that are in the path do not require full path definition.
``` bash
@@ -150,25 +64,4 @@ WinApps offers a manual mode for running applications that are not configured. T
./bin/winapps manual executableInPath.exe
```
-## Checking for new application support
-The installer can be run multiple times, so simply run the below again and it will remove any current installations and update for the latest applications.
-``` bash
-./installer.sh
-```
-
-## Optional installer command line arguments
-The following optional commands can be used to manage your application configurations without prompts:
-``` bash
-./installer.sh --user # Configure applications for the current user
-./installer.sh --system # Configure applications for the entire system
-./installer.sh --user --uninstall # Remove all configured applications for the current user
-./installer.sh --system --uninstall # Remove all configured applications for the entire system
-```
-
-## Shout outs
-- Some icons pulled from
- - Fluent UI React - Icons under [MIT License](https://github.com/Fmstrat/fluent-ui-react/blob/master/LICENSE.md)
- - Fluent UI - Icons under [MIT License](https://github.com/Fmstrat/fluentui/blob/master/LICENSE) with [restricted use](https://static2.sharepointonline.com/files/fabric/assets/microsoft_fabric_assets_license_agreement_nov_2019.pdf)
- - PKief's VSCode Material Icon Theme - Icons under [MIT License](https://github.com/Fmstrat/vscode-material-icon-theme/blob/master/LICENSE.md)
- - DiemenDesign's LibreICONS - Icons under [MIT License](https://github.com/Fmstrat/LibreICONS/blob/master/LICENSE)
-
+Currently, this is the only mode supported on macOS
diff --git a/apps/access-o365-x86/icon.svg b/apps/access-o365-x86/icon.svg
deleted file mode 100644
index 2e7240d..0000000
--- a/apps/access-o365-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/access-o365-x86/info b/apps/access-o365-x86/info
deleted file mode 100644
index 3c6739f..0000000
--- a/apps/access-o365-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Access"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Access"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\Office16\MSACCESS.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/x-msaccess;"
diff --git a/apps/access-o365/icon.svg b/apps/access-o365/icon.svg
deleted file mode 100644
index 2e7240d..0000000
--- a/apps/access-o365/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/access-o365/info b/apps/access-o365/info
deleted file mode 100644
index cab586f..0000000
--- a/apps/access-o365/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Access"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Access"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\Office16\MSACCESS.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/x-msaccess;"
diff --git a/apps/access-x86/icon.svg b/apps/access-x86/icon.svg
deleted file mode 100644
index 2e7240d..0000000
--- a/apps/access-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/access-x86/info b/apps/access-x86/info
deleted file mode 100644
index d37673c..0000000
--- a/apps/access-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Access"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Access"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\root\Office16\MSACCESS.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/x-msaccess;"
diff --git a/apps/access/icon.svg b/apps/access/icon.svg
deleted file mode 100644
index 2e7240d..0000000
--- a/apps/access/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/access/info b/apps/access/info
deleted file mode 100644
index 6a1bea4..0000000
--- a/apps/access/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Access"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Access"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/x-msaccess;"
diff --git a/apps/acrobat-x-pro/icon.svg b/apps/acrobat-x-pro/icon.svg
deleted file mode 100755
index 9c971f6..0000000
--- a/apps/acrobat-x-pro/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/acrobat-x-pro/info b/apps/acrobat-x-pro/info
deleted file mode 100644
index c3e9b58..0000000
--- a/apps/acrobat-x-pro/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Acrobat X Pro"
-
-# Used for descriptions and window class
-FULL_NAME="Acrobat X Pro"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Documents"
-
-# GNOME mimetypes
-MIME_TYPES="application/pdf;"
diff --git a/apps/adobe-cc/icon.svg b/apps/adobe-cc/icon.svg
deleted file mode 100755
index 9272652..0000000
--- a/apps/adobe-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/adobe-cc/info b/apps/adobe-cc/info
deleted file mode 100644
index a1a0e9f..0000000
--- a/apps/adobe-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Creative Cloud"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Creative Cloud"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Creative Cloud\ACC\Creative Cloud.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES=""
diff --git a/apps/aftereffects-cc/icon.svg b/apps/aftereffects-cc/icon.svg
deleted file mode 100755
index 6b42dd7..0000000
--- a/apps/aftereffects-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/aftereffects-cc/info b/apps/aftereffects-cc/info
deleted file mode 100644
index f40e513..0000000
--- a/apps/aftereffects-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="After Effects CC"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe After Effects CC"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe After Effects 2020\Support Files\AfterFX.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.adobe.aftereffects.project;application/vnd.adobe.aftereffects.template;"
diff --git a/apps/audition-cc/icon.svg b/apps/audition-cc/icon.svg
deleted file mode 100755
index 01c32a6..0000000
--- a/apps/audition-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/audition-cc/info b/apps/audition-cc/info
deleted file mode 100644
index 8551913..0000000
--- a/apps/audition-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Audition CC"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Audition CC"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Audition 2020\Adobe Audition.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES=""
diff --git a/apps/bridge-cc/icon.svg b/apps/bridge-cc/icon.svg
deleted file mode 100755
index 6a84294..0000000
--- a/apps/bridge-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/bridge-cc/info b/apps/bridge-cc/info
deleted file mode 100644
index 48379a0..0000000
--- a/apps/bridge-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Bridge CS6"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Bridge CS6"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Bridge CS6 (64 Bit)\Bridge.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="image/vnd.adobe.photoshop;"
diff --git a/apps/bridge-cs6-x86/icon.svg b/apps/bridge-cs6-x86/icon.svg
deleted file mode 100755
index 6a84294..0000000
--- a/apps/bridge-cs6-x86/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/bridge-cs6-x86/info b/apps/bridge-cs6-x86/info
deleted file mode 100644
index 5f72104..0000000
--- a/apps/bridge-cs6-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Bridge CS6"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Bridge CS6"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Adobe\Adobe Bridge CS6\Bridge.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="image/vnd.adobe.photoshop;"
diff --git a/apps/bridge-cs6/icon.svg b/apps/bridge-cs6/icon.svg
deleted file mode 100755
index 6a84294..0000000
--- a/apps/bridge-cs6/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/bridge-cs6/info b/apps/bridge-cs6/info
deleted file mode 100644
index 17009f0..0000000
--- a/apps/bridge-cs6/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Bridge CS6"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Bridge CS6"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Bridge 2020\Bridge.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="image/vnd.adobe.photoshop;"
diff --git a/apps/cmd/icon.svg b/apps/cmd/icon.svg
deleted file mode 100644
index db435c4..0000000
--- a/apps/cmd/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/cmd/info b/apps/cmd/info
deleted file mode 100644
index eda4064..0000000
--- a/apps/cmd/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Cmd"
-
-# Used for descriptions and window class
-FULL_NAME="Command Prompt"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Windows\System32\cmd.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Windows"
-
-# GNOME mimetypes
-MIME_TYPES=""
diff --git a/apps/excel-o365-x86/icon.svg b/apps/excel-o365-x86/icon.svg
deleted file mode 100644
index 2992c1f..0000000
--- a/apps/excel-o365-x86/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/excel-o365-x86/info b/apps/excel-o365-x86/info
deleted file mode 100644
index a913aa0..0000000
--- a/apps/excel-o365-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Excel"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Excel"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.sheet.macroEnabled.12;application/vnd.ms-excel.template.macroEnabled.12;application/vnd.ms-excel.addin.macroEnabled.12;application/vnd.ms-excel.sheet.binary.macroEnabled.12;"
diff --git a/apps/excel-o365/icon.svg b/apps/excel-o365/icon.svg
deleted file mode 100644
index 2992c1f..0000000
--- a/apps/excel-o365/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/excel-o365/info b/apps/excel-o365/info
deleted file mode 100644
index de6b82b..0000000
--- a/apps/excel-o365/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Excel"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Excel"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.sheet.macroEnabled.12;application/vnd.ms-excel.template.macroEnabled.12;application/vnd.ms-excel.addin.macroEnabled.12;application/vnd.ms-excel.sheet.binary.macroEnabled.12;"
diff --git a/apps/excel-x86/icon.svg b/apps/excel-x86/icon.svg
deleted file mode 100644
index 2992c1f..0000000
--- a/apps/excel-x86/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/excel-x86/info b/apps/excel-x86/info
deleted file mode 100644
index ceb3b6c..0000000
--- a/apps/excel-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Excel"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Excel"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.sheet.macroEnabled.12;application/vnd.ms-excel.template.macroEnabled.12;application/vnd.ms-excel.addin.macroEnabled.12;application/vnd.ms-excel.sheet.binary.macroEnabled.12;"
diff --git a/apps/excel/icon.svg b/apps/excel/icon.svg
deleted file mode 100644
index 2992c1f..0000000
--- a/apps/excel/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/excel/info b/apps/excel/info
deleted file mode 100644
index f397b76..0000000
--- a/apps/excel/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Excel"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Excel"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\Office16\EXCEL.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-excel;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.sheet.macroEnabled.12;application/vnd.ms-excel.template.macroEnabled.12;application/vnd.ms-excel.addin.macroEnabled.12;application/vnd.ms-excel.sheet.binary.macroEnabled.12;"
diff --git a/apps/explorer/icon.svg b/apps/explorer/icon.svg
deleted file mode 100644
index 4f1252f..0000000
--- a/apps/explorer/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/explorer/info b/apps/explorer/info
deleted file mode 100644
index b644bc7..0000000
--- a/apps/explorer/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Explorer"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Explorer"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Windows\explorer.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Windows"
-
-# GNOME mimetypes
-MIME_TYPES=""
diff --git a/apps/iexplorer/icon.svg b/apps/iexplorer/icon.svg
deleted file mode 100644
index 71882d5..0000000
--- a/apps/iexplorer/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/iexplorer/info b/apps/iexplorer/info
deleted file mode 100644
index 7de8b24..0000000
--- a/apps/iexplorer/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Internet Explorer"
-
-# Used for descriptions and window class
-FULL_NAME="Internet Explorer"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Internet Explorer\iexplore.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;"
diff --git a/apps/illustrator-cc/icon.svg b/apps/illustrator-cc/icon.svg
deleted file mode 100755
index 7ea299b..0000000
--- a/apps/illustrator-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/illustrator-cc/info b/apps/illustrator-cc/info
deleted file mode 100644
index 701ab29..0000000
--- a/apps/illustrator-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Illustrator CC"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Illustrator CC"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Illustrator 2021\Support Files\Contents\Windows\Illustrator.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="application/illustrator;"
diff --git a/apps/indesign-cc/icon.svg b/apps/indesign-cc/icon.svg
deleted file mode 100755
index f26dead..0000000
--- a/apps/indesign-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/indesign-cc/info b/apps/indesign-cc/info
deleted file mode 100644
index 7829791..0000000
--- a/apps/indesign-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="InDesign CC"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe InDesign CC"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe InDesign 2021\InDesign.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="application/x-adobe-indesign-interchange;application/x-adobe-indesign;"
diff --git a/apps/lightroom-cc/icon.svg b/apps/lightroom-cc/icon.svg
deleted file mode 100755
index 9a02e00..0000000
--- a/apps/lightroom-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/lightroom-cc/info b/apps/lightroom-cc/info
deleted file mode 100644
index d4f19f3..0000000
--- a/apps/lightroom-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Lightroom CC"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Lightroom CC"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Lightroom CC\lightroom.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES=""
diff --git a/apps/onenote-o365-x86/icon.svg b/apps/onenote-o365-x86/icon.svg
deleted file mode 100644
index b76f325..0000000
--- a/apps/onenote-o365-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/onenote-o365-x86/info b/apps/onenote-o365-x86/info
deleted file mode 100644
index 7a2553d..0000000
--- a/apps/onenote-o365-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="OneNote"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft OneNote"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\root\Office16\ONENOTE.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msonenote;"
diff --git a/apps/onenote-o365/icon.svg b/apps/onenote-o365/icon.svg
deleted file mode 100644
index b76f325..0000000
--- a/apps/onenote-o365/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/onenote-o365/info b/apps/onenote-o365/info
deleted file mode 100644
index 3003121..0000000
--- a/apps/onenote-o365/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="OneNote"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft OneNote"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\root\Office16\ONENOTE.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msonenote;"
diff --git a/apps/onenote-x86/icon.svg b/apps/onenote-x86/icon.svg
deleted file mode 100644
index b76f325..0000000
--- a/apps/onenote-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/onenote-x86/info b/apps/onenote-x86/info
deleted file mode 100644
index fde6517..0000000
--- a/apps/onenote-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="OneNote"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft OneNote"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\Office16\ONENOTE.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msonenote;"
diff --git a/apps/onenote/icon.svg b/apps/onenote/icon.svg
deleted file mode 100644
index b76f325..0000000
--- a/apps/onenote/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/onenote/info b/apps/onenote/info
deleted file mode 100644
index 1165128..0000000
--- a/apps/onenote/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="OneNote"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft OneNote"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\Office16\ONENOTE.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msonenote;"
diff --git a/apps/outlook-o365-x86/icon.svg b/apps/outlook-o365-x86/icon.svg
deleted file mode 100644
index a459409..0000000
--- a/apps/outlook-o365-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/outlook-o365-x86/info b/apps/outlook-o365-x86/info
deleted file mode 100644
index 14422af..0000000
--- a/apps/outlook-o365-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Outlook"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Outlook"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-outlook;application/octet-stream;"
diff --git a/apps/outlook-o365/icon.svg b/apps/outlook-o365/icon.svg
deleted file mode 100644
index a459409..0000000
--- a/apps/outlook-o365/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/outlook-o365/info b/apps/outlook-o365/info
deleted file mode 100644
index 9893d42..0000000
--- a/apps/outlook-o365/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Outlook"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Outlook"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-outlook;application/octet-stream;"
diff --git a/apps/outlook-x86/icon.svg b/apps/outlook-x86/icon.svg
deleted file mode 100644
index a459409..0000000
--- a/apps/outlook-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/outlook-x86/info b/apps/outlook-x86/info
deleted file mode 100644
index 1431add..0000000
--- a/apps/outlook-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Outlook"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Outlook"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\Office16\OUTLOOK.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-outlook;application/octet-stream;"
diff --git a/apps/outlook/icon.svg b/apps/outlook/icon.svg
deleted file mode 100644
index a459409..0000000
--- a/apps/outlook/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/outlook/info b/apps/outlook/info
deleted file mode 100644
index f3a4f43..0000000
--- a/apps/outlook/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Outlook"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Outlook"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\Office16\OUTLOOK.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-outlook;application/octet-stream;"
diff --git a/apps/photoshop-cc/icon.svg b/apps/photoshop-cc/icon.svg
deleted file mode 100644
index a9d19f7..0000000
--- a/apps/photoshop-cc/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/photoshop-cc/info b/apps/photoshop-cc/info
deleted file mode 100644
index 45fc878..0000000
--- a/apps/photoshop-cc/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Photoshop CC"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Photoshop CC"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Photoshop 2020\Photoshop.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="image/vnd.adobe.photoshop;"
diff --git a/apps/photoshop-cs6-x86/icon.svg b/apps/photoshop-cs6-x86/icon.svg
deleted file mode 100644
index a9d19f7..0000000
--- a/apps/photoshop-cs6-x86/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/photoshop-cs6-x86/info b/apps/photoshop-cs6-x86/info
deleted file mode 100644
index d4fd734..0000000
--- a/apps/photoshop-cs6-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Photoshop CS6"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Photoshop CS6"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Adobe\Adobe Photoshop CS6\Photoshop.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="image/vnd.adobe.photoshop;"
diff --git a/apps/photoshop-cs6/icon.svg b/apps/photoshop-cs6/icon.svg
deleted file mode 100644
index a9d19f7..0000000
--- a/apps/photoshop-cs6/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/photoshop-cs6/info b/apps/photoshop-cs6/info
deleted file mode 100644
index a1ae9e6..0000000
--- a/apps/photoshop-cs6/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Photoshop CS6"
-
-# Used for descriptions and window class
-FULL_NAME="Adobe Photoshop CS6"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Photoshop.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Adobe"
-
-# GNOME mimetypes
-MIME_TYPES="image/vnd.adobe.photoshop;"
diff --git a/apps/powerpoint-o365-x86/icon.svg b/apps/powerpoint-o365-x86/icon.svg
deleted file mode 100644
index 4533ac3..0000000
--- a/apps/powerpoint-o365-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/powerpoint-o365-x86/info b/apps/powerpoint-o365-x86/info
deleted file mode 100644
index 8496695..0000000
--- a/apps/powerpoint-o365-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="PowerPoint"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft PowerPoint"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\root\Office16\POWERPNT.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.addin.macroEnabled.12;application/vnd.ms-powerpoint.presentation.macroEnabled.12;application/vnd.ms-powerpoint.template.macroEnabled.12;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;"
diff --git a/apps/powerpoint-o365/icon.svg b/apps/powerpoint-o365/icon.svg
deleted file mode 100644
index 4533ac3..0000000
--- a/apps/powerpoint-o365/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/powerpoint-o365/info b/apps/powerpoint-o365/info
deleted file mode 100644
index 45b7916..0000000
--- a/apps/powerpoint-o365/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="PowerPoint"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft PowerPoint"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\root\Office16\POWERPNT.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.addin.macroEnabled.12;application/vnd.ms-powerpoint.presentation.macroEnabled.12;application/vnd.ms-powerpoint.template.macroEnabled.12;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;"
diff --git a/apps/powerpoint-x86/icon.svg b/apps/powerpoint-x86/icon.svg
deleted file mode 100644
index 4533ac3..0000000
--- a/apps/powerpoint-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/powerpoint-x86/info b/apps/powerpoint-x86/info
deleted file mode 100644
index 1170358..0000000
--- a/apps/powerpoint-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="PowerPoint"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft PowerPoint"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\Office16\POWERPNT.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.addin.macroEnabled.12;application/vnd.ms-powerpoint.presentation.macroEnabled.12;application/vnd.ms-powerpoint.template.macroEnabled.12;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;"
diff --git a/apps/powerpoint/icon.svg b/apps/powerpoint/icon.svg
deleted file mode 100644
index 4533ac3..0000000
--- a/apps/powerpoint/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/powerpoint/info b/apps/powerpoint/info
deleted file mode 100644
index 17f1cba..0000000
--- a/apps/powerpoint/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="PowerPoint"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft PowerPoint"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\Office16\POWERPNT.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.openxmlformats-officedocument.presentationml.slideshow;application/vnd.ms-powerpoint.addin.macroEnabled.12;application/vnd.ms-powerpoint.presentation.macroEnabled.12;application/vnd.ms-powerpoint.template.macroEnabled.12;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;"
diff --git a/apps/powershell/icon.svg b/apps/powershell/icon.svg
deleted file mode 100644
index a423aca..0000000
--- a/apps/powershell/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/powershell/info b/apps/powershell/info
deleted file mode 100644
index 4eca7c5..0000000
--- a/apps/powershell/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Powershell"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Powershell"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
-
-# GNOME categories
-CATEGORIES="WinApps;Windows"
-
-# GNOME mimetypes
-MIME_TYPES=""
diff --git a/apps/publisher-o365-x86/icon.svg b/apps/publisher-o365-x86/icon.svg
deleted file mode 100644
index 6706891..0000000
--- a/apps/publisher-o365-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/publisher-o365-x86/info b/apps/publisher-o365-x86/info
deleted file mode 100644
index 3f53e4d..0000000
--- a/apps/publisher-o365-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Publisher"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Publisher"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\root\Office16\MSPUB.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-publisher;"
diff --git a/apps/publisher-o365/icon.svg b/apps/publisher-o365/icon.svg
deleted file mode 100644
index 6706891..0000000
--- a/apps/publisher-o365/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/publisher-o365/info b/apps/publisher-o365/info
deleted file mode 100644
index a0466f0..0000000
--- a/apps/publisher-o365/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Publisher"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Publisher"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\root\Office16\MSPUB.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-publisher;"
diff --git a/apps/publisher-x86/icon.svg b/apps/publisher-x86/icon.svg
deleted file mode 100644
index 6706891..0000000
--- a/apps/publisher-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/publisher-x86/info b/apps/publisher-x86/info
deleted file mode 100644
index 871509f..0000000
--- a/apps/publisher-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Publisher"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Publisher"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\Office16\MSPUB.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-publisher;"
diff --git a/apps/publisher/icon.svg b/apps/publisher/icon.svg
deleted file mode 100644
index 6706891..0000000
--- a/apps/publisher/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/publisher/info b/apps/publisher/info
deleted file mode 100644
index b0f305e..0000000
--- a/apps/publisher/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Publisher"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Publisher"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\Office16\MSPUB.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/vnd.ms-publisher;"
diff --git a/apps/word-o365-x86/icon.svg b/apps/word-o365-x86/icon.svg
deleted file mode 100644
index 643aaf4..0000000
--- a/apps/word-o365-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/word-o365-x86/info b/apps/word-o365-x86/info
deleted file mode 100644
index b6a001e..0000000
--- a/apps/word-o365-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Word"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Word"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\root\Office16\WINWORD.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msword;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.document.macroEnabled.12;application/vnd.ms-word.template.macroEnabled.12;"
diff --git a/apps/word-o365/icon.svg b/apps/word-o365/icon.svg
deleted file mode 100644
index 643aaf4..0000000
--- a/apps/word-o365/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/word-o365/info b/apps/word-o365/info
deleted file mode 100644
index 2e1a365..0000000
--- a/apps/word-o365/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Word"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Word"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msword;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.document.macroEnabled.12;application/vnd.ms-word.template.macroEnabled.12;"
diff --git a/apps/word-x86/icon.svg b/apps/word-x86/icon.svg
deleted file mode 100644
index 643aaf4..0000000
--- a/apps/word-x86/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/word-x86/info b/apps/word-x86/info
deleted file mode 100644
index a4b9c45..0000000
--- a/apps/word-x86/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Word"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Word"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files (x86)\Microsoft Office\Office16\WINWORD.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msword;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.document.macroEnabled.12;application/vnd.ms-word.template.macroEnabled.12;"
diff --git a/apps/word/icon.svg b/apps/word/icon.svg
deleted file mode 100644
index 643aaf4..0000000
--- a/apps/word/icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/word/info b/apps/word/info
deleted file mode 100644
index 4236346..0000000
--- a/apps/word/info
+++ /dev/null
@@ -1,14 +0,0 @@
-# GNOME shortcut name
-NAME="Word"
-
-# Used for descriptions and window class
-FULL_NAME="Microsoft Word"
-
-# The executable inside windows
-WIN_EXECUTABLE="C:\Program Files\Microsoft Office\Office16\WINWORD.EXE"
-
-# GNOME categories
-CATEGORIES="WinApps;Office"
-
-# GNOME mimetypes
-MIME_TYPES="application/msword;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.document.macroEnabled.12;application/vnd.ms-word.template.macroEnabled.12;"
diff --git a/bin/winapps b/bin/winapps
index cecb079..486ffb2 100755
--- a/bin/winapps
+++ b/bin/winapps
@@ -28,11 +28,16 @@ function dprint() {
dprint "START"
+if [ -z "$(which gstat)" ]; then
+ echo "You need gnu coreutils! (gstat)"
+ echo " brew install coreutils"
+fi
+
if [ -f "${HOME}/.local/share/winapps/run" ]; then
- LAST_RAN=$(stat -t -c %Y "${HOME}/.local/share/winapps/run")
+ LAST_RAN=$(gstat -t -c %Y "${HOME}/.local/share/winapps/run")
dprint "LAST_RAN:${LAST_RAN}"
touch "${HOME}/.local/share/winapps/run"
- THIS_RUN=$(stat -t -c %Y "${HOME}/.local/share/winapps/run")
+ THIS_RUN=$(gstat -t -c %Y "${HOME}/.local/share/winapps/run")
dprint "THIS_RUN:${THIS_RUN}"
if (( $THIS_RUN - $LAST_RAN < 2 )); then
exit
@@ -43,24 +48,13 @@ fi
if [ -z "$(which xfreerdp)" ]; then
echo "You need xfreerdp!"
- echo " sudo apt-get install -y freerdp2-x11"
+ echo " brew install freerdp"
exit
fi
if [ -z "${RDP_IP}" ]; then
- if [ -z "$(groups |grep libvirt)" ]; then
- echo "You are not a member of the libvirt group. Run the below then reboot."
- echo ' sudo usermod -a -G libvirt $(whoami)'
- echo ' sudo usermod -a -G kvm $(whoami)'
- exit
- fi
- if [ -z "$(virsh list |grep RDPWindows)" ]; then
- echo "RDPWindows is not running, run:"
- echo " virsh start RDPWindows"
- exit
- fi
- RDP_IP=$(virsh net-dhcp-leases default |grep RDPWindows |awk '{print $5}')
- RDP_IP=${RDP_IP%%\/*}
+ echo "Specify an IP! Automatic IP discovery is not supported on macOS!"
+ exit
fi
dprint "1:${1}"
@@ -81,28 +75,8 @@ elif [ "${1}" = "manual" ]; then
dprint "MANUAL:${2}"
xfreerdp ${RDP_FLAGS} /d:"${RDP_DOMAIN}" /u:"${RDP_USER}" /p:"${RDP_PASS}" /v:${RDP_IP} +auto-reconnect +home-drive -wallpaper /scale:${RDP_SCALE} /dynamic-resolution /${MULTI_FLAG} /app:"${2}" 1> /dev/null 2>&1 &
elif [ "${1}" != "install" ]; then
- dprint "DIR:${DIR}"
- if [ -e "${DIR}/../apps/${1}/info" ]; then
- . "${DIR}/../apps/${1}/info"
- ICON="${DIR}/../apps/${1}/icon.svg"
- elif [ -e "${HOME}/.local/share/winapps/apps/${1}/info" ]; then
- . "${HOME}/.local/share/winapps/apps/${1}/info"
- ICON="${HOME}/.local/share/winapps/apps/${1}/icon.svg"
- elif [ -e "/usr/local/share/winapps/apps/${1}/info" ]; then
- . "/usr/local/share/winapps/apps/${1}/info"
- ICON="/usr/local/share/winapps/apps/${1}/icon.svg"
- else
- echo "You need to run 'install.sh' first."
- exit 1
- fi
- if [ -n "${2}" ]; then
- dprint "HOME:${HOME}"
- FILE=$(echo "${2}" | sed 's|'"${HOME}"'|\\\\tsclient\\home|;s|/|\\|g;s|\\|\\\\|g')
- dprint "FILE:${FILE}"
- xfreerdp ${RDP_FLAGS} /d:"${RDP_DOMAIN}" /u:"${RDP_USER}" /p:"${RDP_PASS}" /v:${RDP_IP} +auto-reconnect +clipboard +home-drive -wallpaper /scale:${RDP_SCALE} /dynamic-resolution /${MULTI_FLAG} /wm-class:"${FULL_NAME}" /app:"${WIN_EXECUTABLE}" /app-icon:"${ICON}" /app-cmd:"\"${FILE}\"" 1> /dev/null 2>&1 &
- else
- xfreerdp ${RDP_FLAGS} /d:"${RDP_DOMAIN}" /u:"${RDP_USER}" /p:"${RDP_PASS}" /v:${RDP_IP} +auto-reconnect +clipboard +home-drive -wallpaper /scale:${RDP_SCALE} /dynamic-resolution /${MULTI_FLAG} /wm-class:"${FULL_NAME}" /app:"${WIN_EXECUTABLE}" /app-icon:"${ICON}" 1> /dev/null 2>&1 &
- fi
+ echo "This command is unsupported on macOS!"
+ exit
fi
dprint "END"
diff --git a/demo/demo.gif b/demo/demo.gif
deleted file mode 100644
index a27d6f5..0000000
Binary files a/demo/demo.gif and /dev/null differ
diff --git a/demo/installer.gif b/demo/installer.gif
deleted file mode 100644
index b152494..0000000
Binary files a/demo/installer.gif and /dev/null differ
diff --git a/docs/KVM.md b/docs/KVM.md
index dea6e93..1502068 100644
--- a/docs/KVM.md
+++ b/docs/KVM.md
@@ -1,141 +1,36 @@
-# Creating a Virtual Machine in KVM
-This step-by-step guide will take you through setting up a CPU and memory efficient virtual machine to use with WinApps leveraging KVM, an open-source virtualization software contained in most linux distributions.
+# Creating a Virtual Machine using UTM
+This guide is a rough guideline what changes need to made to a normal Windows VM in UTM so it works with Quickemu.
-## Install KVM
-First up, you must install KVM and the Virtual Machine Manager. By installing `virt-manager`, you will get everything you need for your distribution:
-```bash
-sudo apt-get install -y virt-manager
-```
+## Install UTM and create a VM
+First, get UTM from https://mac.getutm.app. Also get CrystalFetch from the Mac App Store ([this link will open it in the App Store for you](https://mac.getutm.app/crystalfetch/)).
+Now, follow the "Create new VM" wizard to create your Windows VM. When prompted for a Windows ISO image, point it to the file you downloaded using CrystalFetch.
-## Download the Windows Professional and KVM VirtIO drivers
-You will need Windows 10 Professional (or Enterprise or Server) to run RDP apps, Windows 10 Home will not suffice. You will also need drivers for VirtIO to ensure the best performance and lowest overhead for your system. You can download these at the following links.
+> **Note**:
+> When getting the Windows image, make sure to select Windows 10/11 Professional.
+> **Home will not suffice as RDP is not available there**
-Windows 10 ISO: https://www.microsoft.com/en-us/software-download/windows10ISO
+## Make the required changes to the VM configuration
+> Note:
+> There's probably a better way to do this, but I don't know how
+> Also, the text in the screenshots is partially in German since
+> apparently there's no way to change the display language in UTM
+
+Open up the VM options.
+Now go to the network tab and select "Emulated VLAN".
-KVM VirtIO drivers (for all distros): https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
+
-## Create your virtual machine
-The following guide will take you through the setup. If you are an expert user, you may wish to:
-- [Define a VM from XML (may not work on all systems)](#define-a-vm-from-xml)
-- [Run KVM in user mode](#run-kvm-in-user-mode)
+A new tab in the sidebar under Network "Port Forwarding" will open up.
+Add 2 Entries: One for UDP Port 3389 and one for TCP 3389.
+Leave the Guest address and the Host address empty.
-Otherwise, to set up the standard way, open `virt-manager` (Virtual Machines).
+
-
+Once that's done, start the VM and go through the setup process as you would set up any Windows machine.
-Next, go to `Edit`->`Preferences`, and check `Enable XML editing`, then click the `Close` button.
+## Set up RDP on the VM
-
-
-Now it is time to add a new VM by clicking the `+` button.
-
-
-
-Choose `Local install media` and click `Forward`.
-
-
-
-Now select the location of your Windows 10 ISO, and `Automatically detect` the installation.
-
-
-
-Set your memory and CPUs. We recommend `2` CPUs and `4096MB` for memory. We will be using a Memory Ballooning service, meaning 4096 is the maximum amount of memory the VM will ever use, but will not use this amount except when it is needed.
-
-
-
-Choose your virtual disk size, keep in mind this is the maximum size the disk will grow to, but it will not take up this space until it needs it.
-
-
-
-Next, name your machine `RDPWindows` so that WinApps can detect it, and choose to `Customize configuration before install`.
-
-
-
-After clicking `Finish`, ensure under CPU that `Copy host CPU configuration` is selected, and `Apply`.
-
-**NOTE:** Sometimes this gets turned off after Windows is installed. You should check this option after install as well.
-
-
-
-Next, go to the `XML` tab, and edit the `` section to contain:
-```xml
-
-
-
-
-```
-Then `Apply`. This will drastically reduce idle CPU usage (from ~25% to ~3%).
-
-
-
-Next, under Memory, lower the `Current allocation` to the minimum memory the VM should use. We recommend `1024MB`.
-
-
-
-Under `Boot options`, check `Start virtual machine on host boot up`.
-
-
-
-For SATA Disk 1, set the `Disk bus` to `VirtIO`.
-
-
-
-For the NIC, set the `Device model` to `virtio`.
-
-
-
-Click the `Add Hardware` button in the lower right, and choose `Storage`. For `Device type`, select `CDROM device` and choose the VirtIO driver ISO you downloaded earlier. This will give the Windows 10 Installer access to drivers during the install process. Now click `Finish` to add the new CDROM device.
-
-
-
-You are now ready to click `Begin Installation`
-
-
-
-Now move on to installing the virtual machine.
-
-## Install the virtual machine
-From here out you will install Windows 10 Professional as you would on any other machine.
-
-
-
-Once you get to the point of selecting the location for installation, you will see there are no disks available. This is because we need to load the VirtIO driver. Select `Load driver`.
-
-
-
-The installer will then ask you to specify where the driver is located. Select the `E:\` drive or whichever drive the VirtIO driver ISO is located on.
-
-
-
-Choose the appropriate driver for the OS you have selected, which is most likely the `w10` driver for Windows 10.
-
-
-
-You will now see a disk you can select for the installation.
-
-
-
-Windows will begin to install, and you will likely need to reboot the VM a number times during this process.
-
-
-
-At some point, you will come to a network screen. This is because the VirtIO drivers for the network have not yet been loaded. Simply click `I don't have internet`.
-
-
-
-It will confirm your choice, so just choose `Continue with limited setup`.
-
-
-
-After you get into Windows and login with the user you created during the install. Open up `Explorer` and navigate the `E:\` drive or wherever the VirtIO driver ISO is mounted. Double click the `virt-win-gt-64.exe` file to launch the VirtIO driver installer.
-
-
-
-Leave everything as default and click `Next` through the installer. This will install device drivers as well as the Memory Ballooning service.
-
-
-
-Once you finish the driver install, you will need to make some registry changes to enable RDP Applications to run on the system. Start by downloading the [RDPApps.reg](/install/RDPApps.reg) file, right clicking on the `Raw` button, and clicking on `Save target as`.
+Once you finish the install, you will need to make some registry changes to enable RDP Applications to run on the system. Start by downloading the [RDPApps.reg](/install/RDPApps.reg) file, right clicking on the `Raw` button, and clicking on `Save target as`.

@@ -167,37 +62,6 @@ You may also wish to install the [Spice Guest Tools](https://www.spice-space.org
Once you are finished, restart the VM, but do not log in. Simply close the VM viewer, and close the Virtual Machine Manager.
-## Expert installs
-
-### Define a VM from XML
-This expert guide for XML imports is specific to Ubuntu 20.04 and may not work on all hardware platforms.
-
-You can refer to the [KVM](https://www.linux-kvm.org) documentation for specifics, but the first thing you need to do is set up a Virtual Machine running Windows 10 Professional (or any version that supports RDP). First, install KVM:
-``` bash
-sudo apt-get install -y virt-manager
-```
-Now, copy your Windows ISO and VirtIO iso (links to download in the main guide) into the folder and update the `kvm/RDPWindows.xml` appropriately.
-
-Next, define a VM called RDPWindows from the sample XML file with:
-``` bash
-virsh define kvm/RDPWindows.xml
-virsh autostart RDPWindows
-```
-You should then open the VMs properties in `virt-manager` and ensure that under CPU `Copy host CPU configuration` is selected.
-
-Boot it up, install windows, and then [Install the virtual machine](#install-the-virtual-machine).
-
-### Run KVM in user mode
-Now set up KVM to run as your user instead of root and allow it through AppArmor (for Ubuntu 20.04 and above):
-``` bash
-sudo sed -i "s/#user = "root"/user = "$(id -un)"/g" /etc/libvirt/qemu.conf
-sudo sed -i "s/#group = "root"/group = "$(id -gn)"/g" /etc/libvirt/qemu.conf
-sudo usermod -a -G kvm $(id -un)
-sudo usermod -a -G libvirt $(id -un)
-sudo systemctl restart libvirtd
-sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
-```
-You will likely need to reboot to ensure your current shell is added to the group.
diff --git a/docs/kvm/10.png b/docs/kvm/10.png
deleted file mode 100644
index a42c465..0000000
Binary files a/docs/kvm/10.png and /dev/null differ
diff --git a/docs/kvm/11.png b/docs/kvm/11.png
deleted file mode 100644
index e4374f5..0000000
Binary files a/docs/kvm/11.png and /dev/null differ
diff --git a/docs/kvm/12.png b/docs/kvm/12.png
deleted file mode 100644
index 40c8952..0000000
Binary files a/docs/kvm/12.png and /dev/null differ
diff --git a/docs/kvm/13.png b/docs/kvm/13.png
deleted file mode 100644
index b2cc53d..0000000
Binary files a/docs/kvm/13.png and /dev/null differ
diff --git a/docs/kvm/14.png b/docs/kvm/14.png
deleted file mode 100644
index ce1eaba..0000000
Binary files a/docs/kvm/14.png and /dev/null differ
diff --git a/docs/kvm/15.png b/docs/kvm/15.png
deleted file mode 100644
index c933711..0000000
Binary files a/docs/kvm/15.png and /dev/null differ
diff --git a/docs/kvm/16.png b/docs/kvm/16.png
deleted file mode 100644
index 350e8f2..0000000
Binary files a/docs/kvm/16.png and /dev/null differ
diff --git a/docs/kvm/17.png b/docs/kvm/17.png
deleted file mode 100644
index 1bb3619..0000000
Binary files a/docs/kvm/17.png and /dev/null differ
diff --git a/docs/kvm/18.png b/docs/kvm/18.png
deleted file mode 100644
index a09502b..0000000
Binary files a/docs/kvm/18.png and /dev/null differ
diff --git a/docs/kvm/19.png b/docs/kvm/19.png
deleted file mode 100644
index 809929f..0000000
Binary files a/docs/kvm/19.png and /dev/null differ
diff --git a/docs/kvm/20.png b/docs/kvm/20.png
deleted file mode 100644
index 25d182c..0000000
Binary files a/docs/kvm/20.png and /dev/null differ
diff --git a/docs/kvm/21.png b/docs/kvm/21.png
deleted file mode 100644
index 78b8a0b..0000000
Binary files a/docs/kvm/21.png and /dev/null differ
diff --git a/docs/kvm/22.png b/docs/kvm/22.png
deleted file mode 100644
index c37b437..0000000
Binary files a/docs/kvm/22.png and /dev/null differ
diff --git a/docs/kvm/23.png b/docs/kvm/23.png
deleted file mode 100644
index 4961de4..0000000
Binary files a/docs/kvm/23.png and /dev/null differ
diff --git a/docs/kvm/24.png b/docs/kvm/24.png
deleted file mode 100644
index 42da615..0000000
Binary files a/docs/kvm/24.png and /dev/null differ
diff --git a/docs/kvm/25.png b/docs/kvm/25.png
deleted file mode 100644
index 9c8f68c..0000000
Binary files a/docs/kvm/25.png and /dev/null differ
diff --git a/docs/kvm/network.png b/docs/kvm/network.png
new file mode 100644
index 0000000..5a8bc87
Binary files /dev/null and b/docs/kvm/network.png differ
diff --git a/docs/kvm/port-forwarding.png b/docs/kvm/port-forwarding.png
new file mode 100644
index 0000000..34dd684
Binary files /dev/null and b/docs/kvm/port-forwarding.png differ
diff --git a/icons/windows.svg b/icons/windows.svg
deleted file mode 100644
index aff2730..0000000
--- a/icons/windows.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/install/ExtractPrograms.ps1 b/install/ExtractPrograms.ps1
deleted file mode 100644
index 0111190..0000000
--- a/install/ExtractPrograms.ps1
+++ /dev/null
@@ -1,222 +0,0 @@
-
-Function Get-Icon {
- <#
- Get-Icon License:
-
- License
-
- The MIT License (MIT)
-
- Copyright (c)
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- #>
- <#
- .SYNOPSIS
- Gets the icon from a file
-
- .DESCRIPTION
- Gets the icon from a file and displays it in a variety formats.
-
- .PARAMETER Path
- The path to a file to get the icon
-
- .PARAMETER ToBytes
- Displays outputs as a byte array
-
- .PARAMETER ToBitmap
- Display the icon as a bitmap object
-
- .PARAMETER ToBase64
- Displays the icon in Base64 encoded format
-
- .NOTES
- Name: Get-Icon
- Author: Boe Prox
- Version History:
- 1.0 //Boe Prox - 11JAN2016
- - Initial version
-
- .OUTPUT
- System.Drawing.Icon
- System.Drawing.Bitmap
- System.String
- System.Byte[]
-
- .EXAMPLE
- Get-Icon -Path 'C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe'
-
- FullName : C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
- Handle : 164169893
- Height : 32
- Size : {Width=32, Height=32}
- Width : 32
-
- Description
- -----------
- Returns the System.Drawing.Icon representation of the icon
-
- .EXAMPLE
- Get-Icon -Path 'C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe' -ToBitmap
-
- Tag :
- PhysicalDimension : {Width=32, Height=32}
- Size : {Width=32, Height=32}
- Width : 32
- Height : 32
- HorizontalResolution : 96
- VerticalResolution : 96
- Flags : 2
- RawFormat : [ImageFormat: b96b3caa-0728-11d3-9d7b-0000f81ef32e]
- PixelFormat : Format32bppArgb
- Palette : System.Drawing.Imaging.ColorPalette
- FrameDimensionsList : {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
- PropertyIdList : {}
- PropertyItems : {}
-
- Description
- -----------
- Returns the System.Drawing.Bitmap representation of the icon
-
- .EXAMPLE
- $FileName = 'C:\Temp\PowerShellIcon.png'
- $Format = [System.Drawing.Imaging.ImageFormat]::Png
- (Get-Icon -Path 'C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe' -ToBitmap).Save($FileName,$Format)
-
- Description
- -----------
- Saves the icon as a file.
-
- .EXAMPLE
- Get-Icon -Path 'C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe' -ToBase64
-
- AAABAAEAICAQHQAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP
- //AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmZmZmZmZmZmZgAAAAAAaId3d3d3d4iIiIdgAA
- AHdmhmZmZmZmZmZmZoZAAAB2ZnZmZmZmZmZmZmZ3YAAAdmZ3ZmiHZniIiHZmaGAAAHZmd2Zv/4eIiIi
- GZmhgAAB2ZmdmZ4/4eIh3ZmZnYAAAd2ZnZmZo//h2ZmZmZ3YAAHZmaGZmZo//h2ZmZmd2AAB3Zmd2Zm
- Znj/h2ZmZmhgAAd3dndmZmZuj/+GZmZoYAAHd3dod3dmZuj/9mZmZ2AACHd3aHd3eIiP/4ZmZmd2AAi
- Hd2iIiIiI//iId2ZndgAIiIhoiIiIj//4iIiIiIYACIiId4iIiP//iIiIiIiGAAiIiIaIiI//+IiIiI
- iIhkAIiIiGiIiP/4iIiIiIiIdgCIiIhoiIj/iIiIiIiIiIYAiIiIeIiIiIiIiIiIiIiGAAiIiIaP///
- ////////4hgAAAAAGZmZmZmZmZmZmZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////////////gA
- AAf4AAAD+AAAAfgAAAHAAAABwAAAAcAAAAHAAAAAwAAAAMAAAADAAAAAwAAAAMAAAABAAAAAQAAAAEA
- AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAP4AAAH//////////////////////////w==
-
- Description
- -----------
- Returns the Base64 encoded representation of the icon
-
- .EXAMPLE
- Get-Icon -Path 'C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe' -ToBase64 | Clip
-
- Description
- -----------
- Returns the Base64 encoded representation of the icon and saves it to the clipboard.
-
- .EXAMPLE
- (Get-Icon -Path 'C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe' -ToBytes) -Join ''
-
- 0010103232162900002322002200040000320006400010400000128200000000000000000000000
- 0128001280001281280128000128012801281280012812812801921921920002550025500025525
- 5025500025502550255255002552552550000000000000000000000000000000000000000000000
- 0000000000000000000000000000000000006102102102102102102102102102102960000613611
- 9119119119119120136136136118000119102134102102102102102102102102102134640011810
- 2118102102102102102102102102102119960011810211910210413510212013613611810210496
- 0011810211910211125513513613613613410210496001181021031021031432481201361191021
- 0210396001191021031021021042552481181021021021031180011810210410210210214325513
- 5102102102103118001191021031181021021031432481181021021021340011911910311810210
- 2102232255248102102102134001191191181351191181021101432551021021021180013511911
- 8135119119136136255248102102102119960136119118136136136136143255136135118102119
- 9601361361341361361361362552551361361361361369601361361351201361361432552481361
- 3613613613696013613613610413613625525513613613613613613610001361361361041361362
- 5524813613613613613613611801361361361041361362551361361361361361361361340136136
- 1361201361361361361361361361361361361340813613613414325525525525525525525525524
- 8134000061021021021021021021021021021021020000000000000000000000000000000000000
- 0000000000000000000000000000000000000000000025525525525525525525525525525525525
- 5224003122400152240072240070007000700070003000300030003000300010001000100010000
- 0000000000000000000012800025400125525525525525525525525525525525525525525525525
- 5255255255255
-
- Description
- -----------
- Returns the bytes representation of the icon. -Join was used in this for the sake
- of displaying all of the data.
-
- #>
- [cmdletbinding(
- DefaultParameterSetName = '__DefaultParameterSetName'
- )]
- Param (
- [parameter(ValueFromPipelineByPropertyName=$True)]
- [ValidateNotNullorEmpty()]
- [string]$Path,
- [parameter(ParameterSetName = 'Bytes')]
- [switch]$ToBytes,
- [parameter(ParameterSetName = 'Bitmap')]
- [switch]$ToBitmap,
- [parameter(ParameterSetName = 'Base64')]
- [switch]$ToBase64
- )
- Begin {
- If ($PSBoundParameters.ContainsKey('Debug')) {
- $DebugPreference = 'Continue'
- }
- Add-Type -AssemblyName System.Drawing
- }
- Process {
- $Path = Convert-Path -Path $Path
- Write-Debug $Path
- If (Test-Path -Path $Path) {
- #$Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($Path)|
- $Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($Path)|
- Add-Member -MemberType NoteProperty -Name FullName -Value $Path -PassThru
- If ($PSBoundParameters.ContainsKey('ToBytes')) {
- Write-Verbose "Retrieving bytes"
- $MemoryStream = New-Object System.IO.MemoryStream
- $Icon.save($MemoryStream)
- Write-Debug ($MemoryStream | Out-String)
- $MemoryStream.ToArray()
- $MemoryStream.Flush()
- $MemoryStream.Dispose()
- } ElseIf ($PSBoundParameters.ContainsKey('ToBitmap')) {
- $Icon.ToBitMap()
- } ElseIf ($PSBoundParameters.ContainsKey('ToBase64')) {
- $MemoryStream = New-Object System.IO.MemoryStream
- $Icon.save($MemoryStream)
- Write-Debug ($MemoryStream | Out-String)
- $Bytes = $MemoryStream.ToArray()
- $MemoryStream.Flush()
- $MemoryStream.Dispose()
- [convert]::ToBase64String($Bytes)
- } Else {
- $Icon
- }
- } Else {
- Write-Warning "$Path does not exist!"
- Continue
- }
- }
-}
-
-"NAMES=()"
-"ICONS=()"
-"EXES=()"
-Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\*" |
- Select-Object -Property "(default)" -Unique |
- Where-Object {$_."(default)" -ne $null} |
- ForEach-Object {
- $Exe = $_."(default)".Trim('"')
- $Name = (Get-Item $Exe).VersionInfo.FileDescription.Trim() -replace " "," "
- $Icon = Get-Icon -Path $Exe -ToBase64
- #Get-ItemProperty $Exe -Name VersionInfo
- "NAMES+=(""$Name"")"
- "EXES+=(""$Exe"")"
- "ICONS+=(""$Icon"")"
- }
-
diff --git a/install/inquirer.sh b/install/inquirer.sh
deleted file mode 100755
index 00194a8..0000000
--- a/install/inquirer.sh
+++ /dev/null
@@ -1,833 +0,0 @@
-#!/usr/bin/env bash
-
-#======== Based on (then updated) https://raw.githubusercontent.com/tanhauhau/Inquirer.sh/master/dist/inquirer.sh ========
-
-# License from: https://github.com/kahkhang/Inquirer.sh/blob/master/LICENSE
-
-# The MIT License (MIT)
-
-# Copyright (c) 2017
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-# store the current set options
-OLD_SET=$-
-set -e
-
-arrow="$(echo -e '\xe2\x9d\xaf')"
-checked="$(echo -e '\xe2\x97\x89')"
-unchecked="$(echo -e '\xe2\x97\xaf')"
-down_arrow=$(echo -e '\u23f7')
-up_arrow=$(echo -e '\u23f6')
-
-black="$(tput setaf 0)"
-red="$(tput setaf 1)"
-green="$(tput setaf 2)"
-yellow="$(tput setaf 3)"
-blue="$(tput setaf 4)"
-magenta="$(tput setaf 5)"
-cyan="$(tput setaf 6)"
-white="$(tput setaf 7)"
-bold="$(tput bold)"
-normal="$(tput sgr0)"
-dim=$'\e[2m'
-
-print() {
- echo "$1"
- tput el
-}
-
-join() {
- local IFS=$'\n'
- local _join_list
- eval _join_list=( '"${'${1}'[@]}"' )
- local first=true
- for item in ${_join_list[@]}; do
- if [ "$first" = true ]; then
- printf "%s" "$item"
- first=false
- else
- printf "${2-, }%s" "$item"
- fi
- done
-}
-
-function gen_env_from_options() {
- local IFS=$'\n'
- local _indices
- local _env_names
- local _checkbox_selected
- eval _indices=( '"${'${1}'[@]}"' )
- eval _env_names=( '"${'${2}'[@]}"' )
-
- for i in $(gen_index ${#_env_names[@]}); do
- _checkbox_selected[$i]=false
- done
-
- for i in ${_indices[@]}; do
- _checkbox_selected[$i]=true
- done
-
- for i in $(gen_index ${#_env_names[@]}); do
- printf "%s=%s\n" "${_env_names[$i]}" "${_checkbox_selected[$i]}"
- done
-}
-
-on_default() {
- true;
-}
-
-on_keypress() {
- local OLD_IFS
- local IFS
- local key
- OLD_IFS=$IFS
- local on_up=${1:-on_default}
- local on_down=${2:-on_default}
- local on_space=${3:-on_default}
- local on_enter=${4:-on_default}
- local on_left=${5:-on_default}
- local on_right=${6:-on_default}
- local on_ascii=${7:-on_default}
- local on_backspace=${8:-on_default}
- _break_keypress=false
- while IFS="" read -rsn1 key; do
- case "$key" in
- $'\x1b')
- read -rsn1 key
- if [[ "$key" == "[" ]]; then
- read -rsn1 key
- case "$key" in
- 'A') eval $on_up;;
- 'B') eval $on_down;;
- 'D') eval $on_left;;
- 'C') eval $on_right;;
- esac
- fi
- ;;
- ' ') eval $on_space ' ';;
- [a-z0-9A-Z\!\#\$\&\+\,\-\.\/\;\=\?\@\[\]\^\_\{\}\~]) eval $on_ascii $key;;
- $'\x7f') eval $on_backspace $key;;
- '') eval $on_enter $key;;
- esac
- if [ $_break_keypress = true ]; then
- break
- fi
- done
- IFS=$OLD_IFS
-}
-
-gen_index() {
- local k=$1
- local l=0
- if [ $k -gt 0 ]; then
- for l in $(seq $k)
- do
- echo "$l-1" | bc
- done
- fi
-}
-
-cleanup() {
- # Reset character attributes, make cursor visible, and restore
- # previous screen contents (if possible).
- tput sgr0
- tput cnorm
- stty echo
-
- # Restore `set e` option to its orignal value
- if [[ $OLD_SET =~ e ]]
- then set -e
- else set +e
- fi
-}
-
-control_c() {
- cleanup
- exit $?
-}
-
-select_indices() {
- local _select_list
- local _select_indices
- local _select_selected=()
- eval _select_list=( '"${'${1}'[@]}"' )
- eval _select_indices=( '"${'${2}'[@]}"' )
- local _select_var_name=$3
- eval $_select_var_name\=\(\)
- for i in $(gen_index ${#_select_indices[@]}); do
- eval $_select_var_name\+\=\(\""${_select_list[${_select_indices[$i]}]}"\"\)
- done
-}
-
-print_checkbox_line_arrow() {
- if [ "${_checkbox_selected[$1]}" = true ]; then
- printf "${cyan}${arrow}${green}${checked}${normal} ${_checkbox_list[$1]} ${normal}"
- else
- printf "${cyan}${arrow}${normal}${unchecked} ${_checkbox_list[$1]} ${normal}"
- fi
-}
-
-print_checkbox_line() {
- if [ "${_checkbox_selected[$1]}" = true ]; then
- printf " ${green}${checked}${normal} ${_checkbox_list[$1]} ${normal}"
- else
- printf " ${normal}${unchecked} ${_checkbox_list[$1]} ${normal}"
- fi
-}
-
-# https://www.gnu.org/software/termutils/manual/termutils-2.0/html_chapter/tput_1.html
-# http://linuxcommand.org/lc3_adv_tput.php
-on_checkbox_input_up2() {
- #remove_checkbox_instructions
- tput cub "$(tput cols)"
-
- if [ "${_checkbox_selected[$_current_index]}" = true ]; then
- printf " ${green}${checked}${normal} ${_checkbox_list[$_current_index]} ${normal}"
- else
- printf " ${unchecked} ${_checkbox_list[$_current_index]} ${normal}"
- fi
- tput el
-
- if [ $_current_index = 0 ]; then
- _current_index=$((${#_checkbox_list[@]}-1))
- tput cud $((${#_checkbox_list[@]}-1))
- tput cub "$(tput cols)"
- else
- _current_index=$((_current_index-1))
-
- tput cuu1 # Up one line
- tput cub "$(tput cols)" # Back to beginning (does this work?)
- tput el # Clear to end of line
- fi
-
- if [ "${_checkbox_selected[$_current_index]}" = true ]; then
- printf "${cyan}${arrow}${green}${checked}${normal} ${_checkbox_list[$_current_index]} ${normal}"
- else
- printf "${cyan}${arrow}${normal}${unchecked} ${_checkbox_list[$_current_index]} ${normal}"
- fi
-}
-
-on_checkbox_input_up() {
- #remove_checkbox_instructions
- tput cub "$(tput cols)"
- if (( ${_current_row} > 0 )) || (( ${#_checkbox_list[@]} <= 5 )); then
- print_checkbox_line $_current_index
- tput el
- if [ $_current_index = 0 ]; then
- _current_index=$((${#_checkbox_list[@]}-1))
- _current_row=4
- tput cud $((${#_checkbox_list[@]}-1))
- tput cub "$(tput cols)"
- else
- _current_index=$((_current_index-1))
- _current_row=$((_current_row-1))
- tput cuu1
- tput cub "$(tput cols)"
- tput el
- fi
- print_checkbox_line_arrow $_current_index
- else
- if [ $_current_index = 0 ]; then
- _current_index=$((${#_checkbox_list[@]}-1))
- _current_row=4
- tput cuu 1
- tput cub "$(tput cols)"
- tput el
- printf " ${cyan}${up_arrow}${normal}"
- for I in 4 3 2 1; do
- tput cud1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line $((_current_index-I))
- done
- tput cud1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line_arrow $((_current_index))
- tput cud1
- tput cub "$(tput cols)"
- tput el
- printf " ${dim}${down_arrow}${normal}"
- tput cuu 1
- else
- _current_index=$((_current_index-1))
- tput cud 5
- tput cub "$(tput cols)"
- tput el
- printf " ${cyan}${down_arrow}${normal}"
- for I in 4 3 2 1; do
- tput cuu1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line $((_current_index+I))
- done
- tput cuu1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line_arrow $((_current_index))
- if [ $_current_index = 0 ]; then
- tput cuu1
- tput cub "$(tput cols)"
- tput el
- printf " ${dim}${up_arrow}${normal}"
- tput cud1
- fi
- fi
- fi
-}
-
-on_checkbox_input_down() {
- #remove_checkbox_instructions
- tput cub "$(tput cols)"
- if (( ${_current_row} < 4 )) || (( ${#_checkbox_list[@]} <= 5 )); then
- print_checkbox_line $_current_index
- tput el
- if [ $_current_index = $((${#_checkbox_list[@]}-1)) ]; then
- _current_index=0
- _current_row=0
- tput cuu $((${#_checkbox_list[@]}-1))
- tput cub "$(tput cols)"
- else
- _current_index=$((_current_index+1))
- _current_row=$((_current_row+1))
- tput cud1
- tput cub "$(tput cols)"
- tput el
- fi
- print_checkbox_line_arrow $_current_index
- else
- if [ $_current_index = $((${#_checkbox_list[@]}-1)) ]; then
- _current_index=0
- _current_row=0
- tput cuu 5
- tput cub "$(tput cols)"
- tput el
- printf " ${dim}${up_arrow}${normal}"
- tput cud1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line_arrow $((_current_index))
- for I in 1 2 3 4; do
- tput cud1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line $((_current_index+I))
- done
- tput cud1
- tput cub "$(tput cols)"
- tput el
- printf " ${cyan}${down_arrow}${normal}"
- tput cuu 5
- else
- _current_index=$((_current_index+1))
- tput cuu 5
- tput cub "$(tput cols)"
- tput el
- printf " ${cyan}${up_arrow}${normal}"
- for I in 4 3 2 1; do
- tput cud1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line $((_current_index-I))
- done
- tput cud1
- tput cub "$(tput cols)"
- tput el
- print_checkbox_line_arrow $((_current_index))
- if [ $_current_index = $((${#_checkbox_list[@]}-1)) ]; then
- tput cud1
- tput cub "$(tput cols)"
- tput el
- printf " ${dim}${down_arrow}${normal}"
- tput cuu1
- fi
- fi
- fi
-}
-
-on_checkbox_input_enter() {
- remove_checkbox_instructions
- local OLD_IFS
- OLD_IFS=$IFS
- _checkbox_selected_indices=()
- _checkbox_selected_options=()
- IFS=$'\n'
-
- for i in $(gen_index ${#_checkbox_list[@]}); do
- if [ "${_checkbox_selected[$i]}" = true ]; then
- _checkbox_selected_indices+=($i)
- _checkbox_selected_options+=("${_checkbox_list[$i]}")
- fi
- done
-
- if (( ${#_checkbox_list[@]} <= 5 )); then
- tput cud $((${#_checkbox_list[@]}-${_current_index}))
- tput cub "$(tput cols)"
- for i in $(seq $((${#_checkbox_list[@]}+1))); do
- tput el1
- tput el
- tput cuu1
- done
- else
- tput cud $((6-${_current_row}))
- tput cub "$(tput cols)"
- for i in $(seq 8); do
- tput el1
- tput el
- tput cuu1
- done
- fi
- tput cub "$(tput cols)"
-
- tput cuf $((${#prompt}+3))
- printf "${cyan}$(join _checkbox_selected_options)${normal}"
- tput el
-
- tput cud1
- tput cub "$(tput cols)"
- tput el
-
- _break_keypress=true
- IFS=$OLD_IFS
-}
-
-on_checkbox_input_space() {
- #remove_checkbox_instructions
- tput cub "$(tput cols)"
- tput el
- if [ "${_checkbox_selected[$_current_index]}" = true ]; then
- _checkbox_selected[$_current_index]=false
- else
- _checkbox_selected[$_current_index]=true
- fi
-
- print_checkbox_line_arrow $_current_index
-}
-
-remove_checkbox_instructions() {
- if [ $_first_keystroke = true ]; then
- tput cuu $((${_current_index}+1))
- tput cub "$(tput cols)"
- tput cuf $((${#prompt}+3))
- tput el
- tput cud $((${_current_index}+1))
- _first_keystroke=false
- fi
-}
-
-# for vim movements
-on_checkbox_input_ascii() {
- local key=$1
- case $key in
- "j" ) on_checkbox_input_down;;
- "k" ) on_checkbox_input_up;;
- esac
-}
-
-_checkbox_input() {
- local i
- local j
- prompt=$1
- eval _checkbox_list=( '"${'${2}'[@]}"' )
- _current_index=0
- _current_row=0
- _first_keystroke=true
-
- trap control_c SIGINT EXIT
-
- stty -echo
- tput civis
-
- print "${normal}${green}?${normal} ${bold}${prompt}${normal} ${dim}(Press to select, to finalize)${normal}"
-
- for i in $(gen_index ${#_checkbox_list[@]}); do
- _checkbox_selected[$i]=false
- done
-
- if [ -n "$3" ]; then
- eval _selected_indices=( '"${'${3}'[@]}"' )
- for i in ${_selected_indices[@]}; do
- _checkbox_selected[$i]=true
- done
- fi
-
- if (( ${#_checkbox_list[@]} > 5 )); then
- tput cub "$(tput cols)"
- print " ${dim}${up_arrow}${normal}"
- fi
-
- for i in $(gen_index ${#_checkbox_list[@]}); do
- tput cub "$(tput cols)"
- if [ $i = 0 ]; then
- print_checkbox_line_arrow $i
- else
- print_checkbox_line $i
- fi
- print ""
- tput el
- if (( $i > 3 )) && (( ${#_checkbox_list[@]} > 5 )); then
- print " ${cyan}${down_arrow}${normal}"
- break
- fi
- done
-
- for j in $(gen_index ${#_checkbox_list[@]}); do
- tput cuu1
- if (( $j > 4 )); then
- break
- fi
- done
-
- on_keypress on_checkbox_input_up on_checkbox_input_down on_checkbox_input_space on_checkbox_input_enter on_default on_default on_checkbox_input_ascii
-}
-
-checkbox_input() {
- _checkbox_input "$1" "$2"
- _checkbox_input_output_var_name=$3
- select_indices _checkbox_list _checkbox_selected_indices $_checkbox_input_output_var_name
-
- unset _checkbox_list
- unset _break_keypress
- unset _first_keystroke
- unset _current_index
- unset _checkbox_input_output_var_name
- unset _checkbox_selected_indices
- unset _checkbox_selected_options
-
- cleanup
-}
-
-checkbox_input_indices() {
- _checkbox_input "$1" "$2" "$3"
- _checkbox_input_output_var_name=$3
-
- eval $_checkbox_input_output_var_name\=\(\)
- for i in $(gen_index ${#_checkbox_selected_indices[@]}); do
- eval $_checkbox_input_output_var_name\+\=\(${_checkbox_selected_indices[$i]}\)
- done
-
- unset _checkbox_list
- unset _break_keypress
- unset _first_keystroke
- unset _current_index
- unset _checkbox_input_output_var_name
- unset _checkbox_selected_indices
- unset _checkbox_selected_options
-
- cleanup
-}
-
-
-
-
-on_list_input_up() {
- remove_list_instructions
- tput cub "$(tput cols)"
-
- printf " ${_list_options[$_list_selected_index]}"
- tput el
-
- if [ $_list_selected_index = 0 ]; then
- _list_selected_index=$((${#_list_options[@]}-1))
- tput cud $((${#_list_options[@]}-1))
- tput cub "$(tput cols)"
- else
- _list_selected_index=$((_list_selected_index-1))
-
- tput cuu1
- tput cub "$(tput cols)"
- tput el
- fi
-
- printf "${cyan}${arrow} %s ${normal}" "${_list_options[$_list_selected_index]}"
-}
-
-on_list_input_down() {
- remove_list_instructions
- tput cub "$(tput cols)"
-
- printf " ${_list_options[$_list_selected_index]}"
- tput el
-
- if [ $_list_selected_index = $((${#_list_options[@]}-1)) ]; then
- _list_selected_index=0
- tput cuu $((${#_list_options[@]}-1))
- tput cub "$(tput cols)"
- else
- _list_selected_index=$((_list_selected_index+1))
- tput cud1
- tput cub "$(tput cols)"
- tput el
- fi
- printf "${cyan}${arrow} %s ${normal}" "${_list_options[$_list_selected_index]}"
-}
-
-on_list_input_enter_space() {
- local OLD_IFS
- OLD_IFS=$IFS
- IFS=$'\n'
-
- tput cud $((${#_list_options[@]}-${_list_selected_index}))
- tput cub "$(tput cols)"
-
- for i in $(seq $((${#_list_options[@]}+1))); do
- tput el1
- tput el
- tput cuu1
- done
- tput cub "$(tput cols)"
-
- tput cuf $((${#prompt}+3))
- printf "${cyan}${_list_options[$_list_selected_index]}${normal}"
- tput el
-
- tput cud1
- tput cub "$(tput cols)"
- tput el
-
- _break_keypress=true
- IFS=$OLD_IFS
-}
-
-remove_list_instructions() {
- if [ $_first_keystroke = true ]; then
- tput cuu $((${_list_selected_index}+1))
- tput cub "$(tput cols)"
- tput cuf $((${#prompt}+3))
- tput el
- tput cud $((${_list_selected_index}+1))
- _first_keystroke=false
- fi
-}
-
-_list_input() {
- local i
- local j
- prompt=$1
- eval _list_options=( '"${'${2}'[@]}"' )
-
- _list_selected_index=0
- _first_keystroke=true
-
- trap control_c SIGINT EXIT
-
- stty -echo
- tput civis
-
- print "${normal}${green}?${normal} ${bold}${prompt}${normal} ${dim}(Use arrow keys)${normal}"
-
- for i in $(gen_index ${#_list_options[@]}); do
- tput cub "$(tput cols)"
- if [ $i = 0 ]; then
- print "${cyan}${arrow} ${_list_options[$i]} ${normal}"
- else
- print " ${_list_options[$i]}"
- fi
- tput el
- done
-
- for j in $(gen_index ${#_list_options[@]}); do
- tput cuu1
- done
-
- on_keypress on_list_input_up on_list_input_down on_list_input_enter_space on_list_input_enter_space
-
-}
-
-
-list_input() {
- _list_input "$1" "$2"
- local var_name=$3
- eval $var_name=\'"${_list_options[$_list_selected_index]}"\'
- unset _list_selected_index
- unset _list_options
- unset _break_keypress
- unset _first_keystroke
-
- cleanup
-}
-
-list_input_index() {
- _list_input "$1" "$2"
- local var_name=$3
- eval $var_name=\'"$_list_selected_index"\'
- unset _list_selected_index
- unset _list_options
- unset _break_keypress
- unset _first_keystroke
-
- cleanup
-}
-
-
-
-
-on_text_input_left() {
- remove_regex_failed
- if [ $_current_pos -gt 0 ]; then
- tput cub1
- _current_pos=$(($_current_pos-1))
- fi
-}
-
-on_text_input_right() {
- remove_regex_failed
- if [ $_current_pos -lt ${#_text_input} ]; then
- tput cuf1
- _current_pos=$(($_current_pos+1))
- fi
-}
-
-on_text_input_enter() {
- remove_regex_failed
-
- if [[ "$_text_input" =~ $_text_input_regex && "$(eval $_text_input_validator "$_text_input")" = true ]]; then
- tput cub "$(tput cols)"
- tput cuf $((${#_read_prompt}-19))
- printf "${cyan}${_text_input}${normal}"
- tput el
- tput cud1
- tput cub "$(tput cols)"
- tput el
- eval $var_name=\'"${_text_input}"\'
- _break_keypress=true
- else
- _text_input_regex_failed=true
- tput civis
- tput cud1
- tput cub "$(tput cols)"
- tput el
- printf "${red}>>${normal} $_text_input_regex_failed_msg"
- tput cuu1
- tput cub "$(tput cols)"
- tput cuf $((${#_read_prompt}-19))
- tput el
- _text_input=""
- _current_pos=0
- tput cnorm
- fi
-}
-
-on_text_input_ascii() {
- remove_regex_failed
- local c=$1
-
- if [ "$c" = '' ]; then
- c=' '
- fi
-
- local rest="${_text_input:$_current_pos}"
- _text_input="${_text_input:0:$_current_pos}$c$rest"
- _current_pos=$(($_current_pos+1))
-
- tput civis
- printf "$c$rest"
- tput el
- if [ ${#rest} -gt 0 ]; then
- tput cub ${#rest}
- fi
- tput cnorm
-}
-
-on_text_input_backspace() {
- remove_regex_failed
- if [ $_current_pos -gt 0 ]; then
- local start="${_text_input:0:$(($_current_pos-1))}"
- local rest="${_text_input:$_current_pos}"
- _current_pos=$(($_current_pos-1))
- tput cub 1
- tput el
- tput sc
- printf "$rest"
- tput rc
- _text_input="$start$rest"
- fi
-}
-
-remove_regex_failed() {
- if [ $_text_input_regex_failed = true ]; then
- _text_input_regex_failed=false
- tput sc
- tput cud1
- tput el1
- tput el
- tput rc
- fi
-}
-
-text_input_default_validator() {
- echo true;
-}
-
-text_input() {
- local prompt=$1
- local var_name=$2
- local _text_input_regex="${3:-"\.+"}"
- local _text_input_regex_failed_msg=${4:-"Input validation failed"}
- local _text_input_validator=${5:-text_input_default_validator}
- local _read_prompt_start=$'\e[32m?\e[39m\e[1m'
- local _read_prompt_end=$'\e[22m'
- local _read_prompt="$( echo "$_read_prompt_start ${prompt} $_read_prompt_end")"
- local _current_pos=0
- local _text_input_regex_failed=false
- local _text_input=""
- printf "$_read_prompt"
-
-
- trap control_c SIGINT EXIT
-
- stty -echo
- tput cnorm
-
- on_keypress on_default on_default on_text_input_ascii on_text_input_enter on_text_input_left on_text_input_right on_text_input_ascii on_text_input_backspace
- eval $var_name=\'"${_text_input}"\'
-
- cleanup
-}
-
-# =============================================================
-
-function menuFromCmd() {
- local mLOCALRESULT=$1
- local mRESULT=''
- read -r -a ARRAY <<< $3
- list_input "$2" ARRAY mRESULT
- eval $mLOCALRESULT="'$mRESULT'"
-}
-
-function menuFromArr() {
- local mLOCALRESULT=$1
- shift
- local PROMPT=$1
- shift
- local ARRAY=("$@")
- list_input "$PROMPT" ARRAY mRESULT
- eval $mLOCALRESULT="'$mRESULT'"
-}
-
-function multiFromArr() {
- local mLOCALRESULT=$1
- shift
- local PROMPT=$1
- shift
- local ARRAY=("$@")
- checkbox_input "$PROMPT" ARRAY mRESULT
- eval $mLOCALRESULT="'$mRESULT'"
-}
diff --git a/installer.sh b/installer.sh
deleted file mode 100755
index e692b3d..0000000
--- a/installer.sh
+++ /dev/null
@@ -1,333 +0,0 @@
-#!/usr/bin/env bash
-
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-
-MAKEDEMO=0
-USEDEMO=0
-
-. "${DIR}/install/inquirer.sh"
-
-INSTALLED_EXES=()
-
-function waUsage() {
- echo 'Usage:
- ./installer.sh --user # Install everything in ${HOME}
- ./installer.sh --system # Install everything in /usr'
- exit
-}
-
-function waNoSudo() {
- echo 'You are attempting to switch from a --system install to a --user install.
-Please run "./installer.sh --system --uninstall" first.'
- exit
-}
-
-function waInstall() {
- ${SUDO} mkdir -p "${SYS_PATH}/apps"
- . "${DIR}/bin/winapps" install
-}
-
-function waFindInstalled() {
- echo -n " Checking for installed apps in RDP machine (this may take a while)..."
- if [ $USEDEMO != 1 ]; then
- rm -f ${HOME}/.local/share/winapps/installed.bat
- rm -f ${HOME}/.local/share/winapps/installed.tmp
- rm -f ${HOME}/.local/share/winapps/installed
- rm -f ${HOME}/.local/share/winapps/detected
- cp "${DIR}/install/ExtractPrograms.ps1" ${HOME}/.local/share/winapps/ExtractPrograms.ps1
- for F in $(ls "${DIR}/apps"); do
- . "${DIR}/apps/${F}/info"
- echo "IF EXIST \"${WIN_EXECUTABLE}\" ECHO ${F} >> \\\\tsclient\\home\\.local\\share\\winapps\\installed.tmp" >> ${HOME}/.local/share/winapps/installed.bat
- done;
- echo "powershell.exe -ExecutionPolicy Bypass -File \\\\tsclient\\home\\.local\\share\\winapps\\ExtractPrograms.ps1 > \\\\tsclient\home\\.local\\share\\winapps\\detected" >> ${HOME}/.local/share/winapps/installed.bat
- echo "RENAME \\\\tsclient\\home\\.local\\share\\winapps\\installed.tmp installed" >> ${HOME}/.local/share/winapps/installed.bat
- xfreerdp /d:"${RDP_DOMAIN}" /u:"${RDP_USER}" /p:"${RDP_PASS}" /v:${RDP_IP} +auto-reconnect +home-drive -wallpaper /span /wm-class:"RDPInstaller" /app:"C:\Windows\System32\cmd.exe" /app-icon:"${DIR}/../icons/windows.svg" /app-cmd:"/C \\\\tsclient\\home\\.local\\share\\winapps\\installed.bat" 1> /dev/null 2>&1 &
- COUNT=0
- while [ ! -f "${HOME}/.local/share/winapps/installed" ]; do
- sleep 5
- COUNT=$((COUNT + 1))
- if (( COUNT == 15 )); then
- echo " Finished."
- echo ""
- echo "The RDP connection failed to connect or run. Please confirm FreeRDP can connect with:"
- echo " bin/winapps check"
- echo ""
- echo "If it cannot connect, this is most likely due to:"
- echo " - You need to accept the security cert the first time you connect (with 'check')"
- echo " - Not enabling RDP in the Windows VM"
- echo " - Not being able to connect to the IP of the VM"
- echo " - Incorrect user credentials in winapps.conf"
- echo " - Not merging install/RDPApps.reg into the VM"
- exit
- fi
- done
- if [ $MAKEDEMO = 1 ]; then
- rm -rf /tmp/winapps_demo
- cp -a ${HOME}/.local/share/winapps /tmp/winapps_demo
- exit
- fi
- else
- rm -rf ${HOME}/.local/share/winapps
- cp -a /tmp/winapps_demo ${HOME}/.local/share/winapps
- #sleep 3
- fi
- echo " Finished."
-}
-
-function waConfigureApp() {
- . "${SYS_PATH}/apps/${1}/info"
- echo -n " Configuring ${NAME}..."
- if [ ${USEDEMO} != 1 ]; then
- ${SUDO} rm -f "${APP_PATH}/${1}.desktop"
- echo "[Desktop Entry]
-Name=${NAME}
-Exec=${BIN_PATH}/winapps ${1} %F
-Terminal=false
-Type=Application
-Icon=${SYS_PATH}/apps/${1}/icon.${2}
-StartupWMClass=${FULL_NAME}
-Comment=${FULL_NAME}
-Categories=${CATEGORIES}
-MimeType=${MIME_TYPES}
-" |${SUDO} tee "${APP_PATH}/${1}.desktop" > /dev/null
- ${SUDO} rm -f "${BIN_PATH}/${1}"
- echo "#!/usr/bin/env bash
-${BIN_PATH}/winapps ${1} $@
-" |${SUDO} tee "${BIN_PATH}/${1}" > /dev/null
- ${SUDO} chmod a+x "${BIN_PATH}/${1}"
- fi
- echo " Finished."
-}
-
-function waConfigureApps() {
- APPS=()
- for F in $(cat "${HOME}/.local/share/winapps/installed" |sed 's/\r/\n/g'); do
- . "${DIR}/apps/${F}/info"
- APPS+=("${FULL_NAME} (${F})")
- INSTALLED_EXES+=("$(echo "${WIN_EXECUTABLE##*\\}" |tr '[:upper:]' '[:lower:]')")
- done
- IFS=$'\n' APPS=($(sort <<<"${APPS[*]}"))
- unset IFS
- OPTIONS=("Set up all detected pre-configured applications" "Select which pre-configured applications to set up" "Do not set up any pre-configured applications")
- menuFromArr APP_INSTALL "How would you like to handle WinApps pre-configured applications?" "${OPTIONS[@]}"
- if [ "${APP_INSTALL}" = "Select which pre-configured applications to set up" ]; then
- checkbox_input "Which pre-configured apps would you like to set up?" APPS SELECTED_APPS
- echo "" > "${HOME}/.local/share/winapps/installed"
- for F in "${SELECTED_APPS[@]}"; do
- APP="${F##*(}"
- APP="${APP%%)}"
- echo "${APP}" >> "${HOME}/.local/share/winapps/installed"
- done
- fi
- ${SUDO} cp "${DIR}/bin/winapps" "${BIN_PATH}/winapps"
- COUNT=0
- if [ "${APP_INSTALL}" != "Do not set up any pre-configured applications" ]; then
- for F in $(cat "${HOME}/.local/share/winapps/installed" |sed 's/\r/\n/g'); do
- COUNT=$((COUNT + 1))
- ${SUDO} cp -r "apps/${F}" "${SYS_PATH}/apps"
- waConfigureApp "${F}" svg
- done
- fi
- rm -f "${HOME}/.local/share/winapps/installed"
- rm -f "${HOME}/.local/share/winapps/installed.bat"
- if (( $COUNT == 0 )); then
- echo " No configured applications."
- fi
-}
-
-function waConfigureDetectedApps() {
- if [ -f "${HOME}/.local/share/winapps/detected" ]; then
- sed -i 's/\r//g' "${HOME}/.local/share/winapps/detected"
- . "${HOME}/.local/share/winapps/detected"
- APPS=()
- for I in "${!NAMES[@]}"; do
- EXE=${EXES[$I]##*\\}
- EXE_LOWER=$(echo "${EXE}" |tr '[:upper:]' '[:lower:]')
- if ( dlm=$'\x1F' ; IFS="$dlm" ; [[ "$dlm${INSTALLED_EXES[*]}$dlm" != *"$dlm${EXE_LOWER}$dlm"* ]] ) ; then
- APPS+=("${NAMES[$I]} (${EXE})")
- fi
- done
- IFS=$'\n' APPS=($(sort <<<"${APPS[*]}"))
- unset IFS
- OPTIONS=("Set up all detected applications" "Select which applications to set up" "Do not set up any applications")
- menuFromArr APP_INSTALL "How would you like to handle other detected applications?" "${OPTIONS[@]}"
- if [ "${APP_INSTALL}" = "Select which applications to set up" ]; then
- checkbox_input "Which other apps would you like to set up?" APPS SELECTED_APPS
- echo "" > "${HOME}/.local/share/winapps/installed"
- for F in "${SELECTED_APPS[@]}"; do
- EXE="${F##*(}"
- EXE="${EXE%%)}"
- APP="${F% (*}"
- echo "${EXE}|${APP}" >> "${HOME}/.local/share/winapps/installed"
- done
- elif [ "${APP_INSTALL}" = "Set up all detected applications" ]; then
- for I in "${!EXES[@]}"; do
- EXE=${EXES[$I]##*\\}
- echo "${EXE}|${NAMES[$I]}" >> "${HOME}/.local/share/winapps/installed"
- done
- fi
- COUNT=0
- if [ -f "${HOME}/.local/share/winapps/installed" ]; then
- while read LINE; do
- EXE="${LINE%|*}"
- NAME="${LINE#*|}"
- for I in "${!NAMES[@]}"; do
- if [ "${NAME}" = "${NAMES[$I]}" ] && [[ "${EXES[$I]}" == *"\\${EXE}" ]]; then
- EXE=$(echo "${EXE}" |tr '[:upper:]' '[:lower:]')
- ${SUDO} mkdir -p "${SYS_PATH}/apps/${EXE}"
- echo "# GNOME shortcut name
-NAME=\"${NAME}\"
-
-# Used for descriptions and window class
-FULL_NAME=\"${NAME}\"
-
-# The executable inside windows
-WIN_EXECUTABLE=\"${EXES[$I]}\"
-
-# GNOME categories
-CATEGORIES=\"WinApps\"
-
-# GNOME mimetypes
-MIME_TYPES=\"\"
-" > "${SYS_PATH}/apps/${EXE}/info"
- echo "${ICONS[$I]}" | base64 -d > "${SYS_PATH}/apps/${EXE}/icon.ico"
- waConfigureApp "${EXE}" ico
- COUNT=$((COUNT + 1))
- fi
- done
- done < "${HOME}/.local/share/winapps/installed"
- rm -f "${HOME}/.local/share/winapps/installed"
- fi
- rm -f "${HOME}/.local/share/winapps/installed.bat"
- if (( $COUNT == 0 )); then
- echo " No configured applications."
- fi
- fi
-}
-
-
-function waConfigureWindows() {
- echo -n " Configuring Windows..."
- if [ ${USEDEMO} != 1 ]; then
- ${SUDO} rm -f "${APP_PATH}/windows.desktop"
- ${SUDO} mkdir -p "${SYS_PATH}/icons"
- ${SUDO} cp "${DIR}/icons/windows.svg" "${SYS_PATH}/icons/windows.svg"
- echo "[Desktop Entry]
-Name=Windows
-Exec=${BIN_PATH}/winapps windows %F
-Terminal=false
-Type=Application
-Icon=${SYS_PATH}/icons/windows.svg
-StartupWMClass=Micorosoft Windows
-Comment=Micorosoft Windows
-Categories=Windows
-" |${SUDO} tee "${APP_PATH}/windows.desktop" > /dev/null
- ${SUDO} rm -f "${BIN_PATH}/windows"
- echo "#!/usr/bin/env bash
-${BIN_PATH}/winapps windows
-" |${SUDO} tee "/${BIN_PATH}/windows" > /dev/null
- ${SUDO} chmod a+x "${BIN_PATH}/windows"
- fi
- echo " Finished."
-}
-
-function waUninstallUser() {
- rm -f "${HOME}/.local/bin/winapps"
- rm -rf "${HOME}/.local/share/winapps"
- for F in $(grep -l -d skip "bin/winapps" "${HOME}/.local/share/applications/"*); do
- echo -n " Removing ${F}..."
- ${SUDO} rm ${F}
- echo " Finished."
- done
- for F in $(grep -l -d skip "bin/winapps" "${HOME}/.local/bin/"*); do
- echo -n " Removing ${F}..."
- ${SUDO} rm ${F}
- echo " Finished."
- done
-}
-
-function waUninstallSystem() {
- ${SUDO} rm -f "/usr/local/bin/winapps"
- ${SUDO} rm -rf "/usr/local/share/winapps"
- for F in $(grep -l -d skip "bin/winapps" "/usr/share/applications/"*); do
- if [ -z "${SUDO}" ]; then
- waNoSudo
- fi
- echo -n " Removing ${F}..."
- ${SUDO} rm ${F}
- echo " Finished."
- done
- for F in $(grep -l -d skip "bin/winapps" "/usr/local/bin/"*); do
- if [ -z "${SUDO}" ]; then
- waNoSudo
- fi
- echo -n " Removing ${F}..."
- ${SUDO} rm ${F}
- echo " Finished."
- done
-}
-
-if [ -z "${1}" ]; then
- OPTIONS=(User System)
- menuFromArr INSTALL_TYPE "Would you like to install for the current user or the whole system?" "${OPTIONS[@]}"
-elif [ "${1}" = '--user' ]; then
- INSTALL_TYPE='User'
-elif [ "${1}" = '--system' ]; then
- INSTALL_TYPE='System'
-else
- waUsage
-fi
-
-if [ "${INSTALL_TYPE}" = 'User' ]; then
- SUDO=""
- BIN_PATH="${HOME}/.local/bin"
- APP_PATH="${HOME}/.local/share/applications"
- SYS_PATH="${HOME}/.local/share/winapps"
- if [ -n "${2}" ]; then
- if [ "${2}" = '--uninstall' ]; then
- # Uninstall
- echo "Uninstalling..."
- waUninstallUser
- exit
- else
- usage
- fi
- fi
-elif [ "${INSTALL_TYPE}" = 'System' ]; then
- SUDO="sudo"
- sudo ls > /dev/null
- BIN_PATH="/usr/local/bin"
- APP_PATH="/usr/share/applications"
- SYS_PATH="/usr/local/share/winapps"
- if [ -n "${2}" ]; then
- if [ "${2}" = '--uninstall' ]; then
- # Uninstall
- echo "Uninstalling..."
- waUninstallSystem
- exit
- else
- usage
- fi
- fi
-fi
-
-echo "Removing any old configurations..."
-waUninstallUser
-waUninstallSystem
-
-echo "Installing..."
-
-# Inititialize
-waInstall
-
-# Check for installed apps
-waFindInstalled
-
-# Install windows
-waConfigureWindows
-
-# Configure apps
-waConfigureApps
-waConfigureDetectedApps
-
-echo "Installation complete."
\ No newline at end of file
diff --git a/kvm/RDPWindows.qcow2 b/kvm/RDPWindows.qcow2
deleted file mode 100644
index 71211c5..0000000
Binary files a/kvm/RDPWindows.qcow2 and /dev/null differ
diff --git a/kvm/RDPWindows.xml b/kvm/RDPWindows.xml
deleted file mode 100644
index 1523b9c..0000000
--- a/kvm/RDPWindows.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-
- RDPWindows
- 50f121b4-93e7-46b5-b302-902d022dfa9c
-
-
-
-
-
- 4194304
- 1298432
- 2
-
- /machine
-
-
- hvm
-
-
-
-
-
-
-
-
-
-
-
-
- Haswell-noTSX-IBRS
- Intel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- destroy
- restart
- destroy
-
-
-
-
-
- /usr/bin/qemu-system-x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +385601105:+385600513
-
-
-