Immagine Fedora atomic (bootc) personale — desktop Niri (compositor scrollable-tiling Wayland) + DankMaterialShell (DMS), costruita in cloud (GitHub Actions → GHCR) e aggiornabile con un comando. Pensata come OS primario in dual-boot con Windows.
- Base default:
ghcr.io/ublue-os/bazzite-gnome-nvidia:stable(come MorrOS) - Login: greetd + DankGreeter (
dms-greeter --command niri) - Approccio: ublue image-template (Containerfile +
build_files/build.sh) — vediNOTES.mdper il perché - Ispirazione / config: MorrOS
Il README spiega come si usa FraOS. Il resto sta in docs/:
| Documento | A cosa serve |
|---|---|
| docs/STATUS.md | ⭐ Parti da qui. Dove siamo, cosa manca, qual è il prossimo passo |
| docs/DECISIONS.md | Ogni scelta di progetto, con data, motivo e conseguenze (D-001…) |
| docs/JOURNAL.md | Diario di bordo: cosa è successo in ogni sessione |
| docs/UPSTREAM.md | Cosa fa MorrOS, cosa recepiamo e cosa no |
| docs/INSTALL.md | Runbook: backup → installazione → primo boot → post-install |
| docs/AI-STACK.md | vLLM e Unsloth su questa GPU: comandi, vincoli, cosa ci gira |
| NOTES.md | Archivio storico della sessione di design (non più aggiornato) |
- Repo su GitHub come
0franky/fraose abilita le Actions (tab Actions). - Firma cosign (obbligatoria, altrimenti la build fallisce allo step di firma):
COSIGN_PASSWORD="" cosign generate-key-pair gh secret set SIGNING_SECRET < cosign.key # la CHIAVE PRIVATA come secret git add cosign.pub && git commit -m "add cosign pub" # NON committare mai cosign.key (è in .gitignore)
git push→ la Action Build FraOS costruisce e pubblica sughcr.io/0franky/fraos:latest.
Se lo username GHCR non è
0franky, aggiorna il riferimento indisk_config/iso.tomle nei comandi qui sotto.
- Prima installazione (PC vuoto): genera l'ISO con la Action build-disk (o
just build-iso), installala; il kickstart rebasa automaticamente sughcr.io/0franky/fraos:latest. - Da un sistema atomico già installato (Bazzite/Bluefin/Fedora Atomic):
sudo bootc switch ghcr.io/0franky/fraos:latest # poi reboot
| Operazione | Comando / azione |
|---|---|
| Aggiornare all'ultima immagine | sudo bootc upgrade (o automatico via timer ublue) |
| Tornare indietro | sudo bootc rollback |
| Bump (ricostruzione su base+pacchetti aggiornati) | automatico ogni giorno (cron in build.yml); manuale: Run workflow |
| Aggiungere un pacchetto system | aggiungi dnf -y install X in build_files/build.sh → push → bootc upgrade |
| Provare un pacchetto al volo (temporaneo) | rpm-ostree install X sulla macchina (poi, se ok, mettilo in build.sh) |
| CLI user-space | brew install X |
| App GUI | flatpak install X |
| Roba Python (torch, vLLM, …) | mai rpm-ostree: venv nella home o container — vedi docs/AI-STACK.md |
La Action Build FraOS variants (manuale) pubblica i tag alternativi. Poi, sulla stessa
installazione, bootc switch scambia l'immagine (la precedente resta come rollback):
sudo bootc switch ghcr.io/0franky/fraos:bluefin # dev-oriented, Secure Boot ON → switch liscio
sudo bootc switch ghcr.io/0franky/fraos:rakuos # kernel CachyOS, Secure Boot OFF → toggle BIOS
sudo bootc switch ghcr.io/0franky/fraos:bazzite # torna alla defaultLe config vivono nel repo, vengono copiate in /etc/skel durante la build e finiscono
in ~/.config/... al primo login di un nuovo utente. Puoi modificarle/cancellarle liberamente.
| Config | Sorgente (repo) | In immagine | Runtime utente |
|---|---|---|---|
| kitty (importata da MorrOS) | build_files/dot_config/kitty/{kitty,dank-theme,dank-tabs}.conf |
/etc/skel/.config/kitty/ |
~/.config/kitty/ |
| niri | build_files/dot_config/niri/config.kdl |
/etc/skel/.config/niri/config.kdl |
~/.config/niri/config.kdl |
| DMS include niri | (placeholder vuoti; DMS li rigenera) | /etc/skel/.config/niri/dms/*.kdl |
~/.config/niri/dms/*.kdl |
| greetd / DankGreeter | generato in build.sh |
/etc/greetd/config.toml |
(system) |
| Flatpak first-boot | generato in build.sh |
/usr/share/fraos/flatpaks.list |
installati al 1° boot |
Patch applicate alla niri config di MorrOS (per non ereditare cose sue/rotte):
- rimosso
ssh-addhardcoded su/home/morro/... Mod+T→kitty(alacritty non installato)- launcher
Mod+D→dms ipc call spotlight toggle(noctalia non installato) - aggiunto avvio
xwayland-satellite(app X11 sotto Niri)
La lista dei task aperti vive in docs/STATUS.md — checklist della fase corrente, decisioni ancora aperte e rischi noti. Non duplicarla qui.
Containerfile # base (ARG BASE_IMAGE) + brew + esegue build.sh
build_files/
build.sh # TUTTE le personalizzazioni system (pacchetti, servizi, greetd)
dot_config/{kitty,niri}/ # config spedite in /etc/skel
disk_config/ # config ISO/disk (bootc-image-builder)
.github/workflows/
build.yml # build primaria Bazzite + cron (bump)
build-variants.yml # build on-demand bluefin/rakuos (prova le 3)
build-disk.yml # generazione ISO installabile
Justfile # build/vm/iso in locale
docs/ # SSOT: STATUS, DECISIONS, JOURNAL, UPSTREAM, INSTALL, AI-STACK
tools/check-packages.sh # valida i nomi pacchetto senza costruire (da lanciare prima di ogni push)
NOTES.md # archivio storico della sessione di design