Squared Theming, Album Artwork, New Settings, and Bug Fixes - #1
Squared Theming, Album Artwork, New Settings, and Bug Fixes#1JaxonWright wants to merge 10 commits into
Conversation
Square the waveform bars and provide a plugin-local WavebarSlider with squared track, fill, tick, and knob styling so the progress and volume sliders match, without changing other Omarchy panels that use the shared rounded PanelSlider.
Expose a safe trackArtUrl on the media service and show the album cover in the bar (between the waveform and the title) and as the panel header art. Art loading is opt-in via the showCover setting and only accepts local file:// paths plus a trusted allowlist of cover CDNs (Apple Music, Spotify, YouTube, Tidal/Deezer); all other MPRIS-provided URLs are rejected and treated as no cover. The allowlist lives on the service so the bar and panel share a single check.
Add a showArtist setting that places the artist name after the track title, matching the panel tooltip, and a showFullTitle setting that stops truncation and horizontal scrolling so the full title (and artist) is shown. When full title is enabled the scroll animation is disabled.
Add a groupControls setting that places previous/play/next into a single tight group beside the media info. When disabled (default), the previous button stays separable on the leading edge. Each transport button now owns its own hover tooltip so grouping never blocks tooltips on the other controls.
Add a gear button next to the volume slider that reveals a Settings section in the panel with toggles for every WaveBar option: show track title (and the hidden artist/title toggles), show album cover, show playback controls (and the grouped-controls toggle), and hide when paused. Toggles write back to the shell config through a setBooleanSetting helper so changes persist, and a taller content height is used while the section is open. The panel's sliders now use the same squared WavebarSlider as the bar, the volume row keeps its gap for the settings button, and the playback buttons use consistent icon sizing.
Document the new artist, full-title, album-cover, and grouped-controls options, the add-on panel settings section, and the squared waveform/slider theming. Describe the opt-in album-art URL allowlist in the security section and add WavebarSlider to the qmllint validation command. Add an Unreleased changelog section covering the media/interface and security changes.
|
@ErikBurdett fantastic work on this plugin. If these changes are too much, let me know. If so, I'll start maintaining my fork as its own project because I have many more ideas |
Raise the fitted-content height cap while the panel settings section is open so the last toggle (hide when paused) is not clipped at the bottom when every option is shown.
Wrap the panel's content in a ScrollView so that when the settings section is open every toggle stays reachable: content taller than the panel's fitted height scrolls vertically instead of the last option overflowing the bottom edge. The vertical scrollbar appears only when the content actually overflows.
|
@JaxonWright Yo! Thank you so much for checking out the plugin - I made it for myself and pushed it to the marketplace to learn the process, really didn't expect anyone to use it lol. Testing your Pull Request locally and if it works it'll be merged! I do want to maintain this but updates may be slow on my end as I'm a bit busy with work most days, but please, by all means if you want to just fork and create your own version please do :) |
The panel body was a bare Column with no height bound to the card, so it
drew past the card edge once the settings section was expanded. The
settings list had its own fixed-height Flickable, which bounded only the
toggles and left everything else to overflow.
That inner Flickable also wrote `ScrollBar.vertical: ScrollBar { ... }`
unqualified, but this file imports QtQuick.Controls as QQC, so the type
was unresolvable and Panel.qml failed to load outright. The previous
attempt had the same defect with a bare ScrollView. The omarchy shell
panels this was modelled on import QtQuick.Controls unqualified, which
is why the pattern looked correct when copied over.
Replace both with a single Flickable filling the key catcher so the whole
body scrolls as one list, and qualify the scrollbar as QQC.ScrollBar —
matching the sourceView ListView, which already had it right. Drop the
now-redundant settingsList wrapper Column.
Verified on a 2560x1440 screen with settings expanded: content 915px in a
947px card against 1414px available, so the panel sizes to fit and the
scrollbar stays hidden; it engages only when the content exceeds the card.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk2aBjm8DnhCip4mm5DbgH
|
Ok, there should no longer be any more changes required. That was a bugger to fix! |
mediaButton declares `tooltipHovered: mediaHover.containsMouse`, but the MouseArea it names had lost its `id: mediaHover`, so every load threw "ReferenceError: mediaHover is not defined" from BarWidget.qml:117. The same edit also retargeted the tooltip from mediaButton to root. The bar resolves tooltip visibility through `target.tooltipHovered === true` (Bar.qml:174) and qs.Ui/BarWidget does not define that property, so the media tooltip's hover check silently evaluated false. Restore the id and target mediaButton, matching prevLeft, prevButton, playButton and nextButton: the hoverable Item owns tooltipHovered, its MouseArea carries the matching <id>Hover id, and showTooltip receives that Item. The shell now loads the plugin with no warnings. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rk2aBjm8DnhCip4mm5DbgH
|
Thanks for this — it's a genuinely good contribution, and the three commits you I merged this into a local staging branch, installed it on my Omarchy machine, Two things before I can merge, plus some smaller notes. 1. Required:
|
Summary
Adds a set of display and interaction customizations to WaveBar: an in-panel settings section, artist and full-title display, opt-in album art with a hardened URL allowlist, grouped playback controls, and squared waveform/slider theming.
Changes
Squared Theming
Waveform.qml: square waveform bars (radius: 0).WavebarSlider.qml(new, vendored plugin-local copy): squared progress/volume slider derived from Omarchy'sPanelSlider, importedqs.UisoBorderSurfaceresolves outside the shell Ui dir, andradius: 0on track/ticks/knob. Used by both the bar and panel so other Omarchy sliders are untouched.Working, Safe Album Artwork
Service.qml: exposes a centralized, hardenedtrackArtUrlwithisSafeTrackArt/safeTrackArtallowlist — only localfile://paths and a known set of trusted cover CDNs (Apple Musicmzstatic.com, Spotifyscdn.co, YouTubeyimg.com/ggpht.com/googleusercontent.com, Tidal/Deezertidal.com/dzcdn.net) are loaded. All other MPRIS-provided URLs (remote hosts,data:, special files, oversized sources) are rejected and treated as no cover.BarWidget.qml: shows an 18px cover thumbnail between the waveform and the title whenshowCoveris on (and not in vertical mode).Panel.qml: shows the album art as the panel header image with a glyph fallback.manifest.json: newshowCoversetting.Artist and Full-Title Display Settings
BarWidget.qml:showArtistappends the artist after the title (matching the tooltip);showFullTitleshows the entire title without truncation and disables the scroll animation.manifest.json: newshowArtistandshowFullTitlesettings.Grouped Playback Controls Setting
BarWidget.qml:groupControlsplaces previous/play/pause/next into a single tight cluster beside the media info. Each transport button owns its own hover tooltip so grouping never blocks tooltips, and the previous-button tooltip target switches correctly when grouped.manifest.json: newgroupControlssetting.In-Panel Settings Section
Panel.qml: a cog (Settings) button beside the volume slider reveals a Settings section with toggles for every WaveBar option — show track title (plus the artist/full-title sub-toggles), show album cover, show playback controls (plus the grouped-controls toggle), and hide when paused. Toggles write back to the shell config via asetBooleanSettinghelper usingmutateShellConfig, so changes persist.Bug Fixes
Docs
README.md: features list, inline config JSON (new settings), rewritten security section describing the opt-in art allowlist, andWavebarSlider.qmladded to the qmllint validation command.CHANGELOG.md: new## Unreleasedsection under Media & interface and Security.Screenshots
Click to View
Square Waveforms

Show Artist in Title

Show full title: removes the width limit and no longer marquees

Grouped Playback Controls

Fixed Tooltips: The live version of this plugin has tooltips that cover the buttons and their text overflows at the bottom

Main Panel: Notice squared seek and volume controls, properly aligned playback control icons, and a new settings cog

Main Panel with all settings enabled

Notes
String(setting(..., false)).toLowerCase() === "true") becauseomarchy bar setwrites strings while the GUI writes booleans.showArtist/showFullTitlehidden unlessshowTitle;groupControlshidden unlessshowControls)./usr/share/omarchy/shell/Ui/PanelSlider.qml.