Single-script builder (nosignal.sh) that turns a stock Arch Linux ISO into a fully-offline installer for a themed Hyprland + caelestia (Quickshell) desktop: matching SDDM greeter, Btrfs/Limine bootable snapshots, chwd-style GPU detection, and a curated "os updates" layer (keybind cheatsheet, settings panels, system polish, on-box management skill). See README.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
71 lines
2.7 KiB
Markdown
Executable file
71 lines
2.7 KiB
Markdown
Executable file
# wifi-password-retry — recover from a wrong Wi-Fi password
|
|
|
|
Fixes a stock-Caelestia bug; worth upstreaming.
|
|
|
|
## Symptom
|
|
|
|
Enter a wrong Wi-Fi password once and you are locked out of that network
|
|
in the UI:
|
|
|
|
1. The password dialog saves the NetworkManager profile (with the bad
|
|
PSK) immediately, and only deletes it if the dialog stays open long
|
|
enough for its ~10-poll failure monitor to fire. Close the popout
|
|
while it hangs on "Connecting…" — which is what everyone does — and
|
|
the wrong-PSK profile survives.
|
|
2. Every later click on that network hits the saved-profile fast path in
|
|
`utils/NetworkConnection.qml`, which activates the profile with a
|
|
**null callback**: the auth failure is swallowed, the password dialog
|
|
never reopens, and there is no forget-network control in the popout.
|
|
Only `nmcli connection delete "<SSID>"` in a terminal gets you out.
|
|
|
|
## Cause
|
|
|
|
`/etc/xdg/quickshell/caelestia/utils/NetworkConnection.qml`,
|
|
`connectToNetwork()`:
|
|
|
|
```qml
|
|
if (hasSavedProfile) {
|
|
Nmcli.connectToNetwork(network.ssid, "", network.bssid, null); // <- trap
|
|
} else {
|
|
// ... needsPassword -> password dialog (correct handling)
|
|
}
|
|
```
|
|
|
|
## Fix
|
|
|
|
`patch-network-connection.sh` (idempotent, marker
|
|
`nosignal wifi-password-retry`, backup at `*.pre-nosignal`) replaces the
|
|
null callback with one that, on `needsPassword`:
|
|
|
|
- stops the pending-connection timers (same cleanup the else-branch does),
|
|
- `Nmcli.forgetNetwork(ssid)` — drops the bad profile,
|
|
- reopens the password dialog (session path for the control center,
|
|
`onPasswordNeeded` callback path for the bar popout).
|
|
|
|
Fixing this one spot also makes failure mode 1 self-healing: even if a
|
|
bad profile survives a closed dialog, the next click re-prompts instead
|
|
of looping silently. Profiles with a *correct* password are untouched —
|
|
their activation succeeds and the callback does nothing.
|
|
|
|
A pacman hook (`nosignal-wifi-password-retry.hook`) re-applies the patch
|
|
after every caelestia-shell upgrade, same mechanism as the updates-panel
|
|
patch.
|
|
|
|
## Version pin / drift
|
|
|
|
Pinned against the `NetworkConnection.qml` shipped with caelestia-shell
|
|
**2.0.2**. If upstream reshapes the `hasSavedProfile` branch, the patch
|
|
script detects the miss, warns, and leaves stock behaviour in place —
|
|
update the regex. If upstream fixes the bug properly, drop this
|
|
component and its hook.
|
|
|
|
## Test
|
|
|
|
1. Connect to a WPA network and deliberately enter a wrong password;
|
|
close the popout while it says "Connecting…".
|
|
2. Click the same network again → the password dialog must reopen
|
|
(stock behaviour: silent failure, no dialog, forever).
|
|
3. Enter the correct password → connects.
|
|
4. Relogin/reboot → still connected (saved profile now has the good PSK).
|
|
|
|
No new keybinds; nothing to add to `NoSignal-keybindings.md`.
|