Skip to content

nexus: add cursor theme selector to wallpaper & style page#1563

Open
vitormarquesgithub wants to merge 3 commits into
caelestia-dots:mainfrom
vitormarquesgithub:feature/cursor-theme-selector
Open

nexus: add cursor theme selector to wallpaper & style page#1563
vitormarquesgithub wants to merge 3 commits into
caelestia-dots:mainfrom
vitormarquesgithub:feature/cursor-theme-selector

Conversation

@vitormarquesgithub

@vitormarquesgithub vitormarquesgithub commented Jun 12, 2026

Copy link
Copy Markdown

What this adds

  • A cursor theme selector and size selector directly in the Wallpaper & style page, replacing the previous separate sub-page approach
  • Discovers all cursor themes installed in /usr/share/icons, ~/.local/share/icons and ~/.icons
  • Highlights the currently active theme/size with a check mark in the popup list, and scrolls to it automatically on open
  • Applies theme and size immediately via hyprctl setcursor
  • Persists selection to gsettings and to $cursorTheme / $cursorSize in the Hyprland variables config
  • PopupRow gained a popupIcon prop so each row can set a distinct icon for its trigger button, independent of the row's leading icon

Notes

  • Assumes cursor variables are stored as $cursorTheme and $cursorSize in the Hyprland variables config
  • Theme list is populated lazily on page open, not at shell startup

Demo

2026-07-01.04-50-18.mp4

@vitormarquesgithub vitormarquesgithub force-pushed the feature/cursor-theme-selector branch from c0f699e to be6d403 Compare June 12, 2026 21:17
@PixelKhaos

Copy link
Copy Markdown
Contributor

This might be something to hold off on a bit, as I think instead of adding too many toplevel options there, might be a subpage of "colours and style" where this functionality can sit as a single dropdown selector.

@soramanew

Copy link
Copy Markdown
Collaborator

This definitely shouldn't be a separate page there. Perhaps a dropdown input like the default apps options, or a separate page if we add more related options. I'm holding back on this for now, we can decide where to add it when we have more related options.

@vitormarquesgithub vitormarquesgithub force-pushed the feature/cursor-theme-selector branch 4 times, most recently from da9a879 to a125106 Compare June 28, 2026 17:00
@vitormarquesgithub

Copy link
Copy Markdown
Author

This might be something to hold off on a bit, as I think instead of adding too many toplevel options there, might be a subpage of "colours and style" where this functionality can sit as a single dropdown selector.

I've since reworked it, the cursor theme and size selection are now inline dropdowns directly in the Wallpaper & style page, no separate subpage. Happy to adjust placement further once there's a clearer direction.

@vitormarquesgithub

Copy link
Copy Markdown
Author

This definitely shouldn't be a separate page there. Perhaps a dropdown input like the default apps options, or a separate page if we add more related options. I'm holding back on this for now, we can decide where to add it when we have more related options.

Understood, I'll wait for your call on placement. The current implementation already uses a dropdown inline in the Wallpaper & style page, similar to the default apps approach. Ready to rework whenever you decide on the final structure.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Please use the PopupRow component instead of modifying the Menu component. Menus are not scrollable, the PopupRow is there specifically for this purpose

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Hey @soramanew, thanks for the feedback!
I've reverted Menu.qml back to its original state and replaced the theme/size selectors with CursorThemeRow/CursorSizeRow, which extend PopupRow and use a VerticalFadeListView inside the popup content — same scrollable pattern used elsewhere. Both rows also scroll to the currently active theme/size on open.
As part of this I added a popupIcon prop to PopupRow (wired to BlobPopup's existing icon alias) so each row can set its own trigger icon instead of the hardcoded view_apps default — happy to revert that part if you'd rather keep PopupRow's API untouched.
I've also updated the PR description to reflect the current implementation.
Also wanted to say thanks for the guidance and patience — I'm still fairly new to this stack and to the codebase, so pointers like this really help. I'll keep digging into the architecture so I can contribute better on future PRs.

Revert scroll-related additions to Menu.qml (maxHeight, minHeight,
scrollToActive, dynamic attach positioning) since Menu is not meant
to be scrollable.

Replace SelectRow/SliderRow (Menu-based) with CursorThemeRow/CursorSizeRow,
which extend PopupRow and use a VerticalFadeListView inside a BlobPopup —
the existing scrollable-popup pattern. Both rows position the list at the
currently active theme/size on open, via Loader.onLoaded (first load) and
a Connections on popup.open (reopen).

Add popupIcon prop to PopupRow, wired to BlobPopup's existing icon alias,
so each row can set its own trigger icon instead of the hardcoded
'view_apps' default.

Addresses review feedback: caelestia-dots#1563 (comment)
vitormarquesgithub added a commit to vitormarquesgithub/shell that referenced this pull request Jul 1, 2026
Revert scroll-related additions to Menu.qml (maxHeight, minHeight,
scrollToActive, dynamic attach positioning) since Menu is not meant
to be scrollable.

Replace SelectRow/SliderRow (Menu-based) with CursorThemeRow/CursorSizeRow,
which extend PopupRow and use a VerticalFadeListView inside a BlobPopup —
the existing scrollable-popup pattern. Both rows position the list at the
currently active theme/size on open, via Loader.onLoaded (first load) and
a Connections on popup.open (reopen).

Add popupIcon prop to PopupRow, wired to BlobPopup's existing icon alias,
so each row can set its own trigger icon instead of the hardcoded
'view_apps' default.

Addresses review feedback: caelestia-dots#1563 (comment)
@vitormarquesgithub vitormarquesgithub force-pushed the feature/cursor-theme-selector branch from 52534d3 to 5d072ec Compare July 1, 2026 07:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants