3 Commits

Author SHA1 Message Date
Michel Memeteau
c4a41b8c07 Merge branch 'main' into legacy-installer 2025-07-10 10:39:59 +02:00
Michel Memeteau
4d189b7164 Initial Winapps.conf 2025-06-23 16:37:47 +02:00
Michel Memeteau
708a521340 increase VM perf defaults 2025-06-23 13:29:08 +02:00
64 changed files with 513 additions and 1237 deletions

View File

@@ -1,59 +0,0 @@
# Contribution Guidelines
Thank you for contributing to winapps! Before you can contribute, we ask some things of you:
- Please follow our Code of Conduct, the Contributor Covenant. You can find a copy in this repository or under https://www.contributor-covenant.org/
- All Contributors have to sign a Developer Certificate of Origin, agreeing to license their contribution under the AGPLv3. Historically, we used to require a CLA because we had to relicense the codebase from ARR to AGPLv3; however, this is being phased out. You can find a copy of the DCO below or under https://developercertificate.org/.
- Please follow code conventions enforced by `pre-commit`. To keep down CI usage, please run it locally before committing too.
See <https://pre-commit.com> for installation, then run `pre-commit install` inside the `winapps` repository you cloned.
## Guidelines for pre-defined applications
Some pre-defined applications contain a header like:
```
# Copyright (c) 2024 Fmstrat
# All rights reserved.
#
# SPDX-License-Identifier: Proprietary
```
This is for historic reasons, see [LICENSE.md](../LICENSE.md) and [COPYRIGHT.md](../COPYRIGHT.md).
When contributing new applications, please *do not* include such a header.
## Developer Certificate of Origin
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.

View File

@@ -1,65 +0,0 @@
name: Bug Report
description: File a bug report.
labels: ["triage"]
body:
- type: markdown
attributes:
value: |
We cannot fix nor support all bugs caused by FreeRDP, especially on Wayland.
If you experience visual bugs, please open a discussion instead.
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Tell us what you see!
value: "A bug happened!"
validations:
required: true
- type: input
id: freerdp
attributes:
label: Your FreeRDP version and where you got it from
placeholder: "FreeRDP 3.10 (Debian Backports)"
validations:
required: true
- type: input
id: distro
attributes:
label: Your Linux distribution and version
placeholder: "Debian Trixie"
validations:
required: true
- type: textarea
id: config
attributes:
label: Your `winapps.conf`
description: Please copy and paste your `winapps.conf`. Make sure to not include any sensible data. This will be automatically formatted into code, so no need for backticks.
render: shell
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs
description: Give the output of WinApps, FreeRDP etc. where / if applicable.
render: shell
- type: checkboxes
id: terms
attributes:
label: Terms
options:
- label: I am running the latest version.
required: true
- label: To the best of my knowledge, this is a bug and not a setup nor a FreeRDP problem.
required: true
- label: I have checked for duplicate issues.
required: true
- label: I agree to follow this project's Code of Conduct.
required: true

View File

@@ -1,5 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: Community Support
url: https://github.com/winapps-org/winapps/discussions
about: Get help with non-bug issues here. Please use this instead of filing bug reports.

View File

@@ -1,65 +0,0 @@
User Name;Repository Owner;Repository Name;CLA Title;Gist URL;Gist Version;Signed At;Revoked At;Signed for Organization
sparky3387;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-31T12:31:32.643Z;2025-09-04T11:04:01.000Z;TRUE
matheusmelo18;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-30T15:57:01.072Z;2025-09-04T11:04:01.000Z;TRUE
Libadoxon;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-29T09:53:59.385Z;2025-09-04T11:04:01.000Z;TRUE
Dreamail;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-29T06:43:07.752Z;2025-09-04T11:04:01.000Z;TRUE
queenkjuul;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-27T16:19:30.937Z;2025-09-04T11:04:01.000Z;TRUE
DevZiaus;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-25T21:17:17.792Z;2025-09-04T11:04:01.000Z;TRUE
nlogozzo;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-24T15:25:25.197Z;2025-09-04T11:04:01.000Z;TRUE
osalbahr;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-24T15:09:01.053Z;2025-09-04T11:04:01.000Z;TRUE
9Morello;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-19T12:14:39.707Z;2025-09-04T11:04:01.000Z;TRUE
Sunrongguo2008;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-08-06T15:56:33.681Z;2025-09-04T11:04:01.000Z;TRUE
wovw;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-07-31T04:14:50.710Z;2025-09-04T11:04:01.000Z;TRUE
denisstrizhkin;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-07-07T14:43:28.482Z;2025-09-04T11:04:01.000Z;TRUE
joeshachaf;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-06-29T21:17:46.041Z;2025-09-04T11:04:01.000Z;TRUE
Aldo-f;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-06-19T19:26:32.522Z;2025-09-04T11:04:01.000Z;TRUE
Mr-MyDooM;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-06-10T03:01:36.680Z;2025-09-04T11:04:01.000Z;TRUE
Theowulf-dev;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-06-10T00:44:09.838Z;2025-09-04T11:04:01.000Z;TRUE
JoAllg;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-06-04T21:04:46.931Z;2025-09-04T11:04:01.000Z;TRUE
sears-s;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-05-24T02:56:00.518Z;2025-09-04T11:04:01.000Z;TRUE
egvrl;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-05-15T14:33:38.598Z;2025-09-04T11:04:01.000Z;TRUE
thefiredragon;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-04-19T19:06:36.941Z;2025-09-04T11:04:01.000Z;TRUE
arwarw;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-04-19T16:12:55.873Z;2025-09-04T11:04:01.000Z;TRUE
linull24;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-04-11T17:32:09.319Z;2025-09-04T11:04:01.000Z;TRUE
kroese;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-04-02T15:26:03.840Z;2025-09-04T11:04:01.000Z;TRUE
dasinking;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-03-25T00:54:49.660Z;2025-09-04T11:04:01.000Z;TRUE
tstormn3tw0rk;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-03-21T07:08:26.583Z;2025-09-04T11:04:01.000Z;TRUE
limemane;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-03-10T16:38:38.276Z;2025-09-04T11:04:01.000Z;TRUE
borekon;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-02-24T11:40:24.101Z;2025-09-04T11:04:01.000Z;TRUE
whitewolf101;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-02-23T03:29:22.061Z;2025-09-04T11:04:01.000Z;TRUE
raffaem;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-02-16T14:28:21.523Z;2025-09-04T11:04:01.000Z;TRUE
mbekkomo;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-02-02T11:40:36.462Z;2025-09-04T11:04:01.000Z;TRUE
toastedcrumpets;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-01-16T13:53:21.167Z;2025-09-04T11:04:01.000Z;TRUE
starbr3aker;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-01-12T17:30:37.473Z;2025-09-04T11:04:01.000Z;TRUE
Deluxe-7;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-01-11T01:48:33.638Z;2025-09-04T11:04:01.000Z;TRUE
stceum;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2025-01-03T07:14:43.695Z;2025-09-04T11:04:01.000Z;TRUE
molostovvs;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-12-13T07:48:02.950Z;2025-09-04T11:04:01.000Z;TRUE
mindset-tk;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-11-25T22:30:30.062Z;2025-09-04T11:04:01.000Z;TRUE
lunatic-gh;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-11-18T20:39:24.413Z;2025-09-04T11:04:01.000Z;TRUE
Username404-59;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-10-08T21:06:39.926Z;2025-09-04T11:04:01.000Z;TRUE
CHN-beta;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-10-05T06:12:56.133Z;2025-09-04T11:04:01.000Z;TRUE
eylenburg;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-10-02T13:49:45.131Z;2025-09-04T11:04:01.000Z;TRUE
tristanRW;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-09-23T14:48:15.158Z;2025-09-04T11:04:01.000Z;TRUE
MopigamesYT;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-09-19T14:54:16.014Z;2025-09-04T11:04:01.000Z;TRUE
queler;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-09-09T03:33:59.760Z;2025-09-04T11:04:01.000Z;TRUE
C0rn3j;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-09-01T22:30:46.600Z;2025-09-04T11:04:01.000Z;TRUE
FixeQyt;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-08-30T14:22:17.912Z;2025-09-04T11:04:01.000Z;TRUE
RheaBarar;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-08-19T07:36:53.003Z;2025-09-04T11:04:01.000Z;TRUE
Coruscant11;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-08-18T12:46:39.393Z;2025-09-04T11:04:01.000Z;TRUE
escapefreeg;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-08-11T03:04:17.227Z;2025-09-04T11:04:01.000Z;TRUE
itiligent;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-07-26T04:13:53.616Z;2025-09-04T11:04:01.000Z;TRUE
gordoncheong;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-07-25T11:14:28.928Z;2025-09-04T11:04:01.000Z;TRUE
bkanuka;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-07-08T19:31:49.299Z;2025-09-04T11:04:01.000Z;TRUE
Kazevic;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-07-02T06:46:56.451Z;2025-09-04T11:04:01.000Z;TRUE
KernelGhost;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-07-01T06:44:06.681Z;2025-09-04T11:04:01.000Z;TRUE
MrTumnis;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-06-13T00:24:25.715Z;2025-09-04T11:04:01.000Z;TRUE
Alchemi1963;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-05-30T21:48:08.692Z;2025-09-04T11:04:01.000Z;TRUE
GreatNovaDragon;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2024-04-20T20:34:17.381Z;2024-09-21T21:48:55.765Z;TRUE
Matt-M-3;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-12-04T17:31:44.383Z;2025-09-04T11:04:01.000Z;TRUE
Hyperspeed1313;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-11-10T18:19:32.080Z;2025-09-04T11:04:01.000Z;TRUE
notPlancha;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-09-04T18:07:58.859Z;2025-09-04T11:04:01.000Z;TRUE
freechelmi;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-07-16T08:31:50.083Z;2025-09-04T11:04:01.000Z;TRUE
LDprg;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-07-16T07:08:14.876Z;2025-09-04T11:04:01.000Z;TRUE
fbartels;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-07-15T19:49:07.019Z;2025-09-04T11:04:01.000Z;TRUE
oskardotglobal;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-07-15T15:09:49.368Z;2025-09-04T11:04:01.000Z;TRUE
Leonardo-DGS;winapps-org;;fcla.md;https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5;1f2d08888e405a91582607bf95176a5755363929;2023-07-15T15:07:40.778Z;2025-09-04T11:04:01.000Z;TRUE
1 User Name Repository Owner Repository Name CLA Title Gist URL Gist Version Signed At Revoked At Signed for Organization
2 sparky3387 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-31T12:31:32.643Z 2025-09-04T11:04:01.000Z TRUE
3 matheusmelo18 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-30T15:57:01.072Z 2025-09-04T11:04:01.000Z TRUE
4 Libadoxon winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-29T09:53:59.385Z 2025-09-04T11:04:01.000Z TRUE
5 Dreamail winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-29T06:43:07.752Z 2025-09-04T11:04:01.000Z TRUE
6 queenkjuul winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-27T16:19:30.937Z 2025-09-04T11:04:01.000Z TRUE
7 DevZiaus winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-25T21:17:17.792Z 2025-09-04T11:04:01.000Z TRUE
8 nlogozzo winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-24T15:25:25.197Z 2025-09-04T11:04:01.000Z TRUE
9 osalbahr winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-24T15:09:01.053Z 2025-09-04T11:04:01.000Z TRUE
10 9Morello winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-19T12:14:39.707Z 2025-09-04T11:04:01.000Z TRUE
11 Sunrongguo2008 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-08-06T15:56:33.681Z 2025-09-04T11:04:01.000Z TRUE
12 wovw winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-07-31T04:14:50.710Z 2025-09-04T11:04:01.000Z TRUE
13 denisstrizhkin winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-07-07T14:43:28.482Z 2025-09-04T11:04:01.000Z TRUE
14 joeshachaf winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-06-29T21:17:46.041Z 2025-09-04T11:04:01.000Z TRUE
15 Aldo-f winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-06-19T19:26:32.522Z 2025-09-04T11:04:01.000Z TRUE
16 Mr-MyDooM winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-06-10T03:01:36.680Z 2025-09-04T11:04:01.000Z TRUE
17 Theowulf-dev winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-06-10T00:44:09.838Z 2025-09-04T11:04:01.000Z TRUE
18 JoAllg winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-06-04T21:04:46.931Z 2025-09-04T11:04:01.000Z TRUE
19 sears-s winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-05-24T02:56:00.518Z 2025-09-04T11:04:01.000Z TRUE
20 egvrl winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-05-15T14:33:38.598Z 2025-09-04T11:04:01.000Z TRUE
21 thefiredragon winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-04-19T19:06:36.941Z 2025-09-04T11:04:01.000Z TRUE
22 arwarw winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-04-19T16:12:55.873Z 2025-09-04T11:04:01.000Z TRUE
23 linull24 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-04-11T17:32:09.319Z 2025-09-04T11:04:01.000Z TRUE
24 kroese winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-04-02T15:26:03.840Z 2025-09-04T11:04:01.000Z TRUE
25 dasinking winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-03-25T00:54:49.660Z 2025-09-04T11:04:01.000Z TRUE
26 tstormn3tw0rk winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-03-21T07:08:26.583Z 2025-09-04T11:04:01.000Z TRUE
27 limemane winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-03-10T16:38:38.276Z 2025-09-04T11:04:01.000Z TRUE
28 borekon winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-02-24T11:40:24.101Z 2025-09-04T11:04:01.000Z TRUE
29 whitewolf101 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-02-23T03:29:22.061Z 2025-09-04T11:04:01.000Z TRUE
30 raffaem winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-02-16T14:28:21.523Z 2025-09-04T11:04:01.000Z TRUE
31 mbekkomo winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-02-02T11:40:36.462Z 2025-09-04T11:04:01.000Z TRUE
32 toastedcrumpets winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-01-16T13:53:21.167Z 2025-09-04T11:04:01.000Z TRUE
33 starbr3aker winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-01-12T17:30:37.473Z 2025-09-04T11:04:01.000Z TRUE
34 Deluxe-7 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-01-11T01:48:33.638Z 2025-09-04T11:04:01.000Z TRUE
35 stceum winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2025-01-03T07:14:43.695Z 2025-09-04T11:04:01.000Z TRUE
36 molostovvs winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-12-13T07:48:02.950Z 2025-09-04T11:04:01.000Z TRUE
37 mindset-tk winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-11-25T22:30:30.062Z 2025-09-04T11:04:01.000Z TRUE
38 lunatic-gh winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-11-18T20:39:24.413Z 2025-09-04T11:04:01.000Z TRUE
39 Username404-59 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-10-08T21:06:39.926Z 2025-09-04T11:04:01.000Z TRUE
40 CHN-beta winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-10-05T06:12:56.133Z 2025-09-04T11:04:01.000Z TRUE
41 eylenburg winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-10-02T13:49:45.131Z 2025-09-04T11:04:01.000Z TRUE
42 tristanRW winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-09-23T14:48:15.158Z 2025-09-04T11:04:01.000Z TRUE
43 MopigamesYT winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-09-19T14:54:16.014Z 2025-09-04T11:04:01.000Z TRUE
44 queler winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-09-09T03:33:59.760Z 2025-09-04T11:04:01.000Z TRUE
45 C0rn3j winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-09-01T22:30:46.600Z 2025-09-04T11:04:01.000Z TRUE
46 FixeQyt winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-08-30T14:22:17.912Z 2025-09-04T11:04:01.000Z TRUE
47 RheaBarar winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-08-19T07:36:53.003Z 2025-09-04T11:04:01.000Z TRUE
48 Coruscant11 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-08-18T12:46:39.393Z 2025-09-04T11:04:01.000Z TRUE
49 escapefreeg winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-08-11T03:04:17.227Z 2025-09-04T11:04:01.000Z TRUE
50 itiligent winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-07-26T04:13:53.616Z 2025-09-04T11:04:01.000Z TRUE
51 gordoncheong winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-07-25T11:14:28.928Z 2025-09-04T11:04:01.000Z TRUE
52 bkanuka winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-07-08T19:31:49.299Z 2025-09-04T11:04:01.000Z TRUE
53 Kazevic winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-07-02T06:46:56.451Z 2025-09-04T11:04:01.000Z TRUE
54 KernelGhost winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-07-01T06:44:06.681Z 2025-09-04T11:04:01.000Z TRUE
55 MrTumnis winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-06-13T00:24:25.715Z 2025-09-04T11:04:01.000Z TRUE
56 Alchemi1963 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-05-30T21:48:08.692Z 2025-09-04T11:04:01.000Z TRUE
57 GreatNovaDragon winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2024-04-20T20:34:17.381Z 2024-09-21T21:48:55.765Z TRUE
58 Matt-M-3 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-12-04T17:31:44.383Z 2025-09-04T11:04:01.000Z TRUE
59 Hyperspeed1313 winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-11-10T18:19:32.080Z 2025-09-04T11:04:01.000Z TRUE
60 notPlancha winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-09-04T18:07:58.859Z 2025-09-04T11:04:01.000Z TRUE
61 freechelmi winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-07-16T08:31:50.083Z 2025-09-04T11:04:01.000Z TRUE
62 LDprg winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-07-16T07:08:14.876Z 2025-09-04T11:04:01.000Z TRUE
63 fbartels winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-07-15T19:49:07.019Z 2025-09-04T11:04:01.000Z TRUE
64 oskardotglobal winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-07-15T15:09:49.368Z 2025-09-04T11:04:01.000Z TRUE
65 Leonardo-DGS winapps-org fcla.md https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5 1f2d08888e405a91582607bf95176a5755363929 2023-07-15T15:07:40.778Z 2025-09-04T11:04:01.000Z TRUE

40
.github/workflows/update-nix.yaml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: "Update Flake Packages"
permissions:
contents: write
pull-requests: write
on:
pull_request:
branches: [main]
types: [labeled]
schedule:
- cron: "0 10 * * 0" # https://crontab.guru/#0_10_*_*_0
jobs:
build:
if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'rebuild nix')
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
with:
trust-runner-user: true
- name: Set up cache
uses: cachix/cachix-action@v15
with:
name: winapps
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
- name: Update flake packages
uses: winapps-org/nix-update-action@v1.4.0
with:
extra-args: --version=branch
skip-pr: "${{ github.event_name == 'pull_request' }}"
- name: Build packages
run: nix build .#winapps .#winapps-launcher

5
.gitignore vendored
View File

@@ -1,5 +0,0 @@
/.idea
/.vscode
/result
.DS_Store
**/.DS_Store

View File

@@ -1,3 +1,6 @@
ci:
autoupdate_branch: "rewrite"
exclude: ^(.+)\.patch$
repos:

8
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,8 @@
# Contribution Guidelines
Thank you for contributing to winapps! Before you can contribute, we ask some things of you:
- Please follow our Code of Conduct, the Contributor Covenant. You can find a copy in this repository or under https://www.contributor-covenant.org/
- All Contributors have to sign [a CLA](https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5) for legal reasons. When opening a PR, @cla-assistant will prompt you and guide you through the process. However, if you contribute on behalf of a legal entity, we ask of you to sign [a different CLA](https://gist.github.com/oskardotglobal/75a8cc056e56a439fa6a1551129ae47f). In that case, please contact us.
- Please follow code conventions enforced by `pre-commit`. To keep down CI usage, please run it locally before committing too.
See <https://pre-commit.com> for installation, then run `pre-commit install` inside the `winapps` repository you cloned.

View File

@@ -6,9 +6,9 @@ The original project by Fmstrat <https://github.com/Fmstrat/winapps/> is not fre
Due to lack of a license, it is All Rights Reserved by the original author.
We have tried contacting Fmstrat about this, but they abandoned the project and did not reply nor apply an open-source license to the project.
However, almost all parts of the codebase have been rewritten and all new contributions require signing a Developer Certificate of Origin (or historically, a CLA; see [CONTRIBUTING.md](./.github/CONTRIBUTING.md)), making most parts of the codebase AGPLv3.
However, almost all parts of the codebase have been rewritten and all new contributions require a Contributor License Agreement ([for individuals](https://gist.github.com/oskardotglobal/35f0a72eb45fcc7087e535561383dbc5), [for legal entities](https://gist.github.com/oskardotglobal/75a8cc056e56a439fa6a1551129ae47f)) to be signed. Therefore, the below license is applied to all new contributions made to the project.
Refer to a specific file for its respective license.
Refer to a specific file for it's respective license.
# GNU AFFERO GENERAL PUBLIC LICENSE

View File

@@ -1,10 +1,10 @@
<p align="center"><img align="center" width="700" src="./docs/readme/banner_dark.svg#gh-dark-mode-only"/></p>
<p align="center"><img align="center" width="700" src="./docs/readme/banner_light.svg#gh-light-mode-only"/></p>
<p align="center"><img align="center" width="700" src="./icons/banner_dark.svg#gh-dark-mode-only"/></p>
<p align="center"><img align="center" width="700" src="./icons/banner_light.svg#gh-light-mode-only"/></p>
<hr>
Run Windows applications (including [Microsoft 365](https://www.microsoft365.com/) and [Adobe Creative Cloud](https://www.adobe.com/creativecloud.html)) on GNU/Linux with `KDE Plasma`, `GNOME` or `XFCE`, integrated seamlessly as if they were native to the OS.
<p align="center"><img src="./docs/readme/demo.png" width=1000 alt="WinApps Demonstration."></p>
<p align="center"><img src="./demo/demo.png" width=1000 alt="WinApps Demonstration."></p>
## Underlying Mechanism
WinApps works by:
@@ -17,22 +17,22 @@ WinApps works by:
- The GNU/Linux `/home` directory is accessible within Windows via the `\\tsclient\home` mount.
- Integration with `Nautilus`, allowing you to right-click files to open them with specific Windows applications based on the file MIME type.
- The [official taskbar widget](https://github.com/winapps-org/WinApps-Launcher) enables seamless administration of the Windows subsystem and offers an easy way to launch Windows applications.
- Microsoft Office links (e.g. ms-word://) from the host system are automatically opened in the Windows subsystem. (Note: You may need to use a [User Agent Switcher](https://github.com/ray-lothian/UserAgent-Switcher/) browser extension and set the User-Agent to Windows, as the Office webapps typically hide the "Open in Desktop App" option for Linux users.)
- Microsoft Office links (e.g. ms-word://) from the host system are automatically opened in the Windows subsystem. (Note: You may need to use an [User Agent switcher](https://github.com/ray-lothian/UserAgent-Switcher/) Browser Extension and set the User-Agent to Windows, as as the Office webapps typically hide the "Open in Desktop App" option for Linux users.)
## Supported Applications
**WinApps supports <u>*ALL*</u> Windows applications.** Support does not, however, extend to kernel-level anti-cheat systems (e.g. Riot Vanguard).
**WinApps supports <u>*ALL*</u> Windows applications.**
Universal application support is achieved by:
1. Scanning Windows for any community tested applications (list below).
1. Scanning Windows for any officially supported applications (list below).
2. Scanning Windows for any other `.exe` files listed within the Windows Registry.
Community tested applications benefit from high-resolution icons and pre-populated MIME types. This enables file managers to determine which Windows applications should open files based on file extensions. Icons for other detected applications are pulled from `.exe` files.
Officially supported applications benefit from high-resolution icons and pre-populated MIME types. This enables file managers to determine which Windows applications should open files based on file extensions. Icons for other detected applications are pulled from `.exe` files.
Contributing to the list of supported applications is encouraged through submission of pull requests! Please help us grow the WinApps community.
*Please note that the provided list of community tested applications is community-driven. As such, some applications may not be tested and verified by the WinApps team.*
*Please note that the provided list of officially supported applications is community-driven. As such, some applications may not be tested and verified by the WinApps team.*
### Community Tested Applications
### Officially Supported Applications
<table cellpadding="10" cellspacing="0" border="0">
<tr>
<!-- Adobe Acrobat Pro -->
@@ -124,16 +124,6 @@ Contributing to the list of supported applications is encouraged through submiss
(CS6, CC, 2022)<br>
<i><a href="https://commons.wikimedia.org/wiki/File:Adobe_Photoshop_CC_icon.svg">Icon</a> in the Public Domain.</i>
</td>
<!-- Autodesk Fusion 360 -->
<td>
<img src="apps/fusion-360/icon.svg" width="100">
</td>
<td>
<b>Autodesk Fusion 360</b><br>
<i><a href="https://commons.wikimedia.org/wiki/File:Fusion360_Logo.svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Command Prompt -->
<td>
<img src="apps/cmd/icon.svg" width="100">
@@ -143,6 +133,8 @@ Contributing to the list of supported applications is encouraged through submiss
(cmd.exe)<br>
<i><a href="https://github.com/microsoft/terminal/blob/main/res/terminal/Terminal.svg">Icon</a> under <a href="https://github.com/microsoft/terminal/blob/main/LICENSE">MIT license</a>.</i>
</td>
</tr>
<tr>
<!-- File Explorer -->
<td>
<img src="apps/explorer/icon.svg" width="100">
@@ -152,8 +144,6 @@ Contributing to the list of supported applications is encouraged through submiss
(Windows Explorer)<br>
<i><a href="https://commons.wikimedia.org/wiki/File:Windows_Explorer.svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Internet Explorer -->
<td>
<img src="apps/iexplorer/icon.svg" width="100">
@@ -163,6 +153,8 @@ Contributing to the list of supported applications is encouraged through submiss
(11)<br>
<i><a href="https://commons.wikimedia.org/wiki/File:Internet_Explorer_10%2B11_logo.svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Access -->
<td>
<img src="apps/access/icon.svg" width="100">
@@ -172,8 +164,6 @@ Contributing to the list of supported applications is encouraged through submiss
(2016, 2019, o365)<br>
<i><a href="https://commons.wikimedia.org/wiki/File:Microsoft_Office_Access_(2019-present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Excel -->
<td>
<img src="apps/excel/icon.svg" width="100">
@@ -183,6 +173,8 @@ Contributing to the list of supported applications is encouraged through submiss
(2016, 2019, o365)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Office_Excel_(2019%E2%80%93present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Word -->
<td>
<img src="apps/word/icon.svg" width="100">
@@ -192,8 +184,6 @@ Contributing to the list of supported applications is encouraged through submiss
(2016, 2019, o365)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Office_Word_(2019%E2%80%93present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft OneNote -->
<td>
<img src="apps/onenote/icon.svg" width="100">
@@ -203,6 +193,8 @@ Contributing to the list of supported applications is encouraged through submiss
(2016, 2019, o365)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Office_OneNote_(2019%E2%80%93present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Outlook -->
<td>
<img src="apps/outlook/icon.svg" width="100">
@@ -212,8 +204,6 @@ Contributing to the list of supported applications is encouraged through submiss
(2016, 2019, o365)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Office_Outlook_(2018%E2%80%93present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft PowerPoint -->
<td>
<img src="apps/powerpoint/icon.svg" width="100">
@@ -223,6 +213,8 @@ Contributing to the list of supported applications is encouraged through submiss
(2016, 2019, o365)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Office_PowerPoint_(2019%E2%80%93present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Publisher -->
<td>
<img src="apps/publisher/icon.svg" width="100">
@@ -232,8 +224,6 @@ Contributing to the list of supported applications is encouraged through submiss
(2016, 2019, o365)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Office_Publisher_(2019-present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Visio -->
<td>
<img src="apps/visio/icon.svg" width="100">
@@ -243,6 +233,8 @@ Contributing to the list of supported applications is encouraged through submiss
(Standard/Pro. 2021, Plan 2)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Office_Visio_(2019).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Project -->
<td>
<img src="apps/project/icon.svg" width="100">
@@ -252,8 +244,6 @@ Contributing to the list of supported applications is encouraged through submiss
(Standard/Pro. 2021, Plan 3/5)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Microsoft_Project_(2019present).svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- Microsoft Visual Studio -->
<td>
<img src="apps/visual-studio-pro/icon.svg" width="100">
@@ -263,6 +253,8 @@ Contributing to the list of supported applications is encouraged through submiss
(Comm./Pro./Ent. 2022)<br>
<i><a href="https://en.m.wikipedia.org/wiki/File:Visual_Studio_Icon_2022.svg">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- mIRC -->
<td>
<img src="apps/mirc/icon.svg" width="100">
@@ -271,8 +263,6 @@ Contributing to the list of supported applications is encouraged through submiss
<b>mIRC</b><br>
<i><a href="https://en.wikipedia.org/wiki/MIRC#/media/File:Mircnewlogo.png">Icon</a> in the Public Domain.</i>
</td>
</tr>
<tr>
<!-- PowerShell -->
<td>
<img src="apps/powershell/icon.svg" width="100">
@@ -281,9 +271,11 @@ Contributing to the list of supported applications is encouraged through submiss
<b>PowerShell</b><br>
<i><a href="https://iconduck.com/icons/102322/file-type-powershell">Icon</a> under <a href="https://iconduck.com/licenses/mit">MIT license</a>.</i>
</td>
</tr>
<tr>
<!-- Windows -->
<td>
<img src="install/windows.svg" width="100">
<img src="icons/windows.svg" width="100">
</td>
<td>
<b>Windows</b><br>
@@ -311,7 +303,7 @@ Install the required dependencies.
```
> [!NOTE]
> On Debian 12 (_"bookworm"_), you need to enable the `backports` repository for the `freerdp3-x11` package to become available.
> On Debian you need to enable the `backports` repository for the `freerdp3-x11` package to become available.
> For instructions, see https://backports.debian.org/Instructions.
- Fedora/RHEL:
@@ -322,7 +314,7 @@ Install the required dependencies.
```bash
sudo pacman -Syu --needed -y curl dialog freerdp git iproute2 libnotify openbsd-netcat
```
- openSUSE:
- OpenSUSE:
```bash
sudo zypper install -y curl dialog freerdp git iproute2 libnotify-tools netcat-openbsd
```
@@ -406,7 +398,7 @@ RDP_SCALE="100"
# This improves compatibility with most desktop environments (DEs).
# ATTENTION: The Filesystem Hierarchy Standard (FHS) recommends /media instead. Verify your system's configuration.
# - To manually mount devices, you may optionally use /mnt.
# REFERENCE: https://wiki.archlinux.org/title/Udisks#Mount_to_/media
# REFERRENCE: https://wiki.archlinux.org/title/Udisks#Mount_to_/media
REMOVABLE_MEDIA="/run/media"
# [ADDITIONAL FREERDP FLAGS & ARGUMENTS]
@@ -427,7 +419,8 @@ DEBUG="true"
# [AUTOMATICALLY PAUSE WINDOWS]
# NOTES:
# - This is currently INCOMPATIBLE with 'manual'.
# - This is currently INCOMPATIBLE with 'docker' and 'manual'.
# - See https://github.com/dockur/windows/issues/674
# DEFAULT VALUE: 'off'
# VALID VALUES:
# - 'on'
@@ -476,19 +469,8 @@ RDP_TIMEOUT="30"
# DEFAULT VALUE: '60'
APP_SCAN_TIMEOUT="60"
# WINDOWS BOOT
# - The maximum time (in seconds) to wait for the Windows VM to boot if it is not running, before attempting to launch an application.
# DEFAULT VALUE: '120'
BOOT_TIMEOUT="120"
```
> [!IMPORTANT]
> To safeguard your Windows password, ensure `~/.config/winapps/winapps.conf` is accessible only by your user account.
> ```bash
> chown $(whoami):$(whoami) ~/.config/winapps/winapps.conf
> chmod 600 ~/.config/winapps/winapps.conf
> ```
> [!IMPORTANT]
> `RDP_USER` and `RDP_PASS` must correspond to a complete Windows user account and password, such as those created during Windows setup or for a domain user. User/PIN combinations are not valid for RDP access.
@@ -502,7 +484,6 @@ BOOT_TIMEOUT="120"
- On high-resolution (UHD) displays, you can set `RDP_SCALE` to the scale you would like to use (100, 140 or 180).
- To add additional flags to the FreeRDP call (e.g. `/prevent-session-lock 120`), uncomment and use the `RDP_FLAGS` configuration option.
- For multi-monitor setups, you can try adding `/multimon` to `RDP_FLAGS`. A FreeRDP bug may result in a black screen however, in which case you should revert this change.
- To enable non-English input and seamless language switching, you can try adding `/kbd:unicode` to `RDP_FLAGS`. This ensures client inputs are sent as Unicode sequences.
- If you enable `DEBUG`, a log will be created on each application start in `~/.local/share/winapps/winapps.log`.
- If using a system on which the FreeRDP command is not `xfreerdp` or `xfreerdp3`, the correct command can be specified using `FREERDP_COMMAND`.
@@ -566,14 +547,14 @@ bash <(curl https://raw.githubusercontent.com/winapps-org/winapps/main/setup.sh)
Once WinApps is installed, a list of additional arguments can be accessed by running `winapps-setup --help`.
<img src="./docs/readme/installer.gif" width=1000 alt="WinApps Installer Animation.">
<img src="./demo/installer.gif" width=1000 alt="WinApps Installer Animation.">
## Adding Additional Pre-defined Applications
Adding your own applications with custom icons and MIME types to the installer is easy. Simply copy one of the application configurations in the `apps` folder located within the WinApps repository, and:
1. Modify the name and variables to reflect the appropriate/desired values for your application.
2. Replace `icon.svg` with an SVG for your application (ensuring the icon is appropriately licensed).
3. Remove and reinstall WinApps.
4. Submit a pull request to add your application to WinApps as a community tested application once you have tested and verified your configuration (optional, but encouraged).
4. Submit a pull request to add your application to WinApps as an officially supported application once you have tested and verified your configuration (optional, but encouraged).
## Running Applications Manually
WinApps offers a manual mode for running applications that were not configured by the WinApps installer. This is completed with the `manual` flag. Executables that are in the Windows PATH do not require full path definition.
@@ -592,7 +573,7 @@ The installer can be run multiple times. To update your installation of WinApps:
## WinApps Launcher (Optional)
The [WinApps Launcher](https://github.com/winapps-org/winapps-launcher) provides a simple system tray menu that makes it easy to launch your installed Windows applications, open a full desktop RDP session, and control your Windows VM or container. You can start, stop, pause, reboot or hibernate Windows, as well as access your installed applications from a convenient list. This lightweight, optional tool helps streamline your overall WinApps experience.
<img src="./docs/readme/launcher.gif" width=1000 alt="WinApps Launcher Animation.">
<img src="./demo/launcher.gif" width=1000 alt="WinApps Launcher Animation.">
## Installation using Nix
@@ -608,6 +589,10 @@ First, make sure Flakes and the `nix` command are enabled.
In your `~/.config/nix/nix.conf`:
```
experimental-features = nix-command flakes
# specify to use binary cache (optional)
extra-substituters = https://winapps.cachix.org/
extra-trusted-public-keys = winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=
extra-trusted-users = <your-username> # replace with your username
```
```bash
@@ -654,6 +639,12 @@ nix profile install github:winapps-org/winapps#winapps-launcher # optional
...
}:
{
# set up binary cache (optional)
nix.settings = {
substituters = [ "https://winapps.cachix.org/" ];
trusted-public-keys = [ "winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=" ];
};
environment.systemPackages = [
winapps.packages."${system}".winapps
winapps.packages."${system}".winapps-launcher # optional

View File

@@ -1 +0,0 @@
<svg fill="none" height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m2 12.1333c0-3.54697 0-5.32047.69029-6.67524.6072-1.19169 1.57608-2.16057 2.76777-2.76777 1.35477-.69029 3.12827-.69029 6.67524-.69029h7.7334c3.547 0 5.3205 0 6.6752.69029 1.1917.6072 2.1606 1.57608 2.7678 2.76777.6903 1.35477.6903 3.12827.6903 6.67524v7.7334c0 3.547 0 5.3205-.6903 6.6752-.6072 1.1917-1.5761 2.1606-2.7678 2.7678-1.3547.6903-3.1282.6903-6.6752.6903h-7.7334c-3.54697 0-5.32047 0-6.67524-.6903-1.19169-.6072-2.16057-1.5761-2.76777-2.7678-.69029-1.3547-.69029-3.1282-.69029-6.6752z" fill="#00005b"/><g fill="#99f"><path d="m13.7893 19.5638h-4.3389l-.88281 2.8181c-.02451.1045-.12074.1785-.22541.1734h-2.19764c-.12532 0-.16915-.0706-.13148-.2119l3.75663-11.0508c.0376-.1155.07514-.2285.11274-.3763.04913-.2571.07429-.5183.07513-.7802-.01076-.0774.05604-.14596.13144-.1349h2.9866c.0875 0 .1375.0321.1502.0963l4.2639 12.2651c.0375.1286-.0001.1928-.1127.1927h-2.4419c-.0856.0097-.1674-.049-.1878-.1349zm-3.6627-2.3761h2.9678c-.4876-1.6662-1.0379-3.3104-1.4839-4.9896-.5054 1.7418-.9721 3.3572-1.4839 4.9896z"/><path d="m20.6608 18.4757c.1727 1.4309 1.3743 2.1131 2.7048 2.084.7503-.0147 1.5521-.1312 2.2532-.4149.0624-.0511.0939-.0192.0939.0964v1.8301c.0059.0952-.0339.1803-.1127.2312-.8714.3958-1.8716.5152-2.8167.5-2.8178 0-4.7529-1.9854-4.7521-4.874-.0074-2.7374 1.7685-5.0468 4.5267-5.0468 2.3381-.0606 3.9568 1.8113 3.9633 4.1414 0 .4243-.0237.8502-.0751 1.2714-.01.0868-.0839.1542-.1691.1542-1.8673 0-3.7437.027-5.6162.027zm0-1.755c1.0407 0 2.0874.0368 3.1274-.0096.1563-.016.2724-.0457.2724-.2082-.0217-.8638-.7507-1.5743-1.5966-1.5412-1.022-.0634-1.6761.7994-1.8032 1.759z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="After Effects 2024"
# Used for descriptions and window class
FULL_NAME="Adobe After Effects 2024"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe After Effects 2024\Support Files\AfterFX.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES="application/vnd.adobe.aftereffects.project;application/vnd.adobe.aftereffects.template;"
# System Icon
ICON="AdobeAfterEffects"

View File

@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 256.4 250"
enable-background="new 0 0 256.4 250" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds bottomLeftOrigin="true" height="250" width="256.4" x="-8.2" y="-8"></sliceSourceBounds>
</sfw>
</metadata>
<g>
<path fill="#00005B" d="M45.4,0H211c25.1,0,45.4,20.3,45.4,45.4v159.2c0,25.1-20.3,45.4-45.4,45.4H45.4C20.3,250,0,229.7,0,204.6
V45.4C0,20.3,20.3,0,45.4,0z"/>
<g>
<path fill="#9999FF" d="M100.7,149.6H61l-8.1,25.2c-0.2,1-1.1,1.6-2,1.5H30.8c-1.2,0-1.5-0.6-1.2-1.9L64,75.6
c0.3-1.1,0.6-2.2,1.1-3.5c0.5-2.2,0.9-4.5,0.9-6.8c-0.1-0.5,0.3-1.1,0.9-1.2c0.1,0,0.2,0,0.3,0h27.4c0.7,0,1.3,0.3,1.4,0.9
l38.8,109.6c0.3,1.2,0,1.7-1.1,1.7h-22.3c-0.7,0.1-1.5-0.4-1.7-1.2L100.7,149.6z M67.2,128.3h27.1c-0.6-2.2-1.5-4.9-2.5-7.7
c-1-2.9-1.9-6-2.9-9.2c-1.1-3.3-2-6.5-3.1-9.8s-2-6.4-2.9-9.5c-0.9-3-1.6-5.8-2.4-8.3h-0.2c-1,4.6-2.1,9.2-3.6,13.8
c-1.6,5.1-3.2,10.5-4.9,15.8C70.5,118.8,68.8,123.8,67.2,128.3L67.2,128.3z"/>
<path fill="#9999FF" d="M216.7,92.1v65.5c0,2.9,0,5.4,0.1,7.7c0.1,2.2,0.2,4.2,0.3,5.9c0.2,1.7,0.3,2.7,0.4,3.8
c0.1,1-0.3,1.4-1.2,1.4H198c-0.9,0.1-1.7-0.4-2-1.2c-0.2-0.9-0.4-1.8-0.6-2.7c-0.2-0.7-0.2-1.5-0.2-2.2c-3.4,3.1-7.6,5.3-12.1,6.6
c-3.8,1.1-7.9,1.6-11.9,1.6c-4,0-7.9-0.5-11.6-1.8c-3.4-1.2-6.6-3.2-9.1-5.9c-2.8-3-4.8-6.5-6-10.4c-1.5-4.9-2.2-10-2.1-15.2v-53
c-0.1-0.6,0.3-1.3,1.1-1.4c0.1,0,0.2,0,0.3,0h20.4c0.6-0.1,1.3,0.3,1.4,1.1c0,0.1,0,0.2,0,0.3v50.2c0,4.7,1.1,8.4,3.1,11.1
c2,2.7,6.2,4.1,11,4.1c2.5,0,4.9-0.4,7.3-1.3c2.5-0.9,4.7-2,6.7-3.5V92.1c0-0.7,0.5-1.2,1.5-1.2h20.4c0.5-0.1,1.2,0.3,1.2,0.9
C216.7,91.9,216.7,92,216.7,92.1z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Audition 2024"
# Used for descriptions and window class
FULL_NAME="Adobe Audition 2024"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Audition 2024\Adobe Audition.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES=""
# System Icon
ICON="AdobeAudition"

View File

@@ -1,90 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="256pt"
height="256pt"
viewBox="0 0 256 256"
version="1.1"
id="svg7"
sodipodi:docname="Fusion360-82.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs7" />
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="pt"
showgrid="false"
inkscape:zoom="1.4142136"
inkscape:cx="228.74904"
inkscape:cy="139.30004"
inkscape:window-width="1418"
inkscape:window-height="892"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
id="g8">
<path
style="fill:#ff9548;stroke-width:0.75;fill-opacity:1"
d="M 46.79097,-0.00247339 7.8151404,23.849982 8.0231482,23.990607 15.67377,23.310848 45.733663,5.9498164 Z"
id="path8"
sodipodi:nodetypes="cccccc" />
<path
fill="#ff9548"
opacity="1"
d="M 46.398594,0.36621094 46.78,0 C 46.69,59.94 46.65,119.88 46.8,179.82 40.173599,183.81384 12.241533,200.6415 7.83,203.25 7.82,143.45 7.84,83.65 7.82,23.85 16.708712,15.663236 38.795821,8.8363876 46.398594,0.36621094 Z"
id="path1"
sodipodi:nodetypes="cccccc" />
</g>
<g
id="#ff6b00ff"
style="display:inline">
<path
fill="#ff6b00"
opacity="1"
d="m 46.78,0 h 171.61 c 6.13,1.02 11.96,5.71 12.23,12.27 0.19,9.33 0.01,18.66 0.07,28 0.01,46.5 -0.01,93.01 0.01,139.51 -61.3,0.1 -122.6,0.02 -183.9,0.04 C 46.65,119.88 46.69,59.94 46.78,0 m 64.99,40.53 c 0.03,33.12 0,66.25 0.02,99.37 8.3,-0.02 16.6,0.05 24.9,-0.04 -0.06,-13.36 -0.02,-26.73 -0.03,-40.1 10.87,0.02 21.74,-0.07 32.62,0.04 0.1,-5.89 0.16,-11.8 -0.04,-17.69 -10.86,0.12 -21.71,0.03 -32.57,0.05 -0.06,-7.88 0.07,-15.76 -0.08,-23.65 12.91,-0.24 25.83,-0.03 38.74,-0.1 -0.01,-5.96 -0.01,-11.93 0,-17.89 -21.18,-0.01 -42.37,-0.02 -63.56,0.01 z"
id="path2" />
</g>
<g
id="#933c00ff">
<path
fill="#933c00"
opacity="1.00"
d=" M 230.69 40.27 C 236.63 40.33 242.56 40.12 248.50 40.40 C 248.26 112.26 248.46 184.13 248.40 256.00 L 40.90 256.00 C 35.09 254.75 29.45 250.32 29.18 243.98 C 29.00 226.15 29.15 208.31 29.11 190.47 C 35.01 186.93 40.91 183.37 46.80 179.82 C 108.10 179.80 169.40 179.88 230.70 179.78 C 230.68 133.28 230.70 86.77 230.69 40.27 M 163.04 199.06 C 157.06 202.24 156.37 212.16 162.15 215.83 C 166.41 218.38 171.48 218.99 175.96 221.04 C 178.76 222.05 179.00 226.25 176.91 228.06 C 172.76 230.53 165.86 228.94 165.73 223.33 C 162.83 223.33 159.94 223.34 157.04 223.33 C 157.25 226.60 158.35 229.96 160.90 232.17 C 164.97 235.91 170.93 236.24 176.16 235.69 C 181.07 235.18 186.33 232.16 187.38 226.99 C 187.94 223.28 187.75 218.80 184.56 216.28 C 180.18 212.67 174.15 212.48 169.26 209.85 C 167.07 208.83 166.95 205.27 168.99 204.06 C 172.69 201.92 178.42 203.55 178.83 208.32 C 181.69 208.34 184.56 208.34 187.42 208.32 C 187.18 204.06 184.77 199.89 180.69 198.28 C 175.11 196.05 168.36 196.14 163.04 199.06 M 92.12 197.62 C 92.29 210.14 92.16 222.67 92.19 235.19 C 95.27 235.19 98.35 235.19 101.43 235.28 C 101.77 230.14 101.46 225.00 101.60 219.86 C 105.70 219.87 109.80 219.87 113.90 219.86 C 113.90 217.65 113.90 215.45 113.89 213.25 C 109.78 213.26 105.68 213.26 101.57 213.26 C 101.60 210.33 101.59 207.39 101.49 204.47 C 106.40 204.20 111.32 204.41 116.24 204.34 C 116.24 202.07 116.24 199.80 116.25 197.54 C 108.20 197.58 100.16 197.42 92.12 197.62 M 121.04 197.58 C 121.38 207.36 120.57 217.21 121.49 226.96 C 123.25 236.40 136.36 238.70 142.71 232.48 C 142.97 233.38 143.24 234.28 143.53 235.18 C 146.16 235.19 148.79 235.19 151.42 235.30 C 151.84 222.72 151.56 210.10 151.55 197.51 C 148.42 197.54 145.29 197.53 142.16 197.62 C 142.32 206.42 142.16 215.22 142.25 224.03 C 143.08 230.29 130.91 231.38 130.55 224.88 C 130.27 215.78 130.50 206.66 130.44 197.56 C 127.31 197.53 124.18 197.53 121.04 197.58 Z"
id="path3" />
</g>
<g
id="#ffffffff">
<path
fill="#ffffff"
opacity="1.00"
d=" M 111.77 40.53 C 132.96 40.50 154.15 40.51 175.33 40.52 C 175.32 46.48 175.32 52.45 175.33 58.41 C 162.42 58.48 149.50 58.27 136.59 58.51 C 136.74 66.40 136.61 74.28 136.67 82.16 C 147.53 82.14 158.38 82.23 169.24 82.11 C 169.44 88.00 169.38 93.91 169.28 99.80 C 158.40 99.69 147.53 99.78 136.66 99.76 C 136.67 113.13 136.63 126.50 136.69 139.86 C 128.39 139.95 120.09 139.88 111.79 139.90 C 111.77 106.78 111.80 73.65 111.77 40.53 Z"
id="path4" />
<path
fill="#ffffff"
opacity="1.00"
d=" M 163.04 199.06 C 168.36 196.14 175.11 196.05 180.69 198.28 C 184.77 199.89 187.18 204.06 187.42 208.32 C 184.56 208.34 181.69 208.34 178.83 208.32 C 178.42 203.55 172.69 201.92 168.99 204.06 C 166.95 205.27 167.07 208.83 169.26 209.85 C 174.15 212.48 180.18 212.67 184.56 216.28 C 187.75 218.80 187.94 223.28 187.38 226.99 C 186.33 232.16 181.07 235.18 176.16 235.69 C 170.93 236.24 164.97 235.91 160.90 232.17 C 158.35 229.96 157.25 226.60 157.04 223.33 C 159.94 223.34 162.83 223.33 165.73 223.33 C 165.86 228.94 172.76 230.53 176.91 228.06 C 179.00 226.25 178.76 222.05 175.96 221.04 C 171.48 218.99 166.41 218.38 162.15 215.83 C 156.37 212.16 157.06 202.24 163.04 199.06 Z"
id="path5" />
<path
fill="#ffffff"
opacity="1.00"
d=" M 92.12 197.62 C 100.16 197.42 108.20 197.58 116.25 197.54 C 116.24 199.80 116.24 202.07 116.24 204.34 C 111.32 204.41 106.40 204.20 101.49 204.47 C 101.59 207.39 101.60 210.33 101.57 213.26 C 105.68 213.26 109.78 213.26 113.89 213.25 C 113.90 215.45 113.90 217.65 113.90 219.86 C 109.80 219.87 105.70 219.87 101.60 219.86 C 101.46 225.00 101.77 230.14 101.43 235.28 C 98.35 235.19 95.27 235.19 92.19 235.19 C 92.16 222.67 92.29 210.14 92.12 197.62 Z"
id="path6" />
<path
fill="#ffffff"
opacity="1.00"
d=" M 121.04 197.58 C 124.18 197.53 127.31 197.53 130.44 197.56 C 130.50 206.66 130.27 215.78 130.55 224.88 C 130.91 231.38 143.08 230.29 142.25 224.03 C 142.16 215.22 142.32 206.42 142.16 197.62 C 145.29 197.53 148.42 197.54 151.55 197.51 C 151.56 210.10 151.84 222.72 151.42 235.30 C 148.79 235.19 146.16 235.19 143.53 235.18 C 143.24 234.28 142.97 233.38 142.71 232.48 C 136.36 238.70 123.25 236.40 121.49 226.96 C 120.57 217.21 121.38 207.36 121.04 197.58 Z"
id="path7" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -1,14 +0,0 @@
# GNOME shortcut name
NAME="Fusion 360"
# Used for descriptions and window class
FULL_NAME="Autodesk Fusion 360"
# The executable inside windows
WIN_EXECUTABLE="C:\Users\%USERNAME%\AppData\Local\Autodesk\webdeploy\production\6a0c9611291d45bb9226980209917c3d\FusionLauncher.exe"
# GNOME categories
CATEGORIES="WinApps;Graphics;3DGraphics"
# GNOME mimetypes
MIME_TYPES="application/fusion"

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 240 234">
<path fill="#300" d="M42.5 0h155C221 0 240 19 240 42.5v149c0 23.5-19 42.5-42.5 42.5h-155C19 234 0 215 0 191.5v-149C0 19 19 0 42.5 0z"/>
<path fill="#ff9a00" d="M116 140H78.8l-7.6 23.5c-.2.9-1 1.5-1.9 1.4H50.5c-1.1 0-1.4-.6-1.1-1.8l32.2-92.7c.3-1 .6-2.1 1-3.3.4-2.1.6-4.3.6-6.5-.1-.5.3-1 .8-1.1h25.9c.8 0 1.2.3 1.3.8l36.5 103c.3 1.1 0 1.6-1 1.6h-20.9c-.7.1-1.4-.4-1.6-1.1L116 140zm-31.4-20.3H110c-.6-2.1-1.4-4.6-2.3-7.2-.9-2.7-1.8-5.6-2.7-8.6-1-3.1-1.9-6.1-2.9-9.2s-1.9-6-2.7-8.9c-.8-2.8-1.5-5.4-2.2-7.8H97c-.9 4.3-2 8.6-3.4 12.9-1.5 4.8-3 9.8-4.6 14.8-1.4 5.1-2.9 9.8-4.4 14zM170 77c-3.3.1-6.5-1.2-8.9-3.5-2.3-2.5-3.5-5.8-3.4-9.2-.1-3.4 1.2-6.6 3.6-8.9s5.6-3.5 8.9-3.5c3.9 0 6.9 1.2 9.1 3.5 2.2 2.4 3.4 5.6 3.3 8.9.1 3.4-1.1 6.7-3.5 9.2-2.3 2.4-5.7 3.7-9.1 3.5zm-11.2 86.8v-77c0-1 .4-1.4 1.3-1.4h19.8c.9 0 1.3.5 1.3 1.4v77c0 1.1-.4 1.6-1.3 1.6h-19.6c-1 0-1.5-.6-1.5-1.6z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1008 B

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Illustrator 2024"
# Used for descriptions and window class
FULL_NAME="Adobe Illustrator 2024"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Illustrator 2024\Support Files\Contents\Windows\Illustrator.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES="application/illustrator;"
# System Icon
ICON="AdobeIllustrator"

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg style="enable-background:new 0 0 240 234" version="1.1" viewBox="0 0 240 234" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<title>Adobe InDesign CC logo</title>
<style type="text/css">
.st0{fill:#49021F;}
.st1{fill:#FF3366;}
</style>
<path class="st0" d="M42.5,0h155C221,0,240,19,240,42.5v149c0,23.5-19,42.5-42.5,42.5h-155C19,234,0,215,0,191.5v-149 C0,19,19,0,42.5,0z"/>
<g id="vlpa">
<g id="vlpb">
<path class="st1" d="m87.2 61.2v103c0 1.1-0.5 1.6-1.4 1.6h-19.6c-0.9 0-1.3-0.5-1.3-1.6v-103c0-0.9 0.5-1.3 1.4-1.3h19.5c0.6-0.1 1.2 0.3 1.3 1 0.1 0.1 0.1 0.2 0.1 0.3z"/>
<path class="st1" d="m145 167c-7.4 0.1-14.8-1.4-21.5-4.5-6.3-2.9-11.5-7.7-15.1-13.6-3.7-6.1-5.5-13.7-5.5-22.8-0.1-7.4 1.8-14.7 5.5-21.1 3.8-6.5 9.3-11.9 15.9-15.5 7-3.9 15.4-5.8 25.3-5.8 0.5 0 1.2 0 2.1 0.1s1.9 0.1 3.1 0.2v-31.6c0-0.7 0.3-1.1 1-1.1h20.3c0.5-0.1 0.9 0.3 1 0.7v0.2 95.2c0 1.8 0.1 3.8 0.2 6 0.2 2.1 0.3 4.1 0.4 5.8 0 0.7-0.3 1.3-1 1.6-5.2 2.2-10.7 3.8-16.3 4.8-5 0.9-10.2 1.4-15.4 1.4zm9.8-20v-44c-0.9-0.2-1.8-0.4-2.7-0.5-1.1-0.1-2.2-0.2-3.3-0.2-3.9 0-7.8 0.8-11.3 2.6-3.4 1.7-6.3 4.2-8.5 7.4s-3.3 7.5-3.3 12.7c-0.1 3.5 0.5 7 1.7 10.3 1 2.7 2.5 5.1 4.5 7.1 1.9 1.8 4.2 3.2 6.8 4 2.7 0.9 5.5 1.3 8.3 1.3 1.5 0 2.9-0.1 4.2-0.2 1.3 0.1 2.5-0.1 3.6-0.5z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="InDesign 2024"
# Used for descriptions and window class
FULL_NAME="Adobe InDesign 2024"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe InDesign 2024\InDesign.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES="application/x-adobe-indesign-interchange;application/x-adobe-indesign;"
# System Icon
ICON="AdobeIndesign"

View File

@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 256.4 250"
enable-background="new 0 0 256.4 250" xml:space="preserve">
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds bottomLeftOrigin="true" height="250" width="256.4" x="-8.2" y="-8"></sliceSourceBounds>
</sfw>
</metadata>
<g id="Layer_2_1_">
<path fill="#001E36" d="M45.4,0H211c25.1,0,45.4,20.3,45.4,45.4v159.2c0,25.1-20.3,45.4-45.4,45.4H45.4C20.3,250,0,229.7,0,204.6
V45.4C0,20.3,20.3,0,45.4,0z"/>
<g id="LrC">
<path fill="#31A8FF" d="M90,176.7H29c-1.1,0-1.5-0.6-1.5-1.9V65.6c0-1.1,0.4-1.5,1.4-1.5h18.9c0.7,0,1.1,0.4,1.1,1.2V155h44.4
c1,0,1.3,0.5,1.1,1.5l-2.8,18.6c-0.1,0.6-0.3,1.1-0.6,1.3S90.3,176.7,90,176.7z"/>
<path fill="#31A8FF" d="M105.2,91.2h16.9c1,0,1.6,0.5,2,1.7c0.3,0.7,0.6,1.6,0.7,2.5c0.2,1.1,0.3,2.2,0.4,3.3
c0.1,1.2,0.1,2.5,0.1,3.8c2.8-3.6,6.3-6.8,10.3-9.2c4.3-2.6,9.3-4,14.3-3.8c1,0,1.4,0.5,1.4,1.5v20.8c0,0.9-0.5,1.2-1.5,1.2
c-3.4-0.2-6.8,0-10.1,0.7c-2.8,0.6-5.4,1.6-8,2.9c-1.9,1-3.7,2.4-5.2,4v54.5c0,1.1-0.4,1.5-1.3,1.5h-18.6c-1.1,0-1.5-0.5-1.5-1.7
v-59.2c0-2.6,0-5.2-0.1-8c0-2.8-0.1-5.6-0.2-8.3c-0.1-2.4-0.3-4.7-0.6-7.1c0-0.3,0-0.6,0.2-1C104.7,91.2,104.9,91.1,105.2,91.2z"
/>
<path fill="#31A8FF" d="M227.1,75.4c-2.2-1-4.7-1.5-7.2-1.8c-3.6-0.4-7.3-0.6-10.9-0.6c-10.5,0-19.7,2.2-27.2,6.6
s-13.7,10.9-17.7,18.7c-4.2,7.9-6.2,17.3-6.2,27.8c-0.1,6.3,0.7,12.6,2.4,18.8c1.5,5.2,3.7,10.1,6.8,14.6
c2.9,4.2,6.4,7.7,10.5,10.6s8.7,5.1,13.6,6.4c5,1.4,10.4,2.1,15.6,2.1c3.7,0,7.4-0.2,11-0.7c3-0.3,5.9-1.1,8.7-2.1
c1.1-0.5,1.7-1.6,1.6-2.9v-15.9c0.1-0.5-0.1-1.2-0.5-1.6c-0.3-0.2-0.9-0.5-1.7,0.1c-2.4,0.9-4.9,1.5-7.5,1.8
c-3.1,0.3-6.2,0.4-9.3,0.4c-2.8,0-5.7-0.4-8.3-1.2c-2.9-0.7-5.6-1.9-8.1-3.4c-2.7-1.6-4.9-3.7-6.7-6.2c-2-2.8-3.6-5.9-4.7-9.2
c-1.2-4.1-1.8-8.2-1.7-12.5c-0.1-5.9,1.1-11.8,3.5-17.1c2.2-4.6,5.7-8.5,10-11.2c4.7-2.8,10.1-4.2,15.6-4.1c3.3,0,6.7,0.2,10,0.9
c2.7,0.4,5.2,1.3,7.7,2.6c0.4,0.2,1,0.2,1.4,0c0.4-0.4,0.7-1,0.6-1.6V78C228.4,76.9,228,76,227.1,75.4z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Lightroom Classic"
# Used for descriptions and window class
FULL_NAME="Adobe Lightroom Classic"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Lightroom Classic\Lightroom.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES=""
# System Icon
ICON="AdobeLightroom"

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 234"><path fill="#00005B" d="M42.5,0h155C221,0,240,19,240,42.5v149c0,23.5-19,42.5-42.5,42.5h-155C19,234,0,215,0,191.5v-149C0,19,19,0,42.5,0z"/><path fill="#9999FF" d="M33.8,60.9c0.1-0.6,0.6-1,1.2-1c0,0,0,0,0,0h28.1c0.8-0.1,1.5,0.4,1.7,1.1c0.7,2.8,1.6,6.1,2.6,10.1c1,3.9,2.1,8.2,3.3,13c1.2,4.7,2.4,9.6,3.6,14.5c1.2,4.9,2.4,9.7,3.6,14.4c1.2,4.7,2.2,9,3,12.9c0.8,3.9,1.5,7.2,2,9.7h0.2c0.4-2.3,1.1-5.3,2.1-9c1-3.8,2.2-8,3.5-12.6c1.3-4.7,2.7-9.5,4.1-14.4c1.4-4.9,2.7-9.8,4.1-14.7c1.3-4.8,2.6-9.3,3.7-13.4c1.2-4.1,2.1-7.6,2.8-10.4c0.1-0.7,0.7-1.2,1.4-1.1h27.4c0.7-0.1,1.3,0.4,1.4,1c0,0,0,0.1,0,0.1l3.7,102.9c0.1,0.4,0,0.8-0.2,1c-0.3,0.3-0.6,0.4-1,0.4h-19.9c-0.3,0-0.5-0.1-0.8-0.2c-0.2-0.2-0.3-0.6-0.3-0.9c0-5.5,0-11.2-0.1-17.2c-0.1-6-0.1-12-0.2-18.1c-0.1-6.1-0.1-11.9,0-17.5c0.1-5.6,0.2-10.7,0.2-15.5c0-4.7,0-8.8,0.1-12.3c0.1-3.5,0.1-6.1,0.1-7.8h-0.2c-0.6,2.7-1.4,6.2-2.4,10.5c-1,4.3-2.2,9.2-3.6,14.7c-1.4,5.4-2.9,11-4.4,16.8c-1.6,5.8-3.1,11.5-4.6,17.2c-1.5,5.7-2.9,11-4.3,15.9c-1.4,4.9-2.5,9.3-3.4,13c-0.2,0.8-0.9,1.3-1.7,1.3H73.1c-0.9,0.1-1.7-0.4-1.8-1.3c-0.9-3.8-2-8.1-3.1-13c-1.2-4.9-2.4-10.1-3.6-15.5c-1.2-5.4-2.5-10.9-3.9-16.5c-1.4-5.6-2.7-11.1-3.9-16.3c-1.2-5.3-2.3-10.2-3.3-14.8c-1-4.6-1.9-8.7-2.7-12.2h-0.3v12.7c0,4.9-0.1,10.4-0.2,16.3c-0.2,6-0.3,12.2-0.5,18.7c-0.2,6.5-0.3,13.2-0.5,20.1c-0.2,6.9-0.5,13.8-0.8,20.5c0,0.9-0.4,1.3-1.2,1.3H29.6c-0.3,0-0.7-0.1-1-0.2c-0.3-0.2-0.3-0.6-0.2-1.2L33.8,60.9zM196.7,130.3H165c0.4,3,1.4,5.9,3.1,8.5c1.8,2.7,4.3,4.8,7.3,6c3.3,1.5,7.5,2.3,12.8,2.3c3.5,0,7-0.3,10.4-0.9c3.2-0.6,6.4-1.5,9.4-2.8c0.5-0.4,0.8-0.2,0.8,0.8v15.3c0,0.4-0.1,0.8-0.2,1.2c-0.2,0.3-0.4,0.5-0.7,0.7c-3.3,1.6-6.8,2.7-10.5,3.5c-4.7,0.9-9.4,1.3-14.2,1.2c-7.6,0-14-1.2-19.2-3.5c-4.9-2.1-9.2-5.4-12.6-9.5c-3.2-3.9-5.5-8.3-6.9-13.1c-1.4-4.7-2.1-9.6-2.1-14.6c0-5.4,0.8-10.7,2.5-15.9c1.6-5,4.1-9.6,7.5-13.7c3.3-4,7.4-7.2,12.1-9.5c5.2-2.4,11-3.6,16.7-3.5c5.3-0.1,10.6,0.9,15.5,3.1c4.1,1.9,7.8,4.7,10.5,8.3c2.6,3.4,4.7,7.2,6,11.4c1.3,4,1.9,8.1,1.9,12.2c0,2.4-0.1,4.5-0.2,6.4c-0.2,1.9-0.3,3.3-0.4,4.2c-0.1,0.7-0.7,1.3-1.4,1.3c-0.6,0-1.7,0.1-3.3,0.2c-1.6,0.2-3.5,0.3-5.8,0.3C201.7,130.2,199.2,130.3,196.7,130.3z M165,114.6H186c2.6,0,4.5,0,5.7-0.1c0.8,0,1.6-0.1,2.3-0.2v-1c0-1.3-0.2-2.5-0.6-3.7c-1.8-5.6-7.1-9.4-13-9.2c-5.5-0.3-10.7,2.6-13.3,7.6C166,110.1,165.3,112.3,165,114.6z"/></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Media Encoder 2024"
# Used for descriptions and window class
FULL_NAME="Adobe Media Encoder 2024"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Media Encoder 2024\Adobe Media Encoder.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES=""
# System Icon
ICON="AdobeMediaEncoder"

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -1,14 +0,0 @@
# GNOME shortcut name
NAME="pdfgear"
# Used for descriptions and window class
FULL_NAME="PDF Gear"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\PDFgear\PDFLauncher.exe"
# GNOME categories
CATEGORIES="Office;Viewer;Graphics;pdf"
# GNOME mimetypes
MIME_TYPES="application/pdf;"

View File

@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 240 234" style="enable-background:new 0 0 240 234;" xml:space="preserve">
<style type="text/css">
.st0{fill:#001E36;}
.st1{fill:#31A8FF;}
</style>
<g id="Layer_2_1_">
<g id="Surfaces">
<g id="Photo_Surface">
<g id="Outline_no_shadow">
<path class="st0" d="M42.5,0h155C221,0,240,19,240,42.5v149c0,23.5-19,42.5-42.5,42.5h-155C19,234,0,215,0,191.5v-149
C0,19,19,0,42.5,0z"/>
</g>
</g>
</g>
<g id="Outlined_Mnemonics_Logos">
<g id="Ps">
<path class="st1" d="M54,164.1V61.2c0-0.7,0.3-1.1,1-1.1c1.7,0,3.3,0,5.6-0.1c2.4-0.1,4.9-0.1,7.6-0.2c2.7-0.1,5.6-0.1,8.7-0.2
c3.1-0.1,6.1-0.1,9.1-0.1c8.2,0,15,1,20.6,3.1c5,1.7,9.6,4.5,13.4,8.2c3.2,3.2,5.7,7.1,7.3,11.4c1.5,4.2,2.3,8.5,2.3,13
c0,8.6-2,15.7-6,21.3c-4,5.6-9.6,9.8-16.1,12.2c-6.8,2.5-14.3,3.4-22.5,3.4c-2.4,0-4,0-5-0.1c-1-0.1-2.4-0.1-4.3-0.1v32.1
c0.1,0.7-0.4,1.3-1.1,1.4c-0.1,0-0.2,0-0.4,0H55.2C54.4,165.4,54,165,54,164.1z M75.8,79.4V113c1.4,0.1,2.7,0.2,3.9,0.2H85
c3.9,0,7.8-0.6,11.5-1.8c3.2-0.9,6-2.8,8.2-5.3c2.1-2.5,3.1-5.9,3.1-10.3c0.1-3.1-0.7-6.2-2.3-8.9c-1.7-2.6-4.1-4.6-7-5.7
c-3.7-1.5-7.7-2.1-11.8-2c-2.6,0-4.9,0-6.8,0.1C77.9,79.2,76.5,79.3,75.8,79.4L75.8,79.4z"/>
<path class="st1" d="M192,106.9c-3-1.6-6.2-2.7-9.6-3.4c-3.7-0.8-7.4-1.3-11.2-1.3c-2-0.1-4.1,0.2-6,0.7c-1.3,0.3-2.4,1-3.1,2
c-0.5,0.8-0.8,1.8-0.8,2.7c0,0.9,0.4,1.8,1,2.6c0.9,1.1,2.1,2,3.4,2.7c2.3,1.2,4.7,2.3,7.1,3.3c5.4,1.8,10.6,4.3,15.4,7.3
c3.3,2.1,6,4.9,7.9,8.3c1.6,3.2,2.4,6.7,2.3,10.3c0.1,4.7-1.3,9.4-3.9,13.3c-2.8,4-6.7,7.1-11.2,8.9c-4.9,2.1-10.9,3.2-18.1,3.2
c-4.6,0-9.1-0.4-13.6-1.3c-3.5-0.6-7-1.7-10.2-3.2c-0.7-0.4-1.2-1.1-1.1-1.9v-17.4c0-0.3,0.1-0.7,0.4-0.9
c0.3-0.2,0.6-0.1,0.9,0.1c3.9,2.3,8,3.9,12.4,4.9c3.8,1,7.8,1.5,11.8,1.5c3.8,0,6.5-0.5,8.3-1.4c1.6-0.7,2.7-2.4,2.7-4.2
c0-1.4-0.8-2.7-2.4-4c-1.6-1.3-4.9-2.8-9.8-4.7c-5.1-1.8-9.8-4.2-14.2-7.2c-3.1-2.2-5.7-5.1-7.6-8.5c-1.6-3.2-2.4-6.7-2.3-10.2
c0-4.3,1.2-8.4,3.4-12.1c2.5-4,6.2-7.2,10.5-9.2c4.7-2.4,10.6-3.5,17.7-3.5c4.1,0,8.3,0.3,12.4,0.9c3,0.4,5.9,1.2,8.6,2.3
c0.4,0.1,0.8,0.5,1,0.9c0.1,0.4,0.2,0.8,0.2,1.2v16.3c0,0.4-0.2,0.8-0.5,1C192.9,107.1,192.4,107.1,192,106.9z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Photoshop 2024"
# Used for descriptions and window class
FULL_NAME="Adobe Photoshop 2024"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Photoshop 2024\Photoshop.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES="image/vnd.adobe.photoshop;"
# System Icon
ICON="AdobePhotoshop"

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<title>Power BI Logo</title>
<defs>
<linearGradient id="gradient1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#F2C94C"/>
<stop offset="100%" style="stop-color:#F2994A"/>
</linearGradient>
</defs>
<rect x="10" y="30" width="15" height="60" fill="url(#gradient1)" rx="2"/>
<rect x="30" y="20" width="15" height="70" fill="url(#gradient1)" rx="2"/>
<rect x="50" y="10" width="15" height="80" fill="url(#gradient1)" rx="2"/>
<rect x="70" y="25" width="15" height="65" fill="url(#gradient1)" rx="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 694 B

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Power BI Desktop (Microsoft Store)"
# Used for descriptions and window class
FULL_NAME="Microsoft Power BI Desktop (Store Version)"
# The executable inside windows
WIN_EXECUTABLE="C:\Users\%USERNAME%\AppData\Local\Microsoft\WindowsApps\PBIDesktop.exe"
# GNOME categories
CATEGORIES="WinApps;Office"
# GNOME mimetypes
MIME_TYPES="application/x-powerbi;application/vnd.ms-powerbi;application/powerbi;application/x-pbix;application/vnd.powerbi.pbix"
# System Icon
ICON="ms-powerbi"

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<title>Power BI Logo</title>
<defs>
<linearGradient id="gradient1" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#F2C94C"/>
<stop offset="100%" style="stop-color:#F2994A"/>
</linearGradient>
</defs>
<rect x="10" y="30" width="15" height="60" fill="url(#gradient1)" rx="2"/>
<rect x="30" y="20" width="15" height="70" fill="url(#gradient1)" rx="2"/>
<rect x="50" y="10" width="15" height="80" fill="url(#gradient1)" rx="2"/>
<rect x="70" y="25" width="15" height="65" fill="url(#gradient1)" rx="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 694 B

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Power BI Desktop (Traditional)"
# Used for descriptions and window class
FULL_NAME="Microsoft Power BI Desktop"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Microsoft Power BI Desktop\bin\PBIDesktop.exe"
# GNOME categories
CATEGORIES="WinApps;Office"
# GNOME mimetypes
MIME_TYPES="application/x-powerbi;application/vnd.ms-powerbi;application/powerbi;application/x-pbix;application/vnd.powerbi.pbix"
# System Icon
ICON="ms-powerbi"

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg style="enable-background:new 0 0 240 234" version="1.1" viewBox="0 0 240 234" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<title>Adobe Premiere Pro CC logo</title>
<style type="text/css">
.st0{fill:#00005B;}
.st1{fill:#9999FF;}
</style>
<g id="vlpa">
<g id="vlpb">
<g id="vlpc">
<g id="vlpd">
<path class="st0" d="M42.5,0h155C221,0,240,19,240,42.5v149c0,23.5-19,42.5-42.5,42.5h-155C19,234,0,215,0,191.5v-149 C0,19,19,0,42.5,0z"/>
</g>
</g>
</g>
<g id="vlpe">
<g id="vlpf">
<path class="st1" d="m57 164v-103c0-0.7 0.3-1.1 1-1.1 1.7 0 3.3 0 5.6-0.1 2.4-0.1 4.9-0.1 7.6-0.2s5.6-0.1 8.7-0.2 6.1-0.1 9.1-0.1c8.2 0 15 1 20.6 3.1 5 1.7 9.6 4.5 13.4 8.2 3.2 3.2 5.7 7.1 7.3 11.4 1.5 4.2 2.3 8.5 2.3 13 0 8.6-2 15.7-6 21.3s-9.6 9.8-16.1 12.2c-6.8 2.5-14.3 3.4-22.5 3.4-2.4 0-4 0-5-0.1s-2.4-0.1-4.3-0.1v32.1c0.1 0.7-0.4 1.3-1.1 1.4h-0.4-19c-0.8 0-1.2-0.4-1.2-1.3zm21.8-84.7v33.6c1.4 0.1 2.7 0.2 3.9 0.2h5.3c3.9 0 7.8-0.6 11.5-1.8 3.2-0.9 6-2.8 8.2-5.3 2.1-2.5 3.1-5.9 3.1-10.3 0.1-3.1-0.7-6.2-2.3-8.9-1.7-2.6-4.1-4.6-7-5.7-3.7-1.5-7.7-2.1-11.8-2-2.6 0-4.9 0-6.8 0.1-2-0.1-3.4 0-4.1 0.1z"/>
<path class="st1" d="m147 85.2h17.5c1 0 1.8 0.7 2.1 1.6 0.3 0.8 0.5 1.6 0.6 2.5 0.2 1 0.4 2.1 0.5 3.1 0.1 1.1 0.2 2.3 0.2 3.6 3-3.5 6.6-6.4 10.7-8.6 4.6-2.6 9.9-3.9 15.2-3.9 0.7-0.1 1.3 0.4 1.4 1.1v0.4 19.5c0 0.8-0.5 1.1-1.6 1.1-3.6-0.1-7.3 0.2-10.8 1-2.9 0.6-5.7 1.5-8.4 2.7-1.9 0.9-3.7 2.1-5.1 3.7v51c0 1-0.4 1.4-1.3 1.4h-19.7c-0.8 0.1-1.5-0.4-1.6-1.2v-0.4-55.4c0-2.4 0-4.9-0.1-7.5s-0.1-5.2-0.2-7.8c0-2.3-0.2-4.5-0.4-6.8-0.1-0.5 0.2-1 0.7-1.1 0-0.1 0.2-0.1 0.3 0z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,17 +0,0 @@
# GNOME shortcut name
NAME="Premiere Pro 2024"
# Used for descriptions and window class
FULL_NAME="Adobe Premiere Pro 2024"
# The executable inside windows
WIN_EXECUTABLE="C:\Program Files\Adobe\Adobe Premiere Pro 2024\Adobe Premiere Pro.exe"
# GNOME categories
CATEGORIES="WinApps;Adobe"
# GNOME mimetypes
MIME_TYPES="image/vnd.adobe.premierepro.project;"
# System Icon
ICON="AdobePremierePro"

View File

@@ -50,11 +50,9 @@ RDP_SCALE=100
AUTOPAUSE="off"
AUTOPAUSE_TIME="300"
DEBUG="true"
BOOT_TIMEOUT=120
# OTHER
FREERDP_PID=-1
NEEDED_BOOT=false
### TRAPS ###
# Catch SIGINT (CTRL+C) to call 'waCleanUp'.
@@ -107,15 +105,15 @@ Please run:
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows failed to resume."
;;
"$EC_FAIL_DESTROY")
dprint "ERROR: FAILED TO FORCE STOP WINDOWS. EXITING."
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Failed to forcibly stop Windows."
dprint "ERROR: WINDOWS FAILED TO IMMEDIATELY UNGRACEFULLY SHUT DOWN WINDOWS. EXITING."
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Failed to ungracefully shut down Windows."
;;
"$EC_SD_TIMEOUT")
dprint "ERROR: WINDOWS TOOK TOO LONG TO SHUT DOWN. EXITING."
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows took too long to shut down."
;;
"$EC_DIE_TIMEOUT")
dprint "ERROR: WINDOWS TOOK TOO LONG TO DIE. EXITING."
dprint "ERROR: WINDOWS TOOK TOO LONG TO SHUT DOWN. EXITING."
notify-send --expire-time=8000 --icon="dialog-error" --app-name="WinApps" --urgency="low" "WinApps" "Windows took too long to die."
;;
"$EC_RESTART_TIMEOUT")
@@ -158,7 +156,7 @@ function dprint() {
[ "$DEBUG" = "true" ] && echo "[$(date)-$RUNID] $1" >>"$LOG_PATH"
}
# Name: 'waFixRemovableMedia'
# Role: If REMOVABLE_MEDIA is empty, default to /run/media (udisks default) and show a warning.
# Role: If user left REMOVABLE_MEDIA config null,fallback to /run/media for udisks defaults ,warning.
function waFixRemovableMedia() {
if [ -z "$REMOVABLE_MEDIA" ]; then
REMOVABLE_MEDIA="/run/media" # Default for udisks
@@ -301,10 +299,9 @@ function waGetFreeRDPCommand() {
function waCheckGroupMembership() {
# Identify groups the current user belongs to.
# shellcheck disable=SC2155 # Silence warnings regarding masking return values through simultaneous declaration and assignment.
local USER_GROUPS=$(id -nG "$(whoami)")
local USER_GROUPS=$(groups "$(whoami)")
if ! echo "$USER_GROUPS" | grep -qE '\b(libvirt|libvirtd)\b' || \
! echo "$USER_GROUPS" | grep -qE '\bkvm\b'; then
if ! (echo "$USER_GROUPS" | grep -q -E "\blibvirt\b") || ! (echo "$USER_GROUPS" | grep -q -E "\bkvm\b"); then
waThrowExit "$EC_NOT_IN_GROUP"
fi
}
@@ -322,39 +319,37 @@ function waCheckVMRunning() {
# Attempt to run the Windows virtual machine.
# Note: States 'running' and 'idle' do not require intervention, and are not checked for.
if (virsh list --all --name | grep -Fxq -- "$VM_NAME"); then
if (virsh list --state-shutoff --name | grep -Fxq -- "$VM_NAME"); then
if (virsh list --all --name | xargs | grep -wq "$VM_NAME"); then
if (virsh list --state-shutoff --name | xargs | grep -wq "$VM_NAME"); then
dprint "WINDOWS SHUT OFF. BOOTING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Booting Windows."
NEEDED_BOOT=true
virsh start "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_START
if (virsh list --state-paused --name | grep -Fxq -- "$VM_NAME"); then
if (virsh list --state-paused --name | xargs | grep -wq "$VM_NAME"); then
dprint "WINDOWS PAUSED. RESUMING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Resuming Windows."
virsh resume "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_RESUME
fi
elif (virsh list --state-paused --name | grep -Fxq -- "$VM_NAME"); then
elif (virsh list --state-paused --name | xargs | grep -wq "$VM_NAME"); then
dprint "WINDOWS PAUSED. RESUMING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Resuming Windows."
virsh resume "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_RESUME
elif (virsh list --state-other --name | grep -Fxq -- "$VM_NAME"); then
if (virsh domstate "$VM_NAME" | grep -Fxq "in shutdown"); then
elif (virsh list --state-other --name | xargs | grep -wq "$VM_NAME"); then
if (virsh domstate "$VM_NAME" | xargs | grep -wq "shutdown"); then
dprint "WINDOWS SHUTTING DOWN. WAITING."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Windows is currently shutting down.\nIt will automatically restart once the shutdown process is complete."
EXIT_STATUS=$EC_SD_TIMEOUT
while (( TIME_ELAPSED < TIME_LIMIT )); do
if (virsh list --state-shutoff --name | grep -Fxq -- "$VM_NAME"); then
if (virsh list --state-shutoff --name | xargs | grep -wq "$VM_NAME"); then
EXIT_STATUS=0
dprint "WINDOWS SHUT OFF. BOOTING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Booting Windows."
virsh start "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_START
NEEDED_BOOT=true
break
fi
sleep $TIME_INTERVAL
TIME_ELAPSED=$((TIME_ELAPSED + TIME_INTERVAL))
done
elif (virsh domstate "$VM_NAME" | grep -Fxq "crashed"); then
elif (virsh domstate "$VM_NAME" | xargs | grep -wq "crashed"); then
dprint "WINDOWS CRASHED. DESTROYING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Windows experienced an unexpected crash.\nAttempting to restart Windows."
virsh destroy "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_DESTROY
@@ -362,14 +357,13 @@ function waCheckVMRunning() {
dprint "WINDOWS DESTROYED. BOOTING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Booting Windows."
virsh start "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_START
NEEDED_BOOT=true
fi
elif (virsh domstate "$VM_NAME" | grep -Fxq "dying"); then
elif (virsh domstate "$VM_NAME" | xargs | grep -wq "dying"); then
dprint "WINDOWS DYING. WAITING."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Windows is currently shutting down unexpectedly.\nIt will try to restart once the shutdown process finishes."
EXIT_STATUS=$EC_DIE_TIMEOUT
while (( TIME_ELAPSED < TIME_LIMIT )); do
if (virsh domstate "$VM_NAME" | grep -Fxq "crashed"); then
if (virsh domstate "$VM_NAME" | xargs | grep -wq "crashed"); then
EXIT_STATUS=0
dprint "WINDOWS CRASHED. DESTROYING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Windows experienced an unexpected crash.\nAttempting to restart Windows."
@@ -378,21 +372,19 @@ function waCheckVMRunning() {
dprint "WINDOWS DESTROYED. BOOTING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Booting Windows."
virsh start "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_START
NEEDED_BOOT=true
fi
break
elif (virsh list --state-shutoff --name | grep -Fxq -- "$VM_NAME"); then
elif (virsh list --state-shutoff --name | xargs | grep -wq "$VM_NAME"); then
EXIT_STATUS=0
dprint "WINDOWS SHUT OFF. BOOTING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Booting Windows."
virsh start "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_START
NEEDED_BOOT=true
break
fi
sleep $TIME_INTERVAL
TIME_ELAPSED=$((TIME_ELAPSED + TIME_INTERVAL))
done
elif (virsh domstate "$VM_NAME" | grep -Fxq "pmsuspended" ); then
elif (virsh domstate "$VM_NAME" | xargs | grep -wq "pmsuspended" ); then
dprint "WINDOWS SUSPENDED. RESUMING WINDOWS."
virsh resume "$VM_NAME" &>/dev/null || EXIT_STATUS=$EC_FAIL_RESUME
fi
@@ -403,45 +395,6 @@ function waCheckVMRunning() {
# Handle non-zero exit statuses.
[ "$EXIT_STATUS" -ne 0 ] && waThrowExit "$EXIT_STATUS"
# Wait for VM to be fully ready
if [[ "$NEEDED_BOOT" == "true" ]]; then
dprint "WAITING FOR VM TO BE FULLY READY..."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Waiting for Windows to be ready..."
TIME_ELAPSED=0
while (( TIME_ELAPSED < BOOT_TIMEOUT )); do
# Check if VM is running
if (virsh list --state-running --name | grep -Fxq -- "$VM_NAME"); then
# Try to connect to RDP port to verify it's ready
if timeout 1 bash -c ">/dev/tcp/$RDP_IP/$RDP_PORT" 2>/dev/null; then
dprint "VM IS READY"
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Windows is ready."
# Add a delay after Windows is ready
if [ "$NEEDED_BOOT" = "true" ]; then
sleep 10
fi
break
fi
fi
sleep 5
TIME_ELAPSED=$((TIME_ELAPSED + 5))
# Show progress every 30 seconds
if (( TIME_ELAPSED % 30 == 0 )); then
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Still waiting for Windows to be ready... ($TIME_ELAPSED seconds elapsed)"
fi
done
# If we timed out waiting for the VM
if (( TIME_ELAPSED >= BOOT_TIMEOUT )); then
dprint "TIMEOUT WAITING FOR VM TO BE READY"
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Timeout waiting for Windows to be ready. Please try again."
waThrowExit $EC_FAIL_START
fi
fi
}
# Name: 'waCheckContainerRunning'
@@ -473,7 +426,6 @@ function waCheckContainerRunning() {
dprint "WINDOWS CREATED. BOOTING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Booting Windows."
$COMPOSE_COMMAND --file "$COMPOSE_PATH" start &>/dev/null
NEEDED_BOOT=true
;;
"restarting")
dprint "WINDOWS RESTARTING. WAITING."
@@ -484,7 +436,6 @@ function waCheckContainerRunning() {
EXIT_STATUS=0
dprint "WINDOWS RESTARTED."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Restarted Windows."
NEEDED_BOOT=true
break
fi
sleep $TIME_INTERVAL
@@ -500,13 +451,11 @@ function waCheckContainerRunning() {
dprint "WINDOWS SHUT OFF. BOOTING WINDOWS."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Booting Windows."
$COMPOSE_COMMAND --file "$COMPOSE_PATH" start &>/dev/null
NEEDED_BOOT=true
;;
"dead")
dprint "WINDOWS DEAD. RECREATING WINDOWS CONTAINER."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Re-creating and booting Windows."
$COMPOSE_COMMAND --file "$COMPOSE_PATH" down &>/dev/null && $COMPOSE_COMMAND --file "$COMPOSE_PATH" up -d &>/dev/null
NEEDED_BOOT=true
;;
"unknown")
EXIT_STATUS=$EC_UNKNOWN
@@ -515,45 +464,6 @@ function waCheckContainerRunning() {
# Handle non-zero exit statuses.
[ "$EXIT_STATUS" -ne 0 ] && waThrowExit "$EXIT_STATUS"
# Wait for container to be fully ready
if [[ "$CONTAINER_STATE" == "created" || "$CONTAINER_STATE" == "exited" || "$CONTAINER_STATE" == "dead" || "$CONTAINER_STATE" == "restarting" ]]; then
dprint "WAITING FOR CONTAINER TO BE FULLY READY..."
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Waiting for Windows to be ready..."
TIME_ELAPSED=0
while (( TIME_ELAPSED < BOOT_TIMEOUT )); do
# Check if container is running
if [[ $("$WAFLAVOR" inspect --format='{{.State.Status}}' "$CONTAINER_NAME") == "running" ]]; then
# Try to connect to RDP port to verify it's ready
if timeout 1 bash -c ">/dev/tcp/$RDP_IP/$RDP_PORT" 2>/dev/null; then
dprint "CONTAINER IS READY"
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Windows is ready."
# Add a delay after Windows is ready
if [ "$NEEDED_BOOT" = "true" ]; then
sleep 10
fi
break
fi
fi
sleep 5
TIME_ELAPSED=$((TIME_ELAPSED + 5))
# Show progress every 30 seconds
if (( TIME_ELAPSED % 30 == 0 )); then
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Still waiting for Windows to be ready... ($TIME_ELAPSED seconds elapsed)"
fi
done
# If we timed out waiting for the container
if (( TIME_ELAPSED >= BOOT_TIMEOUT )); then
dprint "TIMEOUT WAITING FOR CONTAINER TO BE READY"
notify-send --expire-time=4000 --icon="dialog-info" --app-name="WinApps" --urgency="low" "WinApps" "Timeout waiting for Windows to be ready. Please try again."
waThrowExit $EC_FAIL_START
fi
fi
}
# Name: 'waCheckPortOpen'
@@ -665,7 +575,7 @@ function waRunCommand() {
# Convert path from UNIX to Windows style.
FILE_PATH=$(echo "$2" | sed \
-e 's|^'"${HOME}"'|\\\\tsclient\\home|' \
-e 's|^'"${REMOVABLE_MEDIA}"'|\\\\tsclient\\media|' \
-e 's|^\('"${REMOVABLE_MEDIA//|/\\|}"'\)/[^/]*|\\\\tsclient\\media|' \
-e 's|/|\\|g')
dprint "UNIX_FILE_PATH: ${2}"
dprint "WINDOWS_FILE_PATH: ${FILE_PATH}"
@@ -678,7 +588,7 @@ function waRunCommand() {
+auto-reconnect \
/drive:media,"$REMOVABLE_MEDIA" \
/wm-class:"$FULL_NAME" \
/app:program:"$WIN_EXECUTABLE",icon:"$ICON",name:"$FULL_NAME",cmd:\""$FILE_PATH"\" \
/app:program:"$WIN_EXECUTABLE",icon:"$ICON",name:$"FULL_NAME",cmd:\""$FILE_PATH"\" \
/v:"$RDP_IP" &>/dev/null &
# Capture the process ID.
@@ -707,7 +617,7 @@ function waCheckIdle() {
local SUSPEND_WINDOWS=0
# Prevent 'autopause' functionality with unsupported Windows backends.
if [ "$WAFLAVOR" != "manual" ]; then
if [ "$WAFLAVOR" != "manual" ] && [ "$WAFLAVOR" != "docker" ]; then
# Check if there are no WinApps-related FreeRDP processes running.
if ! ls "$APPDATA_PATH"/FreeRDP_Process_*.cproc &>/dev/null; then
SUSPEND_WINDOWS=1

View File

@@ -14,8 +14,8 @@ services:
# Version of Windows to configure. For valid options, visit:
# https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-select-the-windows-version
# https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-install-a-custom-image
VERSION: "11"
RAM_SIZE: "4G" # RAM allocated to the Windows VM.
VERSION: "10"
RAM_SIZE: "8G" # RAM allocated to the Windows VM.
CPU_CORES: "4" # CPU cores allocated to the Windows VM.
DISK_SIZE: "64G" # Size of the primary hard disk.
# DISK2_SIZE: "32G" # Uncomment to add an additional hard disk to the Windows VM. Ensure it is mounted as a volume below.
@@ -44,6 +44,6 @@ services:
# NOTE: 'disk1' will be mounted as the main drive. THIS DISK WILL BE FORMATTED BY DOCKER.
# All following disks (disk2, ...) WILL NOT BE FORMATTED.
# - /dev/disk/by-id/<id>:/disk1
# - /dev/disk/by-id/<id>:/disk2
# - dev/disk/by-id/<id>:/disk2
# group_add: # uncomment this line and the next one for using rootless podman containers
# - keep-groups # to make /dev/kvm work with podman. needs "crun" installed, "runc" will not work! Add your user to the 'kvm' group or another that can access /dev/kvm.

View File

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 184 KiB

View File

Before

Width:  |  Height:  |  Size: 5.4 MiB

After

Width:  |  Height:  |  Size: 5.4 MiB

View File

Before

Width:  |  Height:  |  Size: 9.6 MiB

After

Width:  |  Height:  |  Size: 9.6 MiB

View File

@@ -13,8 +13,8 @@ Although WinApps supports using `QEMU+KVM+libvirt` as a backend for running Wind
> [!IMPORTANT]
> The iptables kernel module must be loaded for folder sharing with the host to work.
> Check that the output of `lsmod | grep ip_tables` and `lsmod | grep iptable_nat` is non-empty.
> If the output of one of the previous commands is empty, run `echo -e "ip_tables\niptable_nat" | sudo tee /etc/modules-load.d/iptables.conf` and reboot.
> Check that the output of `lsmod | grep ip_tables` and `lsmod | grep iptable_nat` is non empty.
> If the output of one of the previous command is empty, run `echo -e "ip_tables\niptable_nat" | sudo tee /etc/modules-load.d/iptables.conf` and reboot.
## `Docker`
### Installation

View File

@@ -1,8 +1,6 @@
# Creating a `libvirt` Windows VM
This method of configuring a Windows virtual machine for use with WinApps is significantly more involved than utilising `Docker` or `Podman`. Nevertheless, expert users may prefer this method due to its greater flexibility and wider range of customisation options (e.g. GPU passthrough).
<details>
<summary><strong>Understanding The Virtualisation Stack</strong></summary>
## Understanding The Virtualisation Stack
This method of configuring a Windows virtual machine for use with WinApps is significantly more involved than utilising `Docker` or `Podman`. Nevertheless, expert users may prefer this method due to its greater flexibility and wider range of customisation options.
Before beginning, it is important to have a basic understanding of the various components involved in this particular method.
@@ -17,8 +15,6 @@ Together, these components form a powerful and flexible virtualization stack, wi
<img src="./libvirt_images/Virtualisation_Stack.svg" width="500px"/>
</p>
</details>
## Prerequisites
1. Ensure your CPU supports hardware virtualisation extensions by [reading this article](https://wiki.archlinux.org/title/KVM).
@@ -50,8 +46,6 @@ Together, these components form a powerful and flexible virtualization stack, wi
sudo reboot # Reboot the system to ensure the user is added to the relevant groups.
```
Note: On NixOS, the group name for libvirt is `libvirtd` and not `libvirt`. In addition, user and group management on NixOS is handled through the Nix configuration files and not via traditional tools like `usermod`. Please see "Adding User to a group" on [this NixOS Wiki page](https://wiki.nixos.org/wiki/User_management).
Note: Due to a known bug in `rpm-ostree`, which affects various distributions such as Silverblue, Bazzite, Bluefin, Kinoite, Aurora, UCore, and others, the commands provided earlier may not properly add your user to all required groups. If the `groups $USER` command does not show your user as being part of the necessary groups, you'll need to manually add these groups to `/etc/group` if they are present in `/usr/lib/group`.
To resolve this:
@@ -150,7 +144,113 @@ Together, these components form a powerful and flexible virtualization stack, wi
<img src="./libvirt_images/08.png" width="700px"/>
</p>
10. Navigate to the `XML` tab, and edit the `<clock>` section to disable all timers except for the hypervclock, thereby drastically reducing idle CPU usage. Once changed, click `Apply`.
10. (Optional) Assign specific physical CPU cores to the virtual machine. This can improve performance by reducing context switching and ensuring that the virtual machine's workload consistently uses the same cores, leading to better CPU cache utilisation.
1. Run `lscpu -e` to determine which L1, L2 and L3 caches are associated with which CPU cores.
Example 1 (Intel 11th Gen Core i7-1185G7):
```
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 4800.0000 400.0000
1 0 0 1 1:1:1:0 yes 4800.0000 400.0000
2 0 0 2 2:2:2:0 yes 4800.0000 400.0000
3 0 0 3 3:3:3:0 yes 4800.0000 400.0000
4 0 0 0 0:0:0:0 yes 4800.0000 400.0000
5 0 0 1 1:1:1:0 yes 4800.0000 400.0000
6 0 0 2 2:2:2:0 yes 4800.0000 400.0000
7 0 0 3 3:3:3:0 yes 4800.0000 400.0000
```
- C<sub>0</sub> = T<sub>0</sub>+T<sub>4</sub> &rarr; L1<sub>0</sub>+L2<sub>0</sub>+L3<sub>0</sub>
- C<sub>1</sub> = T<sub>1</sub>+T<sub>5</sub> &rarr; L1<sub>1</sub>+L2<sub>1</sub>+L3<sub>0</sub>
- C<sub>2</sub> = T<sub>2</sub>+T<sub>6</sub> &rarr; L1<sub>2</sub>+L2<sub>2</sub>+L3<sub>0</sub>
- C<sub>3</sub> = T<sub>3</sub>+T<sub>7</sub> &rarr; L1<sub>3</sub>+L2<sub>3</sub>+L3<sub>0</sub>
Example 2 (AMD Ryzen 5 1600):
```
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 3800.0000 1550.0000
1 0 0 0 0:0:0:0 yes 3800.0000 1550.0000
2 0 0 1 1:1:1:0 yes 3800.0000 1550.0000
3 0 0 1 1:1:1:0 yes 3800.0000 1550.0000
4 0 0 2 2:2:2:0 yes 3800.0000 1550.0000
5 0 0 2 2:2:2:0 yes 3800.0000 1550.0000
6 0 0 3 3:3:3:1 yes 3800.0000 1550.0000
7 0 0 3 3:3:3:1 yes 3800.0000 1550.0000
8 0 0 4 4:4:4:1 yes 3800.0000 1550.0000
9 0 0 4 4:4:4:1 yes 3800.0000 1550.0000
10 0 0 5 5:5:5:1 yes 3800.0000 1550.0000
11 0 0 5 5:5:5:1 yes 3800.0000 1550.0000
```
- C<sub>0</sub> = T<sub>0</sub>+T<sub>1</sub> &rarr; L1<sub>0</sub>+L2<sub>0</sub>+L3<sub>0</sub>
- C<sub>1</sub> = T<sub>2</sub>+T<sub>3</sub> &rarr; L1<sub>1</sub>+L2<sub>1</sub>+L3<sub>0</sub>
- C<sub>2</sub> = T<sub>4</sub>+T<sub>5</sub> &rarr; L1<sub>2</sub>+L2<sub>2</sub>+L3<sub>0</sub>
- C<sub>3</sub> = T<sub>6</sub>+T<sub>7</sub> &rarr; L1<sub>3</sub>+L2<sub>3</sub>+L3<sub>1</sub>
- C<sub>4</sub> = T<sub>8</sub>+T<sub>9</sub> &rarr; L1<sub>4</sub>+L2<sub>4</sub>+L3<sub>1</sub>
- C<sub>5</sub> = T<sub>10</sub>+T<sub>11</sub> &rarr; L1<sub>5</sub>+L2<sub>5</sub>+L3<sub>1</sub>
2. Select which CPU cores to 'pin'. You should aim to select a combination of CPU cores that minimises sharing of caches between Windows and GNU/Linux.
Example 1:
- CPU cores share the same singular L3 cache, so this cannot be optimised.
- CPU cores utilise different L1 and L2 caches, so isolatng corresponding thread pairs will help improve performance.
- Thus, if limiting the virtual machine to a maximum of 4 threads, there are 10 possible optimal configurations:
- T<sub>0</sub>+T<sub>4</sub>
- T<sub>1</sub>+T<sub>5</sub>
- T<sub>2</sub>+T<sub>6</sub>
- T<sub>3</sub>+T<sub>7</sub>
- T<sub>0</sub>+T<sub>4</sub>+T<sub>1</sub>+T<sub>5</sub>
- T<sub>0</sub>+T<sub>4</sub>+T<sub>2</sub>+T<sub>6</sub>
- T<sub>0</sub>+T<sub>4</sub>+T<sub>3</sub>+T<sub>7</sub>
- T<sub>1</sub>+T<sub>5</sub>+T<sub>2</sub>+T<sub>6</sub>
- T<sub>1</sub>+T<sub>5</sub>+T<sub>3</sub>+T<sub>7</sub>
- T<sub>2</sub>+T<sub>6</sub>+T<sub>3</sub>+T<sub>7</sub>
Example 2:
- Threads 0-5 utilise one L3 cache whereas threads 6-11 utilise a different L3 cache. Thus, one of these two sets of threads should be pinned to the virtual machine.
- Pinning and isolating fewer than these (e.g. threads 8-11) would result in the host system making use of the L3 cache in threads 6 and 7, resulting in cache evictions and therefore bad performance.
- Thus, there are only two possible optimal configurations:
- T<sub>0</sub>+T<sub>1</sub>+T<sub>2</sub>+T<sub>3</sub>+T<sub>4</sub>+T<sub>5</sub>
- T<sub>6</sub>+T<sub>7</sub>+T<sub>8</sub>+T<sub>9</sub>+T<sub>10</sub>+T<sub>11</sub>
3. Prepare and add/modify the following to the `<vcpu>`, `<cputune>` and `<cpu>` sections, adjusting the values to match your selected threads.
Example 1: The following selects 'T<sub>2</sub>+T<sub>6</sub>+T<sub>3</sub>+T<sub>7</sub>'.
```xml
<vcpu placement="static">4</vcpu>
<cputune>
<vcpupin vcpu="0" cpuset="2"/>
<vcpupin vcpu="1" cpuset="6"/>
<vcpupin vcpu="2" cpuset="3"/>
<vcpupin vcpu="3" cpuset="7"/>
</cputune>
<cpu mode="host-passthrough" check="none" migratable="on">
<topology sockets="1" dies="1" clusters="1" cores="2" threads="2"/>
</cpu>
```
Example 2: The following selects 'T<sub>6</sub>+T<sub>7</sub>+T<sub>8</sub>+T<sub>9</sub>+T<sub>10</sub>+T<sub>11</sub>'.
```xml
<vcpu placement="static">6</vcpu>
<cputune>
<vcpupin vcpu="0" cpuset="6"/>
<vcpupin vcpu="1" cpuset="7"/>
<vcpupin vcpu="2" cpuset="8"/>
<vcpupin vcpu="3" cpuset="9"/>
<vcpupin vcpu="4" cpuset="10"/>
<vcpupin vcpu="5" cpuset="11"/>
</cputune>
<cpu mode="host-passthrough" check="none" migratable="on">
<topology sockets="1" dies="1" clusters="1" cores="3" threads="2"/>
</cpu>
```
> [!NOTE]
> More information on configuring CPU pinning can be found in [this excellent guide](https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#CPU_pinning).
11. Navigate to the `XML` tab, and edit the `<clock>` section to disable all timers except for the hypervclock, thereby drastically reducing idle CPU usage. Once changed, click `Apply`.
```xml
<clock offset='localtime'>
<timer name='rtc' present='no' tickpolicy='catchup'/>
@@ -165,7 +265,7 @@ Together, these components form a powerful and flexible virtualization stack, wi
<img src="./libvirt_images/09.png" width="700px"/>
</p>
11. Enable Hyper-V enlightenments by adding the following to the `<hyperv>` section. Once changed, click `Apply`.
12. Enable Hyper-V enlightenments by adding the following to the `<hyperv>` section. Once changed, click `Apply`.
```xml
<hyperv>
@@ -188,7 +288,7 @@ Together, these components form a powerful and flexible virtualization stack, wi
> [!NOTE]
> Hyper-V enlightenments make Windows (and other Hyper-V guests) think they are running on top of a Hyper-V compatible hypervisor. This enables use of Hyper-V specific features, allowing `KVM` to implement paravirtualised interfaces for improved virtual machine performance.
12. Add the following XML snippet within the `<devices>` section to enable the GNU/Linux host to communicate with Windows using `QEMU Guest Agent`.
13. Add the following XML snippet within the `<devices>` section to enable the GNU/Linux host to communicate with Windows using `QEMU Guest Agent`.
```xml
<channel type='unix'>
@@ -198,31 +298,31 @@ Together, these components form a powerful and flexible virtualization stack, wi
</channel>
```
13. In the 'Memory' section, set the `Current allocation` to the minimum amount of memory you want the virtual machine to use, with a recommended value of `1024MB`.
14. In the 'Memory' section, set the `Current allocation` to the minimum amount of memory you want the virtual machine to use, with a recommended value of `1024MB`.
<p align="center">
<img src="./libvirt_images/10.png" width="500px"/>
</p>
14. (Optional) Under `Boot Options`, enable `Start virtual machine on host boot up`.
15. (Optional) Under `Boot Options`, enable `Start virtual machine on host boot up`.
<p align="center">
<img src="./libvirt_images/11.png" width="500px"/>
</p>
15. Navigate to 'SATA Disk 1' and set the `Disk bus` type to `VirtIO`. This allows disk access to be paravirtualised, improving virtual machine performance.
16. Navigate to 'SATA Disk 1' and set the `Disk bus` type to `VirtIO`. This allows disk access to be paravirtualised, improving virtual machine performance.
<p align="center">
<img src="./libvirt_images/12.png" width="500px"/>
</p>
16. Navigate to 'NIC' and set the `Device model` type to `virtio` to enable paravirtualised networking.
17. Navigate to 'NIC' and set the `Device model` type to `virtio` to enable paravirtualised networking.
<p align="center">
<img src="./libvirt_images/13.png" width="500px"/>
</p>
17. Click the `Add Hardware` button in the lower left, and choose `Storage`. For `Device type`, select `CDROM device` and choose the VirtIO driver `.ISO` you downloaded earlier. Click `Finish` to add the new CD-ROM device.
18. Click the `Add Hardware` button in the lower left, and choose `Storage`. For `Device type`, select `CDROM device` and choose the VirtIO driver `.ISO` you downloaded earlier. Click `Finish` to add the new CD-ROM device.
> [!IMPORTANT]
> If you skip this step, the Windows installer will fail to recognise and list the virtual hard drive you created earlier.
@@ -231,121 +331,14 @@ Together, these components form a powerful and flexible virtualization stack, wi
<img src="./libvirt_images/14.png" width="500px"/>
</p>
<details>
<summary><strong>(Optional) Assign Specific Physical CPU Cores</strong></summary>
19. Click `Begin Installation` in the top left.
Assigning specific physical CPU cores to the virtual machine can improve performance by reducing context switching and ensuring that the virtual machine's workload consistently uses the same cores, leading to better CPU cache utilisation. This is an optional step.
1. Run `lscpu -e` to determine which L1, L2 and L3 caches are associated with which CPU cores.
Example 1 (Intel 11th Gen Core i7-1185G7):
```
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 4800.0000 400.0000
1 0 0 1 1:1:1:0 yes 4800.0000 400.0000
2 0 0 2 2:2:2:0 yes 4800.0000 400.0000
3 0 0 3 3:3:3:0 yes 4800.0000 400.0000
4 0 0 0 0:0:0:0 yes 4800.0000 400.0000
5 0 0 1 1:1:1:0 yes 4800.0000 400.0000
6 0 0 2 2:2:2:0 yes 4800.0000 400.0000
7 0 0 3 3:3:3:0 yes 4800.0000 400.0000
```
- C<sub>0</sub> = T<sub>0</sub>+T<sub>4</sub> &rarr; L1<sub>0</sub>+L2<sub>0</sub>+L3<sub>0</sub>
- C<sub>1</sub> = T<sub>1</sub>+T<sub>5</sub> &rarr; L1<sub>1</sub>+L2<sub>1</sub>+L3<sub>0</sub>
- C<sub>2</sub> = T<sub>2</sub>+T<sub>6</sub> &rarr; L1<sub>2</sub>+L2<sub>2</sub>+L3<sub>0</sub>
- C<sub>3</sub> = T<sub>3</sub>+T<sub>7</sub> &rarr; L1<sub>3</sub>+L2<sub>3</sub>+L3<sub>0</sub>
Example 2 (AMD Ryzen 5 1600):
```
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ
0 0 0 0 0:0:0:0 yes 3800.0000 1550.0000
1 0 0 0 0:0:0:0 yes 3800.0000 1550.0000
2 0 0 1 1:1:1:0 yes 3800.0000 1550.0000
3 0 0 1 1:1:1:0 yes 3800.0000 1550.0000
4 0 0 2 2:2:2:0 yes 3800.0000 1550.0000
5 0 0 2 2:2:2:0 yes 3800.0000 1550.0000
6 0 0 3 3:3:3:1 yes 3800.0000 1550.0000
7 0 0 3 3:3:3:1 yes 3800.0000 1550.0000
8 0 0 4 4:4:4:1 yes 3800.0000 1550.0000
9 0 0 4 4:4:4:1 yes 3800.0000 1550.0000
10 0 0 5 5:5:5:1 yes 3800.0000 1550.0000
11 0 0 5 5:5:5:1 yes 3800.0000 1550.0000
```
- C<sub>0</sub> = T<sub>0</sub>+T<sub>1</sub> &rarr; L1<sub>0</sub>+L2<sub>0</sub>+L3<sub>0</sub>
- C<sub>1</sub> = T<sub>2</sub>+T<sub>3</sub> &rarr; L1<sub>1</sub>+L2<sub>1</sub>+L3<sub>0</sub>
- C<sub>2</sub> = T<sub>4</sub>+T<sub>5</sub> &rarr; L1<sub>2</sub>+L2<sub>2</sub>+L3<sub>0</sub>
- C<sub>3</sub> = T<sub>6</sub>+T<sub>7</sub> &rarr; L1<sub>3</sub>+L2<sub>3</sub>+L3<sub>1</sub>
- C<sub>4</sub> = T<sub>8</sub>+T<sub>9</sub> &rarr; L1<sub>4</sub>+L2<sub>4</sub>+L3<sub>1</sub>
- C<sub>5</sub> = T<sub>10</sub>+T<sub>11</sub> &rarr; L1<sub>5</sub>+L2<sub>5</sub>+L3<sub>1</sub>
2. Select which CPU cores to 'pin'. You should aim to select a combination of CPU cores that minimises sharing of caches between Windows and GNU/Linux.
Example 1:
- CPU cores share the same singular L3 cache, so this cannot be optimised.
- CPU cores utilise different L1 and L2 caches, so isolating corresponding thread pairs will help improve performance.
- Thus, if limiting the virtual machine to a maximum of 4 threads, there are 10 possible optimal configurations:
- T<sub>0</sub>+T<sub>4</sub>
- T<sub>1</sub>+T<sub>5</sub>
- T<sub>2</sub>+T<sub>6</sub>
- T<sub>3</sub>+T<sub>7</sub>
- T<sub>0</sub>+T<sub>4</sub>+T<sub>1</sub>+T<sub>5</sub>
- T<sub>0</sub>+T<sub>4</sub>+T<sub>2</sub>+T<sub>6</sub>
- T<sub>0</sub>+T<sub>4</sub>+T<sub>3</sub>+T<sub>7</sub>
- T<sub>1</sub>+T<sub>5</sub>+T<sub>2</sub>+T<sub>6</sub>
- T<sub>1</sub>+T<sub>5</sub>+T<sub>3</sub>+T<sub>7</sub>
- T<sub>2</sub>+T<sub>6</sub>+T<sub>3</sub>+T<sub>7</sub>
Example 2:
- Threads 0-5 utilise one L3 cache whereas threads 6-11 utilise a different L3 cache. Thus, one of these two sets of threads should be pinned to the virtual machine.
- Pinning and isolating fewer than these (e.g. threads 8-11) would result in the host system making use of the L3 cache in threads 6 and 7, resulting in cache evictions and therefore bad performance.
- Thus, there are only two possible optimal configurations:
- T<sub>0</sub>+T<sub>1</sub>+T<sub>2</sub>+T<sub>3</sub>+T<sub>4</sub>+T<sub>5</sub>
- T<sub>6</sub>+T<sub>7</sub>+T<sub>8</sub>+T<sub>9</sub>+T<sub>10</sub>+T<sub>11</sub>
3. Prepare and add/modify the following to the `<vcpu>`, `<cputune>` and `<cpu>` sections, adjusting the values to match your selected threads.
Example 1: The following selects 'T<sub>2</sub>+T<sub>6</sub>+T<sub>3</sub>+T<sub>7</sub>'.
```xml
<vcpu placement="static">4</vcpu>
<cputune>
<vcpupin vcpu="0" cpuset="2"/>
<vcpupin vcpu="1" cpuset="6"/>
<vcpupin vcpu="2" cpuset="3"/>
<vcpupin vcpu="3" cpuset="7"/>
</cputune>
<cpu mode="host-passthrough" check="none" migratable="on">
<topology sockets="1" dies="1" clusters="1" cores="2" threads="2"/>
</cpu>
```
Example 2: The following selects 'T<sub>6</sub>+T<sub>7</sub>+T<sub>8</sub>+T<sub>9</sub>+T<sub>10</sub>+T<sub>11</sub>'.
```xml
<vcpu placement="static">6</vcpu>
<cputune>
<vcpupin vcpu="0" cpuset="6"/>
<vcpupin vcpu="1" cpuset="7"/>
<vcpupin vcpu="2" cpuset="8"/>
<vcpupin vcpu="3" cpuset="9"/>
<vcpupin vcpu="4" cpuset="10"/>
<vcpupin vcpu="5" cpuset="11"/>
</cputune>
<cpu mode="host-passthrough" check="none" migratable="on">
<topology sockets="1" dies="1" clusters="1" cores="3" threads="2"/>
</cpu>
```
> [!NOTE]
> More information on configuring CPU pinning can be found in [this excellent guide](https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#CPU_pinning).
</details>
<p align="center">
<img src="./libvirt_images/15.png" width="700px"/>
</p>
### Example `.XML` File
Below is an example `.XML` file that describes a Windows 11 virtual machine.
<details>
<summary><strong>Example .XML File</strong></summary>
```xml
<domain type="kvm">
@@ -568,21 +561,14 @@ Below is an example `.XML` file that describes a Windows 11 virtual machine.
</domain>
```
</details>
## Install Windows
Click `Begin Installation` in the top left.
<p align="center">
<img src="./libvirt_images/15.png" width="700px"/>
</p>
Install Windows as you would on any other machine.
<p align="center">
<img src="./libvirt_images/16.png" width="700px"/>
</p>
Once you get to the point of selecting the location for installation, you will see there are no disks available. This is because the `VirtIO driver` needs to be specified manually.
1. Select `Load driver`.
<p align="center">
@@ -627,17 +613,19 @@ Following the above, choose to "Continue with limited setup".
</p>
## Final Configuration Steps
Open `File Explorer` and navigate to the drive where the "virtio-win" `.iso` is mounted. Run `virtio-win-guest-tools.exe` to install all necessary drivers as well as `QEMU Guest Agent`. Leave everything as default and click `Next` through the installer.
Open `File Explorer` and navigate to the drive where the `VirtIO` driver `.ISO` is mounted. Run `virtio-win-gt-x64.exe` to launch the `VirtIO` driver installer.
<p align="center">
<img src="./libvirt_images/24.png" width="700px"/>
</p>
Leave everything as default and click `Next` through the installer. This will install all required device drivers as well as the 'Memory Ballooning' service.
<p align="center">
<img src="./libvirt_images/25.png" width="700px"/>
</p>
Confirm `QEMU Guest Agent` was successfully installed by running `Get-Service QEMU-GA` within a PowerShell window. The output should resemble:
Next, install the `QEMU Guest Agent` within Windows. This agent allows the GNU/Linux host to request a graceful shutdown of the Windows system. To do this, either run `virtio-win-guest-tools.exe` or `guest-agent\qemu-ga-x86_64.msi`. You can confirm the guest agent was successfully installed by running `Get-Service QEMU-GA` within a PowerShell window. The output should resemble:
```
Status Name DisplayName
@@ -664,7 +652,7 @@ You can then test whether the host GNU/Linux system can communicate with Windows
}
```
Next, you will need to make some registry changes to enable RDP Applications to run on the system. Start by downloading the [RDPApps.reg](../oem/RDPApps.reg) file, right-clicking on the `Raw` button, and clicking on `Save target as`. Repeat the same thing for the [install.bat](../oem/install.bat) and the [NetProfileCleanup.ps1](../oem/NetProfileCleanup.ps1). **Do not download 'Container.reg'** - this file is only required for users using docker or podman.
Next, you will need to make some registry changes to enable RDP Applications to run on the system. Start by downloading the [RDPApps.reg](../oem/RDPApps.reg) file, right-clicking on the `Raw` button, and clicking on `Save target as`. Repeat the same thing for the [install.bat](../oem/install.bat) and the [NetProfileCleanup.ps1](../oem/NetProfileCleanup.ps1). **Do not download the Container.reg.**
<p align="center">
<img src="./libvirt_images/26.png" width="700px"/>
@@ -676,11 +664,33 @@ Once you have downloaded all three files, right-click the install.bat and select
<img src="./libvirt_images/27.png" width="700px"/>
</p>
Once this is complete, restart the Windows virtual machine.
Rename the Windows virtual machine so that WinApps can locate it by navigating to the start menu and typing `About` to bring up the `About your PC` settings.
<details>
<summary><strong>(Optional) Configuring a Fallback Shared Folder</strong></summary>
<p align="center">
<img src="./libvirt_images/28.png" width="700px"/>
</p>
Scroll down and click on `Rename this PC`.
<p align="center">
<img src="./libvirt_images/29.png" width="700px"/>
</p>
Rename the PC to `RDPWindows`, but **DO NOT** restart the virtual machine.
<p align="center">
<img src="./libvirt_images/30.png" width="700px"/>
</p>
Scroll down to `Remote Desktop`, and enable `Enable Remote Desktop`.
<p align="center">
<img src="./libvirt_images/31.png" width="700px"/>
</p>
At this point, you will need to restart the Windows virtual machine.
## (Optional) Configuring a Fallback Shared Folder
When connecting to Windows through FreeRDP, your home folder will be shared automatically. However, this sharing setup does not apply when using Windows via virt-manager. To configure a fallback shared folder, follow these steps:
1. Navigate to "Virtual Hardware Details", then "Memory" and then check the box for "Enable shared memory".
@@ -697,11 +707,7 @@ When connecting to Windows through FreeRDP, your home folder will be shared auto
5. Reboot Windows.
</details>
<details>
<summary><strong>(Optional) Configuring a Static IP Address</strong></summary>
## (Optional) Configuring a Static IP Address
1. Identify the Windows MAC address.
```bash
virsh dumpxml "RDPWindows" | grep "mac address"
@@ -736,18 +742,12 @@ When connecting to Windows through FreeRDP, your home folder will be shared auto
5. Reboot Windows.
</details>
<details>
<summary><strong>(Optional) Installing Spice Guest Tools</strong></summary>
You may also wish to install [Spice Guest Tools](https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe) inside the virtual machine, which enables features like auto-desktop resize and cut-and-paste when accessing the virtual machine through `virt-manager`. Since WinApps uses RDP, however, this is unnecessary if you don't plan to access the virtual machine via `virt-manager`.
</details>
## Installing Windows Software and Configuring WinApps
You may now proceed to install other applications like 'Microsoft 365', 'Adobe Creative Cloud' or any other applications you would like to use through WinApps.
> [!NOTE]
> You may also wish to install [Spice Guest Tools](https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe) inside the virtual machine, which enables features like auto-desktop resize and cut-and-paste when accessing the virtual machine through `virt-manager`. Since WinApps uses RDP, however, this is unnecessary if you don't plan to access the virtual machine via `virt-manager`.
> [!IMPORTANT]
> Ensure `WAFLAVOR` is set to `"libvirt"` in your `~/.config/winapps/winapps.conf` to prevent WinApps looking for a `Docker` installation instead.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 225 KiB

BIN
docs/libvirt_images/28.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

BIN
docs/libvirt_images/29.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

BIN
docs/libvirt_images/30.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

BIN
docs/libvirt_images/31.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

22
flake.lock generated
View File

@@ -32,28 +32,13 @@
"type": "github"
}
},
"nix-filter": {
"locked": {
"lastModified": 1731533336,
"narHash": "sha256-oRam5PS1vcrr5UPgALW0eo1m/5/pls27Z/pabHNy2Ms=",
"owner": "numtide",
"repo": "nix-filter",
"rev": "f7653272fd234696ae94229839a99b73c9ab7de0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "nix-filter",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1751984180,
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
"lastModified": 1724819573,
"narHash": "sha256-GnR7/ibgIH1vhoy8cYdmXE6iyZqKqFxQSVkFgosBh6w=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
"rev": "71e91c409d1e654808b2621f28a327acfdad8dc2",
"type": "github"
},
"original": {
@@ -67,7 +52,6 @@
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils",
"nix-filter": "nix-filter",
"nixpkgs": "nixpkgs"
}
},

View File

@@ -1,29 +1,17 @@
{
description = "WinApps Nix packages";
description = "WinApps Nix packages & NixOS module";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz";
flake-utils.url = "github:numtide/flake-utils";
nix-filter.url = "github:numtide/nix-filter";
};
nixConfig = {
extra-substituters = [
"https://cache.garnix.io"
];
extra-trusted-public-keys = [
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
];
};
outputs =
{
nixpkgs,
flake-utils,
nix-filter,
...
}:
flake-utils.lib.eachDefaultSystem (
@@ -31,13 +19,11 @@
let
pkgs = import nixpkgs { inherit system; };
in
rec {
{
formatter = pkgs.nixfmt-rfc-style;
packages.winapps = pkgs.callPackage ./packages/winapps { inherit nix-filter; };
packages.winapps-launcher = pkgs.callPackage ./packages/winapps-launcher {
inherit (packages) winapps;
};
packages.winapps = pkgs.callPackage ./packages/winapps { };
packages.winapps-launcher = pkgs.callPackage ./packages/winapps-launcher { };
}
);
}

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 872 B

After

Width:  |  Height:  |  Size: 872 B

View File

Before

Width:  |  Height:  |  Size: 751 B

After

Width:  |  Height:  |  Size: 751 B

View File

@@ -49,7 +49,7 @@ Function GetApplicationIcon {
# Args:
# - 'Names': An array of application names.
# - 'Paths': An array of executable paths.
# - 'Source': The source of the applications (e.g. Windows Registry, Package managers, Universal Windows Platform (UWP), etc.)
# - 'Source': The source of the applications (e.g. Windows Registry, Package manangers, Universal Windows Platform (UWP), etc.)
function PrintArrayData {
param (
[string[]]$Names,
@@ -240,7 +240,7 @@ function AppSearchUWP {
PrintArrayData -Names $exeNames -Paths $exePaths -Source "uwp"
}
# Name: 'AppSearchChocolatey'
# Name: 'AppSearchWinReg'
# Role: Search for chocolatey shims.
function AppSearchChocolatey {
# Initialise empty arrays.
@@ -272,7 +272,7 @@ function AppSearchChocolatey {
}
}
# Name: 'AppSearchScoop'
# Name: 'AppSearchWinReg'
# Role: Search for scoop shims.
function AppSearchScoop {
# Initialise empty arrays.

134
install/winapps.conf Normal file
View File

@@ -0,0 +1,134 @@
##################################
# WINAPPS CONFIGURATION FILE #
##################################
# INSTRUCTIONS
# - Leading and trailing whitespace are ignored.
# - Empty lines are ignored.
# - Lines starting with '#' are ignored.
# - All characters following a '#' are ignored.
# [WINDOWS USERNAME]
RDP_USER="docker"
# [WINDOWS PASSWORD]
# NOTES:
# - If using FreeRDP v3.9.0 or greater, you *have* to set a password
RDP_PASS="docker"
# [WINDOWS DOMAIN]
# DEFAULT VALUE: '' (BLANK)
RDP_DOMAIN=""
# [WINDOWS IPV4 ADDRESS]
# NOTES:
# - If using 'libvirt', 'RDP_IP' will be determined by WinApps at runtime if left unspecified.
# DEFAULT VALUE:
# - 'docker': '127.0.0.1'
# - 'podman': '127.0.0.1'
# - 'libvirt': '' (BLANK)
#RDP_IP="127.0.0.1"
# [VM NAME]
# NOTES:
# - Only applicable when using 'libvirt'
# - The libvirt VM name must match so that WinApps can determine VM IP, start the VM, etc.
# DEFAULT VALUE: 'RDPWindows'
#VM_NAME="RDPWindows"
# [WINAPPS BACKEND]
# DEFAULT VALUE: 'docker'
# VALID VALUES:
# - 'docker'
# - 'podman'
# - 'libvirt'
# - 'manual'
WAFLAVOR="docker"
# [DISPLAY SCALING FACTOR]
# NOTES:
# - If an unsupported value is specified, a warning will be displayed.
# - If an unsupported value is specified, WinApps will use the closest supported value.
# DEFAULT VALUE: '100'
# VALID VALUES:
# - '100'
# - '140'
# - '180'
RDP_SCALE="100"
# [MOUNTING REMOVABLE PATHS FOR FILES]
# NOTES:
# - By default, `udisks` (which you most likely have installed) uses /run/media for mounting removable devices.
# This improves compatibility with most desktop environments (DEs).
# ATTENTION: The Filesystem Hierarchy Standard (FHS) recommends /media instead. Verify your system's configuration.
# - To manually mount devices, you may optionally use /mnt.
# REFERRENCE: https://wiki.archlinux.org/title/Udisks#Mount_to_/media
REMOVABLE_MEDIA="/run/media"
# [ADDITIONAL FREERDP FLAGS & ARGUMENTS]
# NOTES:
# - You can try adding /network:lan to these flags in order to increase performance, however, some users have faced issues with this.
# DEFAULT VALUE: '/cert:tofu /sound /microphone +home-drive'
# VALID VALUES: See https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown
RDP_FLAGS="/cert:tofu /sound /microphone +home-drive"
# [DEBUG WINAPPS]
# NOTES:
# - Creates and appends to ~/.local/share/winapps/winapps.log when running WinApps.
# DEFAULT VALUE: 'true'
# VALID VALUES:
# - 'true'
# - 'false'
DEBUG="true"
# [AUTOMATICALLY PAUSE WINDOWS]
# NOTES:
# - This is currently INCOMPATIBLE with 'docker' and 'manual'.
# - See https://github.com/dockur/windows/issues/674
# DEFAULT VALUE: 'off'
# VALID VALUES:
# - 'on'
# - 'off'
AUTOPAUSE="off"
# [AUTOMATICALLY PAUSE WINDOWS TIMEOUT]
# NOTES:
# - This setting determines the duration of inactivity to tolerate before Windows is automatically paused.
# - This setting is ignored if 'AUTOPAUSE' is set to 'off'.
# - The value must be specified in seconds (to the nearest 10 seconds e.g., '30', '40', '50', etc.).
# - For RemoteApp RDP sessions, there is a mandatory 20-second delay, so the minimum value that can be specified here is '20'.
# - Source: https://techcommunity.microsoft.com/t5/security-compliance-and-identity/terminal-services-remoteapp-8482-session-termination-logic/ba-p/246566
# DEFAULT VALUE: '300'
# VALID VALUES: >=20
AUTOPAUSE_TIME="300"
# [FREERDP COMMAND]
# NOTES:
# - WinApps will attempt to automatically detect the correct command to use for your system.
# DEFAULT VALUE: '' (BLANK)
# VALID VALUES: The command required to run FreeRDPv3 on your system (e.g., 'xfreerdp', 'xfreerdp3', etc.).
FREERDP_COMMAND=""
# [TIMEOUTS]
# NOTES:
# - These settings control various timeout durations within the WinApps setup.
# - Increasing the timeouts is only necessary if the corresponding errors occur.
# - Ensure you have followed all the Troubleshooting Tips in the error message first.
# PORT CHECK
# - The maximum time (in seconds) to wait when checking if the RDP port on Windows is open.
# - Corresponding error: "NETWORK CONFIGURATION ERROR" (exit status 13).
# DEFAULT VALUE: '5'
PORT_TIMEOUT="5"
# RDP CONNECTION TEST
# - The maximum time (in seconds) to wait when testing the initial RDP connection to Windows.
# - Corresponding error: "REMOTE DESKTOP PROTOCOL FAILURE" (exit status 14).
# DEFAULT VALUE: '30'
RDP_TIMEOUT="30"
# APPLICATION SCAN
# - The maximum time (in seconds) to wait for the script that scans for installed applications on Windows to complete.
# - Corresponding error: "APPLICATION QUERY FAILURE" (exit status 15).
# DEFAULT VALUE: '60'
APP_SCAN_TIMEOUT="60"

View File

@@ -1,17 +1,5 @@
Windows Registry Editor Version 5.00
; Enable Remote Desktop
; NOTE: The relevant firewall rule must be added separately with either:
; Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
; or
; netsh advfirewall firewall set rule group="remote desktop" new enable=Yes
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000
; Require Network Level Authentication (NLA) for Remote Desktop
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"UserAuthentication"=dword:00000001
; Disable RemoteApp allowlist so all applications can be used in Remote Desktop sessions
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList]
"fDisabledAllowList"=dword:00000001

View File

@@ -1,79 +1,25 @@
@echo off
title WinApps Setup Wizard
:: Check for administrative privileges
fltmc >nul 2>&1 || (
echo [INFO] Script not running as administrator. Attempting to relaunch with elevation...
powershell -Command "Start-Process '%~f0' -Verb runAs"
exit /b
reg import %~dp0\RDPApps.reg
if exists %~dp0\Container.reg (
reg import %~dp0\Container.reg
)
echo ============================================
echo WinApps Setup Wizard
echo ============================================
echo.
echo [INFO] Starting setup...
REM Create network profile cleanup scheduled task
copy %~dp0\NetProfileCleanup.ps1 %windir%
set "taskname=NetworkProfileCleanup"
set "command=powershell.exe -ExecutionPolicy Bypass -File "%windir%\NetProfileCleanup.ps1^""
:: Apply RDP and system configuration tweaks
echo [INFO] Importing "RDPApps.reg"...
if exist "%~dp0RDPApps.reg" (
reg import "%~dp0RDPApps.reg" >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo [SUCCESS] Imported "RDPApps.reg".
) else (
echo [ERROR] Failed to import "RDPApps.reg".
)
) else (
echo [ERROR] "RDPApps.reg" not found. Skipping...
)
:: Allow Remote Desktop connections through the firewall
echo [INFO] Allowing Remote Desktop connections through the firewall...
powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass ^
-Command "if (Get-Command Enable-NetFirewallRule -ErrorAction SilentlyContinue) { try { Enable-NetFirewallRule -DisplayGroup 'Remote Desktop' -ErrorAction Stop; exit 0 } catch { exit 1 } } else { exit 2 }" >nul 2>&1
schtasks /query /tn "%taskname%" >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo [SUCCESS] Firewall changes applied successfully.
) else (
:: Fallback to using 'netsh' to make the firewall modification
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo [SUCCESS] Firewall changes applied successfully.
) else (
echo [ERROR] Failed to apply firewall changes.
echo Please manually enable Remote Desktop via 'Settings ► System ► Remote Desktop'.
)
echo Task "%taskname%" already exists, deleting it first...
schtasks /delete /tn "%taskname%" /f
)
:: Configure the system clock to use UTC instead of local time
if exist "%~dp0Container.reg" (
echo [INFO] Importing "Container.reg"...
reg import "%~dp0Container.reg" >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo [SUCCESS] Imported "Container.reg".
) else (
echo [ERROR] Failed to import "Container.reg".
)
schtasks /create /tn "%taskname%" /tr "%command%" /sc onstart /ru "SYSTEM" /rl HIGHEST /f
if %ERRORLEVEL% equ 0 (
echo Scheduled task "%taskname%" created successfully.
) else (
echo [WARNING] "Container.reg" not found. Skipping...
)
:: Create a startup task to clean up stale network profiles
echo [INFO] Creating network profile cleanup task...
:: Initialise values required to create the startup task
set "scriptpath=%windir%\NetProfileCleanup.ps1"
set "taskname=WinApps_NetworkProfileCleanup"
set "command=powershell.exe -ExecutionPolicy Bypass -File ""%scriptpath%"""
:: Copy the script to the Windows directory
copy /Y "%~dp0NetProfileCleanup.ps1" "%scriptpath%" >nul
if %ERRORLEVEL% neq 0 (
echo [ERROR] Failed to copy "NetProfileCleanup.ps1" to "%windir%".
) else (
schtasks /create /tn "%taskname%" /tr "%command%" /sc onstart /ru "SYSTEM" /rl HIGHEST /f >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo [SUCCESS] Created scheduled task "%taskname%".
) else (
echo [ERROR] Failed to create scheduled task "%taskname%".
)
echo Failed to create scheduled task.
)

View File

@@ -1,13 +1,11 @@
diff --git a/WinApps-Launcher.sh b/WinApps-Launcher.sh
index 1d3a929..a5d7d4c 100755
--- a/WinApps-Launcher.sh
+++ b/WinApps-Launcher.sh
@@ -19,7 +19,7 @@ declare -rx EC_WIN_NOT_SPEC=6
declare -rx EC_NO_WIN_FOUND=7
# Paths
-declare -rx ICONS_PATH="./Icons"
+declare -rx ICONS_PATH="@out@/Icons"
declare -rx APPDATA_PATH="${XDG_DATA_HOME:-$HOME/.local/share}/winapps"
declare -rx CONFIG_PATH="${XDG_CONFIG_HOME:-$HOME/.config}/winapps"
declare -rx APPDATA_PATH="${HOME}/.local/share/winapps"
declare -rx CONFIG_PATH="${HOME}/.config/winapps"
declare -rx CONFIG_FILE="${CONFIG_PATH}/winapps.conf"

View File

@@ -4,17 +4,17 @@
fetchFromGitHub,
makeWrapper,
makeDesktopItem,
callPackage,
yad,
winapps ? throw "Pass in the winapps package",
...
}:
let
rev = "87f92a80c7e421ab7d1b8801e647dcbfaaa6ee34";
hash = "sha256-aZ8uusg5yQOD1xYfaX2IQCbcPdHuVA0tiy1NDkdGCCs=";
rev = "9b3f6c581791222a3a04508606755d6d0519f322";
hash = "sha256-Hy/o5IY9HmTWaX54Ek5ABmppPpzgM+MdCrhzEzVmtwY=";
in
stdenv.mkDerivation rec {
pname = "winapps-launcher";
version = "0-unstable-2025-09-01";
version = "0-unstable-2025-03-11";
src = fetchFromGitHub {
owner = "winapps-org";
@@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ makeWrapper ];
buildInputs = [
yad
winapps
(callPackage ../winapps { })
];
patches = [ ./WinApps-Launcher.patch ];

View File

@@ -1,36 +1,33 @@
{
stdenv,
lib,
fetchFromGitHub,
makeWrapper,
freerdp,
freerdp3,
dialog,
libnotify,
netcat,
iproute2,
writeShellScriptBin,
nix-filter ? throw "Pass github:numtide/nix-filter as an argument!",
...
}:
let
rev = "ce9a84dc5294c45a4b69847f5164628f7d6a4ae1";
hash = "sha256-SsyJy9mCwBjKex8mfCnKrzKUM/+xws0EltI2aSkKTuM=";
in
stdenv.mkDerivation rec {
pname = "winapps";
version = "0-unstable-2025-07-02";
src = nix-filter {
root = ./../..;
include = [
"apps"
"install"
"bin"
"icons"
"LICENSE.md"
"COPYRIGHT.md"
"setup.sh"
];
src = fetchFromGitHub {
owner = "winapps-org";
repo = "winapps";
inherit rev hash;
};
nativeBuildInputs = [ makeWrapper ];
buildInputs = [
(writeShellScriptBin "xfreerdp3" ''${lib.getExe' freerdp "xfreerdp"} "$@"'')
freerdp3
libnotify
dialog
netcat
@@ -38,6 +35,7 @@ stdenv.mkDerivation rec {
];
patches = [
./winapps.patch
./setup.patch
];

View File

@@ -1,5 +1,5 @@
diff --git a/setup.sh b/setup.sh
index 3a871c8..71a8fa0 100755
index 0debe4d..6aeea08 100755
--- a/setup.sh
+++ b/setup.sh
@@ -39,8 +39,8 @@ readonly SYS_BIN_PATH="/usr/local/bin" # UNIX path to 'bin' dir
@@ -7,9 +7,9 @@ index 3a871c8..71a8fa0 100755
readonly USER_BIN_PATH_WIN='\\tsclient\home\.local\bin' # WINDOWS path to 'bin' directory for a '--user' WinApps installation.
# 'SOURCE'
-readonly SYS_SOURCE_PATH="${SYS_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
-readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--user' WinApps installation.
-readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
+readonly SYS_SOURCE_PATH="@out@/src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
+readonly USER_SOURCE_PATH="@out@/src" # UNIX path to WinApps source directory for a '--user' WinApps installation.
+readonly USER_SOURCE_PATH="@out@/src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
# 'APP'
readonly SYS_APP_PATH="/usr/share/applications" # UNIX path to 'applications' directory for a '--system' WinApps installation.
readonly USER_APP_PATH="${HOME}/.local/share/applications" # UNIX path to 'applications' directory for a '--user' WinApps installation.
@@ -22,7 +22,7 @@ index 3a871c8..71a8fa0 100755
# REMOTE DESKTOP CONFIGURATION
readonly RDP_PORT=3389 # Port used for RDP on Windows.
@@ -157,13 +157,6 @@ function waGetSourceCode() {
@@ -155,13 +155,6 @@ function waGetSourceCode() {
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You might want to remove your old installation on '${SCRIPT_DIR_PATH}'."
fi
@@ -36,7 +36,7 @@ index 3a871c8..71a8fa0 100755
# Silently change the working directory.
if ! cd "$SOURCE_PATH" &>/dev/null; then
# Display the error type.
@@ -188,21 +181,8 @@ function waGetSourceCode() {
@@ -186,21 +179,8 @@ function waGetSourceCode() {
# Name: 'waGetInquirer'
# Role: Loads the inquirer script, even if the source isn't cloned yet
function waGetInquirer() {
@@ -59,7 +59,7 @@ index 3a871c8..71a8fa0 100755
}
# Name: 'waCheckInput'
@@ -807,7 +787,7 @@ function waCheckGroupMembership() {
@@ -805,7 +785,7 @@ function waCheckGroupMembership() {
# Identify groups the current user belongs to.
USER_GROUPS=$(groups "$(whoami)")
@@ -98,17 +98,7 @@ index 3a871c8..71a8fa0 100755
Terminal=false
Type=Application
Icon=${APP_ICON}
@@ -1364,7 +1344,9 @@ function waConfigureOfficiallySupported() {
fi
# Copy the protocol handler to the appropriate directory.
+ # Fix permissions for nix.
$SUDO cp "./apps/ms-office-protocol-handler.desktop" "$TARGET_DIR/ms-office-protocol-handler.desktop"
+ $SUDO chmod u+w "$TARGET_DIR/ms-office-protocol-handler.desktop"
fi
# Print feedback.
@@ -1596,7 +1578,7 @@ function waInstall() {
@@ -1550,7 +1530,7 @@ function waInstall() {
echo -e "${BOLD_TEXT}Installing WinApps.${CLEAR_TEXT}"
# Check for existing conflicting WinApps installations.
@@ -117,19 +107,18 @@ index 3a871c8..71a8fa0 100755
# Load the WinApps configuration file.
waLoadConfig
@@ -1664,9 +1646,8 @@ function waInstall() {
# Check for installed applications.
@@ -1626,8 +1606,8 @@ function waInstall() {
waFindInstalled
- # Install the WinApps bash scripts.
# Install the WinApps bash scripts.
- $SUDO ln -sf "${SOURCE_PATH}/bin/winapps" "${BIN_PATH}/winapps"
- $SUDO ln -sf "${SOURCE_PATH}/setup.sh" "${BIN_PATH}/winapps-setup"
+ # Fix permissions for nix.
+ $SUDO chmod u+w -R "${APPDATA_PATH}"
+
+
# Configure the Windows RDP session application launcher.
waConfigureWindows
@@ -1727,18 +1708,15 @@ function waUninstall() {
@@ -1677,18 +1657,15 @@ function waUninstall() {
local DESKTOP_FILE_NAME="" # Stores the name of the '.desktop' file for the application.
local BASH_SCRIPT_NAME="" # Stores the name of the application.
@@ -150,7 +139,7 @@ index 3a871c8..71a8fa0 100755
# Remove each '.desktop' file.
for DESKTOP_FILE_PATH in "${WINAPPS_DESKTOP_FILES[@]}"; do
@@ -1759,7 +1737,7 @@ function waUninstall() {
@@ -1709,7 +1686,7 @@ function waUninstall() {
done
# Store the paths of bash scripts calling 'WinApps' to launch specific applications in an array, returning an empty array if no such files exist.
@@ -159,7 +148,7 @@ index 3a871c8..71a8fa0 100755
# Remove each bash script.
for BASH_SCRIPT_PATH in "${WINAPPS_APP_BASH_SCRIPTS[@]}"; do
@@ -1780,10 +1758,9 @@ function waUninstall() {
@@ -1730,10 +1707,9 @@ function waUninstall() {
done
# Print caveats.

View File

@@ -0,0 +1,11 @@
--- a/bin/winapps
+++ b/bin/winapps
@@ -295,7 +295,7 @@ function waCheckGroupMembership() {
# shellcheck disable=SC2155 # Silence warnings regarding masking return values through simultaneous declaration and assignment.
local USER_GROUPS=$(groups "$(whoami)")
- if ! (echo "$USER_GROUPS" | grep -q -E "\blibvirt\b") || ! (echo "$USER_GROUPS" | grep -q -E "\bkvm\b"); then
+ if ! (echo "$USER_GROUPS" | grep -q -E "\blibvirtd\b") || ! (echo "$USER_GROUPS" | grep -q -E "\bkvm\b"); then
waThrowExit "$EC_NOT_IN_GROUP"
fi
}

View File

@@ -21,7 +21,7 @@ readonly EC_BAD_ARGUMENT="2" # Unsupported argument passed to script.
readonly EC_EXISTING_INSTALL="3" # Existing conflicting WinApps installation.
readonly EC_NO_CONFIG="4" # Absence of a valid WinApps configuration file.
readonly EC_MISSING_DEPS="5" # Missing dependencies.
readonly EC_NO_SUDO="6" # Insufficient privileges to invoke superuser access.
readonly EC_NO_SUDO="6" # Insufficient privilages to invoke superuser access.
readonly EC_NOT_IN_GROUP="7" # Current user not in group 'libvirt' and/or 'kvm'.
readonly EC_VM_OFF="8" # Windows 'libvirt' VM powered off.
readonly EC_VM_PAUSED="9" # Windows 'libvirt' VM paused.
@@ -40,7 +40,7 @@ readonly USER_BIN_PATH="${HOME}/.local/bin" # UNIX path to 'bin' dir
readonly USER_BIN_PATH_WIN='\\tsclient\home\.local\bin' # WINDOWS path to 'bin' directory for a '--user' WinApps installation.
# 'SOURCE'
readonly SYS_SOURCE_PATH="${SYS_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--user' WinApps installation.
readonly USER_SOURCE_PATH="${USER_BIN_PATH}/winapps-src" # UNIX path to WinApps source directory for a '--system' WinApps installation.
# 'APP'
readonly SYS_APP_PATH="/usr/share/applications" # UNIX path to 'applications' directory for a '--system' WinApps installation.
readonly USER_APP_PATH="${HOME}/.local/share/applications" # UNIX path to 'applications' directory for a '--user' WinApps installation.
@@ -151,7 +151,7 @@ function waGetSourceCode() {
SCRIPT_DIR_PATH=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")
# Check if winapps is currently installed on $SOURCE_PATH
if [[ -f "$SCRIPT_DIR_PATH/winapps" && "$SCRIPT_DIR_PATH" != "$SOURCE_PATH" ]]; then
if [[ -f "$SCRIPT_DIR_PATH/winapps" && "$SCRIPT_DIR_PATH" -ne "$SOURCE_PATH" ]]; then
# Display a warning.
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You are running a WinApps installation located outside of default location '${SOURCE_PATH}'. A new installation will be created."
echo -e "${WARNING_TEXT}[WARNING]${CLEAR_TEXT} You might want to remove your old installation on '${SCRIPT_DIR_PATH}'."
@@ -838,13 +838,16 @@ function waCheckVMRunning() {
# Print feedback.
echo -n "Checking the status of the Windows VM... "
# Declare variables.
local VM_STATE="" # Stores the state of the Windows VM.
# Obtain VM Status
VM_PAUSED=0
virsh list --state-paused --name | grep -Fxq -- "$VM_NAME" || VM_PAUSED="$?"
virsh list --state-paused | grep -wq "$VM_NAME" || VM_PAUSED="$?"
VM_RUNNING=0
virsh list --state-running --name | grep -Fxq -- "$VM_NAME" || VM_RUNNING="$?"
virsh list --state-running | grep -wq "$VM_NAME" || VM_RUNNING="$?"
VM_SHUTOFF=0
virsh list --state-shutoff --name | grep -Fxq -- "$VM_NAME" || VM_SHUTOFF="$?"
virsh list --state-shutoff | grep -wq "$VM_NAME" || VM_SHUTOFF="$?"
if [[ $VM_SHUTOFF == "0" ]]; then
# Complete the previous line.
@@ -1150,10 +1153,10 @@ function waFindInstalled() {
source "./apps/${APPLICATION}/info"
# Append commands to batch file.
echo "IF EXIST \"${WIN_EXECUTABLE}\" ECHO ${APPLICATION}^|^|^|${WIN_EXECUTABLE} >> ${TMP_INST_FILE_PATH_WIN}" >>"$BATCH_SCRIPT_PATH"
echo "IF EXIST \"${WIN_EXECUTABLE}\" ECHO ${APPLICATION} >> ${TMP_INST_FILE_PATH_WIN}" >>"$BATCH_SCRIPT_PATH"
done
# Append a command to the batch script to run the PowerShell script and store its output in the 'detected' file.
# Append a command to the batch script to run the PowerShell script and store it's output in the 'detected' file.
# shellcheck disable=SC2129 # Silence warning regarding repeated redirects.
echo "powershell.exe -ExecutionPolicy Bypass -File ${PS_SCRIPT_HOME_PATH_WIN} > ${DETECTED_FILE_PATH_WIN}" >>"$BATCH_SCRIPT_PATH"
@@ -1251,7 +1254,7 @@ StartupWMClass=Microsoft Windows
Comment=Microsoft Windows RDP Session"
# Copy the 'Windows' icon.
$SUDO cp "./install/windows.svg" "${APPDATA_PATH}/icons/windows.svg"
$SUDO cp "./icons/windows.svg" "${APPDATA_PATH}/icons/windows.svg"
# Write the desktop entry content to a file.
echo "$WIN_DESKTOP" | $SUDO tee "${APP_PATH}/windows.desktop" &>/dev/null
@@ -1276,7 +1279,7 @@ function waConfigureApp() {
# Source 'Info' File Containing:
# - The Application Name (FULL_NAME)
# - The Shortcut Name (NAME)
# - The Shortcut Nsame (NAME)
# - Application Categories (CATEGORIES)
# - Executable Path (WIN_EXECUTABLE)
# - Supported MIME Types (MIME_TYPES)
@@ -1320,42 +1323,24 @@ MimeType=${MIME_TYPES}"
function waConfigureOfficiallySupported() {
# Declare variables.
local OSA_LIST=() # Stores a list of all officially supported applications installed on Windows.
local OFFICE_APPS=("access" "access-o365" "access-o365-x86" "access-x86" "adobe-cc" "acrobat9" "acrobat-x-pro" "aftereffects-cc" "audition-cc" "bridge-cc" "bridge-cc-x86" "bridge-cs6" "bridge-cs6-x86" "cmd" "dymo-connect" "excel" "excel-o365" "excel-o365-x86" "excel-x86" "excel-x86-2010" "explorer" "iexplorer" "illustrator-cc" "lightroom-cc" "linqpad8" "mirc" "mspaint" "onenote" "onenote-o365" "onenote-o365-x86" "onenote-x86" "outlook" "outlook-o365" "outlook-o365-x86" "powerbi" "powerbi-store" "powerpoint" "powerpoint-o365" "powerpoint-o365-x86" "powerpoint-x86" "publisher" "publisher-o365" "publisher-o365-x86" "publisher-x86" "project" "project-x86" "remarkable-desktop" "ssms20" "visual-studio-comm" "visual-studio-ent" "visual-studio-pro" "visio" "visio-x86" "word" "word-o365" "word-o365-x86" "word-x86" "word-x86-2010")
local OFFICE_APPS=("access" "access-o365" "access-o365-x86" "access-x86" "adobe-cc" "acrobat9" "acrobat-x-pro" "aftereffects-cc" "audition-cc" "bridge-cc" "bridge-cc-x86" "bridge-cs6" "bridge-cs6-x86" "cmd" "dymo-connect" "excel" "excel-o365" "excel-o365-x86" "excel-x86" "excel-x86-2010" "explorer" "iexplorer" "illustrator-cc" "lightroom-cc" "linqpad8" "mirc" "mspaint" "onenote" "onenote-o365" "onenote-o365-x86" "onenote-x86" "outlook" "outlook-o365" "outlook-o365-x86" "powerpoint" "powerpoint-o365" "powerpoint-o365-x86" "powerpoint-x86" "publisher" "publisher-o365" "publisher-o365-x86" "publisher-x86" "project" "project-x86" "remarkable-desktop" "ssms20" "visual-studio-comm" "visual-studio-ent" "visual-studio-pro" "visio" "visio-x86" "word" "word-o365" "word-o365-x86" "word-x86" "word-x86-2010")
# Read the list of officially supported applications that are installed on Windows into an array, returning an empty array if no such files exist.
readarray -t OSA_LIST < <(grep -v '^[[:space:]]*$' "$INST_FILE_PATH" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' 2>/dev/null || true)
# Create application entries for each officially supported application.
for OSA in "${OSA_LIST[@]}"; do
# Split the line by the '|||' delimiter
local APP_NAME="${OSA%%|||*}"
local ACTUAL_WIN_EXECUTABLE="${OSA##*|||}"
# Print feedback.
echo -n "Creating an application entry for ${OSA}... "
# If splitting failed for some reason, skip this line to be safe.
if [[ -z "$APP_NAME" || -z "$ACTUAL_WIN_EXECUTABLE" ]]; then
continue
fi
# Copy application icon and information.
$SUDO cp -r "./apps/${OSA}" "${APPDATA_PATH}/apps"
# Print feedback using the clean application name.
echo -n "Creating an application entry for ${APP_NAME}... "
# Copy the original, unmodified application assets.
$SUDO cp -r "./apps/${APP_NAME}" "${APPDATA_PATH}/apps"
local DESTINATION_INFO_FILE="${APPDATA_PATH}/apps/${APP_NAME}/info"
# Sanitize the string using pure Bash. This is fast and safe.
local SED_SAFE_PATH="${ACTUAL_WIN_EXECUTABLE//&/\\&}"
SED_SAFE_PATH="${SED_SAFE_PATH//\\/\\\\}"
# Use the sanitized string to safely edit the file.
$SUDO sed -i "s|^WIN_EXECUTABLE=.*|WIN_EXECUTABLE=\"${SED_SAFE_PATH}\"|" "$DESTINATION_INFO_FILE"
# Configure the application using the clean name.
waConfigureApp "$APP_NAME" svg
# Configure the application.
waConfigureApp "$OSA" svg
# Check if the application is an Office app and copy the protocol handler.
if [[ " ${OFFICE_APPS[*]} " == *" $APP_NAME "* ]]; then
if [[ " ${OFFICE_APPS[*]} " == *" $OSA "* ]]; then
# Determine the target directory based on whether the installation is for the system or user.
if [[ "$OPT_SYSTEM" -eq 1 ]]; then
TARGET_DIR="$SYS_APP_PATH"
@@ -1385,7 +1370,6 @@ function waConfigureApps() {
local APP_INSTALL="" # Stores the option selected by the user.
local SELECTED_APPS=() # Stores the officially supported applications selected by the user.
local TEMP_ARRAY=() # Temporary array used for sorting elements of an array.
declare -A APP_DATA_MAP # Associative array to map short names back to their full data line.
# Read the list of officially supported applications that are installed on Windows into an array, returning an empty array if no such files exist.
# This will remove leading and trailing whitespace characters as well as ignore empty lines.
@@ -1395,33 +1379,19 @@ function waConfigureApps() {
for OSA in "${OSA_LIST[@]}"; do
# Source 'Info' File Containing:
# - The Application Name (FULL_NAME)
# - The Shortcut Name (NAME)
# - The Shortcut Nsame (NAME)
# - Application Categories (CATEGORIES)
# - Executable Path (WIN_EXECUTABLE)
# - Supported MIME Types (MIME_TYPES)
# - Application Icon (ICON)
# Split the line to get the clean application name
local APP_NAME="${OSA%%|||*}"
local ACTUAL_WIN_EXECUTABLE="${OSA##*|||*}"
# If splitting failed, skip this entry.
if [[ -z "$APP_NAME" ]]; then
continue
fi
# Use the clean APP_NAME to source the info file
# shellcheck source=/dev/null # Exclude this file from being checked by ShellCheck.
source "./apps/${APP_NAME}/info"
source "./apps/${OSA}/info"
# Add both the simplified and full name of the application to an array.
APPS+=("${FULL_NAME} (${APP_NAME})")
# Store the original data line in our map so we can retrieve it later.
APP_DATA_MAP["$APP_NAME"]="$OSA"
APPS+=("${FULL_NAME} (${OSA})")
# Extract the executable file name (e.g. 'MyApp.exe') from the absolute path.
WIN_EXECUTABLE="${ACTUAL_WIN_EXECUTABLE##*\\}"
WIN_EXECUTABLE="${WIN_EXECUTABLE##*\\}"
# Trim any leading or trailing whitespace characters from the executable file name.
read -r WIN_EXECUTABLE <<<"$(echo "$WIN_EXECUTABLE" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
@@ -1456,11 +1426,11 @@ function waConfigureApps() {
for SELECTED_APP in "${SELECTED_APPS[@]}"; do
# Capture the substring within (but not including) the parentheses.
# This substring represents the officially supported application name (see above loop).
local SHORT_NAME="${SELECTED_APP##*(}"
SHORT_NAME="${SHORT_NAME%%)}"
SELECTED_APP="${SELECTED_APP##*(}"
SELECTED_APP="${SELECTED_APP%%)}"
# Use the map to find the original data line (e.g., "word|||C:\...") and write it back.
echo "${APP_DATA_MAP[$SHORT_NAME]}" >>"$INST_FILE_PATH"
# Add the substring back to the 'install' file.
echo "$SELECTED_APP" >>"$INST_FILE_PATH"
done
fi