Additional permissions arguments can be defined in the manifest to give access to several features of the hostsystem. Flatpak developers are always adding new permissions but the goal of a flatpak it should only request as much as it needs and not be over permissive .
More on [Sandbox Permissions Reference](https://docs.flatpak.org/en/latest/sandbox-permissions-reference.html)
All permissions can be even overridden by the user doing cli commands or using flatseal to add more permissions.
Example arguments:
```
finish-args:
- --share=ipc
- --share=network
- --device=all
- --filesystem=home
- --filesystem=/run/media
- --filesystem=/media
- --filesystem=/media
```
In this example we're telling the flatpak:
Enable ipc and networking
```
--share=ipc
--share=network
```
Have access to all plugged in devices, such as controllers and webcams.
```
--device=all
```
Have access to file systems paths for the entire home catalog and plugged in Disks / SDCards and USB Storage.
This is just downloading the file from the defined url, unzip it (automatically as it's defined as archive) and executing the build-commands, a copy in this case.
This module is downloading that archive, extracting it, setting the config options, executing cmake-ninja and deleting the paths defined in the cleanup.
To be published on Flathub (the Flatpak main store) an appdata file is needed, the appdata, in our case net.retrodeck.retrodeck.appdata.xml contains all the information useful for the store, for example official name, website links, screenshots links, version notes and so on.
A good way to learn how to write modules is to search on flathub's GitHub for other modules to get an idea, however our manifest is more or less using every module type possible.