halkyon/deploy/.env.example
Tizian 「ティツィアーン」 a2441ecdf2
feat(dictionary): German, Greek, English, Chinese and Korean words
A studyset in German, Greek, English, Chinese or Korean finds its
dictionary as one in Japanese does (ADR 0008), and its subtitles are cut
into words by its language (`WordCutting`): Chinese by its longest
words as they stand, the longer words over each cut offered as for
Japanese; Korean at its spaces, a word the dictionary lacks as it stands
taken without the particle it ends with (집에서 is 집, 아이 stays a
child); every other language at its spaces, a word written exactly so
first (the noun Essen before the verb essen). A studyset finds the
dictionary of its language tag, else of its language alone (zh for
zh-Hans).

A Wiktionary word shows its genders, principal forms, IPA, romanisation
and Hanja; a German or Greek noun of one gender goes onto its card with
its article (das Haus, το σπίτι); its tag is its word class, named in
full (Noun, Adjective, Preposition), as Wiktionary's adj and adv would
read as JMdict's codes. Articles, pronouns, prepositions and
conjunctions are left out of a video's words. Chinese words show their
pinyin over each character on the Watch screen, carry their HSK level
as a tag (HSK-1 … HSK-7-9), and the dictionary adds a level whole; the
Watch screen filters by HSK levels for Chinese, JLPT's for Japanese, and
by none for a language without. A reading is typed in a session only
when it is kana, so pinyin isn't. Words are looked up on the web on
Jisho in Japanese, on Wiktionary at the language's section otherwise,
and a search's hint speaks of kana and romaji only in Japanese.

`DICTIONARY_LANGUAGES` in deploy/.env names the languages an instance
keeps (unset: de,el,en,ko,zh; empty: none).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-14 09:39:30 +02:00

66 lines
3.6 KiB
Shell

# Copy to deploy/.env, restrict it (chmod 600), and fill in. deploy/.env is git-ignored
# and never goes into an image. How it reaches the server is decided when the server is
# set up (e.g. rendered from Proton Pass on the deploying machine and copied over SSH,
# so the server itself never holds Proton credentials).
# `http://localhost` for the local rehearsal; `learn.halkyon.eu` on its server.
DOMAIN=http://localhost
# Sidecars switched on beside the instance (sidecars/README.md), each by its compose file
# after the instance's own: compose.jellyfin.yaml, a Jellyfin people watch and listen to
# learn from. Unset: the instance alone.
#COMPOSE_FILE=compose.yaml:compose.jellyfin.yaml
# With the Jellyfin sidecar: the domain it answers at, which the instance then suggests
# to its people (the app's Jellyfin sign-in fills it in).
#JELLYFIN_DOMAIN=jellyfin.example.org
# Postgres password, shared by the postgres and server services.
# Generate: openssl rand -base64 32
POSTGRES_PASSWORD=
# Pepper for hashing session keys (server-side sessions). NEVER change it once
# sessions exist: everyone would be signed out, and anonymous accounts can't sign
# back in. Rotation only via fallbackSessionKeyHashPeppers.
# Generate: openssl rand -base64 32
SESSION_KEY_HASH_PEPPER=
# GitHub sign-in (optional): the client ID and secret of this instance's own GitHub
# OAuth app (GitHub → Settings → Developer settings → OAuth Apps), registered with the
# callback URLs app.halkyon.learn://github-callback and http://127.0.0.1/github-callback.
# Empty: GitHub sign-in is off, and the app doesn't offer it.
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
# Where the source of what this instance runs is, shown in the app's About dialog: both
# licences (AGPL for the app, SSPL for the server) require offering it to the people who
# use the instance. Empty: the project's repository, which is right for unmodified code.
# Running modified code, set it to where your modified source is published.
SOURCE_URL=
# The languages besides Japanese whose dictionaries this instance keeps (the dictionaries
# service): Chinese from CC-CEDICT, weekly (some 4 MB), in simplified and traditional
# characters; the rest from Wiktionary (German, Greek and Korean with English meanings,
# English with German ones), whose whole dump (some 3 GB) it downloads whenever
# kaikki.org makes a new one, about monthly, and converts in ten minutes. Unset:
# de,el,en,ko,zh. Empty: none.
#DICTIONARY_LANGUAGES=de,el,en,ko,zh
# The Jellyfin server the app suggests to this instance's people, who watch and listen
# to learn from it (Halkyon Learn's Watch screen). Empty: `https://jellyfin.` on the
# domain registered for this instance (learn.example.org → jellyfin.example.org), if a
# Jellyfin server answers there; `none`: no suggestion.
JELLYFIN_URL=
# How much room people's images and sounds may take on this instance, in MiB. Empty: the
# defaults, 100 for an anonymous person (anonymous accounts are meant to become identified
# ones), 500 for one signed in with GitHub, and 15000 for everyone together (0: no limit
# for everyone together). Every file is in the database, so also in each of the 3 dumps
# this server keeps (and a fourth while a deploy writes its own): files take five times
# their size on the disk. One person may get more than the default; as the operator,
# in deploy/ (their id is their account's, "authUserId"):
# docker compose exec postgres psql -U halkyon_learn -d halkyon_learn -c "INSERT INTO
# file_allowance (\"authUserId\", \"maxBytes\", note) VALUES ('<id>', 2147483648, 'asked by mail')"
FILE_LIMIT_ANONYMOUS_MB=
FILE_LIMIT_IDENTIFIED_MB=
FILE_LIMIT_INSTANCE_MB=