Setting up a custom image

Hello, I am trying to make my on dx version of KDE for the Framework Laptop, I had a few questions,

  1. Based on the guide at Introduction - Universal Blue, is the appropriate place to include a package like Solaar in scripts/recipe.yaml?
  2. The guide at Modules for Startingpoint - Universal Blue also suggests using modules for fonts, flatpaks, etc., but most of the links to custom images shared here seem to use everything in scripts/recipe.yaml itself. Can any of you point me to examples which use the modules?
  3. I need to use a custom tlp profile for the laptop (framework/system_files/shared/usr/etc/tlp.d/50-framework.conf at dee61f572af3d8e3cb3711ee29922853108873ad · ublue-os/framework · GitHub), do I just mimic this folder structure and add the line COPY system_files/shared / in the Containerfile?
  4. I need to use some kernel parameters, and using the file at framework/system_files/just/custom.just at dee61f572af3d8e3cb3711ee29922853108873ad · ublue-os/framework · GitHub, I have created a 120-framework.just and included that in !include 120-framework.just . Here is the link: fw-kaydeex/config/files/usr/share/ublue-os/just/120-framework.just at 75805c6ebcfb451d5efc9e576b15bc4cc2eac3ce · bmp/fw-kaydeex · GitHub. Does this make sense? I have included other parameters I was using on this laptop when I had previously installed Void Linux.
  5. Do any of these parameters affect Universal Blue adversely? Specifically, I am hiding kernel logs (moving them to tty2), turning off mitigations, turning off watchdog, enabling intel guc and fastboot.
  6. Will mimicking the dx , toolboxes folders and the necessary portions for just file from GitHub - ublue-os/bluefin: An interpretation of the Ubuntu spirit built on Fedora technology be enough?

If there are examples you could point me to, I would be happy to look at them.

PS: I had originally posted this on Discord, but thought it is useful to have this here as Discord is not searchable without the application, etc.

4 Likes

One strange issue that I have notices is that when I provide the GRUB parameters in a separate file and then include that in custom.just, the build fails with an error error: Formatted justfile differs from original. whereas when I provide the code in custom.just, the build succeeds.

Any ideas as to what I am doing wrong?

  1. If it’s an rpm or available on dnf, you can put it in the Install section of recipe.yaml yes. Here’s an example of mine. Note that some stuff can’t be pulled by the builder for some reason - I usually put that in some random folder (/scripts/post/rpm for me).

  2. Modules is pretty new, I still use recipe.yaml myself and declarative-flatpak via Nix Home-Manager for flatpak syncing. Sorry, can’t help here.

  3. I think you can just copy-paste it to /usr/etc/ in the repo? At worst, you may need to make a post script deleting the auto-generated tlp.conf (if it’s part of the package) and then readding the correct file.

  4. Not sure, I don’t use that stuff.

  5. If it doesn’t have any issue with a normal distro, it shouldn’t have an issue here too. Of course, turning off mitigations and such is always a risk, but I’d assume you already do your due diligence with those risks.

  6. I’d probably just use the dx image as a a base image? See my kinoite and bazzite recipes. I just remove stuff I don’t want and install stuff I want based on that image.

3 Likes

Thank you for the response, I’ll take a look at your repo and report my results here soon!

After much fiddling, here is a version that I have created,

  1. I have borrowed large part of the container file from bluefin’s Containerfile as I was not able to figure out the correct repos that I need to use for docker and other packages.
  2. I have used @fenglengshun’s Ublue-whitesur and fiftydinar’s Gidro-OS as inspiration.

While I am able to rebase to the unsigned version, when I try to rebase to the signed version, I get the following message,

Resolving dependencies... done
error: No packages in transaction

I also need to do the following,

  1. My tlp config seems to be loaded as I get a confirmation when I run tlp-stat,
...
/etc/tlp.d/50-framework.conf L0058: CPU_ENERGY_PERF_POLICY_ON_AC="performance"
/etc/tlp.d/50-framework.conf L0059: CPU_ENERGY_PERF_POLICY_ON_BAT="power"
...
/etc/tlp.d/50-framework.conf L0043: CPU_SCALING_GOVERNOR_ON_AC="performance"
/etc/tlp.d/50-framework.conf L0044: CPU_SCALING_GOVERNOR_ON_BAT="powersave"
/etc/tlp.d/50-framework.conf L0068: CPU_MIN_PERF_ON_AC="0"
/etc/tlp.d/50-framework.conf L0069: CPU_MAX_PERF_ON_AC="100"
/etc/tlp.d/50-framework.conf L0070: CPU_MIN_PERF_ON_BAT="0"
/etc/tlp.d/50-framework.conf L0071: CPU_MAX_PERF_ON_BAT="30"
/etc/tlp.d/50-framework.conf L0078: CPU_BOOST_ON_AC="1"
/etc/tlp.d/50-framework.conf L0079: CPU_BOOST_ON_BAT="0"
/etc/tlp.d/50-framework.conf L0087: CPU_HWP_DYN_BOOST_ON_AC="1"
/etc/tlp.d/50-framework.conf L0088: CPU_HWP_DYN_BOOST_ON_BAT="0"
/etc/tlp.d/50-framework.conf L0098: PLATFORM_PROFILE_ON_AC="performance"
/etc/tlp.d/50-framework.conf L0099: PLATFORM_PROFILE_ON_BAT="low-power"
/etc/tlp.d/50-framework.conf L0106: INTEL_GPU_MIN_FREQ_ON_AC="100"
/etc/tlp.d/50-framework.conf L0107: INTEL_GPU_MIN_FREQ_ON_BAT="100"
/etc/tlp.d/50-framework.conf L0108: INTEL_GPU_MAX_FREQ_ON_AC="1300"
/etc/tlp.d/50-framework.conf L0109: INTEL_GPU_MAX_FREQ_ON_BAT="800"
/etc/tlp.d/50-framework.conf L0110: INTEL_GPU_BOOST_FREQ_ON_AC="1300"
/etc/tlp.d/50-framework.conf L0111: INTEL_GPU_BOOST_FREQ_ON_BAT="1100"
  1. Customize look and feel of KDE automatically

  2. Make sure distroboxes are setup the way I need them

  3. GPG, SSH keys are loaded correctly for my Emacs usage.

2 Likes

I have setup GRUB parameters through the custom.just file.

I have run just framework-13 too and rebooted too

However, when I check the parameters with rpm-ostree kargs the output is,

rd.luks.options=discard rhgb quiet root=UUID=c2505047-6b84-4a98-b395-cb2861ad15d6 rootflags=subvol=root rw ostree=/ostree/boot.1/default/0b3f1b57b81c019ee72ee09e49b3937de029041a1ea03a5cd5d6d1bf821c39bd/0 module_blacklist=hid_sensor_hub nvme.noacpi=1 tpm_tis.interrupts=0 rd.luks.options=discard

Is there a step I am missing?

This could be related to just recipe not working itself!