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>
118 lines
4.2 KiB
YAML
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
|