├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ └── bug-report.yml
└── workflows
│ └── build-prs.yml
├── .gitignore
├── README.md
├── config
├── Autounattend_win10.xml
├── Autounattend_win11.xml
├── Unattend.xml
└── hosts
├── downloader
├── index.mjs
├── package.json
└── yarn.lock
├── egg
├── CLOUDS.MID
└── clouds.mp3
└── snap
├── gui
├── clouds.desktop
└── clouds.png
├── local
└── bin
│ ├── clouds
│ ├── guess-wim-imageid.py
│ └── launch
└── snapcraft.yaml
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: diddledani
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: diddledani
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: diddledani
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: # Replace with a single custom sponsorship URL
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug-report.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: File a bug report
3 | title: "[Bug]: "
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: |
8 | Thanks for taking the time to fill out this bug report!
9 | - type: textarea
10 | id: what-happened
11 | attributes:
12 | label: What happened?
13 | description: Tell us what happened.
14 | placeholder: The app crashed when I...
15 | validations:
16 | required: true
17 | - type: textarea
18 | id: what-expected
19 | attributes:
20 | label: What should have happened?
21 | description: Tell us what you expected to happen.
22 | placeholder: When I ... the app should ...
23 | validations:
24 | required: true
25 | - type: textarea
26 | id: snap-info
27 | attributes:
28 | label: Output of `snap info clouds`
29 | description: Please run `snap info clouds` in a terminal and paste the output here. This will be automatically formatted into code, so no need for backticks.
30 | render: plain text
31 | validations:
32 | required: true
33 | - type: textarea
34 | id: snap-connections
35 | attributes:
36 | label: Output of `snap connections clouds`
37 | description: Please run `snap connections clouds` in a terminal and paste the output here. This will be automatically formatted into code, so no need for backticks.
38 | render: plain text
39 | validations:
40 | required: true
41 | - type: textarea
42 | id: snap-version
43 | attributes:
44 | label: Output of `snap version`
45 | description: Please run `snap version` in a terminal and paste the output here. This will be automatically formatted into code, so no need for backticks.
46 | render: plain text
47 | validations:
48 | required: true
49 | - type: textarea
50 | id: logs
51 | attributes:
52 | label: Relevant log output
53 | description: Please copy and paste any relevant `DENIED` messages in `dmesg` output or your kernel log file in `/var/log`. This will be automatically formatted into code, so no need for backticks.
54 | render: plain text
55 | - type: textarea
56 | id: teminal-output
57 | attributes:
58 | label: Teminal output of app
59 | description: Please try running the app in a terminal and paste the output here. This will be automatically formatted into code, so no need for backticks.
60 | render: plain text
61 |
--------------------------------------------------------------------------------
/.github/workflows/build-prs.yml:
--------------------------------------------------------------------------------
1 | name: Build Pull Requests
2 |
3 | on:
4 | - pull_request
5 |
6 | jobs:
7 | snapcraft-build:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@v3
11 | - uses: jhenstridge/snapcraft-build-action@v1
12 | id: build
13 | - uses: diddlesnaps/snapcraft-review-tools-action@v1
14 | with:
15 | snap: ${{ steps.build.outputs.snap }}
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.snap
2 | node_modules
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Clouds
2 |
3 |
4 |
5 |
6 | Clouds
7 |
8 |
9 | This is the snap for Clouds, “Download and install Windows in a VM”. It works on Ubuntu, Fedora, Debian, and other major Linux distributions.
10 |
11 | The icon used in this snap package is "window by fix project from the Noun Project".
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 
22 |
23 |
Published for
with 💝 by Snapcrafters
24 |
25 | ## Install
26 |
27 | sudo snap install clouds
28 |
29 | [](https://snapcraft.io/clouds)
30 |
31 | ([Don't have snapd installed?](https://snapcraft.io/docs/core/install))
32 |
33 | ## Remaining tasks
34 |
37 |
38 | Snapcrafters ([join us](https://forum.snapcraft.io/t/join-snapcrafters/1325))
39 | are working to land snap install documentation and
40 | the [snapcraft.yaml](https://github.com/snapcrafters/fork-and-rename-me/blob/master/snap/snapcraft.yaml)
41 | upstream so Clouds can authoritatively publish future releases.
42 |
43 | - [x] Click the green "Use this template" button above to create a new repository based on this template
44 | - [x] Give the newly created repository a sensible name, like `godzilla-snap` if you're snapping the Godzilla software
45 | - [x] Update the description of the repository
46 | - [x] Update logos and references to `Clouds` and `[Clouds]`
47 | - [x] Register the snap in the store, **using the preferred upstream name**
48 | - [x] Add a screenshot to this `README.md`
49 | - [x] Add install instructions to this `README.md`
50 | - [x] Update snap store metadata, icons and screenshots
51 | - [x] Convert the snap to `strict` confinement, or `classic` confinement if it qualifies
52 | - [ ] Publish the confined snap in the Snap store beta channel
53 | - [ ] Update the install instructions in this `README.md`
54 | - [ ] Post a call for testing on the [Snapcraft Forum](https://forum.snapcraft.io) - [link]()
55 | - [ ] Make a post in the [Snapcraft Forum](https://forum.snapcraft.io) asking for a transfer of the snap name from you to snapcrafters - [link]()
56 | - [ ] Ask a [Snapcrafters admin](https://github.com/orgs/snapcrafters/people?query=%20role%3Aowner) to fork your repo into github.com/snapcrafters, and configure the repo for automatic publishing into edge on commit
57 | - [ ] Add the provided Snapcraft build badge to this `README.md`
58 | - [ ] Publish the snap in the Snap store stable channel
59 | - [ ] Update the install instructions in this `README.md`
60 | - [ ] Post an announcement in the [Snapcraft Forum](https://forum.snapcraft.io) - [link]()
61 | - [ ] Submit a pull request or patch upstream that adds snap install documentation - [link]()
62 | - [ ] Submit a pull request or patch upstream that adds the `snapcraft.yaml` and any required assets/launchers - [link]()
63 | - [ ] Add upstream contact information to the `README.md`
64 | - If upstream accept the PR:
65 | - [ ] Request upstream create a Snap store account
66 | - [ ] Contact the Snap Advocacy team to request the snap be transferred to upstream
67 | - [ ] Ask the Snap Advocacy team to celebrate the snap - [link]()
68 |
69 | If you have any questions, [post in the Snapcraft forum](https://forum.snapcraft.io).
70 |
71 |
78 |
79 |
86 |
--------------------------------------------------------------------------------
/config/Autounattend_win10.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 |
12 | false
13 |
14 |
15 |
16 | 0
17 | true
18 |
19 |
20 |
21 | 1
22 | Primary
23 | 256
24 |
25 |
26 |
27 | 2
28 | EFI
29 | 128
30 |
31 |
32 |
33 | 3
34 | MSR
35 | 128
36 |
37 |
38 |
39 | 4
40 | Primary
41 | true
42 |
43 |
44 |
45 |
46 |
47 | 1
48 | 1
49 |
50 | NTFS
51 | DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
52 |
53 |
54 |
55 | 2
56 | 2
57 |
58 | FAT32
59 |
60 |
61 |
62 | 3
63 | 3
64 |
65 |
66 |
67 | 4
68 | 4
69 |
70 | C
71 | NTFS
72 |
73 |
74 |
75 | OnError
76 |
77 |
78 | true
79 | Never
80 |
81 |
82 |
83 |
84 | 0
85 | 4
86 |
87 | false
88 |
89 |
90 |
91 |
92 | 1
93 | reg add HKLM\System\Setup\LabConfig /v BypassRAMCheck /t REG_DWORD /d 0x00000001 /f
94 |
95 |
96 |
97 | false
98 | Never
99 |
100 |
101 | false
102 |
103 | VK7JG-NPHTM-C97JM-9MPGT-3V66T
104 | Never
105 |
106 |
107 |
108 |
109 |
110 |
115 |
116 |
117 | E:\amd64\w10
118 |
119 |
120 | E:\Balloon\w10\amd64
121 |
122 |
123 | E:\fwcfg\w10\amd64
124 |
125 |
126 | E:\NetKVM\w10\amd64
127 |
128 |
129 | E:\qemupciserial\w10\amd64
130 |
131 |
132 | E:\qxldod\w10\amd64
133 |
134 |
135 | E:\sriov\w10\amd64
136 |
137 |
138 | E:\viofs\w10\amd64
139 |
140 |
141 | E:\viogpudo\w10\amd64
142 |
143 |
144 | E:\vioinput\w10\amd64
145 |
146 |
147 | E:\viorng\w10\amd64
148 |
149 |
150 | E:\vioscsi\w10\amd64
151 |
152 |
153 | E:\vioserial\w10\amd64
154 |
155 |
156 | E:\viostor\w10\amd64
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 | *
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/config/Autounattend_win11.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 |
12 | false
13 |
14 |
15 |
16 | 0
17 | true
18 |
19 |
20 |
21 | 1
22 | Primary
23 | 256
24 |
25 |
26 |
27 | 2
28 | EFI
29 | 128
30 |
31 |
32 |
33 | 3
34 | MSR
35 | 128
36 |
37 |
38 |
39 | 4
40 | Primary
41 | true
42 |
43 |
44 |
45 |
46 |
47 | 1
48 | 1
49 |
50 | NTFS
51 | DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
52 |
53 |
54 |
55 | 2
56 | 2
57 |
58 | FAT32
59 |
60 |
61 |
62 | 3
63 | 3
64 |
65 |
66 |
67 | 4
68 | 4
69 |
70 | C
71 | NTFS
72 |
73 |
74 |
75 | OnError
76 |
77 |
78 | true
79 | Never
80 |
81 |
82 |
83 |
84 | 0
85 | 4
86 |
87 | false
88 |
89 |
90 |
91 |
92 | 1
93 | reg add HKLM\System\Setup\LabConfig /v BypassRAMCheck /t REG_DWORD /d 0x00000001 /f
94 |
95 |
96 |
97 | false
98 | Never
99 |
100 |
101 | false
102 |
103 | VK7JG-NPHTM-C97JM-9MPGT-3V66T
104 | Never
105 |
106 |
107 |
108 |
109 |
110 |
115 |
116 |
117 | E:\amd64\w11
118 |
119 |
120 | E:\Balloon\w11\amd64
121 |
122 |
123 | E:\fwcfg\w11\amd64
124 |
125 |
126 | E:\NetKVM\w11\amd64
127 |
128 |
129 | E:\qemupciserial\w11\amd64
130 |
131 |
132 | E:\qxldod\w10\amd64
133 |
134 |
135 | E:\smbus\w11\amd64
136 |
137 |
138 | E:\sriov\w11\amd64
139 |
140 |
141 | E:\viofs\w11\amd64
142 |
143 |
144 | E:\viogpudo\w11\amd64
145 |
146 |
147 | E:\vioinput\w11\amd64
148 |
149 |
150 | E:\viorng\w11\amd64
151 |
152 |
153 | E:\vioscsi\w11\amd64
154 |
155 |
156 | E:\vioserial\w11\amd64
157 |
158 |
159 | E:\viostor\w11\amd64
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 | *
168 |
169 |
170 |
171 |
--------------------------------------------------------------------------------
/config/Unattend.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
15 |
16 | true
17 |
18 |
19 | 1
20 |
21 |
22 |
23 |
24 |
25 |
26 | Snapcrafters
27 | SnapVM
28 | 24/7
29 |
30 | Snapcrafters
31 | https://github.com/diddlesnaps/clouds/issues
32 |
33 | Snapcrafters
34 | VK7JG-NPHTM-C97JM-9MPGT-3V66T
35 |
36 |
37 | 0
38 |
39 |
40 |
41 |
42 |
43 |
44 | true
45 | false
46 | true
47 | false
48 | true
49 | Home
50 | 3
51 | false
52 | false
53 |
54 | true
55 |
56 |
57 |
58 |
59 |
60 | default-user
61 | default-user
62 | Administrators;PowerUsers
63 |
64 | UABhAHMAcwB3AG8AcgBkAA==
65 | false
66 |
67 |
68 |
69 |
70 |
71 |
72 | 1
73 | net user "default-user" /logonpasswordchg:yes
74 |
75 |
76 | msiexec /i E:\guest-agent\qemu-ga-x86_64.msi /quiet /passive /qn
77 | Install Virtio Guest Agent
78 | 2
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/config/hosts:
--------------------------------------------------------------------------------
1 | # Copyright (c) 1993-2009 Microsoft Corp.
2 | #
3 | # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
4 | #
5 | # This file contains the mappings of IP addresses to host names. Each
6 | # entry should be kept on an individual line. The IP address should
7 | # be placed in the first column followed by the corresponding host name.
8 | # The IP address and the host name should be separated by at least one
9 | # space.
10 | #
11 | # Additionally, comments (such as these) may be inserted on individual
12 | # lines or following the machine name denoted by a '#' symbol.
13 | #
14 | # For example:
15 | #
16 | # 102.54.94.97 rhino.acme.com # source server
17 | # 38.25.63.10 x.acme.com # x client host
18 |
19 | # localhost name resolution is handled within DNS itself.
20 | # 127.0.0.1 localhost
21 | # ::1 localhost
22 |
23 | 127.0.0.1 ztd.dds.microsoft.com cs.dds.microsoft.com
24 | ::1 ztd.dds.microsoft.com cs.dds.microsoft.com
25 |
26 |
--------------------------------------------------------------------------------
/downloader/index.mjs:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import { exec } from 'child_process';
4 | import fetch from 'node-fetch'
5 | import { randomUUID } from 'crypto';
6 |
7 | (async function() {
8 | try {
9 | const locale = Intl.DateTimeFormat().resolvedOptions().locale
10 | const session_id = randomUUID()
11 |
12 | let edition = await new Promise((resolve, reject) => {
13 | exec(`yad --entry --center --title='Choose Windows edition' --entry-label="Edition" "Windows 10" "Windows 11"`, (error, stdout, stderr) => {
14 | if (error) {
15 | reject('Cancelled the operation')
16 | } else {
17 | resolve(stdout.trim())
18 | }
19 | })
20 | })
21 |
22 | let sku = 'windows11'
23 | if (edition === "Windows 10") {
24 | sku = 'windows10ISO'
25 | }
26 |
27 | const url = `https://www.microsoft.com/en-us/software-download/${sku}`
28 |
29 | let res = await fetch(url)
30 | let body = await res.text()
31 |
32 | const product_id = body.match(/