Skip to content

The buildstream for making Bluefin

License

Notifications You must be signed in to change notification settings

projectbluefin/egg

Repository files navigation

Conga

egg

Bluefin's Primal Form -- smol. Local workflows prioritized.

Trying it:

  1. Clone this repo
  2. just show-me-the-future
  3. VM with Bluefin built on GNOME OS!
  4. WIP: Pushing to a locally run registry for super fast development!
    • But also means a Dakotaraptor system can build and host itself. On a fast machine this can take about 2 minutes once the initial caching is complete!

Make It Yours

  1. Fork this repo and clone your fork
  2. Edit the package list in elements/bluefin/deps.bst -- add or remove lines to customize what ships in your image
  3. Build and boot:
    just show-me-the-future
    

That's it. The first build takes about an hour (it pulls cached artifacts from GNOME's upstream servers). After that, rebuilds only touch what changed.

Prerequisites

You need podman, just

(WIP) just preflight -- a preflight check that validates your setup and auto-installs missing tools (like QEMU) via Homebrew, reducing hard prerequisites to just podman and just.

How It Works

BuildStream resolves a dependency graph rooted at elements/oci/bluefin.bst, pulls pre-built artifacts from GNOME's public cache, builds anything that's missing, and produces a bootable OCI container image. The image is installed to a virtual disk and booted in QEMU.

All build artifacts are cached locally in ~/.cache/buildstream/. There is no cloud dependency beyond the initial artifact fetch from GNOME's servers. Your laptop is the build farm.

Disk Space

What Size
Build cache (after first build) ~50 GB
Bootable VM disk 30 GB (sparse)
Total recommended free 100 GB

Step-by-Step Commands

If you prefer more control over each step:

just build                     # Build the OCI image (~1 hour first time, minutes after)
just generate-bootable-image   # Create a bootable disk from the image
just boot-vm                   # Launch QEMU VM -- a GNOME desktop appears

Iterative Development

After the first build, the edit-rebuild-boot cycle is fast:

# 1. Edit elements/bluefin/deps.bst (or any element)
# 2. Rebuild -- only changed elements are rebuilt
just build
# 3. Regenerate the disk and boot
just generate-bootable-image
just boot-vm

(WIP) Local OTA updates -- push rebuilt images to a local registry and update a running VM without rebooting the full pipeline:

just registry-start              # Start local OCI registry
just build && just publish       # Build and push to local registry
# In VM: sudo bootc upgrade      # Pull the update over the network

Customizing Packages

The file elements/bluefin/deps.bst controls what ships in the image. Each line is a BuildStream element:

depends:
  # GNOME Shell extensions
  - bluefin/gnome-shell-extensions.bst

  # CLI tools
  - bluefin/glow.bst
  - bluefin/gum.bst
  - bluefin/fzf.bst

  # Fonts
  - bluefin/jetbrains-mono.bst

  # ... add your own here

To remove a package: delete its line from deps.bst.

To add a package: create a .bst element in elements/bluefin/ and add it to deps.bst. Look at existing elements like elements/bluefin/glow.bst for a simple example -- it downloads a pre-built binary and installs it to the right path.

Packages from the upstream freedesktop-sdk and gnome-build-meta projects can be included directly by referencing their junction path:

  - freedesktop-sdk.bst:components/some-package.bst
  - gnome-build-meta.bst:gnomeos-deps/some-other-package.bst

Project Structure

elements/
  bluefin/           Bluefin-specific packages (edit these)
    deps.bst         Master package list (start here)
  core/              Core system overrides (bootc, grub, ptyxis)
  oci/               Image assembly pipeline
    bluefin.bst      THE build target
  freedesktop-sdk.bst   Junction to freedesktop-sdk
  gnome-build-meta.bst  Junction to gnome-build-meta
files/               Static files (plymouth theme, etc.)
patches/             Patches applied to upstream projects
Justfile             All build commands

Roadmap

These features are planned but not yet implemented:

  • just preflight -- automated prerequisite checking with Homebrew auto-install
  • Local OTA updates -- just registry-start / just publish for iterative VM updates via bootc upgrade
  • just add-package <url> -- scaffolding a new package element from a GitHub release URL
  • Rebranding guide -- documentation for people who want to change the image name/identity
  • Multi-arch builds -- aarch64 support

About

The buildstream for making Bluefin

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 9