AkurAI Build
Menu

BifrOSt-Apps

public

Latest change f67fd8437552caf5eb9371b0012e81d27c807ca3 - Add native RÚV television application by Ólafur Búi Ólafsson

# BifrOSt Apps

[![Validate app template](https://github.com/olibuijr/BifrOSt-Apps/actions/workflows/validate-template.yml/badge.svg)](https://github.com/olibuijr/BifrOSt-Apps/actions/workflows/validate-template.yml)
[![Validate RÚV](https://github.com/olibuijr/BifrOSt-Apps/actions/workflows/validate-ruv.yml/badge.svg)](https://github.com/olibuijr/BifrOSt-Apps/actions/workflows/validate-ruv.yml)

First-party, sandboxed desktop applications for the [BifrOSt operating system](https://github.com/olibuijr/BifrOSt).

This repository owns application source, Flatpak manifests, application metadata, translations, tests, and unsigned release candidates. The operating-system repository owns the Update Assistant, embedded trust root, signed Flatpak catalog, signing policy, and publication tooling.

## Current status

The first real application, [`org.bifrost.Ruv`](apps/ruv), is committed as
source for review and development. It is a Rust and libcosmic television
application for RÚV news, schedules, search, video on demand, and live RÚV and
RÚV 2 playback. Source availability is not publication: no application from
this repository has yet been signed or published to the production BifrOSt
catalog, so the Update Assistant does not offer RÚV at this revision.

`org.bifrost.TemplateCheck` is still generated temporarily by tests and CI to
validate the shared Python/GTK template. It is not a product or release
candidate and must never be submitted to the trusted catalog.

## Create an application

Generate a complete Python, GTK 4, and Libadwaita application on the GNOME 50 Flatpak runtime:

```bash
python3 scripts/new-app.py \
  org.bifrost.Notes \
  "BifrOSt Notes" \
  --name-is "BifrOSt-glósur" \
  --summary "Write focused local notes" \
  --summary-is "Skrifaðu hnitmiðaðar staðbundnar glósur" \
  --description "Create, organize, and search local notes in a focused desktop application designed for BifrOSt." \
  --description-is "Búðu til, skipuleggðu og leitaðu í staðbundnum glósum með hnitmiðuðu BifrOSt-forriti."
```

The default destination is `apps/notes/`. The generated application is runnable rather than an empty scaffold. Before release, replace its generic icon and status page with the application's real workflow.

The generator intentionally remains the conservative Python, GTK 4, and
Libadwaita default. RÚV is a product-specific exception built in Rust 2024 with
current libcosmic because its television interface and embedded
GStreamer-backed playback need a native COSMIC rendering stack. Do not copy
that exception into the shared generator or create a second template until
another real application establishes the same need.

The generator establishes these invariants:

- an `org.bifrost.<PascalCaseName>` application ID;
- matching executable, desktop, icon, AppStream, and gettext identities;
- English and Icelandic desktop and AppStream metadata;
- a `stable` Flatpak branch on the GNOME 50 runtime;
- Wayland, fallback X11, and GPU access without home-directory or network access;
- a local MIT project license and CC0 AppStream metadata license.

## Validate and build

Run the generator contract tests:

```bash
python3 -m unittest discover -s tests -v
```

For a generated application:

```bash
desktop-file-validate apps/notes/data/org.bifrost.Notes.desktop
appstreamcli validate --no-net apps/notes/data/org.bifrost.Notes.metainfo.xml
flatpak-builder --user --install-deps-from=flathub --force-clean \
  --default-branch=stable build/notes apps/notes/org.bifrost.Notes.yml
```

Validate the committed RÚV application separately:

```bash
cargo test --locked --manifest-path apps/ruv/Cargo.toml
desktop-file-validate apps/ruv/data/org.bifrost.Ruv.desktop
appstreamcli validate --no-net apps/ruv/data/org.bifrost.Ruv.metainfo.xml
flatpak-builder --user --install-deps-from=flathub --force-clean \
  --default-branch=stable build/ruv apps/ruv/org.bifrost.Ruv.yml
```

RÚV commits both `Cargo.lock` and the Flatpak Cargo source manifest so its
Flatpak build can run `cargo --offline --locked`. After an intentional
dependency update, regenerate and review them together:

```bash
cargo generate-lockfile --manifest-path apps/ruv/Cargo.toml
python3 /path/to/flatpak-builder-tools/cargo/flatpak-cargo-generator.py \
  apps/ruv/Cargo.lock -o apps/ruv/cargo-sources.json
cargo test --locked --manifest-path apps/ruv/Cargo.toml
```

Install and launch only from a local test repository or bundle. Do not point development builds at the trusted production catalog.

## Release boundary

Application CI may produce an unsigned `.flatpak` candidate plus its SHA-256 digest, source revision, manifest, and build log. It must not possess the BifrOSt application-release private key or publish to the trusted catalog.

After review, a release operator uses [`dispatch-app-release.py`](https://github.com/olibuijr/BifrOSt/blob/main/dispatch-app-release.py) in the operating-system repository. That command stages the candidate, restricts refs to `org.bifrost.*`, signs commits and repository metadata, and publishes the catalog consumed by BifrOSt Update Assistant.

See the operating-system repository's [application update documentation](https://github.com/olibuijr/BifrOSt#bifrost-application-updates) for the signing and publication command.

## What belongs here

Keep independently installable, sandboxed end-user applications here. Keep the installer, Update Assistant, maintenance utility, welcome utility, privileged helpers, OS configuration, signing keys, and catalog publication code in [`olibuijr/BifrOSt`](https://github.com/olibuijr/BifrOSt).

Start applications under `apps/`. Split one into its own repository only when it has a genuinely independent release cadence, contributor group, or access policy.

## License

Application code and the generator are released under the MIT License. Generated AppStream metadata declares CC0-1.0 so software catalogs may redistribute it.