├── .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 | Clouds 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 | Clouds 16 | 17 | 18 | Clouds 19 | 20 | 21 | ![Clouds](https://dashboard.snapcraft.io/site_media/appmedia/2020/03/Screenshot_from_2020-03-06_23-52-55.png "Clouds") 22 | 23 |

Published for with 💝 by Snapcrafters

24 | 25 | ## Install 26 | 27 | sudo snap install clouds 28 | 29 | [![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-white.svg)](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</PlainText> 66 | </Password> 67 | </LocalAccount> 68 | </LocalAccounts> 69 | </UserAccounts> 70 | <FirstLogonCommands> 71 | <SynchronousCommand wcm:action="add"> 72 | <Order>1</Order> 73 | <CommandLine>net user "default-user" /logonpasswordchg:yes</CommandLine> 74 | </SynchronousCommand> 75 | <SynchronousCommand wcm:action="add"> 76 | <CommandLine>msiexec /i E:\guest-agent\qemu-ga-x86_64.msi /quiet /passive /qn</CommandLine> 77 | <Description>Install Virtio Guest Agent</Description> 78 | <Order>2</Order> 79 | </SynchronousCommand> 80 | </FirstLogonCommands> 81 | </component> 82 | </settings> 83 | </unattend> -------------------------------------------------------------------------------- /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(/<option value="([0-9]+)">Windows/i)[1] 33 | 34 | await fetch(`https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=${session_id}`) 35 | 36 | const profile = '606624d44113' 37 | 38 | res = await fetch(`https://www.microsoft.com/software-download-connector/api/getskuinformationbyproductedition?profile=${profile}&ProductEditionId=${product_id}&SKU=undefined&friendlyFileName=undefined&Locale=${locale}&sessionID=${session_id}`) 39 | body = await res.text() 40 | const step1_json = JSON.parse(body) 41 | const languages = step1_json.Skus 42 | 43 | const chosenLang = await new Promise((resolve, reject) => { 44 | exec(`yad --entry --center --title='Choose language' --entry-label=Language ${languages.map(l => `"${l.LocalizedLanguage}"`).join(' ')}`, (error, stdout, stderr) => { 45 | if (error) { 46 | reject('Cancelled the operation') 47 | } else { 48 | resolve(stdout.trim()) 49 | } 50 | }) 51 | }) 52 | const chosenLangObj = languages.find(l => l.LocalizedLanguage === chosenLang) 53 | 54 | res = await fetch(`https://www.microsoft.com/software-download-connector/api/GetProductDownloadLinksBySku?profile=${profile}&productEditionId=undefined&SKU=${chosenLangObj.Id}&friendlyFileName=undefined&Locale=en-US&sessionID=${session_id}`, 55 | { 56 | referrer: url 57 | } 58 | ) 59 | body = JSON.parse(await res.text()) 60 | 61 | const [download] = body.ProductDownloadOptions 62 | console.log(download.Uri) 63 | process.exitCode = 0 64 | } catch (e) { 65 | console.error(e) 66 | process.exitCode = 1 67 | } 68 | }()) 69 | -------------------------------------------------------------------------------- /downloader/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "downloader", 3 | "version": "1.0.0", 4 | "description": "", 5 | "private": "true", 6 | "bin": { 7 | "downloader": "./index.mjs" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "author": "", 13 | "license": "MIT", 14 | "dependencies": { 15 | "node-fetch": "^3.3.2" 16 | }, 17 | "devDependencies": { 18 | "@types/node-fetch": "^2.6.12" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /downloader/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node-fetch@^2.6.12": 6 | version "2.6.12" 7 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" 8 | integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== 9 | dependencies: 10 | "@types/node" "*" 11 | form-data "^4.0.0" 12 | 13 | "@types/node@*": 14 | version "22.14.0" 15 | resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.0.tgz#d3bfa3936fef0dbacd79ea3eb17d521c628bb47e" 16 | integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== 17 | dependencies: 18 | undici-types "~6.21.0" 19 | 20 | asynckit@^0.4.0: 21 | version "0.4.0" 22 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 23 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 24 | 25 | call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: 26 | version "1.0.2" 27 | resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" 28 | integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== 29 | dependencies: 30 | es-errors "^1.3.0" 31 | function-bind "^1.1.2" 32 | 33 | combined-stream@^1.0.8: 34 | version "1.0.8" 35 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 36 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 37 | dependencies: 38 | delayed-stream "~1.0.0" 39 | 40 | data-uri-to-buffer@^4.0.0: 41 | version "4.0.1" 42 | resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" 43 | integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== 44 | 45 | delayed-stream@~1.0.0: 46 | version "1.0.0" 47 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 48 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 49 | 50 | dunder-proto@^1.0.1: 51 | version "1.0.1" 52 | resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" 53 | integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== 54 | dependencies: 55 | call-bind-apply-helpers "^1.0.1" 56 | es-errors "^1.3.0" 57 | gopd "^1.2.0" 58 | 59 | es-define-property@^1.0.1: 60 | version "1.0.1" 61 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" 62 | integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== 63 | 64 | es-errors@^1.3.0: 65 | version "1.3.0" 66 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" 67 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 68 | 69 | es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: 70 | version "1.1.1" 71 | resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" 72 | integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== 73 | dependencies: 74 | es-errors "^1.3.0" 75 | 76 | es-set-tostringtag@^2.1.0: 77 | version "2.1.0" 78 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" 79 | integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== 80 | dependencies: 81 | es-errors "^1.3.0" 82 | get-intrinsic "^1.2.6" 83 | has-tostringtag "^1.0.2" 84 | hasown "^2.0.2" 85 | 86 | fetch-blob@^3.1.2, fetch-blob@^3.1.4: 87 | version "3.2.0" 88 | resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" 89 | integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== 90 | dependencies: 91 | node-domexception "^1.0.0" 92 | web-streams-polyfill "^3.0.3" 93 | 94 | form-data@^4.0.0: 95 | version "4.0.2" 96 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" 97 | integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== 98 | dependencies: 99 | asynckit "^0.4.0" 100 | combined-stream "^1.0.8" 101 | es-set-tostringtag "^2.1.0" 102 | mime-types "^2.1.12" 103 | 104 | formdata-polyfill@^4.0.10: 105 | version "4.0.10" 106 | resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" 107 | integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== 108 | dependencies: 109 | fetch-blob "^3.1.2" 110 | 111 | function-bind@^1.1.2: 112 | version "1.1.2" 113 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 114 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 115 | 116 | get-intrinsic@^1.2.6: 117 | version "1.3.0" 118 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" 119 | integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== 120 | dependencies: 121 | call-bind-apply-helpers "^1.0.2" 122 | es-define-property "^1.0.1" 123 | es-errors "^1.3.0" 124 | es-object-atoms "^1.1.1" 125 | function-bind "^1.1.2" 126 | get-proto "^1.0.1" 127 | gopd "^1.2.0" 128 | has-symbols "^1.1.0" 129 | hasown "^2.0.2" 130 | math-intrinsics "^1.1.0" 131 | 132 | get-proto@^1.0.1: 133 | version "1.0.1" 134 | resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" 135 | integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== 136 | dependencies: 137 | dunder-proto "^1.0.1" 138 | es-object-atoms "^1.0.0" 139 | 140 | gopd@^1.2.0: 141 | version "1.2.0" 142 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" 143 | integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== 144 | 145 | has-symbols@^1.0.3, has-symbols@^1.1.0: 146 | version "1.1.0" 147 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" 148 | integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== 149 | 150 | has-tostringtag@^1.0.2: 151 | version "1.0.2" 152 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" 153 | integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== 154 | dependencies: 155 | has-symbols "^1.0.3" 156 | 157 | hasown@^2.0.2: 158 | version "2.0.2" 159 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 160 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 161 | dependencies: 162 | function-bind "^1.1.2" 163 | 164 | math-intrinsics@^1.1.0: 165 | version "1.1.0" 166 | resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" 167 | integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== 168 | 169 | mime-db@1.52.0: 170 | version "1.52.0" 171 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 172 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 173 | 174 | mime-types@^2.1.12: 175 | version "2.1.35" 176 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 177 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 178 | dependencies: 179 | mime-db "1.52.0" 180 | 181 | node-domexception@^1.0.0: 182 | version "1.0.0" 183 | resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" 184 | integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== 185 | 186 | node-fetch@^3.3.2: 187 | version "3.3.2" 188 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" 189 | integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== 190 | dependencies: 191 | data-uri-to-buffer "^4.0.0" 192 | fetch-blob "^3.1.4" 193 | formdata-polyfill "^4.0.10" 194 | 195 | undici-types@~6.21.0: 196 | version "6.21.0" 197 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" 198 | integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== 199 | 200 | web-streams-polyfill@^3.0.3: 201 | version "3.3.3" 202 | resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" 203 | integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== 204 | -------------------------------------------------------------------------------- /egg/CLOUDS.MID: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diddlesnaps/clouds/7c69e88ecddc45f022c0ff2552f5404df3ddf954/egg/CLOUDS.MID -------------------------------------------------------------------------------- /egg/clouds.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diddlesnaps/clouds/7c69e88ecddc45f022c0ff2552f5404df3ddf954/egg/clouds.mp3 -------------------------------------------------------------------------------- /snap/gui/clouds.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Clouds Windows VM 3 | Exec=clouds %U 4 | Terminal=false 5 | Type=Application 6 | Icon=${SNAP}/meta/gui/clouds.png 7 | StartupWMClass=clouds 8 | Comment=Download, install, and run Windows in a VM 9 | -------------------------------------------------------------------------------- /snap/gui/clouds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diddlesnaps/clouds/7c69e88ecddc45f022c0ff2552f5404df3ddf954/snap/gui/clouds.png -------------------------------------------------------------------------------- /snap/local/bin/clouds: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # closing-doors 3 | 4 | function get_wim_imagenum() { 5 | wiminfo "$SNAP_USER_COMMON"/extracted-iso/sources/install.wim --xml | "$SNAP"/bin/guess-wim-imageid.py 6 | } 7 | 8 | function get_windows_name() { 9 | wiminfo "$SNAP_USER_COMMON"/extracted-iso/sources/install.wim "$(get_wim_imagenum)" | \ 10 | awk -F: '/^Display Name/ { gsub(/^[ ]+/,"", $2); print $2 }' 11 | } 12 | 13 | function get_windows_version() { 14 | get_windows_name "$(get_wim_imagenum)" | sed -Ee 's/^Windows ([0-9]+(\.[0-9]+)?) Pro(fessional)?$/\1/' 15 | } 16 | 17 | echo "*** Checking for kvm interface connection" 18 | if snapctl is-connected kvm; then 19 | echo "INFO: kvm interface is connected" 20 | else 21 | echo "ERROR: kvm interface is not connected. Run 'sudo snap connect clouds:kvm' then re-launch clouds." 22 | yad --center --button=OK --title="Error" --text="kvm interface is not connected. Run 'sudo snap connect clouds:kvm' then re-launch clouds." 23 | exit 1 24 | fi 25 | 26 | echo "*** Checking for Downloaded Windows ISO" 27 | if [ ! -f "$SNAP_USER_COMMON"/windows-download.iso ]; then 28 | URL="$($SNAP/bin/downloader)" 29 | RV=$? 30 | echo "INFO: ISO download URL=$URL" 31 | if [ $RV = 0 ] && [ -n "$URL" ]; then 32 | wget "${URL}" -O "$SNAP_USER_COMMON"/windows-download.iso -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" 2>&1 | \ 33 | perl -p -e '$| = 1; s/^.* +([0-9]+%) +([0-9,.]+[GMKB]) +([0-9hms,.]+).*$/\1\n# Downloading Windows ISO image... \2 (\3)/' | \ 34 | yad --progress --title="Windows ISO Image" --width=400 --center --no-buttons --auto-close --auto-kill --on-top --no-escape 35 | 36 | if [ $? = 0 ]; then 37 | echo "INFO: ISO downloaded successfully" 38 | else 39 | echo "ERROR: Failed to download Windows ISO image" 40 | yad --center --button=OK --title="Error" --text="Failed to download Windows ISO image" 41 | exit 1 42 | fi 43 | else 44 | echo "ERROR: Failed to get Windows ISO image download URL" 45 | yad --center --button=OK --title="Error" --text="Failed to get Windows ISO image download URL" 46 | exit 1 47 | fi 48 | fi 49 | 50 | IMAGENUM= 51 | 52 | echo "*** Checking for custom repack of Downloaded Windows ISO" 53 | if [ ! -f "$SNAP_USER_COMMON"/windows-installer.iso ]; then 54 | rm -rf "$SNAP_USER_COMMON"/extracted-iso 55 | 7z x -y -o"$SNAP_USER_COMMON"/extracted-iso "$SNAP_USER_COMMON"/windows-download.iso 56 | 57 | IMAGENUM="$(get_wim_imagenum)" 58 | if [ -z "$IMAGENUM" ]; then 59 | echo "ERROR: There is no Windows Professional SKU in the downloaded ISO file" 60 | exit 1 61 | fi 62 | 63 | wimupdate "$SNAP_USER_COMMON"/extracted-iso/sources/install.wim "$IMAGENUM" <<EOF 64 | add '$SNAP/Unattend.xml' '/Windows/Panther/Unattend/Unattend.xml' 65 | add '$SNAP/hosts' '/Windows/System32/drivers/etc/hosts' 66 | EOF 67 | 68 | cp "$SNAP/Autounattend_win$(get_windows_version).xml" "$SNAP_USER_COMMON"/extracted-iso/Autounattend.xml 69 | genisoimage -udf -l --allow-limited-size -b efi/microsoft/boot/efisys_noprompt.bin -o "$SNAP_USER_COMMON"/windows-installer.iso "$SNAP_USER_COMMON"/extracted-iso 70 | fi 71 | 72 | if [ -d "$SNAP_USER_COMMON"/extracted-iso ] && [ -f "$SNAP_USER_COMMON"/extracted-iso/sources/install.wim ]; then 73 | if [ -z "$IMAGENAME" ]; then 74 | IMAGENAME="$(get_windows_name)" 75 | fi 76 | export QEMU_TITLE="Clouds VM: $IMAGENAME ($SNAP_INSTANCE_NAME)" 77 | fi 78 | 79 | echo "*** Checking for System Disk Image" 80 | if [ ! -f "$SNAP_USER_COMMON"/windows-system.qcow2 ]; then 81 | qemu-img create -f qcow2 "$SNAP_USER_COMMON"/windows-system.qcow2 64G 82 | fi 83 | 84 | echo "*** Checking for launch script" 85 | if [ ! -f "$SNAP_USER_COMMON/launch" ]; then 86 | cp -a "$SNAP"/bin/launch "$SNAP_USER_COMMON"/launch 87 | fi 88 | 89 | if [ ! -f "$SNAP_USER_COMMON/OVMF_VARS.fd" ]; then 90 | cp -a "$SNAP"/usr/share/OVMF/OVMF_VARS_4M.fd "$SNAP_USER_COMMON/OVMF_VARS.fd" 91 | fi 92 | 93 | TPMDIR="$SNAP_USER_COMMON/tpm2" 94 | mkdir -p "$TPMDIR" 95 | export TPM="$TPMDIR"/swtpm-sock 96 | env LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$SNAP/usr/lib/x86_64-linux-gnu/swtpm" \ 97 | "$SNAP"/usr/bin/swtpm socket \ 98 | --tpmstate dir="$TPMDIR" \ 99 | --ctrl type=unixio,path="$TPM" \ 100 | --tpm2 \ 101 | --terminate \ 102 | & 103 | TPMPID=$! 104 | 105 | echo "*** Launch!" 106 | exec "$SNAP_USER_COMMON"/launch 107 | -------------------------------------------------------------------------------- /snap/local/bin/guess-wim-imageid.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from sys import stdin, stdout 4 | import xmltodict 5 | import json 6 | 7 | xmldata = xmltodict.parse(stdin.buffer, encoding='utf-16') 8 | images = xmldata.get('WIM').get('IMAGE') 9 | 10 | editions = { i.get('WINDOWS').get('EDITIONID') : i.get('@INDEX') for i in images } 11 | print(editions.get('Professional')) 12 | -------------------------------------------------------------------------------- /snap/local/bin/launch: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | numthreads="$(lscpu | awk '/Thread\(s\) per core:/ { print $4 }')" 4 | numcores="$(lscpu | awk '/Core\(s\) per socket:/ { print $4 }')" 5 | numsockets="$(lscpu | awk '/Socket\(s\):/ { print $2 }')" 6 | 7 | "$SNAP"/usr/bin/qemu-system-x86_64 \ 8 | -name "$QEMU_TITLE" \ 9 | -enable-kvm \ 10 | -no-hpet \ 11 | -global kvm-pit.lost_tick_policy=discard \ 12 | -global ICH9-LPC.disable_s3=1 \ 13 | -machine q35,smm=on,vmport=off \ 14 | -m 4G \ 15 | -cpu host,kvm=on,+hypervisor,+invtsc,l3-cache=on,migratable=no,hv_passthrough,topoext \ 16 | -smp cores="$numcores",threads="$numthreads",sockets="$numsockets" \ 17 | -device qxl-vga,ram_size=65536,vram_size=65536,vgamem_mb=64 \ 18 | -display sdl,gl=on \ 19 | -audiodev pa,id=pa,out.mixing-engine=off,out.stream-name=clouds-snap,in.stream-name=clouds-snap,server="/run/user/$(id -u)/pulse/native" \ 20 | -device intel-hda -device hda-duplex,audiodev=pa \ 21 | -rtc base=localtime,clock=host,driftfix=slew \ 22 | -device virtio-rng-pci,rng=rng0 \ 23 | -object rng-random,id=rng0,filename=/dev/urandom \ 24 | -device usb-ehci,id=input \ 25 | -device usb-kbd,bus=input.0 \ 26 | -device usb-tablet,bus=input.0 \ 27 | -device virtio-net,netdev=net0 \ 28 | -netdev user,id=net0 \ 29 | -global driver=cfi.pflash01,property=secure,value=on \ 30 | -drive if=pflash,format=raw,unit=0,file="$SNAP"/usr/share/OVMF/OVMF_CODE_4M.secboot.fd,readonly=on \ 31 | -drive if=pflash,format=raw,unit=1,file="$SNAP_USER_COMMON"/OVMF_VARS.fd \ 32 | -drive media=cdrom,index=0,file="$SNAP_USER_COMMON"/windows-installer.iso \ 33 | -drive media=cdrom,index=1,file="$SNAP"/virtio-win.iso \ 34 | -device virtio-scsi-pci,id=scsi0 \ 35 | -device scsi-hd,drive=SystemDisk,bus=scsi0.0,lun=0,rotation_rate=1 \ 36 | -drive id=SystemDisk,if=none,format=qcow2,file="$SNAP_USER_COMMON"/windows-system.qcow2,discard=unmap \ 37 | -chardev socket,id=chrtpm,path="$TPM" \ 38 | -tpmdev emulator,id=tpm0,chardev=chrtpm \ 39 | -device tpm-tis,tpmdev=tpm0 \ 40 | ; 41 | -------------------------------------------------------------------------------- /snap/snapcraft.yaml: -------------------------------------------------------------------------------- 1 | name: clouds 2 | base: core22 3 | assumes: 4 | - snapd2.43 5 | version: '0.666' 6 | summary: Download, install, and run Windows in a VM 7 | description: | 8 | Download, install, and run Windows 10 or 11 in a VM. 9 | 10 | The app will walk you through downloading a Windows DVD image, and launch the installation. Most of the installation is automated to reduce the chance of errors while installing. Once Windows is installed Clouds will boot directly into the operating system whenever you launch the app. 11 | 12 | grade: stable 13 | confinement: strict 14 | compression: lzo 15 | 16 | architectures: 17 | - build-on: amd64 18 | 19 | layout: 20 | /usr/lib/$CRAFT_ARCH_TRIPLET/qemu: 21 | bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/qemu 22 | /usr/lib/ipxe: 23 | bind: $SNAP/usr/lib/ipxe 24 | /usr/lib/p7zip: 25 | bind: $SNAP/usr/lib/p7zip 26 | /usr/share/libdrm: 27 | bind: $SNAP/usr/share/libdrm 28 | /usr/share/seabios: 29 | bind: $SNAP/usr/share/seabios 30 | /usr/share/qemu: 31 | bind: $SNAP/usr/share/qemu 32 | 33 | environment: 34 | PYTHONHOME: $SNAP/gnome-platform/usr 35 | PYTHONPATH: $SNAP/usr/lib/python3/dist-packages 36 | 37 | apps: 38 | clouds: 39 | extensions: [gnome] 40 | command: bin/clouds 41 | plugs: 42 | - audio-playback 43 | - audio-record 44 | - home 45 | - kvm 46 | - network 47 | - network-bind 48 | - network-control 49 | - raw-usb 50 | - removable-media 51 | - screen-inhibit-control 52 | mid: 53 | command: usr/bin/fluidsynth -nia pulseaudio $SNAP/soundfont.sf3 $SNAP/CLOUDS.MID 54 | extensions: [gnome] 55 | plugs: 56 | - audio-playback 57 | mp3: 58 | command: usr/bin/mpg123.bin -o pulse $SNAP/clouds.mp3 59 | environment: 60 | MPG123_MODDIR: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/mpg123 61 | extensions: [gnome] 62 | plugs: 63 | - audio-playback 64 | 65 | parts: 66 | npm-deps: 67 | plugin: dump 68 | source: https://nodejs.org/dist/v16.18.0/node-v16.18.0-linux-x64.tar.xz 69 | stage: 70 | - -include 71 | - -share 72 | prime: 73 | - -bin/corepack 74 | - -bin/npm 75 | - -bin/npx 76 | - -lib 77 | 78 | downloader: 79 | after: [npm-deps] 80 | plugin: npm 81 | source: downloader 82 | 83 | config: 84 | plugin: dump 85 | source: config 86 | build-packages: 87 | - genisoimage 88 | - wimtools 89 | 90 | egg: 91 | plugin: dump 92 | source: egg 93 | stage-packages: 94 | - fluidsynth 95 | - mpg123 96 | stage: 97 | - -etc/default 98 | - -usr/lib/mime 99 | - -usr/lib/systemd 100 | 101 | soundfont: 102 | plugin: dump 103 | source: egg 104 | override-pull: | 105 | curl -o soundfont.sf3 https://ftp.osuosl.org/pub/musescore/soundfont/MuseScore_General/MuseScore_General.sf3 106 | stage: 107 | - -README 108 | build-packages: 109 | - curl 110 | 111 | virtio-drivers: 112 | plugin: dump 113 | source: config 114 | override-pull: | 115 | wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso -O virtio-win.iso 116 | build-packages: 117 | - wget 118 | 119 | clouds: 120 | plugin: dump 121 | source: snap/local 122 | stage-packages: 123 | - qemu-system-gui 124 | - qemu-system-x86 125 | - qemu-utils 126 | - yad # to do dialogs 127 | - ovmf 128 | - seabios 129 | - swtpm 130 | - fonts-ubuntu 131 | - cpu-checker 132 | - genisoimage 133 | - p7zip-full 134 | - python3-xmltodict 135 | - util-linux 136 | - wget 137 | - wimtools 138 | stage: 139 | - -bin/chacl 140 | - -bin/getfacl 141 | - -bin/setfacl 142 | - -etc/apparmor.d 143 | - -etc/default 144 | - -etc/init.d 145 | - -etc/X11 146 | - -lib/systemd 147 | - -usr/share/applications 148 | - -usr/share/icons 149 | - -usr/lib/ipxe/*.rom 150 | - -usr/lib/ipxe/qemu/efi-e1000.rom 151 | - -usr/lib/ipxe/qemu/efi-e1000e.rom 152 | - -usr/lib/ipxe/qemu/efi-eepro100.rom 153 | - -usr/lib/ipxe/qemu/efi-ne2k_pci.rom 154 | - -usr/lib/ipxe/qemu/efi-pcnet.rom 155 | - -usr/lib/ipxe/qemu/efi-rtl8139.rom 156 | - -usr/lib/ipxe/qemu/efi-vmxnet.rom 157 | - -usr/lib/ipxe/qemu/pxe-*.rom 158 | - -usr/lib/$CRAFT_ARCH_TRIPLET/gdk-pixbuf-2.0 159 | - -usr/lib/$CRAFT_ARCH_TRIPLET/gtk-3.0 160 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libatk-1.0* 161 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libcairo* 162 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libdecor-0* 163 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libgdk-3* 164 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libgtk-3* 165 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libharfbuzz* 166 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libpango* 167 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libwayland-* 168 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libXss.so* 169 | - -usr/lib/$CRAFT_ARCH_TRIPLET/libXt.so* 170 | - -usr/share/qemu/bamboo.dtb 171 | - -usr/share/qemu/bios-microvm.bin 172 | - -usr/share/qemu/canyonlands.dtb 173 | - -usr/share/qemu/hppa-firmware.img 174 | - -usr/share/qemu/openbios-ppc 175 | - -usr/share/qemu/openbios-sparc32 176 | - -usr/share/qemu/openbios-sparc64 177 | - -usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.bin 178 | - -usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf 179 | - -usr/share/qemu/qboot.rom 180 | - -usr/share/qemu/s390-ccw.img 181 | - -usr/share/qemu/s390-netboot.img 182 | - -usr/share/qemu/skiboot.lib 183 | - -usr/share/qemu/slof.bin 184 | - -usr/share/qemu/trace-events-all 185 | - -usr/share/qemu/vof.bin 186 | 187 | cleanup: 188 | after: 189 | - clouds 190 | - config 191 | - egg 192 | - downloader 193 | - virtio-drivers 194 | plugin: nil 195 | build-snaps: [gnome-42-2204] # List all content-snaps and base snaps you're using here 196 | override-prime: | 197 | set -eux 198 | for snap in "gnome-42-2204"; do # List all content-snaps and base snaps you're using here 199 | cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$CRAFT_PRIME/{}" \; 200 | done 201 | for CRUFT in aclocal bug info lintian man; do 202 | rm -rf $CRAFT_PRIME/usr/share/$CRUFT 203 | done 204 | find $CRAFT_PRIME/usr/share/doc/ -type f -not -name 'copyright' -delete 205 | find $CRAFT_PRIME/usr/share -type d -empty -delete 206 | find $CRAFT_PRIME/etc -type d -empty -delete 207 | find $CRAFT_PRIME/usr -type d -empty -delete 208 | --------------------------------------------------------------------------------