KosherOS branding (roadmap stage)¶
Primary brand: KosherOS. Secondary attribution: powered by Fedora — this matches Fedora's trademark policy for derivatives ("Fedora Remix"), so Fedora references don't need scrubbing; only primary branding changes.
Status: the pipeline is built and wired into the image. The wallpaper
is real artwork (branding/wallpaper.png, 4978×3340, light sepia — the
reason the desktop, greeter and Noctalia all default to the light scheme;
its GIMP source wallpaper.xcf stays in the repo and out of the image).
The logo is branding/logo.png (1316×1088 with alpha, source logo.xcf).
branding/rasters.py, run at image build, makes every raster from the two
artwork files:
- the boot-splash logo (256 px, fitted in a square), a house in the brand
blue for the classic desktop's Apps button (drawn by
rasters.py, not a bitmap: the mark is the admin app's icon and read as "admin" on the taskbar), and the admin app's icon in hicolor at 48–512 px, namedorg.kosherlinux.Admin— the one app that IS the product carries the mark; the Store and Setup keep stock icons until they get their own; - the login-screen lockup: the logo with "KosherOS" set beside it in an italic serif (Noto Serif in the image), because GDM's logo key is one image drawn at native size and the ellipse alone read as a faint blob;
- the wallpaper plus a crop per screen shape (16:9, 16:10, 3:2, 4:3,
5:4, 21:9), each anchored top-left so the wordmark painted into the
corner survives, and
kosheros.xml, which lists them so gnome-bg picks the one matching the screen. GNOME's zoom on the single 3:2 picture cropped from the centre and cut the word off on 16:9 and 4:3 screens.
Replacing either artwork file re-brands everything on the next build. If
the wallpaper is ever repainted, a wordmark kept ~10% in from every edge
would need none of the cropping care. kosheros-logo.svg and
wallpaper.svg are the earlier placeholders, kept in the repo but no longer
drawn anywhere except the SVG wallpaper copy installed for anything still
pointing at it.
Surfaces, boot → desktop (in user-visible order)¶
| surface | mechanism | needs artwork? |
|---|---|---|
OS identity (About dialog, hostnamectl, portal/device lists) |
✅ /usr/lib/os-release NAME/PRETTY_NAME/VARIANT |
no |
| Boot splash | ✅ Plymouth script theme kosheros (navy gradient, pulsing logo, LUKS prompt) |
real logo |
| GRUB menu (one second, every boot) | ✅ a GRUB theme: navy, the mark and name, the entries, a countdown bar (see below) | no |
| Login screen | ✅ GDM logo + banner via locked dconf keys | real logo |
| First-boot welcome wizard (stage 5) | our own GTK app — brand it from day one | logo + wordmark |
| Desktop defaults | ✅ dconf: wallpaper (unlocked), light scheme, favourites incl. the Store, classic taskbar layout (see desktop.md) | ✅ branding/wallpaper.png (source: wallpaper.xcf, kept out of the image) |
| Admin app / Store | ✅ Admin: the KosherOS mark (hicolor, from rasters.py); Store and Setup still stock icons |
Store + Setup icons |
| ISO installer | ✅ product.img injected by just iso: .buildstamp, a conf.d drop-in, our stylesheet and logo (see below) |
wordmark for the top bar, eventually |
| Portal web UI (stage 5) | shared asset set | logo + wordmark |
The GRUB menu¶
bootupd shows GRUB's menu for one second on every boot (timeout_style=menu
in its static config), which is long enough to notice white-on-black text
listing "KosherOS 0.1 (powered by Fedora 44) (ostree:0)". So the menu is
drawn from a theme: branding/rasters.py writes theme.txt and a navy
1920×1080 background with the lockup, and
os-image/files/usr/lib/bootupd/grub2-static/configs.d/09_kosheros_theme.cfg
— concatenated into grub.cfg by bootupd at install — loads the font, switches
to gfxterm and sets theme.
The theme has to be readable before the OS is up, and that differs by firmware, so it is written twice:
- UEFI: under
/usr/lib/efi/kosheros-grub-theme/<version>/EFI/fedora/kosheros/, with its own copy ofunicode.pf2. bootupd treats every/usr/lib/efi/<component>/<version>/EFItree as a component and copies it onto the EFI system partition; the Containerfile re-runsbootupctl backend generate-update-metadataso it is listed. GRUB finds it as${cmdpath}/kosheros/. - BIOS: under
/usr/share/grub/themes/starfield/. grub2-install copies exactly one theme directory onto the boot partition and by default it is the one namedstarfield; Fedora ships none, so the KosherOS theme takes the name. GRUB finds it as${prefix}/themes/starfield/, and the font at${prefix}/fonts/unicode.pf2, which grub2-install also copies.
If neither the theme nor a font is found the snippet changes nothing and
the plain menu is shown. Under Secure Boot GRUB will not load modules from
disk, but gfxterm, png and all_video are built into Fedora's signed
grubx64.efi, so the theme works there too. Not yet seen on a booted
machine.
Anaconda installer¶
The installer ISO comes out of bootc-image-builder wearing Fedora's
branding, which broke the illusion at the very first thing a new owner
sees. Anaconda has a hook for exactly this, and just iso now uses it:
after bib writes install.iso, scripts/brand-iso.py builds a small
product.img and puts it at images/product.img on the ISO with xorriso
(boot records replayed, so it still boots on BIOS and UEFI), then names the
result KosherOS-<version>-<arch>.iso, leaving install.iso as a
link to it. The version comes from the VERSION file at the repo root,
which the Containerfile also puts in os-release.
How it takes effect, all of it stock Anaconda and verified against its
source: the initramfs finds images/product.img on the install media and
unpacks it into /updates (dracut/anaconda-lib.sh,
anaconda_auto_updates), and dracut's apply-live-updates copies that
over the installer's root before Anaconda starts. So the archive replaces
three things:
/.buildstamp— where Anaconda reads its product name and version (pyanaconda/core/product.py), so the welcome screen says KosherOS;/etc/anaconda/conf.d/90-kosheros.conf— a drop-in loaded after the Fedora profile (set_from_files), pointingcustom_stylesheetat ours and hiding every hub spoke the kickstart already answers (keyboard, language, time zone, network, source, software). The disk question answers itself when it can: a%prescript inos-image/iso-config.tomlpicks the disk when the machine has exactly one internal drive that is not the installer stick, so the hub arrives complete and the install is a Begin Installation button; with two or more candidate disks it writes nothing and Anaconda asks, so a second drive is never wiped unseen. The first real install found the stock hub "non-linear and quite complex"; this is the fix that stays inside Anaconda;/usr/share/anaconda/pixmaps/kosheros/— the stylesheet (navy sidebar and top bar, the mark at the top of the sidebar) and the logo, fitted frombranding/logo.png. Fedora's own stylesheet path is overwritten with the same file as a belt-and-braces.
The cpio is written by the script itself (newc format, root-owned), so the
dev shell needs only Pillow and xorriso. kosherd/tests/test_installer_branding.py
builds the archive, reads it back with the system cpio, and rehearses the
xorriso injection on a stand-in ISO. Not yet seen on a booted installer:
that needs just iso and just boot-iso, which need sudo.
| surface | mechanism | needs artwork? |
|---|---|---|
| ISO installer | ✅ product.img on the ISO: .buildstamp, a conf.d drop-in, our stylesheet and logo |
wordmark for the top bar, eventually |
Asset checklist (create once, SVG-first)¶
- KosherOS logomark (symbol) — light + dark variants
- Wordmark ("KosherOS") and lockup with "powered by Fedora" line
- Plymouth splash animation (can start as static logo on dark background)
- Default wallpaper (light/dark)
- App icon for the admin app (hicolor + symbolic)
Notes¶
- Keep
ID=fedoraandVERSION_IDin os-release — tooling (dnf repos, bootc, scripts) keys offID; only NAME/PRETTY_NAME/VARIANT carry brand. - dconf branding lives in
/etc/dconf/db/local.d/+ locks; ship in os-image/files once assets exist.