Skip to content

fix: bug batch may23 — Readymade dock, toggle-devmode tag, OTD blacklist, brew path#346

Open
castrojo wants to merge 2 commits into
projectbluefin:mainfrom
castrojo:fix/lab-batch-may23
Open

fix: bug batch may23 — Readymade dock, toggle-devmode tag, OTD blacklist, brew path#346
castrojo wants to merge 2 commits into
projectbluefin:mainfrom
castrojo:fix/lab-batch-may23

Conversation

@castrojo
Copy link
Copy Markdown
Contributor

@castrojo castrojo commented May 24, 2026

Four bug fixes, all lab-verified on titan-bluefin (KubeVirt VM, ghost testlab, 2026-05-24).

Note: this branch also includes the changes from #324 and #300 which are not yet merged. Those PRs have independent lab verification posted. Once #324 and #300 land, this PR can be rebased to drop those changes.

Fixes

fix: remove Readymade installer from dock favorites

Closes #213

com.fyralabs.Readymade.desktop removed from favorite-apps. Users were repeatedly clicking the installer icon due to a delay before it autolaunches. The installer still autolaunches on first boot — it just no longer sits in the dock permanently.

fix: toggle-devmode reads correct image tag from booted deployment

Closes #149

Replaces jq '."image-tag"' image-info.json with rpm-ostree status -b --json to read the actual booted container image reference. image-info.json stores image-tag: "stable" even for stable-daily images (baked at build time), causing ujust toggle-devmode to rebase stable-dailystable.

Handles all transport prefix formats via sed -E 's|^.*://||; s|^[a-z-]+:||':

  • ostree-image-signed:docker://ghcr.io/...
  • ostree-unverified-registry:ghcr.io/...

fix: install-opentabletdriver — unload conflicting kernel drivers immediately

Closes #340

Adds modprobe uinput + rmmod wacom hid_uclogic after writing the blacklist file so drivers are unloaded in the current session without requiring a reboot. Also cleans up legacy rule files (90-/99-opentabletdriver.rules) before installing new ones.

fix: clean-system brew path consistency

/home/linuxbrew//var/home/linuxbrew/ to match the path used everywhere else (update.just, etc.). Uses explicit path to match update.just guard.

Lab verification

Image: ghcr.io/ublue-os/bluefin:stable + common fix layer (OCI overlay, no RPM builds)
Platform: titan-bluefin KubeVirt VM, ghost lab (192.168.1.102), 2026-05-24

Fix Check Result
Readymade absent from dock gsettings get org.gnome.shell favorite-apps ✅ PASS
toggle-devmode reads correct tag rpm-ostree status -b --json transport prefix strip ✅ PASS
OTD rmmod wacom present grep rmmod /usr/share/ublue-os/just/apps.just ✅ PASS
brew path /var/home grep linuxbrew /usr/share/ublue-os/just/default.just ✅ PASS

Assisted-by: claude-sonnet-4-5 via pi

Summary by CodeRabbit

  • Bug Fixes

    • Improved OpenTabletDriver installation with automatic handling of conflicting rules and kernel modules—no manual cleanup required.
    • Fixed system cleanup tool to use correct package manager paths.
  • Chores

    • Removed Readymade app from default GNOME Shell favorites.

@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label May 24, 2026
@castrojo castrojo added size/S This PR changes 10-29 lines, ignoring generated files. lgtm This PR has been approved by a maintainer kind/bug Something isn't working area/gnome Anything GNOME related area/just Justfile things copilot-ready Ready for Copilot review or AI-assisted merge and removed size:M This PR changes 30-99 lines, ignoring generated files. labels May 24, 2026
@dosubot dosubot Bot added area/brew Homebrew things area/policy System policies and configuration labels May 24, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 24, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38f0f470-6a28-4dee-9d5b-628a2c5ae7a7

📥 Commits

Reviewing files that changed from the base of the PR and between 0566254 and ecfab93.

📒 Files selected for processing (5)
  • bluefin-branding
  • system_files/bluefin/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override
  • system_files/bluefin/usr/share/ublue-os/just/system.just
  • system_files/shared/usr/share/ublue-os/just/apps.just
  • system_files/shared/usr/share/ublue-os/just/default.just
✅ Files skipped from review due to trivial changes (1)
  • system_files/bluefin/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override
🚧 Files skipped from review as they are similar to previous changes (4)
  • bluefin-branding
  • system_files/shared/usr/share/ublue-os/just/apps.just
  • system_files/bluefin/usr/share/ublue-os/just/system.just
  • system_files/shared/usr/share/ublue-os/just/default.just

📝 Walkthrough

Walkthrough

This PR updates system configuration and maintenance scripts across Bluefin: advances the branding subproject, removes an application from GNOME Shell favorites, refactors image detection in toggle-devmode from file-based to rpm-ostree-based queries, enhances OpenTabletDriver installation with udev cleanup and immediate kernel module handling, and corrects the brew binary path for system cleanup operations.

Changes

System maintenance and configuration refinements

Layer / File(s) Summary
Branding submodule and shell configuration
bluefin-branding, system_files/bluefin/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override
Advances bluefin-branding subproject to a new commit and removes a deprecated application entry from GNOME Shell's favorite-apps list.
Image deployment detection refactor
system_files/bluefin/usr/share/ublue-os/just/system.just
toggle-devmode now derives CURRENT_IMAGE from rpm-ostree status output instead of reading from image-info.json, with sed-based transport prefix stripping and repositioned IMAGE_BASE_NAME logic.
OpenTabletDriver installation enhancement
system_files/shared/usr/share/ublue-os/just/apps.just
Install flow removes conflicting udev rule files, configures kernel module blacklist, immediately reloads uinput and unloads conflicting modules, and triggers udev rules without reboot. Uninstall path corrects the blacklist file removal target.
System utility improvements
system_files/shared/usr/share/ublue-os/just/default.just
clean-system updates brew binary path from /home/linuxbrew to /var/home/linuxbrew and invokes cleanup via the corrected absolute path.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • projectbluefin/common#343: Both PRs modify the install-opentabletdriver recipe in apps.just, with this PR's udev/module handling enhancements building upon the earlier fix.

Suggested labels

size:M

Suggested reviewers

  • ahmedadan
  • inffy
  • renner0e

Poem

🐰 A rabbit hops through configs neat,
Updating paths and favorites to delete,
OSTree whispers what images say,
Tablets spin without delay,
Linuxbrew finds its new way! 🍺

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the four main bug fixes in the changeset (Readymade dock, toggle-devmode tag, OTD blacklist, brew path) and is specific and concise.
Description check ✅ Passed The description provides comprehensive details about all four fixes with references to closed issues, code explanations, and lab verification results including a test table.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
system_files/shared/usr/share/ublue-os/just/apps.just (1)

56-56: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Pre-existing bug: Uninstall removes wrong filename.

Line 39 creates /etc/modprobe.d/blacklist-opentabletdriver.conf, but line 56 attempts to remove /etc/modprobe.d/blacklist-opentabletdriver.rules. The blacklist file will not be cleaned up during uninstall.

🐛 Proposed fix
-      sudo rm -f /etc/modprobe.d/blacklist-opentabletdriver.rules /etc/udev/rules.d/71-opentabletdriver.rules
+      sudo rm -f /etc/modprobe.d/blacklist-opentabletdriver.conf /etc/udev/rules.d/71-opentabletdriver.rules
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@system_files/shared/usr/share/ublue-os/just/apps.just` at line 56, The
uninstall removes the wrong blacklist filename: creation uses
"blacklist-opentabletdriver.conf" but the removal command targets
"blacklist-opentabletdriver.rules"; update the sudo rm invocation that currently
references "blacklist-opentabletdriver.rules" to remove
"blacklist-opentabletdriver.conf" instead (leave the udev rule
"71-opentabletdriver.rules" removal as-is) so the created blacklist file is
actually cleaned up during uninstall.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@system_files/bluefin/usr/share/ublue-os/just/system.just`:
- Around line 23-25: Enable strict pipe failure and make jq error on
missing/null image: in the toggle-devmode block add set -o pipefail alongside
set -e, change the jq invocation that populates CURRENT_IMAGE to use jq -er so
it returns non-zero on missing/null
(.deployments[0]."container-image-reference"), and after command assignation
validate that CURRENT_IMAGE is non-empty (exit with error/log) before proceeding
to any bootc/boot switch calls; reference CURRENT_IMAGE, rpm-ostree, jq and the
existing set -e/set +e toggles when locating the code to modify.

In `@system_files/shared/usr/share/ublue-os/just/update.just`:
- Line 17: The rollback helper script ublue-rollback-helper currently uses a
strict grep like "^LockLayering=true" which misses variants with leading spaces
or spaces around '='; change its grep invocation to the same
whitespace-and-comment-tolerant regex used in update.just but matching true
(e.g. use grep -q -E -e
"^[[:space:]]*LockLayering[[:space:]]*=[[:space:]]*true([[:space:]]*(#.*)?)?$")
so that lines like "LockLayering = true" or "  LockLayering=true" are detected
and the script correctly chooses the bootc switch flow; update the grep call in
ublue-rollback-helper accordingly.

---

Outside diff comments:
In `@system_files/shared/usr/share/ublue-os/just/apps.just`:
- Line 56: The uninstall removes the wrong blacklist filename: creation uses
"blacklist-opentabletdriver.conf" but the removal command targets
"blacklist-opentabletdriver.rules"; update the sudo rm invocation that currently
references "blacklist-opentabletdriver.rules" to remove
"blacklist-opentabletdriver.conf" instead (leave the udev rule
"71-opentabletdriver.rules" removal as-is) so the created blacklist file is
actually cleaned up during uninstall.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 48c1ed5d-775c-4fa5-a094-2e5ec9ad938a

📥 Commits

Reviewing files that changed from the base of the PR and between f363b45 and 0566254.

📒 Files selected for processing (7)
  • bluefin-branding
  • system_files/bluefin/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override
  • system_files/bluefin/usr/share/ublue-os/just/00-entry.just
  • system_files/bluefin/usr/share/ublue-os/just/system.just
  • system_files/shared/usr/share/ublue-os/just/apps.just
  • system_files/shared/usr/share/ublue-os/just/default.just
  • system_files/shared/usr/share/ublue-os/just/update.just

Comment on lines +23 to +25
# Use the booted deployment reference so stable-daily images get the correct tag
# Strip transport prefix (ostree-image-signed:docker://, ostree-unverified-registry:, etc.)
CURRENT_IMAGE="$(rpm-ostree status -b --json | jq -rc '.deployments[0]."container-image-reference"' | sed -E 's|^.*://||; s|^[a-z-]+:||')"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify robust pipeline/error handling exists in toggle-devmode
file="system_files/bluefin/usr/share/ublue-os/just/system.just"
rg -n -C2 'toggle-devmode:|set -e|set -o pipefail|CURRENT_IMAGE=.*rpm-ostree status -b --json|jq -[a-z]*e' "$file"

Repository: projectbluefin/common

Length of output: 705


🏁 Script executed:

#!/bin/bash
set -euo pipefail
file="system_files/bluefin/usr/share/ublue-os/just/system.just"

# Show the toggle-devmode block around the CURRENT_IMAGE line.
nl -ba "$file" | sed -n '10,80p'

# Find all usages of CURRENT_IMAGE in the file to see whether "null"/empty is handled.
rg -n "CURRENT_IMAGE" "$file"

Repository: projectbluefin/common

Length of output: 108


🏁 Script executed:

#!/bin/bash
set -euo pipefail
file="system_files/bluefin/usr/share/ublue-os/just/system.just"

# Show the toggle-devmode block around the CURRENT_IMAGE line.
cat -n "$file" | sed -n '10,90p'

# Find all usages of CURRENT_IMAGE in the file.
rg -n "CURRENT_IMAGE" "$file"

Repository: projectbluefin/common

Length of output: 4299


Harden toggle-devmode image parsing: enable pipefail and make jq fail on missing/null container-image-reference.

  • toggle-devmode uses set -e but no set -o pipefail, so failures in rpm-ostree/jq won’t reliably stop the pipeline; set +e is then enabled immediately after, allowing a bad CURRENT_IMAGE to flow into bootc switch.
  • jq -rc won’t fail when .deployments[0]."container-image-reference" is null/missing, which can yield null/empty and produce an incorrect NEW_IMAGE.
Suggested fix
 toggle-devmode:
     #!/usr/bin/env bash
     set -e
+    set -o pipefail
@@
-    CURRENT_IMAGE="$(rpm-ostree status -b --json | jq -rc '.deployments[0]."container-image-reference"' | sed -E 's|^.*://||; s|^[a-z-]+:||')"
+    CURRENT_IMAGE="$(rpm-ostree status -b --json | jq -er '.deployments[0]."container-image-reference"' | sed -E 's|^.*://||; s|^[a-z-]+:||')"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@system_files/bluefin/usr/share/ublue-os/just/system.just` around lines 23 -
25, Enable strict pipe failure and make jq error on missing/null image: in the
toggle-devmode block add set -o pipefail alongside set -e, change the jq
invocation that populates CURRENT_IMAGE to use jq -er so it returns non-zero on
missing/null (.deployments[0]."container-image-reference"), and after command
assignation validate that CURRENT_IMAGE is non-empty (exit with error/log)
before proceeding to any bootc/boot switch calls; reference CURRENT_IMAGE,
rpm-ostree, jq and the existing set -e/set +e toggles when locating the code to
modify.

Comment thread system_files/shared/usr/share/ublue-os/just/update.just
Copy link
Copy Markdown
Member

@hanthor hanthor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR description explicitly states it includes changes from #324 and #300 which are not yet merged. Please rebase once those land to drop the included changes from unmerged PRs and keep only the four fixes this PR is supposed to deliver. Merging now would create a history tangle and could conflict with the in-flight reviews on #324 and #300.

@dosubot dosubot Bot removed the lgtm This PR has been approved by a maintainer label May 29, 2026
hanthor
hanthor previously approved these changes May 29, 2026
Copy link
Copy Markdown
Member

@hanthor hanthor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved.

@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label May 29, 2026
@castrojo
Copy link
Copy Markdown
Contributor Author

🤖 Copilot Test Report

Branch: fix/lab-batch-may23 | 31 commits behind main | Tested: 2026-05-30T04:52Z

Test Results

Test Result
just check (syntax validation) ✅ PASS
Branch freshness ✅ Acceptable

Summary

Bug batch from May 23 — multiple fixes in one PR. Touches just, gnome, brew, and policy areas. just check passes clean across all modified .just files.

…ggle-devmode tag, OTD blacklist, brew path

- Remove search-light from enabled-extensions (crashes GDM, causes reboots)
  Closes projectbluefin#324 (pfanzola)
- Fix LockLayering grep to ignore commented entries in rpm-ostreed.conf
  Closes projectbluefin#301, picks up PR projectbluefin#300 (joshyorko)
- Remove Readymade installer from dock favorites (users re-click causing confusion)
  Closes projectbluefin#213
- Fix toggle-devmode reading image-tag from image-info.json; now reads from
  rpm-ostree status -b --json so stable-daily stays on stable-daily
  Closes projectbluefin#149
- Fix install-opentabletdriver: cleanup old rule files, add modprobe uinput
  and rmmod wacom/hid_uclogic so drivers unload immediately without reboot
  Closes projectbluefin#340
- Fix clean-system brew path: /home/linuxbrew -> /var/home/linuxbrew,
  use explicit path to match update.just

Assisted-by: claude-sonnet-4-5 via pi
@castrojo castrojo force-pushed the fix/lab-batch-may23 branch from 0566254 to fbec3b3 Compare May 30, 2026 04:57
@dosubot dosubot Bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size/S This PR changes 10-29 lines, ignoring generated files. labels May 30, 2026
@castrojo
Copy link
Copy Markdown
Contributor Author

🔔 Needs 2 approvals from maintainers to enter the merge queue (can't self-approve). Both conflict issues have been resolved via rebase — branch is clean and just check passes.

hanthor
hanthor previously approved these changes May 30, 2026
Copy link
Copy Markdown
Member

@hanthor hanthor left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed. Approved.

@castrojo castrojo closed this May 30, 2026
@castrojo castrojo reopened this May 30, 2026
@castrojo castrojo closed this May 30, 2026
@castrojo castrojo reopened this May 30, 2026
@coderabbitai coderabbitai Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label May 31, 2026
@castrojo
Copy link
Copy Markdown
Contributor Author

castrojo commented Jun 2, 2026

Reviewed the four fixes — all look correct:

  • toggle-devmode: Using rpm-ostree status -b --json is the right fix; image-info.json tags are baked at build time and don't reflect stable-daily. The sed transport-prefix strip handles all known formats. ✅
  • OTD: rmmod wacom hid_uclogic 2>/dev/null || true + udevadm trigger avoids requiring a reboot. The || true guards against systems without those drivers. ✅
  • OTD uninstall bug: Removing .conf not .rules was a real bug — good catch. ✅
  • brew path: /var/home/linuxbrew matches the actual bind-mount path on immutable Fedora. ✅

Two things to check before merging:

  1. fix: removing search-light from the enabled extensions until there's a fix #324 and fix: ignore commented LockLayering setting #300 are merged (May 29–30). Please rebase to confirm the branch is clean and doesn't re-introduce any of those changes.
  2. Conflicts with fix: remove Readymade installer from dock favorite-apps #353: both PRs remove com.fyralabs.Readymade.desktop from favorite-apps. Whichever lands second will conflict on that file. If this PR merges first, fix: remove Readymade installer from dock favorite-apps #353 can be closed as superseded.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/brew Homebrew things area/gnome Anything GNOME related area/just Justfile things area/policy System policies and configuration copilot-ready Ready for Copilot review or AI-assisted merge kind/bug Something isn't working lgtm This PR has been approved by a maintainer size:M This PR changes 30-99 lines, ignoring generated files. size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

2 participants