A single floating taskbar with rounded corners, big icons and grouped apps, for GNOME. Your app launcher, open windows, tray and clock sit in one bar at the bottom of the screen, and everything is adjustable in its settings. Water Panel is built in: the bar becomes a liquid audio visualizer that moves with whatever is playing and takes its colours from your wallpaper, and while Spotify plays the Fetelabs wordmark (a word of your own, JOLA by default, the live test tube and FETELABS) splashes through the water, its glossy paint drips filling with the music and falling into the waves, and every kick of the bass makes it throb, bounce and fling paint across the bar. Turn it off or tune it on the Water tab of the settings. It needs python3 with NumPy and parec (sudo apt install python3-numpy pulseaudio-utils); without them the bar still works, just without the water. A media player is built in too: back, play and next at the start of the bar, and a click away a mini player with the cover art, the controls floating on a tank of water that moves with the music in the cover's colours, while the bar's controls turn into a paint splash that plays to the vocals. Choose which media apps it follows in the Player tab; it can start your music at login (Spotify Liked Songs on shuffle) without the app's window getting in the way. The Show Desktop button is a live Dragon Ball whose liquid sloshes with the music (or any icon you like). A fork of Zorin Taskbar (v70), itself based on Dash to Panel, with the Fetelabs setup built in as the defaults. Turn off Dash to Panel, Dash to Dock or Zorin Taskbar before enabling it. By Fetelabs: fetelabs.ai · X @mostlyjola · Instagram @fetelabs Tips: USDC on Solana ONLY to Dox9t9toz7BwwHJaqqsTpt9J74DWkXidP921FJQgWGE5 (SOL, other tokens or other networks will be lost).
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-001 manual_review
extension code must not be minified or obfuscated
File appears obfuscated: 57% of identifiers are 1–2 characters (avg length 3.1).
logoDraw.js
short identifier ratio: 57%, identifiers scored: 295
EGO-X-004 warning
extensions should avoid synchronous file IO in shell code
Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.
player.js:1184
GLib.file_get_contents(file)
water/water.js:446
GLib.file_get_contents(json)
water/wordText.js:21
file.load_contents(null)
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 7 ungated console.log/warn/error calls (threshold: 5).
water/water.js:78
console.error(`Water Panel: cannot offer the power-up on D-Bus: ${e}`)
water/water.js:459
console.error(`Water Panel: cannot play ${sound}: ${e}`)
water/water.js:531
console.error(`Water Panel: cannot read the wordmark font: ${e}`)
water/water.js:656
console.error(`Water Panel: cannot work out colours: ${e}\n${e?.stack}`)
water/water.js:869
console.error(`Water Panel: cannot start analyzer: ${e}`)
water/water.js:448
console.warn(`Water Panel: no aura envelope for ${sound} (run aura-envelope.py): ${e}`)
water/water.js:884
console.warn('Water Panel: the audio analyzer keeps exiting. ' +
'Check that python3, python3-numpy and parec (pulseaudio-utils) are installed.')
EGO-L-003 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
player.js:339
p.connect('changed', () => this.emit('changed'))
player.js:502
this._timeline.connect('new-frame', () => this._frame())
player.js:783
this.menu.connect('open-state-changed', (_m, open) => {
if (open) this._tick()
else this._stopTick()
this._morph(open)
})
EGO-L-004 warning
main loop sources should be removed in disable()
Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.
player.js:916
this._tickId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1, () => {
this._tick(true)
return GLib.SOURCE_CONTINUE
})