From the 2026-06-20 Acer muxless-Optimus hardware test:
- F-wifi (NsNetwork.qml): the Wi-Fi panel was display-only — no onClicked,
no password field — so a secured network could not be joined from the GUI.
Wire the existing Network service: click to connect; open/saved networks
connect directly; secured-without-profile expands an inline password field
(StyledTextField, echoMode Password). Also strip a stray NUL byte that the
on-box edit left at the `?? " "` sentinel. HW-verified on the test laptop.
- F-multimon (NsShell.qml + NsBar.qml + NsOverlay.qml): bar popouts mirrored
on every monitor. Add a `screen` identity to NsShell; pills pass their
output name; each NsOverlay only renders when it owns the open panel ("" =
unscoped, for the global power modal). HW-verified dual-monitor.
- F-sudo (SudoToggleRow.qml): the passwordless-sudo prompt used the shared
TUI.float class with no focus rule, so keystrokes missed it and three blank
tries tripped pam_faillock with no feedback. Use a dedicated `nosignal-sudo`
class (builder ships float/center/pin/stayfocused rules) and call the new
`nosignal-sudo-toggle enable-tui` wrapper, which keeps the terminal open on
failure so the reason is visible.
Add .gitattributes (*.qml/*.conf/*.json text) for clean diffs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
F2: NsNotifications.qml "Clear" mirrors the service (Notifs.list.slice() →
n.close()) instead of n.notification?.dismiss() — cards now actually leave the
list, and it works for disk-restored notifications (whose notification is null).
C2: Toggles.qml gameMode delegate launches the guarded switch-to-gaming via
Quickshell.execDetached (debounced + disabled + 5s timer so a double-click can't
fire two SDDM restarts), and the tile is hidden entirely when DeckShift isn't
installed (Process probe for the gamescope session file).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- CachyRepoToggleRow.qml (Settings -> Services): sudoless CachyOS optimized
repos + linux-cachyos kernel switch, auto-tier (v4>v3); polls
nosignal-cachy-repo status, runs enable/disable in a floating kitty. Inserted
after SudoToggleRow in ServicesPage.qml.
- NsQuickSettings.qml: Night Light now drives hyprsunset (tile bound to the real
pgrep'd process, not a flag); Airplane drives nmcli + bluetoothctl and binds to
real radio state; VPN placebo tile removed (no backend).
Both built + live-tested on the reference box (06-17 PM). Helper script, sudoers
and hyprsunset dep ship in the nosignal builder.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- About page: replace caelestia AnimatedLogo with the NoSignal logo
(assets/nosignal-logo.png), title "NoSignal", version reads "V1".
- Square every remaining curved element to match the no-curves design:
avatars, toggle/icon circles, power/media buttons, slider tracks+handles,
NsSwitch track+knob, notification dot, calendar today, lock avatar -> radius 0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Route the redesign's icons through JetBrains Mono Nerd Font instead of Material
Symbols, for visual consistency with the JetBrains Mono text.
- services/Glyphs.qml: Material-Symbol-name -> Nerd Font (Font Awesome range)
codepoint map (via String.fromCharCode), covering bar/panel icons + the
dynamic Icons.getX() returns; get() falls back to a "?" glyph.
- components/NsIcon.qml: reactive icon component (input `icon` = name -> mapped
glyph), so dynamic icons (volume/battery/play-pause) stay live. Uses the
"Mono" NF variant so glyphs center in a fixed cell.
- Converted all MaterialIcon usages in NsBar + the 9 panels to NsIcon.
caelestia core (nexus/launcher/osd/lock) still uses Material Symbols — no
breakage (mixed), to be converted next with an expanded Glyphs map.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>