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
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.