{"id":50100183,"url":"https://github.com/matrixdj96/bazzite-mx","last_synced_at":"2026-07-04T03:05:45.386Z","repository":{"id":357905920,"uuid":"1237804509","full_name":"MatrixDJ96/bazzite-mx","owner":"MatrixDJ96","description":"Personal Bazzite-based bootc atomic distribution. KDE Plasma + container-first dev/sysadmin workstation, with curated DX tools, hardened repo isolation, and zero-maintenance third-party integrations.","archived":false,"fork":false,"pushed_at":"2026-07-01T23:01:20.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-01T23:28:05.873Z","etag":null,"topics":["atomic","bazzite","bootc","dotfiles","kde-plasma","linux"],"latest_commit_sha":null,"homepage":"https://matrixdj96.github.io/bazzite-mx/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MatrixDJ96.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-13T14:22:25.000Z","updated_at":"2026-07-01T22:10:26.000Z","dependencies_parsed_at":"2026-07-02T01:00:22.597Z","dependency_job_id":null,"html_url":"https://github.com/MatrixDJ96/bazzite-mx","commit_stats":null,"previous_names":["matrixdj96/bazzite-mx"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/MatrixDJ96/bazzite-mx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixDJ96%2Fbazzite-mx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixDJ96%2Fbazzite-mx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixDJ96%2Fbazzite-mx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixDJ96%2Fbazzite-mx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MatrixDJ96","download_url":"https://codeload.github.com/MatrixDJ96/bazzite-mx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MatrixDJ96%2Fbazzite-mx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35028642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atomic","bazzite","bootc","dotfiles","kde-plasma","linux"],"created_at":"2026-05-23T07:08:22.914Z","updated_at":"2026-07-02T01:00:32.623Z","avatar_url":"https://github.com/MatrixDJ96.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bazzite MX\n\nA single-maintainer, **curated spin of [Bazzite](https://github.com/ublue-os/bazzite)** — a\nKDE Plasma, container-first **dev \u0026 sysadmin workstation**, shipped as a signed\n[bootc](https://github.com/containers/bootc) atomic image you boot into and stop thinking about.\n\n\u003e **It's a build recipe, not an app.** Bazzite MX takes upstream Bazzite, layers a curated set of\n\u003e fixes and tools on top, and publishes the result as signed bootc OS images on GHCR. You don't clone\n\u003e it to run it — you **rebase your machine onto the image it produces**.\n\nBuilt for one person's hardware and taste, in the open so every choice is auditable. Three principles\ndrive all of them:\n\n- **Adds, never imposes.** Bazzite does the heavy lifting; each addition only smooths a rough edge or\n  fills a real gap — never fonts, themes, or formatters. See [what it changes over\n  `bazzite-dx`](docs/wins-over-upstream.md).\n- **Atomic-correct by construction.** Everything is baked and verified at build time; nothing leans on\n  fragile first-boot mutations of a read-only `/usr`.\n- **Built on giants.** Bazzite is the foundation — without it this wouldn't exist. The sharpest ideas\n  are borrowed from [Aurora](https://getaurora.dev), [Bazzite-DX](https://github.com/ublue-os/bazzite),\n  and [AmyOS](https://github.com/astrovm/amyos).\n\n## The images\n\nThree variants, identical except for the Bazzite base they layer on — pick the one for your GPU:\n\n| Image | Base | For |\n|---|---|---|\n| `ghcr.io/matrixdj96/bazzite-mx` | `bazzite` | non-NVIDIA hardware |\n| `ghcr.io/matrixdj96/bazzite-mx-nvidia` | `bazzite-nvidia` | NVIDIA proprietary driver |\n| `ghcr.io/matrixdj96/bazzite-mx-nvidia-open` | `bazzite-nvidia-open` | NVIDIA open kernel modules |\n\nEach ships on two rolling streams — `:stable` and `:testing` — plus immutable dated tags\n(e.g. `:44.20260511`) for pinning; `:latest` aliases stable. A watcher rebuilds within an hour of any\nupstream Bazzite release, so the image never drifts far from its base.\n\n## Trying it\n\nBazzite MX targets its maintainer's machine, but it's a standard signed bootc image — rebase at your\nown risk, picking the variant for your GPU:\n\n```bash\nsudo bootc switch ghcr.io/matrixdj96/bazzite-mx:stable\nsystemctl reboot\n```\n\n## What you get on top of Bazzite\n\n**A genuine dual-runtime dev box.** Docker CE and its full plugin set run alongside Bazzite's Podman —\nboth sockets enabled — and a complete `libvirt` / `qemu` / `virt-manager` stack works on first boot,\nwith `swtpm` for TPM 2.0 and KVM kargs tuned so Windows 11 guests just boot. No `ujust\nsetup-virtualization` dance.\n\n**Workstation tools, done the atomic way.** VSCode with its self-updater disabled so it stops fighting\na read-only `/usr`; GitKraken and keyring-backed git auth; a deep tracing kit (`bcc-tools`, `bpftrace`,\n`bpftop`, `sysprof`, `iotop-c`, and more); Firefox from Mozilla's own RPM instead of the\nsandbox-limited Flatpak; and `gparted`, restored after Bazzite dropped the KDE partition GUI.\n\n**Extras that stay opt-in.** 1Password, Sunshine game-streaming, and full MSI-laptop EC\ncontrol each ship as a `ujust` recipe you enable only if you want it — the base image stays lean for\neveryone who doesn't. MSI is the standout: stock Bazzite ships an in-tree driver that *rejects* recent\nMSI EC firmware, so fan and curve control simply don't work. Bazzite MX bakes the current\nupstream `msi-ec` + `acpi_ec` modules into the image, and `ujust setup-msi enable` layers the\nMControlCenter GUI to drive them — you're in business.\n([the full story](docs/wins-over-upstream.md))\n\nThe itemised list, with provenance and rationale for every choice, lives in\n[docs/wins-over-upstream.md](docs/wins-over-upstream.md).\n\n## How it's built and shipped\n\nThe pipeline is deliberately boring and reproducible: an hourly watcher notices a new upstream Bazzite\nrelease → a gate validates the `ujust` recipes → a matrix builds all three variants → each image is\nsigned by digest with cosign → a GitHub Release is cut. Push to `main` runs the same path; the\n`develop` branch builds without pushing, as a fast CI sandbox.\n\nBuild a single variant locally before pushing (the maintainer's pre-flight, ~5 min):\n\n```bash\nBASE_TAG=$(skopeo inspect --no-tags docker://ghcr.io/ublue-os/bazzite:stable \\\n    | jq -r '.Labels[\"org.opencontainers.image.version\"]')\nKERNEL_VERSION=$(skopeo inspect --no-tags docker://ghcr.io/ublue-os/bazzite:${BASE_TAG} \\\n    | jq -r '.Labels[\"ostree.linux\"]')\npodman build --file Containerfile \\\n  --build-arg BASE_IMAGE=bazzite \\\n  --build-arg BASE_TAG=${BASE_TAG} \\\n  --build-arg KERNEL_VERSION=${KERNEL_VERSION} \\\n  --build-arg IMAGE_NAME=bazzite-mx \\\n  --tag localhost/bazzite-mx:preflight .\n```\n\n## Verifying a signed image\n\nEvery published image is signed by digest with cosign. Verify one against the public key:\n\n```bash\ncosign verify --key cosign.pub ghcr.io/matrixdj96/bazzite-mx:latest\n```\n\nThe private `cosign.key` is gitignored — it lives only on the maintainer's machine and as a GitHub repo\nsecret.\n\n## Under the hood\n\nThe build flow, conventions, and hard-won gotchas are documented for humans and coding agents alike:\n[`AGENTS.md`](AGENTS.md) is the canonical guide, with deep dives in [`docs/`](docs/) (architecture,\nconventions, workflow, gotchas).\n\n## Credits\n\nBuilt entirely on the shoulders of [Universal Blue](https://universal-blue.org) and\n[Bazzite](https://bazzite.gg), with ideas borrowed from [Aurora](https://getaurora.dev),\n[Bazzite-DX](https://github.com/ublue-os/bazzite), and [AmyOS](https://github.com/astrovm/amyos) —\nBazzite MX only curates a layer on top of their work.\n\n## License\n\nSee [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatrixdj96%2Fbazzite-mx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatrixdj96%2Fbazzite-mx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatrixdj96%2Fbazzite-mx/lists"}