halkyon/snap/snapcraft.yaml
Tizian 「ティツィアーン」 89a3784df4
chore: the website is halkyon.app/learn
Halkyon's website is one site for all its apps, as Proton's is, so
Halkyon Learn's page is halkyon.app/learn rather than a site of its own
at learn.halkyon.app, which redirects there. The snap's and the F-Droid
repository's listings point to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-10 09:46:49 +02:00

118 lines
4.2 KiB
YAML

# The Linux app as a Snap, built in LXD on a developer's machine, in the repository
# root:
#
# snapcraft pack
#
# It builds what is committed (the source is this repository's HEAD), never the
# working tree with its build caches, and always for learn.halkyon.eu. Flutter is
# pinned like the local and CI one (FLUTTER_VERSION in .forgejo/workflows/ci.yaml):
# snapcraft's own Flutter plugin can only take a channel and can't pass
# --dart-define, so the build is spelled out below.
name: halkyon-learn
title: Halkyon Learn
base: core24
adopt-info: halkyon-learn # the version, from the app's pubspec.yaml
summary: Learn with flashcards, studied offline and synced between your devices
description: |
Halkyon Learn is a spaced-repetition learning app: studysets of flashcards with
rich text, notes, learning paths and PDFs, reviewed on an FSRS schedule. It works
offline and syncs between your devices.
It starts with an anonymous account; signing in with GitHub later keeps
everything. It connects to learn.halkyon.eu, the project's instance.
license: AGPL-3.0-or-later
source-code: https://code.halkyon.app/project-halkyon/halkyon_learn
# The project's, not an instance's: the app works with any instance.
website: https://halkyon.app/learn
contact: support@halkyon.app
# Reports by mail until people can open an account on the issue tracker.
issues: support@halkyon.app
# The app's icon with rounded corners, made by tool/app_icons.py; also the desktop file's.
icon: snap/gui/halkyon-learn.png
grade: stable
confinement: strict
platforms:
amd64:
lint:
ignore:
# PDFium is loaded by name while the app runs, which the linter can't see.
- library:
- bin/lib/libpdfium.so
apps:
halkyon-learn:
command: bin/halkyon_learn_flutter
# How the session is kept: see snap/local/secret-backend.
command-chain: [bin/secret-backend]
# GTK, WebKitGTK, GStreamer and libsecret come from the GNOME runtime; files
# and the browser go through the desktop's portals.
extensions: [gnome]
plugs:
- network
# GitHub sign-in answers on a loopback address the app listens on.
- network-bind
- audio-playback
# Never connected by itself; whoever connects it by hand gets the keyring.
- password-manager-service
# Lets Serverpod hear from NetworkManager that the network went, and end
# the sync's connection at once rather than after 40 s of silence. Not
# connected by itself until the Store grants it on a forum request;
# without it the app logs the refusal once and works on.
- network-manager-observe
parts:
flutter:
plugin: nil
source: https://github.com/flutter/flutter.git
source-tag: '3.47.5'
source-depth: 1
build-packages:
- clang
- cmake
- curl
- git
- libgtk-3-dev
- lld
- llvm-18
- ninja-build
- pkg-config
- unzip
- xz-utils
- zip
override-build: |
mkdir -p "$CRAFT_PART_INSTALL/usr/libexec" "$CRAFT_PART_INSTALL/usr/bin"
cp -r "$CRAFT_PART_SRC" "$CRAFT_PART_INSTALL/usr/libexec/flutter"
ln -s ../libexec/flutter/bin/flutter "$CRAFT_PART_INSTALL/usr/bin/flutter"
ln -s ../libexec/flutter/bin/dart "$CRAFT_PART_INSTALL/usr/bin/dart"
"$CRAFT_PART_INSTALL/usr/bin/flutter" --disable-analytics
"$CRAFT_PART_INSTALL/usr/bin/flutter" precache --linux
# Needed to build, not in the Snap.
override-prime: ''
halkyon-learn:
after: [flutter]
plugin: nil
source: .
source-type: git
# The sound player links GStreamer, which the GNOME SDK lacks; the GNOME
# runtime brings the same GStreamer (1.24) to run.
build-packages:
- libgstreamer1.0-dev
- libgstreamer-plugins-base1.0-dev
override-build: |
set -eu
export PATH="$CRAFT_STAGE/usr/bin:$PATH"
cd halkyon_learn_flutter
craftctl set version="$(sed -n 's/^version: *\([^+]*\).*/\1/p' pubspec.yaml)"
flutter pub get --enforce-lockfile
flutter build linux --release \
--dart-define=SERVER_URL=https://learn.halkyon.eu/
mkdir -p "$CRAFT_PART_INSTALL/bin"
cp -r build/linux/x64/release/bundle/. "$CRAFT_PART_INSTALL/bin/"
secret-backend:
plugin: dump
source: snap/local
organize:
secret-backend: bin/secret-backend