A custom Bazzite GNOME image with Hyprland baked in, built via BlueBuild and published to GHCR. Implements Method B of instructions.md.
Image: ghcr.io/hahafoot/bazzite-rice:latest
- Base:
ghcr.io/ublue-os/bazzite-gnome:stable - Compositor stack (from the
nett00n/hyprlandandsolopasha/hyprlandCOPRs): Hyprland, xdg-desktop-portal-hyprland, hyprlock, hypridle, hyprpicker, hyprshot, hyprcursor, hyprpolkitagent - Desktop bits: Waybar, rofi (2.x, wayland-native), SwayNotificationCenter, wlogout, kitty, grim, slurp, cliphist
- Live-wallpaper stack: swww, mpvpaper, waypaper, mpv
- GUI helpers: pavucontrol, network-manager-applet, blueman, qt6ct, kvantum, nwg-look, papirus-icon-theme
- Extras: zsh, luajit, jetbrains-mono-fonts
Full package list lives in recipes/recipe.yml.
Prereq: You're already on Bazzite (any variant). If not, install Bazzite first from bazzite.gg. Your existing apps, flatpaks, and
$HOMEsurvive the rebase; only/usris swapped.
The rebase is a two-step dance: first to the unsigned ref so the signing policy and cosign public key install, then to the signed ref so future updates are verified.
# 1. Rebase to the unsigned image (installs the signing policy)
rpm-ostree rebase ostree-unverified-registry:ghcr.io/hahafoot/bazzite-rice:latest
systemctl reboot
# 2. Rebase to the signed image (verified going forward)
rpm-ostree rebase ostree-image-signed:docker://ghcr.io/hahafoot/bazzite-rice:latest
systemctl rebootAfter the second reboot, pick Hyprland from the GDM session menu (gear icon on the login screen) and log in.
Clone this repo and run the install script:
git clone https://github.com/hahafoot/bazzite-rice.git ~/Documents/bazzite-rice
bash ~/Documents/bazzite-rice/dotfiles/install.shThe script symlinks everything under dotfiles/ into ~/.config/ (and dotfiles/home/ into $HOME), backing up any pre-existing real files as *.bak.<timestamp>. It's idempotent — re-run it any time to refresh the symlinks. It also fetches sketchybar-app-font for Waybar workspace icons.
Reload Hyprland with hyprctl reload (or log out and back in).
Once rebased, normal Bazzite/ostree updates pull new versions of this image automatically. To upgrade on demand:
rpm-ostree upgrade
systemctl reboot- OS:
rpm-ostree rollback, or pick the prior deployment in the GRUB menu at boot. - Dotfiles: restore the
*.bak.<timestamp>files left in~/.config/(and$HOME) byinstall.sh. - Rebase away entirely:
rpm-ostree rebase ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-gnome:stableand reboot.
If you want your own variant (different packages, different base), fork this repo and:
- Edit recipes/recipe.yml to add/remove packages.
- Generate a cosign keypair for image signing:
This creates
COSIGN_PASSWORD="" cosign generate-key-paircosign.pub(commit it) andcosign.key(kept out of git by.gitignore). - On GitHub: Settings → Secrets and variables → Actions → New repository secret
- Name:
SIGNING_SECRET - Value: the full contents of
cosign.key(including theBEGIN/ENDlines)
- Name:
- Push. GitHub Actions builds the image in ~6 minutes and publishes it to
ghcr.io/<you>/<repo>:latest. - On the GitHub Packages page for the new image, set visibility to public so
rpm-ostreecan pull it without auth. - Rebase to your fork using the two-step flow above, substituting your image ref.