Skip to Content

Declarative gaming with Bazzite, rebos, and chezmoi

written by rick on Friday, August 8, 2025

I like talking about motivations and tooling first, but you can totally skip down to Building the system.

I’m usually a NixOS person, but not this time

I really love NixOS for declarative, centralized configuration of the system and rollbacks in the boot menu. However, it makes some key compromises that can be annoying especially on desktop systems. Specifically, it forces you to use the nix language for literally everything, and it breaks FHS (filesystem hierarchy). This means that you cannot run any dynamically-linked programs without patching them. This is particularly annoying for gaming, which tends to be kind of janky. Also, NixOS seems to have partially broken nvenc for some applications.

OS and Software

View the configuration

Bazzite

Bazzite is cool. Immutable fedora for designed to be plug-and-play for gaming.

The whole immutable system image thing takes some getting used to, but it is pretty nice eventually. Fedora has a nice balance of recent packages but without the risks of running arch. (No hate to Arch).

Bazzite is one of the “heavier” Fedora silverblue images, but that’s because they have done a lot of the annoying stuff like codecs and nvidia and steam for you. It’s the perfect base for what I’m doing here.

Because it’s immutable, you can’t use dnf to install packages. You can layer essential packages with rpm-ostree, but the prefered method is to install in userspace with flatpaks and homebrew. I’m a madman who wants everything to be declarative and hate trying to remember what is on the machine and what is supposed to be on it. Usually i would use nix for most of this, but installing nix on an ostree image is technically possible but very painful. So I went looking for alternatives.

Rebos (package configuration)

Searching for a declarative configuration tool that isn’t nix, I found Rebos which does most of what I want. It requires a bit of setup, but it’s super flexible.

Chezmoi (dotfile management)

Basically every dotfile manager i have ever tried has been janky and horrible. home-manager is ok, but has the usual nix trade offs and doesn’t play that nice with bazzite. Chezmoi has been recommended and it seems nice. I’m not really using any of the more advanced features.

Building the system

Install

So like…I installed bazzite. Pretty straightforward. Pick the right image for your hardware, usual install nonsense, reboot.

Packages

I had done a lot of testing so my rebos configuration was mostly ready, I just needed to install rebos. Rebos is rust, so first I did my normal rust install using rustup then rustup default stable.

Rebos installs with the usual cargo install rebos, then get a snack while it builds because of rust’s one big flaw.

Rebos can control any package manager, but you have to configure them and I kinda went ham. You can also control the order that you run your managers, so you can use some managers to bootrap others. I use homebrew to install asdf, then asdf to install languages and tools that require version management. I also used homebrew to install uv for python stuff. Once it is all bootstrapped, I install all the different things I need on a system.

When I first got started, I just shoved everything in the gen.toml file, in addition to configuring all the managers. This got unwieldy pretty fast and it’s all split up into categories using the imports feature. There are also a few host-specific things (nvidia drivers and such) that are in host-specific gen.toml files. (These files are required, even if empty)

With Bazzite, all of the graphical apps I want are flatpaks, so I had to put fully qualified names in the configuration to be installed by flatpak. I have a hook to make sure that flathub and flathub beta are correctly configured. I had to make separate managers for flathub and flathub-beta to get things to install.

The thing to keep in mind is that rebos is basically scripting these tools, so if you install something separately from rebos, it won’t notice and update its internal state model.

I also have a hook for adding important system configuration files

Configuration + Dotfiles

I have been a big home-manager user, but that nix doesn’t play all that nicely with ostree images, so chezmoi was a nice alternative. Its organization is a little funny, but it works quite well. It uses templates instead of symlinks, which is kinda cool. The nice thing is that if you update the config file in-place, instead of the template, you can chezmoi add it to pull your changes back in. I’m not sure how this works with the templating though. Obviously you should check it in to git to recover from mishaps.

I also was able to use the scripting hooks to automatically update my neovim plugins when I apply the new configuration. Of course, I also switched to helix as my primary editor, but the best laid plans and all.

Impressions

Overally it’s been a pretty nice experience. Still bumpy in spots but it’s nice to not have to rely on windows and performance has been pretty good overall. Many of my issues come from bein an nvidia user, which is better than it used to be. Unfortunately, the simple fact is that nvidia dominates the graphics card market and, especially on the used market, you pay a premium for AMD just on supply and demand.

I’m happy with my setup, and I think it will enable my main goal of spending more time gaming than tinkering.