fix(network): skip assumed connections in VPN list

`cosmic-applet-network` listed every connection from `nm.list_saved_connections()` in the VPN dropdown, including the in-memory-only profiles NetworkManager auto-generates for externally-managed interfaces (e.g. a `wg-quick@wg0.service` tunnel). Toggling such an "assumed" connection off deletes it from NM — it was never persisted — leaving a dead toggle with no way back through the applet or `nmcli con up`.

Skip connections flagged `unsaved` (in-memory only) at the `load_vpns()` site so they no longer get a togglable entry. The active-connections section still shows the interface as connected (read-only). One-line change in `cosmic-applet-network/src/app.rs`.

## Test plan

- Built on Pop!_OS and ran the patched `cosmic-applet-network`: with `wg-quick@wg0` up and NM tracking `wg0` as connected-externally, the VPN dropdown no longer shows the destructive `wg0` toggle; the active-connections section still shows `wg0`; Wi-Fi toggling is unaffected.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
BrianHotopp 2026-05-29 13:23:45 -04:00 committed by GitHub
parent 5428a86370
commit 8981b0b48e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -664,6 +664,13 @@ fn load_vpns(_conn: zbus::Connection) -> Task<crate::app::Message> {
let mut map: IndexMap<UUID, ConnectionSettings> = IndexMap::new();
for c in saved {
// Skip in-memory-only NM connections — assumed connections that NM
// auto-generated from externally-managed interfaces (e.g. one
// brought up by wg-quick@wg0.service) report unsaved=true and
// evaporate on deactivate, leaving the applet's toggle dead.
if c.unsaved {
continue;
}
let uuid: UUID = Arc::from(c.uuid.as_str());
let entry = match c.summary {
SettingsSummary::WireGuard { .. } => ConnectionSettings::Wireguard { id: c.id },