feat(niri): branch QML layers by compositor, hide unsupported settings - #224
Open
TraNzeM wants to merge 7 commits into
Open
feat(niri): branch QML layers by compositor, hide unsupported settings#224TraNzeM wants to merge 7 commits into
TraNzeM wants to merge 7 commits into
Conversation
- AxctlService: detect compositor via NIRI_SOCKET/socket, no-op for special-workspace - CompositorConfig: niri path -> applyNiriConfig (axctl config apply) - GlobalStates: niri layout = scrolling (skip hyprctl), mark ready - CompositorPanel: hide Shadows section for niri - BindsPanel: hide layout selector for niri - cli.sh: add ambxst install niri / remove niri
added 6 commits
August 18, 2026 13:29
- ScrollingOverview: totalWorkspaces now reads from AxctlService.workspaces instead of Config.overview.rows*columns (which was wrong on niri) - Repeater uses the real workspace list; workspaceId/name come from axctl instead of index+1 (niri ids are not contiguous) - ScrollingWorkspace: render the workspace name as a top-left label
niri cannot screencopy a window that sits under the fullscreen overview overlay (ScreencopyView logs 'non captureable object'). Detect niri via AxctlService.compositor and disable live preview, showing the icon card instead of empty window outlines.
niri reports no absolute window position (all at=[0,0]), so windows stacked on top of each other. Detect this and lay them out in a cascade by index. Also make the fallback card translucent so the wallpaper shows through instead of a solid black block.
On niri, the Ambxst overview cannot show live window previews (no absolute window geometry in IPC). Add AxctlService.toggleOverview() which opens the compositor's built-in overview (real windows, drag-and-drop) on niri, and falls back to the Ambxst overview on Hyprland. Wire it into OverviewButton and the UserInfo profile click.
The dock overview button (DockContent.qml) opened the Ambxst overview directly via visibilities.overview, bypassing the compositor-aware toggleOverview(). Route it through toggleOverview() so on niri it opens the compositor's built-in overview (real windows, drag-and-drop).
CompositorConfig.applyNiriConfig() now includes keybinds collected from Config.keybindsLoader (binds.json) alongside appearance. Ambxst/system module binds and custom binds are resolved via KeybindActions and pushed in the axctl universal payload format, so the niri ConfigGenerator writes them into ambxst-generated.kdl. Also re-apply compositor config (debounced) when binds.json changes, so edits made in the BindsPanel dashboard tab take effect immediately.
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.
Summary
Adapt the Ambxst shell to run on the niri compositor (in addition to the existing Hyprland support). All compositor abstraction already lives in the
axctldaemon; these changes branch the QML UI by the detected compositor.Changes
AxctlService.qml: detect the active compositor viaNIRI_SOCKET//run/user/<uid>/niri*.sock; maketogglespecialworkspacea no-op on niri (no special workspaces)CompositorConfig.qml: niri path →applyNiriConfig()callsaxctl config applywith a universal payload (the KDL generator in axctl writesambxst-generated.kdl+ include + reload)GlobalStates.qml: on niri, setcompositorLayout = "scrolling"and mark ready immediately (skiphyprctlwhich doesn't exist on niri)CompositorPanel.qml: hide the "Shadows" section on niri (niri renders no shadows)BindsPanel.qml: hide the layout selector on niri (single scrollable-tiling layout)cli.sh: addambxst install niri/ambxst remove niri(addsspawn-at-startup+ blurlayer-ruleto config.kdl)Verification
qs -p shell.qml;CompositorConfig[niri]: Success