Repository navigation
[release] Ryoku 1.0.7 - #684
Merged
Merged
Conversation
The Orpheus AI usage module counted every agent with a usage cache and had no way to leave one out, while QS Bar's AI widget already has a Tools picker. - Modules > AI usage: one chip per supported agent (orpheus.aiTools, default all three). The module's figure, hover text and alert state only use the selected tools; none selected hides the module.
After switching to an empty workspace no toplevel is activated, so the focusOrder === 0 fallback returned the last-focused window of the workspace just left and the Orpheus window title kept showing it. The fallback now requires the window to be on the workspace its output is showing.
The avatar on a Users card and in the sidebar header was always the first letter of the name, and nothing in the settings could change it. - AvatarImage draws a person's picture in a circle: the AccountsService icon first, then ~/.face and ~/.face.icon; it reports hasImage so the caller keeps its letter when none loads. - Hub > Global > Users: the card shows the picture; your own card has a PROFILE PICTURE row (CHOOSE / CHANGE / REMOVE). A pick is cropped to a 512 px square into ~/.face and set through AccountsService SetIconFile, which needs no authorisation for your own account. Remove deletes both. - Sidebar Controls header: the same picture for the signed-in user.
With Show empty on, the Orpheus workspace strip on a fixed-workspace compositor always added one free slot after the last occupied workspace. With four workspaces in use this drew a fifth that does not exist, and there was no way to turn it off. - Modules > Workspaces: new "Spare workspace at the end" switch, shown only while Show empty is on (orpheus.workspaceSpare, default on, so behavior is unchanged). - Off: the strip ends at the last workspace that exists; gaps between existing workspaces still fill in.
The Apps catalogue drew the same oversized artwork cards as every other category, so a page held a handful of apps and their icons read as thumbnails. Apps now opens with a featured shelf, a Trending, Popular, New and Updated strip, and compact icon and text tiles that fit several apps per row; every other category keeps the artwork grid. The strip needed data the provider never fetched, so the Flathub provider now merges the popular, trending, recently added and recently updated collections into one cached snapshot and passes the trending score, monthly installs and update date through item metadata. A partial fetch still serves the apps it got but does not replace the complete cache. Search keeps Flathub's relevance order. Note: New: the Apps catalogue is a marketplace page with sort tabs and compact tiles
Apps had its own page with a second ProductGrid, so the cover grid stayed alive behind it and built a full set of artwork delegates for every app. The hero and the sort strip now sit above the one grid, which switches to compact tiles when Apps or the Flathub search is in scope, so the page component, the surface alias and the overlay wrapper are gone. Also drops the favourites count the provider fetched but nothing showed, and folds the hero's three metadata labels into one chip component.
Apps listed one flat catalogue, so the only way to narrow it was the four sort tabs. The market now carries a category row built from the Flathub main category tags the provider already sends, with the count each one holds, and a filter field that narrows the loaded catalogue as you type and combines with the active tab. The featured shelf steps aside while a category or a filter is active, so a narrowed view is just the tabs, the sort row and the grid. An empty result offers to clear the filter instead of leaving the market. The tab row answers the wheel, and a hidden install-all button no longer reserves width in any strip. Note: New: browse Apps by category and filter the market in place
Replaced search process with runSearch function to handle image uploads and browser interactions.
Fedora moved hyprland-devel to 0.57: the renderer passes an explicit CRenderContext, m_renderData is gone, and IPassElement's virtuals changed, so the vendored plugin no longer compiled and the whole Fedora publish stopped. Refresh the vendored bundle to upstream's current commit (plus a Ryoku master that keeps the 0.56 source pins the Arch lane resolves) and carry the 0.57 port as a Fedora fetch-hook patch, so the Arch build keeps choosing the unchanged 0.56.2 source. Verified: git bundle verify; git apply --check on the pinned commit; libimgborders.so links in fedora:44 and fedora:45 containers with hyprland-devel 0.57.0; the Arch resolver still maps 0.56.2 to the same source commit. Note: Fixed: the Fedora repository publish failed because the image-border plugin did not compile against Hyprland 0.57; Fedora now ships a ported build.
Arch moved hyprland to 0.57 too: the no-pin fallback in the PKGBUILD builds the bundle's default-branch HEAD, which still read m_renderData, so the [ryoku] testing publish failed the same way Fedora's did. Move master to the ported source (the Fedora fetch hook keeps checking out the untouched upstream commit plus its patch), keeping the 0.56.2 pin path byte-identical. Verified: git bundle verify on the new master; makepkg in an archlinux container resolves no pin for 0.57.0 and links libimgborders.so; on this host (0.56.2) prepare still resolves the 68ec678 pin and builds. Note: Fixed: the [ryoku] repository build failed against Hyprland 0.57 because the image-border plugin's fallback source predated the renderer change; the vendored HEAD now carries the port.
mkarchiso copies the airootfs with --no-preserve=mode, so the payload's qylock bundle reaches the target with every file at 0644. The greeter helper 1.0.6 added (sddm-host/install-greeter-theme) is executed directly by install-qylock, so every Arch and CachyOS ISO install died at the configure stage with "Permission denied" (exit 126). Restore its bit next to the existing chmod of the two staged installers. Verified: the shipped v1.0.6 CachyOS ISO fails exactly there in QEMU; the same ISO with this backend overlaid installs (BACKEND_EXIT:0) and boots the installed CachyOS kernel to the login prompt. Note: Fixed: Arch and CachyOS ISO installs stopped at the sign-in screen setup with a Permission denied error; they now finish and boot.
modetest's -D takes a legacy bus id, not a device node, so `modetest -D /dev/dri/cardN` never opened anything. probe_modes always came back empty, the settle loop polled until its 6s deadline, and every boot sat on a black screen before weston started on its preferred mode. The per-output top-refresh config never applied. Probe with -M <driver> (DRIVER= from the card's sysfs uevent) and keep only connectors sysfs reports connected on the selected card, since -M opens the first card bound to that driver. A probe that cannot open the card at all now ends the poll at once and starts plain weston. The tests asserted the broken -D argv against a stub; they now assert -M, cover the sysfs filter, and fail if an unprobeable card waits for the deadline. Note: Fixed: The login screen no longer shows a black screen for about six seconds before it appears
ryoku-bluetooth-reset restarts bluetoothd at login and then restores the saved radio state. For "on" the helper already waited for the controller, but "off" ran `bluetoothctl power off` once, immediately. Right after the restart the controller is still registering and BlueZ's AutoEnable is powering it on, so the call fails with org.bluez.Error.Busy: the radio comes up on against the user's choice and the reset unit fails. Turning off now waits for a controller and retries until BlueZ reports Powered: no, bounded like the on path. The test stub models a controller that registers late and answers Busy once. Note: Fixed: Bluetooth stays off after you log in when you had turned it off
system/packages/cachyos.replaces names what the CachyOS layer replaces (the stock linux kernel, the AUR yay-bin). The ISO keeps them off by seeding the provisioned ledger, but ryoku-shell-install's ledger only records the user's deselected apps. On a box converted in place, the manifest reconciler therefore read linux and yay-bin as "never delivered" and installed them: `pacman -S --needed linux ...` next to linux-cachyos, plus yay-bin in place of CachyOS's yay. Booting that stock kernel can also miss what the CachyOS kernel carries for the hardware. The manifest now carries cachyosReplaces, generated from the same file, and FetchManifest hands a CachyOS host (os-release ID=cachyos) a manifest whose base, dev, hardware and AUR lanes drop those names. The reconciler and `ryoku verify` both read it that way, so the names are neither installed nor reported as removed. Arch boxes and older manifests are unchanged. Note: Fixed: Updating a CachyOS install converted with the shell installer no longer adds the stock Arch kernel and yay-bin
The rail search had no keyboard navigation over its results and answered only
to Ctrl+K. Up/Down now walk the hits with wrap-around, Enter opens the
selected one instead of always the top hit, the header shows N / TOTAL, and
Ctrl+F is accepted alongside Ctrl+K as the focus shortcut.
The settings search answered only to Ctrl+K and had no way to move between
results by keyboard: Enter always opened the top hit, and only the pointer
could select a row.
- A `searchCursor` property now tracks which result is active under the
keyboard. It resets to 0 on every edit and on dismissal, so refining a
query or reopening the field never leaves a stale row selected.
- `Keys.onUpPressed` / `Keys.onDownPressed` on the search field walk the
hits with wrap-around and scroll the list so the active row stays in view
(`searchList.positionViewAtIndex(hub.searchCursor, ListView.Contain)`).
- `onAccepted` opens `hub.searchCursor` instead of always index 0.
- The delegate highlights `rr.index === hub.searchCursor`, and
`MouseArea.onEntered` keeps the pointer and the keyboard cursor on the
same row, so a click after a key press looks like a continuation rather
than a jump.
- The header now shows `(cursor + 1) / TOTAL` next to the hit count.
- `Keys.onPressed` accepts `Ctrl+F` as well as `Ctrl+K`, the shortcut a
user instinctively reaches for in a settings app.
ryoku
- Read the existing handler at `Hub.ml` 1079-1084 and the overlay at
1752-1802 before editing; confirmed `Ctrl+F` was absent and that
`onAccepted` hardcoded index 0.
- Verified every edit against the file after writing: the cursor property,
the field handlers, the renamed `searchList` id, the delegate highlight,
the `onEntered` sync, the header counter, the `Ctrl+F` key test, and the
two reset sites all land where intended.
- `grep` confirms no em-dash in the three changed files.
- `.githooks/pre-commit` passes (rc=0). `qmllint` is not installed in this
environment, so the QML was validated by inspection instead; run
`qmllint ryoku/hub/quickshell/Hub.ml` on a dev box before merging.
- [x] One logical change, with a clear `[area] scope: summary` commit subject.
- [x] Matching `CHANGELOG.md` updated in the area I touched.
- [x] The git hooks pass locally; I did not use `--no-verify`.
- [x] QML parses where applicable. (`qmllint` is not installed here; verified
by inspection and the pre-commit hook.)
- [x] No duplicated config, no dead code, no commented-out code, no em-dash.
- [x] Docs updated: `ryoku/hub/README.md` mentions `Ctrl+F` alongside
`Ctrl+K`.
Note: New: Up/Down navigate the settings search results, Enter opens the
selected hit, and Ctrl+F focuses the search bar.
Use the Top layer for auto-hidden docks so app windows cannot cover their hover strip. Keep pinned docks on Bottom and Stage editing on Overlay, matching the existing ii dock fix. Note: Fixed: Auto-hidden Ryoku docks open at the edge over app windows.
Note: Fixed: Fastfetch styles keep their renderer and theme roles after saving in Settings.
Stop making the compositor-neutral desktop require stock linux-headers. Fresh Arch installs still pair stock linux with its headers, while CachyOS replaces both with its two kernel and header pairs. Shell conversions and ryoku doctor derive each installed kernel's pkgbase and install only the matching <kernel>-headers package. This keeps xpadneo and other DKMS modules buildable without putting headers for an absent stock kernel on CachyOS boxes. Note: Fixed: Arch and CachyOS boxes now receive headers only for their installed kernels
Note: Fixed: Skip matching kernel header packages that pacman cannot resolve so custom kernels do not break installation or doctor.
Read adapters through the live model and keep a shared BlueZ state reader so the controls recover when the service or controller arrives after the shell. Note: Fixed: Bluetooth controls follow the live adapter and powered state
Note: Fixed: The lock screen password field is ready after waking from sleep
Gate the separate visualizer surface on explicit overlay mode instead of the inline hosts' asynchronously updated enabled state. Note: Fixed: Desktop visualizers stay behind apps and the dock after toggles.
Note: Fixed: Orpheus workspace marks stay in workspace order.
Note: Fixed: Long Orpheus tray menus can be scrolled to their last row.
Note: Fixed: Opening an Orpheus card no longer flickers or reloads the bar.
Note: Fixed: Empty niri workspaces no longer keep the previous window title.
Note: Fixed: Profile pictures update immediately in Hub and sidebar.
Keep the single-flight install contract, but disable other products' actions with a visible explanation while an operation is active. Note: Fixed: other products no longer present inert download buttons during an install.
Order ordinary category pages by display name and keep a local search field beside the list. Preserve marketplace rankings while exposing A to Z for Apps. Note: New: category pages now have alphabetical ordering and scoped search.
Wait for the detail transition to finish before visual proof and give the Apps sort controls and scoped search dedicated geometry at narrow widths. Note: Fixed: compact app captures retain tile text and narrow controls no longer overlap.
Note: Fixed: Hyprland no longer draws its splash text at startup
The nightlight and watchdog tests ran a renamed copy or symlink of sleep as their fake process. On uutils coreutils (the Ubuntu 26.04 runner image) sleep is a multicall binary that dispatches on argv[0], so the fake exited at once and both suites failed on CI while passing on GNU coreutils. The fakes are now a shell script that sleeps under its own name and a shell blocked on a pipe, which no coreutils flavour can change.
Note: Fixed: Login returns to the desktop when the cover graphics process stalls.
The inclusive-language gate lints every file a push changes, and the radio singleton reached the release diff through the mpv change, so the word it flags goes now rather than blocking the main merge.
Note: Fixed: Zsh installs now start with Ryoku's configured prompt.
Thirteen contributor pull requests and the fixes for every issue filed since 1.0.6: Hyprland 0.57 share picker and plugin setup, Fedora package conflicts, removable mpv and kernel headers matching the installed kernels, the Orpheus bar and QS Bar startup fixes, Bluetooth and lock screen state after resume, the store marketplace, and the zsh login seed.
neur0map
added a commit
that referenced
this pull request
Oct 31, 2026
Main carries the release PR merge commit (#684); unstable already holds the same content as its own commits, so only the topology differs. VERSION stays on the unstable line at 1.7.7.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings main up to unstable-dev for the 1.0.7 release. Every open issue and pull request was resolved on unstable-dev first; the only difference between the branches after this merge is the version line.