Commit graph

372 commits

Author SHA1 Message Date
e42538896f fix(nosignal): hardware-test round 4 — Wi-Fi join, multi-monitor popouts, sudo focus
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>
2026-06-20 18:49:18 +01:00
53c5833de0 fix(nosignal): hardware-test feedback round 2 — weather, dashboard, tray
From the 2026-06-15 on-box hardware test (all 6 prior fixes confirmed; these
are the new findings, baked into the fork source rather than shipped as
pacman-hook patches, per the Phase-2 "we own the shell" approach):

- F-W1 (Weather.qml): fetch at startup. Stock only called reload() on a config
  CHANGE, so a saved location blanked after reboot and an empty/auto location
  never populated on a fresh boot. Add Component.onCompleted: reload() and
  switch the hourly Timer to reload() (re-detects auto/IP too).
- F-W3 (Weather.qml): 7-day forecast showed "undefined°" in °F mode — only
  maxTempC/minTempC were stored. Store rounded maxTempF/minTempF (and round °C).
- F-W2 (Weather.qml): empty/auto-IP location never populated — the in-shell
  ipinfo.io fetch didn't set loc (provider-specific; the city path works via
  the same Requests.get). Repair attempt: defensive JSON parse + error callback
  + fallback to geojs.io. Compiled Requests module not inspectable, so this is
  best-effort; a saved city still works regardless.
- F-D1a (modules/dashboard/*.qml): square the 25 card radii bound to the
  compiled Tokens.rounding.* Material defaults (which ignore shell.json
  rounding.scale=0) so the dashboard matches the square redesign.
- F-D1b (Glyphs.qml): remap the weather glyphs to the Material-weather family
  (every codepoint verified present in JetBrainsMono Nerd Font Mono); the old
  Font-Awesome codepoints were absent (rendered "?") and thunderstorm /
  snowing_heavy were unmapped.
- F-T1 (NsBar.qml): gate the system-tray pill on SystemTray.items count so it
  only shows when an app registers a tray icon (was opening an empty panel).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 21:04:28 +01:00
f21e5b5eaf fix(nosignal): hardware-test feedback — additions icons, power menu, weather picker
From the 2026-06-15 hardware-test feedback (redesign passed end-to-end):

- Glyphs: map the 12 unmapped additions-page icon names (brush, cloud_sync,
  data_object, deployed_code, movie_edit, neurology, psychology, robot_2,
  smart_toy, sports_esports, videocam, vpn_lock) so the nexus Additional
  Software page stops rendering "?" boxes. Verified Nerd Font codepoints.
- Glyphs: cp() now uses String.fromCodePoint, not fromCharCode — the 5 MDI
  glyphs above 0xFFFF were being truncated by the 16-bit fromCharCode.
- Shortcuts: Super+Escape (session) now drives the redesigned full-screen
  Power Menu via NsShell.toggle("power"); old caelestia session panel is
  now dead code.
- nexus LanguageAndRegion: replace the "coming soon" weather placeholder with
  a real location input bound to GlobalConfig.services.weatherLocation (the
  Weather backend already geocodes / IP-auto-detects).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 18:02:53 +01:00
83c6b62c13 feat(nosignal): finish Nerd Font icon remap — core surfaces
Convert remaining reachable surfaces to NsIcon (launcher, utilities, windowinfo,
sidebar, dashboard, notification toast, shared controls IconTextButton/Menu/
SplitButton/ToggleButton/CollapsibleSection/CustomSpinBox, CoverArt). Handles
the `sourceComponent: MaterialIcon {` form and icon-via-alias controls.

- IconTextButton: alias -> plain `icon` property + bound NsIcon (cross-file alias
  to a custom property was rejected).
- Reverted IconButton `font:` (the controls-wide font->fontStyle sweep wrongly
  hit ButtonBase, which uses font not fontStyle).
- Glyphs map: +31 names (dashboard/utilities/launcher leftovers) — no "?" glyphs.

Old collapsed bar + old lock sub-components left as-is (unused, never render).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 12:59:28 +01:00
7c06b808ae feat(nosignal): redesign lock screen to match handoff
Rewrite the WlSessionLockSurface visuals to the NoSignal lock design while
keeping the secure session-lock + PAM machinery (Pam buffer/handleKey/state,
WlSessionLock unlock):

- Blurred screencopy wallpaper + dark scrim; top status row (lock+Locked /
  wifi/bt/battery); centred 108px ExtraLight clock + date; gradient avatar +
  username; password field (key glyph, masked dots, peach enter glyph, error
  border) fed to pam.handleKey; bottom now-playing strip + "Press Enter to
  unlock". JetBrains Mono / Nerd Font (NsIcon) / Theme tokens.
- Escape does not dismiss; correct password (PAM) unlocks; wrong password shows
  inline error. Verified in VM: renders, masks, unlocks.
- Glyphs: add login (enter arrow) + key.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 11:30:20 +01:00
cf3c0d823d feat(nosignal): Nerd Font icon remap — nexus (Settings)
Convert caelestia's nexus Settings to Nerd Font icons (drop-in NsIcon).

- NsIcon hardened into a MaterialIcon drop-in: accepts fontStyle (sizes from
  it, keeps the NF Mono family), plus no-op fill/grade/animate for API parity.
- Glyphs map extended with caelestia core names: nexus static icons, nav/page
  icons (palette, wallpaper, dashboard, devices_other, extension, globe, info,
  monitor, shuffle, workspaces, ...), weather + app/device icons.
- Converted all MaterialIcon in modules/nexus/ to NsIcon; fixed icon aliases
  (NavRow/SliderRow .text -> .icon); reverted IconButton font: (it has font,
  not fontStyle, and renders its own icon).

Remaining core surfaces still Material Symbols (no breakage): launcher, osd,
lock, sidebar, utilities — to convert next with any further Glyphs entries.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 11:16:01 +01:00
6a933aa260 feat(nosignal): Nerd Font icon remap — bar + popouts
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>
2026-06-14 11:01:44 +01:00
36f6f5a157 feat(nosignal): interface redesign — slim glass bar + floating popouts
Convert the caelestia shell to the NoSignal "design_handoff_quickshell_shell"
spec: a slim translucent top bar with floating glass popouts, fixed dark-glass
chrome + Material You dynamic accent, square corners, JetBrains Mono.

- Theme singleton (services/Theme.qml): design tokens; accent = m3primary
  (dynamic), fixed glass/text, square radii.
- New slim bar as its own PanelWindow (modules/nsbar/NsBar.qml), additive in
  shell.qml; reuses caelestia services + components. Helpers: BarPill,
  NsWorkspaces (numbered, active=accent pill), NsOverlay (popout host, one-at-a-
  time via services/NsShell.qml, outside-click + Esc), components/NsPanel +
  components/NsSwitch.
- Old caelestia frame removed: BarWrapper collapsed; ContentWindow border 0 +
  borderTop 0; Exclusions zones 0. Drawer engine kept for launcher/OSD/lock.
- 9 popouts (modules/nsbar/panels/): Calendar, QuickSettings, Network,
  Bluetooth, Notifications, Audio, SystemTray, Overview, PowerMenu.
- Clock restyled (date muted + time DemiBold).
- nexus (Settings) reskinned: dark-glass window + cards, square corners
  (Nexus.qml, common/ConnectedRect.qml) — keeps all pages/functionality.

Launcher kept as-is. Font (JetBrainsMono) + rounding.scale=0 + Super+Alt+Space
nexus bind are caelestia/hypr CONFIG and ship in the OS, not this fork.
Next: full Material Symbols -> Nerd Font icon remap.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 10:36:33 +01:00
dark3txr
397ae4cd6e
fix: vpn disconnection toast (#1521) 2026-06-08 13:08:39 +10:00
2 * r + 2 * t
36adb25231 feat: set featured wall as default if no wall set 2026-06-08 01:03:00 +10:00
2 * r + 2 * t
027ab59ee5 feat: impl changing network via nexus 2026-06-06 02:17:29 +10:00
2 * r + 2 * t
da3b58118f feat: add browse and random buttons to wall select 2026-06-05 22:03:23 +10:00
2 * r + 2 * t
0bbb1c04b7 feat: actually impl wall selector w/ categories 2026-06-05 21:39:05 +10:00
2 * r + 2 * t
c85dfc6a1b
fix: format ci (#1513)
* fix: remove _-prefixed ids

qmlformat crashes cause of them

* fix: pin ci image to Qt 6.11.0

6.11.1 is the broken qmlformat version

* chore: format c++

* ci: print tool versions at start of ci
2026-06-04 23:07:20 +10:00
2 * r + 2 * t
318d20fec2 feat: add hourly forecast to lock weather
Shows if screen is large
2026-06-02 18:24:08 +10:00
Soramane
f5692c485c feat: improve lock weather 2026-05-31 20:56:34 +08:00
2 * r + 2 * t
8425e6f109 chore: remove old lyrics service & components 2026-05-04 18:38:33 +10:00
2 * r + 2 * t
a28316ad5a feat: improve dashboard media tab 2026-05-04 03:47:03 +10:00
2 * r + 2 * t
bb44aa0fbe fix: transparency blur rule debouncing
Trigger on initial change + shorten cooldown to 30
Also wait for colour anim to finish before triggering when opacity
increases
2026-05-03 01:46:54 +10:00
2 * r + 2 * t
1eac4e4bcb Merge branch 'main' into feat/m3-revamp 2026-04-26 15:13:51 +10:00
2 * r + 2 * t
53dd959f5e feat: always expire notifs if fullscreen
Also faster expire timeout when fullscreen
2026-04-26 15:13:28 +10:00
2 * r + 2 * t
81fc9dda02 feat: split SystemUsage into separate C++ services 2026-04-26 01:38:22 +10:00
2 * r + 2 * t
3ae676c040 feat: improve dash perf storage card 2026-04-25 23:04:49 +10:00
2 * r + 2 * t
89cb3b9d7c fix: don't cache icons + fix bg colour when transparent image
Also don't double cache
2026-04-20 00:53:43 +10:00
2 * r + 2 * t
982bb9759a fix: EVEN MORE non global access
Also Tokens.sizes.notifs.image -> global
2026-04-13 18:25:24 +10:00
2 * r + 2 * t
8106aca173 fix: even more non global access 2026-04-13 16:42:00 +10:00
2 * r + 2 * t
7e4b14f6ba fix: per monitor props not having ancestor scope 2026-04-13 00:07:55 +10:00
2 * r + 2 * t
666d451f4b fix: global config use for rest of global props 2026-04-12 23:02:00 +10:00
2 * r + 2 * t
b8d17ad8ef fix: use global config for global properties 2026-04-12 22:47:30 +10:00
2 * r + 2 * t
fc1b3ca2d6 chore: remove unused import 2026-04-12 03:47:42 +10:00
2 * r + 2 * t
42b9e57eae fix: use singleton for conf writes 2026-04-12 03:46:37 +10:00
2 * r + 2 * t
3d012e86b3 chore: remove old Config.save() 2026-04-12 03:45:17 +10:00
2 * r + 2 * t
41ba4f6271 feat: add per monitor enabled prop
Enabled prop should be used in favour of general.excludedScreens. The
latter has been removed
2026-04-12 03:39:58 +10:00
2 * r + 2 * t
71dd7b4db8 chore: format QML imports 2026-04-11 22:17:24 +10:00
2 * r + 2 * t
b5dcd07ab8 fix: use correct size tokens in QML 2026-04-11 21:24:16 +10:00
2 * r + 2 * t
3a37d77d1f feat: replace qml config module with c++ module 2026-04-11 21:18:56 +10:00
2 * r + 2 * t
e3b3a66877 fix: notif fileview warnings on first launch 2026-04-09 21:56:51 +10:00
Robin Seger
673b096261
fix: iface -> interface in VPN service (#1376) 2026-04-06 19:18:30 +10:00
İlyas
9fa889536c
fix: reset lyrics when player is killed (#1359)
Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-04-02 21:49:22 +11:00
İlyas
ffe9bb851a
fix: notif image and vpn serialisation (#1370)
* fix: serialize VPN interface name when configured via UI

* fix: override last icon notification history

* screw qmlls

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-04-02 21:37:45 +11:00
2 * r + 2 * t
4714fe8795 feat: use logging categories 2026-04-02 15:29:40 +11:00
Robin Seger
5c59e4490a
feat: VPN fixes & improvements (#1116)
* feat: add VPN settings and management UI

- Add VPN configuration UI
- Update VPN toggle visibility to check enabled providers

* controlcenter: VPN modal transitions & cleanup

* controlcenter: VPN modal styling

* controlcenter: VPN modal scrim

* controlcenter: VPN modal padding

* controlcenter: VPN modal enter & exit behaviour

* vpn: reworked managment & fixes

       - Switched to primarily use provider status json
         - Emitting more detailed toasts and errors/states
       - Authentication prompt button to open in browser
       - Better resets and provider change

* vpn: replace use of qt5compat

* fixing providers, status and adding custom option

* local qml-lint script lied to me

* format

* section order

* linting

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-03-29 15:25:52 +11:00
Robin Seger
c588794b20
feat: fullscreen notification & toasts overlay (#1276)
* reworked fullscreen mode as transforming shell

* controlcenter configuring of toasts & notifs

* fix animation on fs switch

* border rounding & shadow animation

* change controlcenter notifications layout

* stay on WlrLayer.Overlay, use Anim

* ci: update action versions

* qmlformat

* format take two

* third time's the charm

* fix: special workspace fullscreen

* fix: bar width border.thickness on non-persistent behaviour

* merge fix

* stop layout shift on close

* last few conventions sorted

* linting

* maximized state to fullscreen

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-03-29 15:22:00 +11:00
Chloé Legué
b5f761666d
fix: weather not using system timezone (#1346)
* adjusted weather.qml to ensure that it tracks system local time and date while ignoring API times if using VPN

* adjusted weather.qml to ensure that it tracks system local time and date while ignoring API times if using VPN

---------

Co-authored-by: Chris <102560999+ItsABigIgloo@users.noreply.github.com>
Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-03-29 02:56:38 +11:00
2 * r + 2 * t
793cc8234c feat: set hypr blur configs dynamically 2026-03-29 01:24:52 +11:00
İlyas
c64119a22b
fix: YouTube thumbnail fallback for missing mpris:artUrl (#1347)
* fix: YouTube thumbnail fallback for missing mpris:artUrl

* fix

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-03-28 21:58:16 +11:00
2 * r + 2 * t
42a1f34ddb chore: fix property-override linter warnings 2026-03-28 18:17:36 +11:00
Robin Seger
49695f8fd0
audio: add default output sink cycle ipc (#1200)
* [CI] chore: update flake

* [CI] chore: update flake

* [CI] chore: update flake

* [CI] chore: update flake

* audio: added default audio output cycle IPC

* fix format

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-03-27 18:47:05 +11:00
Chloé Legué
148417baa1
fix: weather service using UTC instead of locale timezone (#1343) 2026-03-27 14:46:13 +11:00
Robin Seger
6fa80bd857
dashboard: lyrics enhancements (#1321)
* dual lrc file search strategies, UI adjustments

* qml conventions & order

* format

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-03-26 17:13:57 +11:00