Repository URL
https://github.com/TIerTek/omarchy-tektube
Category
Widgets
Tags
Media, Bar, Quickshell
Suggest a missing tag
No response
Maintainer notes
Bar widget + service that shows the user's own YouTube Music account (Home rows and mixes, playlists, live queue, synced lyrics, like/dislike, radio, search) in a theme-drawn panel. It works by driving a YouTube Music app window that the user signs into with a normal Google login; the plugin never handles credentials.
How it works, for review: bin/ytm-app launches the user's Chromium-family browser with --app=https://music.youtube.com, a dedicated --user-data-dir (~/.local/share/tiertek.ytm/profile) and --remote-debugging-port=0 (random loopback port, written by Chromium to the profile's DevToolsActivePort). bin/ytm-bridge (Python 3, standard library only, ~700 lines) attaches over that port, installs one function into the page (bin/page.js, ~230 lines) and serves a small JSON protocol on a unix socket in $XDG_RUNTIME_DIR (mode 0600). Every account request is executed inside the page by the site's own session via Runtime.callFunctionOn with typed arguments; the bridge only ever sees JSON results. Cookies and browser files are never read. Playback control is MPRIS, the same interface the built-in media widget uses. The user's everyday browser profile is untouched and never debuggable. SECURITY.md in the repo lists every process the plugin spawns and every input it validates (a closed id grammar enforced in both languages, with a test that keeps them identical).
Dependencies: a Chromium-family browser (Chrome, Brave, Chromium, Vivaldi or Edge — Firefox cannot be driven this way) and Python 3, both present on a stock install. Optional: cava for the spectrum bars; it is probed once with which and simply never used if absent.
Permissions: nothing elevates. No sudo/pkexec, no installer, no package-manager calls, no bundled binaries, no network beyond music.youtube.com (page context) and Google's image hosts for notification artwork (hostname allowlist). The service supervises the bridge process (service-management), spawns notify-send for track-change toasts and hyprctl dispatch_lua_expression with fixed argument arrays to park the app window in a special workspace.
Configuration: the plugin writes no user configuration. Optional keybindings ship as a snippet (hypr/ytm.lua) the user appends to ~/.config/hypr/bindings.lua themselves; the README says how to remove it. Removal leaves the sign-in profile in place and documents the one rm -rf that deletes it.
Tested on a single-monitor AMD laptop with a horizontal bar, Google Chrome as the browser; the other browsers' launch paths are covered by unit tests with stubs only, and multi-monitor / vertical-bar layouts are unverified — the README says so. Test suite: bash tests/run-all.sh (launcher, bridge against a fake DevTools endpoint, parsers, id grammar) — no browser or network needed.
Submission checklist
Repository URL
https://github.com/TIerTek/omarchy-tektube
Category
Widgets
Tags
Media, Bar, Quickshell
Suggest a missing tag
No response
Maintainer notes
Bar widget + service that shows the user's own YouTube Music account (Home rows and mixes, playlists, live queue, synced lyrics, like/dislike, radio, search) in a theme-drawn panel. It works by driving a YouTube Music app window that the user signs into with a normal Google login; the plugin never handles credentials.
How it works, for review:
bin/ytm-applaunches the user's Chromium-family browser with--app=https://music.youtube.com, a dedicated--user-data-dir(~/.local/share/tiertek.ytm/profile) and--remote-debugging-port=0(random loopback port, written by Chromium to the profile'sDevToolsActivePort).bin/ytm-bridge(Python 3, standard library only, ~700 lines) attaches over that port, installs one function into the page (bin/page.js, ~230 lines) and serves a small JSON protocol on a unix socket in$XDG_RUNTIME_DIR(mode 0600). Every account request is executed inside the page by the site's own session viaRuntime.callFunctionOnwith typed arguments; the bridge only ever sees JSON results. Cookies and browser files are never read. Playback control is MPRIS, the same interface the built-in media widget uses. The user's everyday browser profile is untouched and never debuggable.SECURITY.mdin the repo lists every process the plugin spawns and every input it validates (a closed id grammar enforced in both languages, with a test that keeps them identical).Dependencies: a Chromium-family browser (Chrome, Brave, Chromium, Vivaldi or Edge — Firefox cannot be driven this way) and Python 3, both present on a stock install. Optional:
cavafor the spectrum bars; it is probed once withwhichand simply never used if absent.Permissions: nothing elevates. No sudo/pkexec, no installer, no package-manager calls, no bundled binaries, no network beyond
music.youtube.com(page context) and Google's image hosts for notification artwork (hostname allowlist). The service supervises the bridge process (service-management), spawnsnotify-sendfor track-change toasts andhyprctl dispatch_lua_expressionwith fixed argument arrays to park the app window in a special workspace.Configuration: the plugin writes no user configuration. Optional keybindings ship as a snippet (
hypr/ytm.lua) the user appends to~/.config/hypr/bindings.luathemselves; the README says how to remove it. Removal leaves the sign-in profile in place and documents the onerm -rfthat deletes it.Tested on a single-monitor AMD laptop with a horizontal bar, Google Chrome as the browser; the other browsers' launch paths are covered by unit tests with stubs only, and multi-monitor / vertical-bar layouts are unverified — the README says so. Test suite:
bash tests/run-all.sh(launcher, bridge against a fake DevTools endpoint, parsers, id grammar) — no browser or network needed.Submission checklist