Metadata-Version: 2.1
Name: flatpaker
Version: 0.0.6
Summary: Utilities to convert various kinds of native binaries into flatpaks.
Keywords: flatpak,renpy,rpgmaker
Author-email: Dylan Baker <dylan@pnwbakers.com>
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Archiving :: Packaging
Requires-Dist: tomli; python_version<"3.11"
Project-URL: Issues, https://github.com/dcbaker/flatpaker/issues
Project-URL: Repository, https://github.com/dcbaker/flatpaker

# flatpaker

Script to mostly automate creating flatpaks from published Ren'Py and Linux
builds of RPGMaker MV and MZ. Open to additional support

## What is it?

It's a script that automatically handles much of the task of generating a
flatpak for pre-built projects, including adding patches or mods. You
write a small, simple toml file, fetch the sources, and get a ready to publish
flatpak.

It currently automatically does the following automatically:

- Generates an appstream xml file
- Generates a .desktop file
- Extracts an icon from the game source, and installs it
- patches the game to honor `$XDG_DATA_HOME` for storing game data inside the sandbox (instead of needing `$HOME` access)
- allows local install or publishing to a repo
- allows generating static deltas after building
- sets up the sandbox to allow audio and display, but nothing else

For Ren'Py:
- recompiles the program when mods are applied
- strips .rpy files to save space (keeping the rpyc files)
- strips windows and macos specific files
- remove steam integration, which breaks some games

For RPG Maker:
- provides a runtime with a newer nwjs installed, saving disk space
- using this nwjs also gives guaranteed wayland support
- It also allows running MV and MZ games that don't ship Linux builds, using the Windows build

## Why?

I like playing Ren'Py and RPG Maker games sometimes. I also don't always trust
random pre-compiled binaries from the internet. Flatpak provides a nice,
convenient way to sandbox applications. It also makes supporting Steam Deck and
Fedora immutable a breeze. But generating flatpaks by hand is a lot of work,
especially when most of the process will be exactly the same for every project.
It also has a runtime for RPG Maker MZ and MV games that saves disk space and
allows for better features.

## How do I use it?

1. Download the compressed project
2. Download any mods or addons (optional)
3. Write a toml description
4. run `flatpaker --install install-deps` (which adds the runtime and sdk)
5. run `flatpaker --install build *.toml` or `flatpaker --export --gpg-sign build *.toml` (for local install or for export to a shared repo)

### Toml Format

```toml
[common]
  name = 'Game or VN'  # use properly formatted name like "The Cool Adventures of Bob", or "Bob's Quest 7: Lawnmower Confusion"
  reverse_url = 'com.example.JDoe'  # name will be appended
  # "Game" is added automatically
  # used freedesktop menu categories. see: https://specifications.freedesktop.org/menu-spec/latest/apas02.html
  categories = ['Simulation']
  engine = 'renpy'  # Or 'rpgmaker'

[appdata]
  summary = "A short summary, one sentence or so."
  description = """
    A longer description.

    probably on multiple \
    lines
    """

  # This is an optional value for the license of the renpy project itself.
  # If unset it defaults to LicenseRef-Proprietary.
  # if you have specific terms which are not an Open Source license, you can use the form:
  # LicenseRef-Proprietary=https://www.example.com/my-license
  # See: https://spdx.org/specifications for more information
  license = "SPDX identifier"

[appdata.content_rating]
  # optional
  # Uses OARS specifications. See: https://hughsie.github.io/oars/
  # keys should be ids, and the values are must be a rating (as a string):
  # none, mild, moderate, or intense
  language-profanity = "mild"

[appdata.releases]
  # optional
  # in the form "date = version"
  "2023-01-01" = "1.0.0"

# Optional, alternatively may be passed on teh command line
[[sources.archives]]
  # path must be set if this is provided
  path = "relative to toml or absolute path"

  # Optional, defaults to 1. How many directory levels to remove from this component
  strip_comonents = 2

  # Optional, will be automatically calculated if not provided, but providing it can speed up building
  sha256 = "abcd..."

# Optional, cannot be set from command line
[[sources.patches]]
  # path must be set if this is provided
  path = "relative to toml or absolute path"

  # Optional, defaults to 1. How many directory levels to remove from this component
  strip_comonents = 2

# Optional, cannot be set from command line
[[sources.files]]
  # path must be set if this is provided
  path = "relative to toml or absolute path"

  # Optional, if set the file will be installed to this name
  # Does not have to be set for .rpy files that go in the game root directory
  dest = "where to install"

  # Optional, will be automatically calculated if not provided, but providing it can speed up building
  sha256 = "abcd..."
```

Additionally, some games have quirks that make them difficult to package. Some
of these quirks can be worked around:
```toml
[quirks]
  # For Ren'Py only:
  # Force the use of the window_gui.png as the icon, instead of extracting from
  # the .exe of icns. This is useful for games that have the generic Ren'Py
  # icon in the exe, but a custom icon in the tree.
  force_window_gui_icon = true

  # For Ren'Py only:
  # Don't attempt to recompile .py files to .pyc or .pyo. Some older Ren'Py 6.x
  # and 7.x (Python2) based projects don't have enough of the stdlib to actually
  # do the recompile
  no_py_recompile = true
```

Any quirk starting with `x_` or `x-` is an experimental quirk, and may be
removed at any time. If you find yourself relying on them, please open an issue.

### Configuration

Some options can be given on the command line or via a configuration file.
That file must be written to `$XDG_CONFIG_HOME/flatpaker/config.toml` (if unset
`$XDG_CONFIG_HOME` defaults to `~/.config`).

```toml
[common]
  # A gpg private key to sign with, overwritten by the --gpg option
  gpg-key = "0x123456789"

  # The absolute path to a repo to write to. overwritten by the --repo option
  repo = "/path/to/a/repo/to/export"
```


## What is required?

- python 3.11 or a modern version of python3 with tomli
- flatpak-builder

### Schema

A Json based schema is provided, which can be used with VSCode's EvenBetterToml
extension. It may be useful elsewhere.

