# KAMOS - Gaming OS > Play. Perform. Dominate. KAMOS is a personal Bazzite-based bootc image with custom logo, wallpaper, boot splash, and OS branding. Built on top of `ghcr.io/ublue-os/bazzite-nvidia:stable` so the proprietary NVIDIA driver and Bazzite's gaming/desktop tuning come for free. ## Architecture note (important if you're on a Mac) KAMOS is `linux/amd64` only. Bazzite NVIDIA has no ARM64 build and NVIDIA's proprietary driver doesn't run on Apple Silicon anyway. The MacBook M2 is fine as a *build host* (CI does the heavy lifting) and as a *test host* via VMware Fusion's x86_64 emulation, but KAMOS is meant to run on a real NVIDIA PC. ## Layout ``` kamos/ ├── Containerfile # FROM bazzite-nvidia:stable + COPY + RUN build.sh ├── Justfile # build / build-iso / build-qcow2 / lint ├── build_files/ │ └── build.sh # all KAMOS customisation lives here ├── disk_config/ │ └── iso.toml # bootc-image-builder ISO config ├── system_files/ # COPY'd into / inside the image │ └── usr/share/ │ ├── backgrounds/kamos/ # drop kamos-wallpaper.jpg here │ ├── plymouth/themes/kamos/ # boot splash (kamos.plymouth + kamos.script + logo) │ └── pixmaps/ # drop kamos-logo.png here (GRUB logo) ├── .forgejo/workflows/build.yml # primary CI - builds & pushes to Forgejo └── .github/workflows/build.yml # disabled GitHub equivalent (mirror if needed) ``` ## Step 1 — Drop in your KAMOS branding assets The repo has placeholder `DROP_*_HERE.txt` files in the right folders. Replace them with: | Path | What goes here | Recommended size | | --------------------------------------------------------------------- | ------------------------------------------- | --------------------- | | `system_files/usr/share/backgrounds/kamos/kamos-wallpaper.jpg` | Your "Play. Perform. Dominate." wallpaper | 3840x2160 or 1920x1080 | | `system_files/usr/share/plymouth/themes/kamos/kamos-logo.png` | KAMOS logo (raven crest) for boot splash | 256x256 or 512x512, transparent PNG | | `system_files/usr/share/pixmaps/kamos-logo.png` | Same logo, used by GRUB boot menu | 256x256 or 512x512, transparent PNG | You can drop additional files anywhere under `system_files/`; they'll all be COPY'd into `/`. Delete the `DROP_*_HERE.txt` files once you've added the real assets. ## Step 2 — Configure your Forgejo registry The repo is already wired for `cgi.medsys.cloud/mkm1971/kamos` and the runner label `ubuntu-latest`. You only need to add three secrets so CI can push and sign images. Go to **https://cgi.medsys.cloud/mkm1971/kamos/settings/actions/secrets** and add: | Secret name | Value | | ---------------- | -------------------------------------------------------------- | | `SIGNING_SECRET` | The full contents of `cosign.key` (created in Step 3 below) | | `REGISTRY_USER` | `mkm1971` | | `REGISTRY_TOKEN` | A Forgejo access token with `package` write scope | To create `REGISTRY_TOKEN`: in Forgejo, click your avatar (top-right) → **Settings → Applications → Generate New Token**. Name it `kamos-ci`, tick the **package: write** scope, click Generate, and copy the token immediately (it's shown only once). ## Step 3 — Generate a cosign signing key On your M2: ```bash brew install cosign cd /path/to/kamos COSIGN_PASSWORD="" cosign generate-key-pair ``` Creates `cosign.key` (private — **never commit**) and `cosign.pub` (commit this). Paste the contents of `cosign.key` into the `SIGNING_SECRET` repository secret. ## Step 4 — Push to Forgejo and let CI build ```bash git init git add . git commit -m "KAMOS initial scaffold" git remote add origin https://cgi.medsys.cloud/mkm1971/kamos.git git push -u origin main ``` Forgejo Actions needs an `linux-amd64` runner. Register one on any x86_64 Linux machine (the NVIDIA PC works perfectly). ## Step 5 — (Optional) Iterate locally on the M2 The base image is x86_64, so Podman has to emulate. Slow but works for quick checks. ```bash brew install podman just podman machine init --cpus 6 --memory 8192 --disk-size 60 podman machine start just build ``` ## Step 6 — Generate a bootable ISO for VMware Fusion ```bash just build # builds the OCI image just build-iso # wraps it with bootc-image-builder into output/bootiso/install.iso ``` VMware Fusion 13+ on Apple Silicon supports x86_64 emulation. New VM → install from ISO → choose `output/bootiso/install.iso` → guest type "Other Linux 5.x kernel 64-bit". Expect single-digit FPS in the GUI, but the boot splash and branding will render fine. This is the path you mentioned for your VMware testing setup. ## Step 7 — Install on the real NVIDIA PC If the PC is already on a bootc image (Bazzite, Bluefin, Aurora, etc.): ```bash sudo bootc switch cgi.medsys.cloud/mkm1971/kamos:stable sudo systemctl reboot ``` If it's running something else, install Bazzite from its normal ISO first, then `bootc switch` to KAMOS. Or burn the ISO from step 6 to a USB stick and install fresh. ## Updating CI rebuilds weekly so you pick up upstream Bazzite security fixes. Push any commit to `main` or run the workflow manually to bump immediately. ## What gets branded `build.sh` applies KAMOS branding in seven places: 1. `/etc/os-release` → `NAME`, `PRETTY_NAME`, `VARIANT`, `HOME_URL` (so `neofetch`/`fastfetch` show "KAMOS Gaming OS - Play. Perform. Dominate.") 2. GNOME default wallpaper (system-wide via dconf override, applies to all new users) 3. GNOME lock-screen / screensaver background (same wallpaper) 4. Plymouth boot splash (custom `kamos` theme with pulsing logo on black) 5. Initramfs is regenerated with `dracut --force --regenerate-all` so the splash shows on first boot 6. GRUB boot-menu logo (logo PNG dropped into Bazzite's GRUB theme) 7. Container image labels (visible in registries / artifacthub) ## Troubleshooting **`podman build` fails with "exec format error"**: forgot `--platform=linux/amd64` on Apple Silicon, or QEMU user-static isn't enabled in your Podman machine. **Boot splash doesn't show**: confirm the kernel cmdline has `rhgb quiet splash` (it does, via iso.toml). On a `bootc switch` upgrade you may need to re-run `dracut --force --regenerate-all` and reboot once. **Wallpaper doesn't apply for existing user**: the dconf override is `system-db:local`, which only affects new users. Existing accounts have their own user dconf — set it manually once with `gsettings set org.gnome.desktop.background picture-uri 'file:///usr/share/backgrounds/kamos/kamos-wallpaper.jpg'`. **Image builds but boot loops on real hardware**: usually SecureBoot rejecting unsigned NVIDIA modules. Disable SecureBoot in BIOS or enroll Bazzite's MOK key (Bazzite docs cover this). **Cosign signing step fails**: `SIGNING_SECRET` must be the *contents* of `cosign.key`, not a path. The key must be generated with an empty password. ## License Apache-2.0 — same as the upstream `ublue-os/image-template`.