PULSAR

Your lighthouse in the sky.

An immutable Fedora for gaming and development. Games get the panel’s real resolution instead of a fractional-scaled one, the system is the same every boot, and rollback is just a reboot.

latest build 44.20260824.0

standardsudo bootc switch \ ghcr.io/arclight-digital/pulsar:latest
nvidiasudo bootc switch \ ghcr.io/arclight-digital/pulsar-nvidia:latest

Already on Fedora Silverblue / Kinoite 44+? Run one of these. Fresh machine? The weekly iso is one tab over. The nvidia module comes signed — enrol the cert once and keep Secure Boot on.

the shipped wallpapers — live

gamescale

Run a game at 1× so XWayland hands it the panel’s real mode, then put the desktop back when it exits.

Under GNOME fractional scaling, XWayland is handed an integer multiple of your logical resolution, never the panel’s real mode. At 133% on a 2560×1600 display no factor lands on the hardware, and a borderless-fullscreen game takes whatever the desktop reports.

Resolution reported to an XWayland game at each scale factor
What the game is handedResolutionCost
The panel itself2560×1600what the hardware has
XWayland, scale factor 11920×1200upscaled to fit; soft
XWayland, scale factor 23840×24002.25× the pixels, same image
With gamescale2560×1600the panel’s real mode
steam › launch options
gamescale %command%

Scale goes to 1.0 for the lifetime of that one process, font and cursor sizes are compensated so the desktop stays usable, and everything goes back when the game exits.

Including when it doesn’t exit cleanly: a watchdog, a state file on disk, and a login reconcile unit mean a crash or a SIGKILL still gives you your desktop back.

The script, its top-bar indicator, and the reconcile unit ship in the image at a pinned tag. Flatpak launchers need one grant from gamescale’s installer: Flatpak reserves /usr, so no image can hand them a host binary.

What's inside

Gamescope, gamemode, and MangoHud are in the image; split-lock mitigation is off and the map count is raised because games want both. ntsync is loaded and handed to the seat user, so Proton can use it where the build supports it. Flathub comes unfiltered.

Every boot is checked. If the desktop does not come up three times running, the machine rolls itself back to the previous deployment without being asked.

For work: distrobox for any userland, libvirt/KVM for real machines. Apps are Flatpaks; the image is the OS.

The NVIDIA open module is compiled against the image's exact kernel and signed, so Secure Boot stays on.

pulsar manifest
image          pulsar-nvidia (nvidia-open)
version        44.20260824.0
base           fedora-silverblue:44
built          2026-08-24T02:10:06Z
kernel         7.1.9-200.fc44.x86_64
scheduler      scx_bpfland
scheduler_btf  malformed
gamescope      3.16.25-1.fc44
gamemode       1.8.2-4.fc44
mangohud       0.8.3~rc1-2.fc44
mesa           26.1.7-1.fc44
gamescale      v2.0.0

the image’s own manifest — rendered, not written

Every image has a paper trail

  1. commitpush to main
  2. buildboth images, nightly
  3. signkmod keyed to the shipped MOK cert
  4. attestSLSA provenance on ghcr
  5. bootbootc switches to the attested image
don't take the page's word for it
gh attestation verify \
  oci://ghcr.io/arclight-digital/pulsar-nvidia:latest \
  --owner arclight-digital
Loaded digest sha256:… for oci://…/pulsar-nvidia:latest
✓ Verification succeeded!

One person's laptop OS, over-engineered on purpose, MIT-licensed. Running someone else's signed images is a trust decision — fork it and use your own key if that's not a relationship you want.

Starting from bare metal

A weekly installer ISO for each variant, built from the published image itself — the same Anaconda installer stock Silverblue uses, landing directly in Pulsar. Checksummed, and signed with Pulsar's release key.

weekly · x86_64 · 5–6 GB

Write it to a USB stick with GNOME Disks or dd, boot, install. The .json sidecar records exactly which image digest the installer carries. Verify the manifest's signature, then the ISO against the manifest:

signed with the release key — it never leaves the signing host
cosign verify-blob pulsar-latest-x86_64.iso.sha256 \
  --key https://lighthouse.arclight.digital/pulsar/iso/cosign.pub \
  --signature pulsar-latest-x86_64.iso.sha256.sig \
  --insecure-ignore-tlog=true
Verified OK
sha256sum -c pulsar-latest-x86_64.iso.sha256
pulsar-latest-x86_64.iso: OK

What changed last night

Every build is diffed against the one before it, package by package, from the SBOMs attached to the images themselves. Nothing here is written by hand.

kernelkernel, 7.1.8-200.fc44 to 7.1.9-200.fc44

35 packages moved, in 11 distinct transitions — 30 to a new upstream version, 5 rebuilt at the same one.

b191e6fd77ca5ce306c5ff31

New upstream versions

  • qt-settingsqt-settings, 43.101-3.fc44 to 44.0-1.fc44
  • cpp+5 packagescpp, 16.1.1-2.fc44 to 16.2.1-2.fc44, with 5 other packages
    • gcc
    • libatomic
    • libgcc
    • libgomp
    • libstdc++
  • rsyncrsync, 3.4.4-1.fc44 to 3.5.0-1.fc44
  • libdnf5+7 packageslibdnf5, 5.4.2.1-1.fc44 to 5.4.3.0-2.fc44, with 7 other packages
    • dnf5
    • dnf5-plugins
    • dnf5daemon-server
    • dnf5daemon-server-polkit
    • libdnf5-cli
    • libdnf5-plugin-appstream
    • libdnf5-plugin-expired-pgp-keys
  • libcap-ng+1 packagelibcap-ng, 0.9.3-1.fc44 to 0.9.5-1.fc44, with 1 other package
    • libcap-ng-python3
  • python3-boto3+1 packagepython3-boto3, 1.43.72-1.fc44 to 1.43.77-1.fc44, with 1 other package
    • python3-botocore
  • bootcbootc, 1.16.7-1.fc44 to 1.16.9-1.fc44
  • misemise, 2026.8.10-1 to 2026.8.11-1
5 packagesrebuilt at the same upstream version
  • bluez+3 packagesbluez, 5.87-3.fc44 to 5.87-4.fc44, with 3 other packages
    • bluez-cups
    • bluez-libs
    • bluez-obexd
  • thermaldthermald, 2.5.12-2.fc44 to 2.5.12-3.fc44

The full diff is changelog.json — one row per package, the way the build wrote it. The SBOM ships attached to the image: oras discover ghcr.io/arclight-digital/pulsar:latest