fix: ISO install - fallback registry, filebrowser noauth, registries

1. registries.conf includes docker.io search + fallback 23.182.128.160
2. First-boot pull_with_fallback() tries primary then fallback registry
3. FileBrowser created with noauth config on persistent volume
4. Backend dynamic registries.json pre-created in ISO
5. Filebrowser password secret created for token flow

Fixes: apps stuck at 0% download, filebrowser not working, dynamic
catalog not loading on fresh installs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-04-12 09:06:12 -04:00
parent 3078d4b69e
commit f586cbc499
6 changed files with 144 additions and 78 deletions

View File

@@ -76,7 +76,7 @@
</div>
</div>
<!-- Action buttons (right side) -->
<!-- Action buttons (right side) triangle layout -->
<div class="gamepad-actions">
<button
class="action-btn action-c"
@@ -84,21 +84,23 @@
@touchend.prevent="up('c')"
@touchcancel.prevent="up('c')"
aria-label="Special"
>C</button>
<button
class="action-btn action-b"
@touchstart.prevent="down('b')"
@touchend.prevent="up('b')"
@touchcancel.prevent="up('b')"
aria-label="Kick"
>B</button>
<button
class="action-btn action-a"
@touchstart.prevent="down('a')"
@touchend.prevent="up('a')"
@touchcancel.prevent="up('a')"
aria-label="Punch"
>A</button>
></button>
<div class="action-row">
<button
class="action-btn action-b"
@touchstart.prevent="down('b')"
@touchend.prevent="up('b')"
@touchcancel.prevent="up('b')"
aria-label="Kick"
></button>
<button
class="action-btn action-a"
@touchstart.prevent="down('a')"
@touchend.prevent="up('a')"
@touchcancel.prevent="up('a')"
aria-label="Punch"
></button>
</div>
</div>
</div>
</template>
@@ -233,20 +235,24 @@ function tap(key: string) { send(key, 'down'); setTimeout(() => send(key, 'up'),
color: rgba(255, 255, 255, 0.8);
}
/* ── Action buttons (A / B / C) ── */
/* ── Action buttons — triangle layout ── */
.gamepad-actions {
display: flex;
gap: 10px;
flex-direction: column;
align-items: center;
flex-shrink: 0;
gap: 6px;
}
.action-row {
display: flex;
gap: 10px;
}
.action-btn {
width: 54px;
height: 54px;
width: 50px;
height: 50px;
border-radius: 50%;
font-size: 18px;
font-weight: 800;
display: flex;
align-items: center;
justify-content: center;
@@ -276,11 +282,11 @@ function tap(key: string) { send(key, 'down'); setTimeout(() => send(key, 'up'),
}
.action-c {
background: rgba(74, 222, 128, 0.2);
border-color: rgba(74, 222, 128, 0.5);
color: #4ade80;
background: rgba(255, 255, 255, 0.12);
border-color: rgba(255, 255, 255, 0.4);
color: #ffffff;
}
.action-c:active {
background: rgba(74, 222, 128, 0.45);
background: rgba(255, 255, 255, 0.3);
}
</style>