Skip to content

lxnay/matrixos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

725 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ‘‹ Welcome to matrixOS

matrixOS is a Gentoo-based Linux distribution that blends the power and customizability of Gentoo with the reliability of OSTree atomic upgrades. It leverages OSTree to provide Atomicity and Immutability guarantees, ensuring that updates are applied entirely or not at all, and the base system remains read-only to prevent accidental damage.

It comes with Flatpak, Snap, and Docker ready to go out of the box.

Our two main goals are:

  • Reliability: Providing a stable, immutable base system through OSTree, which allows for atomic upgrades and rollbacks.
  • Gaming-Friendly: Shipping with the Steam loader, Lutris, and optimizations to get you gaming on both NVIDIA and AMD GPUs with minimal fuss.

..and our motto is: emerge once, deploy everywhere.

TL;DR: Download from: Cloudflare

Desktop 1
GNOME Desktop w/Steam and GNOME Software
Desktop 2
System/OS and Flatpak integration
Terminal
OSTree integration
Dontknow
Coding and AI

πŸ› οΈ Disambiguation

  • The OG matrixOS: A Debian-based distribution shipping with Trinity Desktop.
  • MatrixOS: An Operating System for Software Defined Controllers.

We need more entropy in this world!

⚠️ Disclaimer

matrixOS is a hobby project created for homelab setups. It is not intended for mission-critical production environments. Everything in this repository is provided "AS IS" and comes with NO WARRANTY.

✨ Features

  • Graphics: Latest Mesa and NVIDIA drivers out of the box.
  • Cooling: Includes coolercontrold and liquidctl.
  • Filesystem: btrfs on /boot and / with zstd compression, auto-resizing on first boot. Includes ntfsplus driver.
  • Security: UEFI SecureBoot support with easy-to-install certificates.
  • Apps: Steam, Flatpak, Snap, AppImage, and Docker available immediately.

πŸ’» Prerequisites

Hardware Requirements:

  • Architecture: x86_64/amd64 with x86-64-v3 support (AVX, AVX2, BMP1/2, FMA, etc.).
  • Storage: At least 32GB (64GB recommended) on USB/SSD/NVMe.

πŸ’Ώ Available Images & Keys

Images are available in raw (for flashing) and qcow2 (for VM) formats, compressed with xz. Trusted Source: Cloudflare

Public Keys

Use these keys to verify the authenticity of images and commits:

  • GPG (OSTree, Images): DC474F4CBD1D3260D9CC6D9275DD33E282BE47CE
  • SecureBoot Fingerprint: sha256 Fingerprint=38:02:D7:FC:A7:6F:08:04:9C:7F:D5:D7:AF:9A:24:6C:9B:C2:28:F3:45:99:7B:DF:79:EE:F3:35:0A:81:87:1B

πŸ’Ώ Installation

Option 1: Flash to Drive

Download the image (compressed with xz) and its .sha256 file, then flash it to your target drive using dd or similar tools.

sha256sum matrixos_amd64_gnome-DATE.img.xz.sha256
xz -d matrixos_amd64_gnome-DATE.img.xz
dd if=matrixos_amd64_gnome-DATE.img.xz of=/dev/sdX bs=4M status=progress conv=sparse,sync

There are two default users:

  • root: password matrix
  • matrix (UID=1000): password matrix
  • LUKS password (if encrypted): MatrixOS2026Enc

Option 2: Install from matrixOS

Once booted into matrixOS (e.g., from a USB stick), you can install it onto another drive using the built-in installer.

/matrixos/install/install.device

If you are partitioning manually, strict adherence to the following layout is required:

  1. ESP Partition: Type ef00 | GUID: C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  2. /boot Partition: Type ea00 | GUID: BC13C2FF-59E6-4262-A352-B275FD6F7172
  3. / Partition: Type 8304 | GUID: 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709

Post-Installation Setup

After your first boot, run the setup script to configure credentials and LUKS passwords. Run this from a VT or Desktop terminal.

/matrixos/install/setupOS
reboot

To enable Docker: systemctl enable --now docker.

πŸ”’ SecureBoot

matrixOS supports SecureBoot. You can set it up in two ways:

  1. UEFI BIOS Enrollment: Enroll the matrixos-secureboot-cert.pem directly into your UEFI BIOS as an Authorized Signature (db). This allows the firmware to trust the matrixOS bootloader and kernel directly.
  2. Shim MOK Enrollment: Use the provided matrixos-secureboot-mok.der file to enroll a Machine Owner Key (MOK) via the Shim MOK Manager at first boot. The shim itself is signed by Microsoft (2011 and 2023), allowing it to run on most hardware, and it then validates subsequent stages using the MOK.

βš™οΈ System Management

matrixOS uses OSTree for atomic updates.

Upgrades

Update to the latest image:

ostree admin upgrade

Or use the experimental vector binary (if available in your image):

vector upgrade

Rollbacks

If an update fails, simply boot into the previous entry (ostree:1). To make it permanent:

ostree admin pin 1
ostree admin status # to see the current state

Branch Switching

List available branches and switch between them (e.g., from gnome to kde if available):

ostree remote refs origin
ostree admin switch <another_branch>
reboot

Mutability & Jailbreaking

  • Temporary Mutability: ostree admin unlock --hotfix (resets on upgrade). So that you can run emerge as much as you like (important: switch to a *-full OSTree branch before doing this).
  • Permanent Jailbreak: Convert to a standard Gentoo system.
    • List available branches: ostree remote refs origin
    • Switch to the -full branch: ostree admin switch <branch>-full && reboot
    • Run the jailbreak script: /matrixos/install/jailbreak && reboot

πŸ› οΈ Build Your Own Distro

You can build custom versions of matrixOS using the provided dev/build.sh script. The build process is: Seeder -> Releaser -> Imager. Respectively, the directories are: build for Seeder, release for Releaser, and image for Imager.

Customization Directories

  • build/seeders/: Contains the build layers (e.g., 00-bedrock, 10-server). Each subdirectory has scripts/configs defining packages and settings for that layer.
  • release/: Configuration for the release process.
    • hooks/: Scripts running at different release stages.
    • services/: Systemd services to enable/disable/mask.
    • Note: hooks/ and services/ follow the OSNAME/ARCH/SEEDER_NAME pattern (e.g., matrixos/amd64/gnome) for branch-specific configs.
  • image/: Configuration for the image creation process.
    • hooks/: Scripts for partition setup, bootloader install, etc.
    • image.releases: Defines which releases are built into images.

Configuration Rules

All configuration is centralized in conf/matrixos.conf.

  • Project Info: OS name, architecture, git repositories.
  • Paths: Directories for logs, downloads, and output artifacts.
  • Keys: Paths to GPG and SecureBoot keys lead here.
  • Component Settings: Specific configs for Seeder, Releaser, and Imager.

Important: If you fork this repository to customize builds, update GitRepo in conf/matrixos.conf to point to your fork.

Build Workflow

Run the build script as root. It handles the entire pipeline.

./dev/build.sh
  • Resume: ./dev/build.sh --resume
  • Force specific steps: --force-release, --force-images, --only-images
  • Enter a chroot: ./dev/enter.seed <name>-<date>
  • Clean artifacts: ./vector/vector janitor && ./dev/clean_old_builds.sh

Resource Requirements: x86-64-v3 CPU, 32GB+ RAM, ~70GB Disk.

Known Issues

GNOME aspect ratio is either 100% or 200%

GNOME 48 currently lacks fine-grained scaling (not getting into details here, but it's fixed in 49). Workaround:

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

NVIDIA drivers and nouveau fight

If nouveau loads despite NVIDIA drivers being present:

ostree admin kargs edit-in-place --append-if-missing=modprobe.blacklist=nouveau
ostree admin kargs edit-in-place --append-if-missing=rd.driver.blacklist=nouveau

SecureBoot Shim/MokManager does not want to enroll key

This has been fixed after the 20260216 release. Disable SecureBoot, boot the image and then upgrade your system. You may need to copy the latest /usr/lib/grub/grub-x86_64.efi.signed to /efi/EFI/BOOT/grubx64.efi or run vector upgrade --update-bootloader.

Vector does not run (compile) from /matrixos/vector

This is because the image files are stripped off of all the unnecessary development only tools and libraries, including C/C++ headers. You have two options:

  1. Wait for new images, where vector will be shipped compiled and working out of the box.
  2. Switch to the -full branch, for example, for the GNOME release:
ostree remote refs origin # shows all the branches available.
ostree admin switch origin:matrixos/amd64/dev/gnome-full && reboot

πŸš€ Roadmap Milestones

The current focus is on User Friendliness (Milestone 3) and New Technologies (Milestone 4).

Milestone 4 (Future)

  • Rewrite core tooling in Go (vector) to replace bash scripts.
  • Implement proper CI/CD pipelines and testing.
  • Migrate to bootc or wrapper on top of ostree + UKI support, moving away from direct ostree usage.

πŸ™ Contributing

Contributions are welcome!

  • Code: helping with the migration to bootc or improving CLI tools.
  • Resources: Mirrors for images/OSTree repo and compute power for builds.
  • Donations: Please donate to Gentoo Linux.

πŸ“„ License

First-party code is released under the BSD 2-Clause "Simplified" License. Third-party applications retain their respective licenses.

About

matrixOS personal Gentoo-based deployment

Resources

Stars

Watchers

Forks

Packages

No packages published