Documentation

Why Margine? (and a love letter to Universal Blue)

Margine is a small downstream of Universal Blue's work. Bluefin, Bluefin DX, and Bazzite are excellent in their own right — Margine would not exist without them. This page is about what Margine adds on top, when one of the others might suit you better, and how to give back to the people who do the heavy lifting upstream.

First — Margine is downstream of Universal Blue ❤️

Everything good about Margine starts somewhere upstream. The image build pipeline pattern is Universal Blue's image-template. The base we ship is Bluefin DX. The gaming stack borrows heavily from Bazzite. The Bazaar app store, the dconf overrides, the installer config, the Plymouth integration, the background-update orchestrator — every single one of those was solved upstream by people who do this full- time. We just curate a flavour on top.

The build pipeline (signed bootc image + cosign signature + reproducible OCI layers) follows the same conservative, supply-chain-aware pattern Bazzite uses. The full rationale lives in the history comment at the top of .github/workflows/build.yml — relevant if you're auditing how the image you boot actually gets made, not part of day-to-day use.

If you use Margine, please consider sponsoring the people whose code you're really running:

Margine itself has GitHub Sponsors if you want to support this specific downstream — but if you only sponsor one project, make it one of the upstreams above. That's where the heavy lifting happens.

Bluefin vs Margine — when to pick which

Bluefin is Universal Blue's general-purpose Fedora Atomic desktop. It has a wider audience than Margine, more polish on edge-case hardware, and a much bigger community answering questions in real time. If you want a broadly-supported atomic GNOME desktop and Margine's specific opinions don't apply to you, Bluefin is the safer pick.

Margine adds on top of Bluefin DX:

  • A Secure Boot-signed CachyOS kernel with the BORE scheduler — measurably lower desktop latency under load, MOK-signed at image build time so Secure Boot stays on. Bluefin ships the stock Fedora kernel.
  • A curated preinstall set of ~33 Flatpaks (Zen Browser, Thunderbird ESR, GNOME's modern default apps that Bluefin strips, Pinta, Blanket, Fragments, the full creative chain). Bluefin ships much lighter and expects you to install from Bazaar yourself.
  • Hyprland-flavoured tiling, ready to go: o-tiling extension preinstalled and enabled, Super+H/J/K/L to move focus between tiles, Super+Return for terminal, Super+E for Files, Super+period for the emoji picker, and Super+number for workspaces. Bluefin defaults to stock GNOME workspace behaviour.
  • A single image with an opt-in gaming layer: one command (ujust margine-gaming) installs the gaming stack on top, and ujust margine-gaming-remove rolls it back — no separate Gaming edition to choose at download time.
  • A live CPU scheduler picker — six sched_ext schedulers in the base image, switchable at runtime from a GUI (CPU schedulers). Bluefin ships the stock kernel with no sched_ext tooling.
  • Scroll speed as a real settingwsf (wayland-scroll-factor) baked into the image, because GNOME still has no scroll-speed slider (Scroll speed & gestures).

Pick Bluefin instead if: you want the stock Fedora kernel, you don't care about Hyprland-style keybindings, you'd rather assemble your own app set, or you want the upstream's level of polish and community support.

Bluefin DX vs Margine — almost the same audience

Bluefin DX is Bluefin's "developer experience" variant: same Bluefin base + VS Code from the Microsoft repo, podman-compose, the full virt stack (libvirt, qemu, virt-manager, swtpm, edk2-ovmf), Distrobox preconfigured, GNOME Boxes, Homebrew. It is specifically the base Margine inherits from.

If you are a developer and you'd be perfectly happy with the upstream's choices, Bluefin DX is the simpler answer — no downstream maintainer in the loop, fastest patching, biggest community.

Margine over Bluefin DX gets you the kernel + curated preinstall + tiling defaults listed in the section above. Same dev tooling, same Distrobox, same Homebrew, same Bazaar — Margine doesn't subtract anything from Bluefin DX.

Bazzite vs Margine with the gaming layer

Bazzite is the gold-standard Linux-for-gaming image. It has the Steam Deck Game Mode session, deep handheld support (ASUS ROG Ally, Lenovo Legion Go, GPD, OneXPlayer, Steam Deck itself), KDE Plasma as an option, more launchers, more aggressive HDR work. If you are buying a Linux gaming handheld, install Bazzite. That's its core use-case and they own it.

Margine's gaming layer (via ujust margine-gaming) is narrower on purpose:

  • GNOME-only (no Steam Game Mode session, no Plasma). Margine's tiling-GNOME workflow is the centerpiece; if you want it, you want it across all your use cases including gaming.
  • Same CachyOS kernel whether or not the gaming layer is on — BORE scheduler + signed Secure-Boot chain. Bazzite ships Bazzite's own kernel choices.
  • Smaller in scope — no handheld-specific tweaks, no Game Mode session, no per-vendor compatibility packages. Less surface area to break, less surface area to support.

Pick Bazzite instead if: you have a handheld, you want Plasma, you want Steam Game Mode as the default session, or you want the upstream gaming community.

The map

Short decision aid — pick the distro that matches the row describing you best. Margine inherits everything from Bluefin DX, so anywhere you'd take Bluefin DX you can take Margine instead — you get the dev toolbox AND the curated kernel/apps/keybinds on top.

Bazzite
Linux handheld · want Plasma · want Steam Game Mode as the default session · want the upstream gaming community
Bluefin
"Just give me a polished GNOME atomic." General-purpose GNOME, no developer extras, no Margine-style kernel/keybind opinions.
Margine
Bluefin DX's full developer toolbox (Distrobox, Homebrew, VS Code + devcontainers, podman/docker) PLUS a CachyOS-fast kernel, GNOME re-wired for tiling, every codec and driver preinstalled, and a curated creator app set ready at first login.
Margine + gaming layer
Same Margine, plus one command (`ujust margine-gaming`) for the gaming stack on top (gamescope + vkBasalt as RPMs + Steam/Lutris/Heroic/Bottles/ProtonUp-Qt/Protontricks/RetroArch as Flatpaks). `ujust margine-gaming-remove` rolls it back.

(Bluefin DX intentionally omitted: every reason you might pick it is also a reason to pick Margine — same dev toolbox underneath, with strictly more on top.)

One more time — please give to upstream ❤️

Margine is a small project run by one person. The upstreams it builds on are bigger, do more difficult engineering, and have more users depending on them. If you can spare a few euro a month, opencollective.com/ublue is where it has the most impact. The whole Linux atomic desktop ecosystem is a community thing — Margine tries to be a good citizen of it. And if after all that you still want to chip in for Margine's own work, there's github.com/sponsors/daniel-g-carrasco. Grazie. ❤️