# SurviePote — Atlas (Nebula) : configuration plug-and-play Génère `root/distribution.json` pour le launcher Helios (SurviePote, MC 26.3, Fabric Loader 0.20.0). Le launcher lit la distribution à `https://mcpv.ihorizon.org/distribution.json` (cf `launcher/app/assets/js/distromanager.js`). ## 1. Arborescence `root/` ``` atlas/ ├── .env # ROOT=./root, BASE_URL, JAVA_EXECUTABLE (voir §2) ├── SURVIEPOTE.md # ce fichier └── root/ # web root à servir (TNDev: NE PAS committer les .jar, voir .gitignore) ├── distribution.json # fichier généré, servi à https://mcpv.ihorizon.org/distribution.json ├── meta/ │ └── distrometa.json # rss + discord client (globaux) ├── schemas/ # schémas JSON régénérés par `init root` / `g schemas` ├── modpacks/curseforge/ # vide (import CurseForge, inutilisé) └── servers/ └── SurviePote-26.3/ ├── servermeta.json # nom, adresse, discord, main/autoconnect ├── SurviePote-26.3.png # icône serveur (copiée de launcher/build/icon.png) ├── fabricmods/ │ ├── required/ # 31 mods partagés (client+serveur), TOUS requis │ ├── optionalon/ # vide │ └── optionaloff/ # vide ├── files/ │ ├── resourcepacks/FallPack_26.3_v3.1.zip # module File, chemin préservé │ └── shaderpacks/Revelation-dev.zip # module File, chemin préservé └── libraries/ # vide (libs Fabric résolues à la volée via FabricResolver) ``` ## 2. `.env` ```properties JAVA_EXECUTABLE=/run/current-system/sw/bin/java ROOT=./root BASE_URL=https://mcpv.ihorizon.org/ HELIOS_DATA_FOLDER= # DEV ALTERNATIVE (décommenter en dev local): # BASE_URL=http://localhost:8080/ ``` - `BASE_URL` **doit** finir par `/` : c'est le préfixe des URLs dans `distribution.json`. Prod : `https://git.kisakay.com/k/mc/raw/branch/main/atlas/root/` — tous les artefacts (mods, files, repo Fabric) sont versionnés sur git et servis en raw public, aucun hébergeur de fichiers séparé nécessaire. Voir `.env.example`. En dev, passer à `http://localhost:8931/` puis régénérer (`g distro`). - Écart volontaire : la consigne disait `/usr/bin/java`, inexistant sur NixOS ; on pointe vers le binaire réel (`readlink -f $(which java)`). - `HELIOS_DATA_FOLDER` vide = pas de `--installLocal` (pas de dossier Helios local). ## 3. Re-générer ```bash cd atlas npm install # une fois (Node 22 requis, testé en 24.14.0 OK) npm run start -- init root # (re)crée root/meta, root/schemas, root/servers npm run faststart -- g server SurviePote 26.3 --fabric 0.20.0 # un seul serveur # ... peupler fabricmods/ + files/ (voir §4), éditer servermeta.json ... npm run faststart -- g distro # (re)génère root/distribution.json ``` `npm run start` rebuild avant d'exécuter ; `faststart` réutilise `dist/` (plus rapide). Ne **jamais** utiliser `--installLocal` ici (pas de Helios local). ## 4. Où sont mods / files, tri, choix d'implémentation - Source mods : `~/.local/share/PrismLauncher/instances/26.3/minecraft/mods/*.jar` (copie physique par `cp`, pas de symlink). - `fabricmods/required/` (31) : tous les mods **sauf 15 client-only purs** (même logique que `server/`) : sodium, iris, continuity, dynamic-fps, xaerominimap, xaeroworldmap, skinlayers3d, waveycapes, capes, chat_heads, morechathistory, fast-ip-ping, modmenu, appleskin, vanillarice. - Tri : Nebula trie les mods par nom de fichier (`BaseModStructure.getSpecModel`), donc « tri mods auto » = natif, rien à faire. - **Choix resourcepack/shader** : `src/structure/spec_model/module/File.struct.ts` (`MiscFileStructure extends ModuleStructure`, scan récursif, pas de namespaces `required/optionalon/optionaloff`) — contrairement à `FabricModStructure` (cf `ToggleableModule.struct.ts`). Les modules `File` sont donc **toujours requis**. Le choix user « optionnels ON » n'est **pas exprimable** en natif : les mettre en `fabricmods/optionalon` casserait le typage (`Type.FabricMod`, pas de `artifact.path`). → FallPack + Revelation sont en `files/resourcepacks/` et `files/shaderpacks/` (chemins relatifs préservés dans `artifact.path`, URLs sous `.../files/...`). Pour du vrai optionnel, il faudrait patcher Nebula (rendre `MiscFileStructure` toggleable) ou gérer ça côté launcher. ## 5. Servir via HTTP Plus besoin d'hébergeur : tout est servi en raw git public (`BASE_URL=https://git.kisakay.com/k/mc/raw/branch/main/atlas/root/`). `distribution.json` : `https://git.kisakay.com/k/mc/raw/branch/main/atlas/root/distribution.json` (valide : parsé avec `helios-core`, 34 modules, vérifié le 18/10/2026). - Dev local : `cd atlas/root && python3 -m http.server 8931` (+ `.env` → `BASE_URL=http://localhost:8931/`, régénérer, ne pas committer). ## 6. TODO restants - [ ] Discord Rich Presence : `root/meta/distrometa.json` → `discord.clientId` vide (+ `smallImageText/Key` vides) — mettre le vrai clientId ou supprimer l'objet. - [ ] RSS : `root/meta/distrometa.json` → `rss` vide — mettre l'URL du flux ou laisser vide. - [ ] Discord serveur : placeholder `SurviePote / seal-circle` dans `servermeta.json` — valider `largeImageKey` (asset du portail Discord). - [ ] Icône : `SurviePote-26.3.png` = copie de `launcher/build/icon.png` (143 K) ; le champ `icon` de `servermeta.json` garde le texte d'aide (URL invalide), Nebula utilise donc le PNG (voir `Server.struct.ts` : fallback fichier). Remplacer par une vraie icône si besoin. - [ ] `BASE_URL` finale : vérifier `https://mcpv.ihorizon.org/` + déploiement du contenu de `root/` à la racine web, puis tester le launcher en prod. - [ ] Client-only exclus (sodium, iris, xaero…) : si les clients doivent les recevoir via le launcher, les ajouter en `fabricmods/optionalon/` (actuellement exclus, logique serveur). - [ ] Ne pas committer les binaires (`root/servers/**`, `root/distribution.json` à décider) — ajouter au `.gitignore` si besoin.