feat: replace noctalia with an eww panel #3
Reference in New Issue
Block a user
Delete Branch "eww-shell"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Draft. Untested on real hardware — everything below was verified headless, so the layout will want tuning once you see it on a 4K screen.
Removes noctalia and its flake input. It was doing six jobs; each is now a separate binary-cached package, so nothing in this stack builds from source:
SUPER+NSUPER+spaceThe panel shows clock, battery, network and bluetooth, plus buttons for next wallpaper, pick wallpaper, bluetooth power and lock. The battery row hides itself where there is no
BAT*. Rows close the panel and open the real app —nm-connection-editor,blueman-manager,waypaper.custom.hyprland.verticalOutputsreplaces noctalia's per-monitor wallpaper handling; konishi sets it toDP-2.Two things this does not carry over: light/dark theme switching (darkman no longer repaints anything but GTK and the cursor), and the panel does not close on click-outside, only on
SUPER+Nagain.Verification
All five configurations evaluate;
naps62@konishibuilds.The panel was run headless under Xvfb against the generated
eww.yuck: window opens, no parse warnings, and every poll returns real data on this machine —Two bugs found and fixed that way:
bluetoothctlhangs forever rather than erroring when there is no adapter, so the script checks/sys/class/bluetoothand caps each call withtimeout 2; and:homogeneousis not a box attribute in eww 0.6.🤖 Generated with Claude Code
Measured what noctalia actually costs, because the "it's overkill" framing above only holds for one of the two resources.
Disk: this change makes things worse. noctalia's Qt6 stack is already shared with the rest of the config, so it only adds ~64 MiB of its own — the package (41 MiB) plus libqalculate and gnuplot for its calculator widget. The replacement stack adds ~170 MiB, mostly numpy (waypaper is Python) and Kirigami (pulled in by hyprpolkitagent). Net +106 MiB.
Memory: this change is the win. noctalia is ~126 MB resident against ~34 MB for the eww daemon, and that gap will widen on konishi, where noctalia also paints wallpaper on three 4K outputs.
So the case for this PR is memory and build time, not disk. If disk matters more than either, pinning the input (#2) gets most of the benefit for none of the churn.
How the numbers were taken
Disk — closure difference between
mainand this branch,naps62@konishihome generation, self sizes not closure sizes:Total closures are 32.1 GiB and 32.2 GiB respectively.
Memory — both run under headless sway on one output, same machine. The eww figure is the daemon idle: the panel window itself would not open headless (GTK could not pick a primary monitor without an explicit
--screen, whicheww-panelalways passes on Hyprland), so treat 34 MB as a floor.Not measured: build time, and neither figure comes from konishi itself.
🤖 Generated with Claude Code
76374ab21cto39cc3f2cd0yuck interpolates ${...}, not {...}, so wpctl was being handed a literal "{node}" and failing; the slider snapped back on the next poll. Also drops the full-screen backdrop. It gave click-outside-to-close, but its handler fired for clicks on the sliders too, closing the overlay mid-drag. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>