About this project
Kyanite is a Fedora Kinoite spin designed as a daily-driver desktop, distributed as an immutable bootc (bootable container) image. It ships with KDE Plasma and removes corporate branding while sanding off rough edges from stock Kinoite.
Key differences from stock Kinoite include Firefox via Mozilla's official Flatpak, Bazaar replacing Discover, Flathub configured on first boot with Fedora's flatpak remotes removed, Fish as the default shell, dynamic wallpapers, fcitx5 for CJK input, and a fuller codec stack via negativo17 for h264/h265/AV1 playback. Heavy components like Docker, virtualization, Steam, and ROCm are separated into optional sysexts rather than the base image. PipeWire filter chains are included for laptop speaker DSP setups, and Ollama Quadlets are ready for local LLMs on CPU, ROCm, or Vulkan.
Installation is straightforward for existing bootc systems: switch to the image with `sudo bootc switch ghcr.io/alyraffauf/kyanite:stable` and reboot. The `ujust` command framework (borrowed from Universal Blue) provides custom recipes for managing the system.
Optional sysexts are available as systemd-sysext payloads in a separate repository, including Docker CE with buildx and compose, AMD ROCm with HIP and OpenCL, native Steam with Gamescope and MangoHud, Syncthing, Tailscale mesh-VPN, and QEMU/KVM virtualization. These auto-update via systemd-sysupdate.timer and can be installed or removed with `ujust install-sysext` and `ujust remove-sysext`.
For local LLMs, three Quadlet units run Ollama as a user-level systemd service with GPU runtimes inside the container. CPU, ROCm, and Vulkan backends are mutually exclusive and share the ollama-data volume so model weights don't redownload when switching. The ROCm backend works with officially supported AMD cards, while Vulkan covers cards ROCm doesn't support.
Syncthing is available as a native sysext with a GUI at 127.0.0.1:8384, carrying over existing configuration from ~/.local/state/syncthing/.
Quadlet templates ship at /usr/share/kyanite/quadlets/ and are copied to ~/.config/containers/systemd/ by ujust recipes so OS updates don't clobber user edits. The podman-auto-update.timer runs by default, refreshing quadlets with AutoUpdate=registry nightly.
Customization is declarative through JSON files: packages.json for packages per variant, services.json for systemd units, files/ for variant-specific system files, brew/ for Homebrew bundles, flatpaks/ for preinstalled Flatpaks, and ujust/ for custom recipes. A variant scaffold exists for building different flavors, though only the main kyanite variant is currently built.
Building locally requires Podman and Just. Commands include `just build` for the container, `just build-qcow2` for VM testing, `just build-iso` for a full ISO (approximately 10GB, 30+ minutes), and `just run-vm` to boot the qcow2 in QEMU. Shared desktop assets come from a digest-pinned kyanite-common OCI layer. An NVIDIA base experiment is available by setting BASE_IMAGE to a kinoite-nvidia image.
Security is handled through cosign signing against a published public key. Images can be verified with `cosign verify`. Switching to signed transport requires a two-step bootstrap: first an unsigned switch to get the policy and key, then a rebase to ostree-image-signed: to enable automatic verification of every pulled image before bytes touch the filesystem.
The project is licensed under Apache 2.0 and is based on Fedora Kinoite with KDE Plasma, inspired by Universal Blue.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.