How to make Bluefin configuration declarative?

To do system-wide changes in bluefin, you use ujust.
ujust imperatively runs some scripts to change the system.

However, these scripts change all the time (especially right now during the beta).
This imperative administration will probably lead to instabilities over time, right?

Why not have a global config file for ublue in which you can set e.g.
fix-screenshare = true
shell = fish
nix-enabled = false

Then on every boot, ublue would check whether the OS conforms to the settings made in the config file.

The ujust command could still exist, but it would be reduced to just setting the properties in the file.

Another bonus is that the user could restore the stock bluefin experience without reinstalling the iso.

What are your thoughts?

1 Like

This is pretty interesting to me. You are basically describing somewhat how nix works with their configurations, except it runs on build instead of boot.

I do like the idea of having it be a bit more declarative to the end user, i just fear slow boots with running through an entire catalog of things to enable / disable etc.

Yeah alot of these are workarounds. The original intent around using just is to ship community vetted workarounds for “common” tasks like finish up gnome extension installs of “fix screensharing”. I’m hoping to delete as many of these as we can as bugs get fixed, heh.

For the declarative part we’re currently pushing hard on having the bluefin-cli be where you’re putting your custom stuff and letting you just do that with your own dockerfile and existing config files. We intend to publish that as a systemd-sysext for some deeper integration (but that’s a long term goal).

Why not have a global config file for ublue in which you can set e.g.

Yeah you’d do this in the containerfile for your custom image.

Tracking this here: Investigate a state reset feature · Issue #95 · ublue-os/main · GitHub


This topic was automatically closed 12 hours after the last reply. New replies are no longer allowed.