Skip to content

feat: VPN section with provider management and live stats - #1605

Merged
soramanew merged 33 commits into
caelestia-dots:mainfrom
Mestane:feat/vpn-ui
Jul 18, 2026
Merged

feat: VPN section with provider management and live stats#1605
soramanew merged 33 commits into
caelestia-dots:mainfrom
Mestane:feat/vpn-ui

Conversation

@Mestane

@Mestane Mestane commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Adds a VPN section to the Network page with provider management UI, provider list/add-edit pages, and improved VPN service monitoring and status parsing.

Adds a VPN block to the Network page mirroring the Wi-Fi group: a header
toggle, a connected-details panel (interface, live ping, protocol) or a
context placeholder, and a Manage-providers row. Adds a provider list page
and an add/edit page. Extends the VPN service with multi-provider config,
live stats (ping, data in/out, server, connected-for) and a more robust
WARP status parser.
@Mestane
Mestane marked this pull request as draft June 21, 2026 11:20
@PixelKhaos

Copy link
Copy Markdown
Contributor

Seeing a lot of changes for WARP, did you get to test with other providers as well?
Something that I was planning was to scrap most of the old VPN approach and go for something more like an endpoint aggregator that just handles all the different providers into one single VPN handler, as it was very much just tacking on more and more of them

@Mestane

Mestane commented Jun 27, 2026

Copy link
Copy Markdown
Contributor Author

Seeing a lot of changes for WARP, did you get to test with other providers as well?

Actually, no.

Something that I was planning was to scrap most of the old VPN approach and go for something more like an endpoint aggregator that just handles all the different providers into one single VPN handler, as it was very much just tacking on more and more of them

You're right about the pattern this still keeps the old switch(providerName) + per-provider parsers and adds onto them, so it's not the aggregator yet. It could be refactored so each provider is an adapter implementing a common interface (status/connect/disconnect/stats) and the handler never switches on a name the management + stats + UI here would carry over mostly unchanged on top of that.

@Mestane
Mestane marked this pull request as ready for review July 3, 2026 03:01
@soramanew
soramanew requested a review from a team July 17, 2026 12:41
Comment thread modules/nexus/pages/NetworkPage.qml Outdated
case "error":
return VPN.status.reason || qsTr("An error occurred");
default:
return qsTr("Active");

This comment was marked as resolved.

Preserve connecting/disconnecting state between proc exit and 500ms
status check timer
Comment thread modules/nexus/pages/network/AddVpnPage.qml Outdated
soramanew and others added 8 commits July 18, 2026 15:16
Instead of per provider enabled, since there can only be one selected
provider at a time anyways
Co-authored-by: danny <danny@atropos.cc>
Possibly fixes disconnect toast showing new provider instead of the old
one
@soramanew
soramanew merged commit 56e3545 into caelestia-dots:main Jul 18, 2026
4 checks passed
DaveLewis360 added a commit to DaveLewis360/shell that referenced this pull request Jul 30, 2026
* upstream/main:
  fix: use GNUInstallDirs for install dirs (caelestia-dots#1762)
  fix: fp precision for nexus
  fix: nominatim compliance (caelestia-dots#1752)
  [CI] chore: update flake
  fix: repeated low battery warnings (caelestia-dots#1477)
  refactor: change IP-lookup API + handle retry on rate limited (caelestia-dots#1734)
  fix: eager load certain services (caelestia-dots#1733)
  feat: add utilities panel confs to nexus (caelestia-dots#1725)
  [CI] chore: update flake
  fix: file system model sorting
  fix: fully round toggled network filter chips
  feat: add saved networks sub page to nexus (caelestia-dots#1722)
  feat: cap networks shown in nexus (caelestia-dots#1719)
  fix: nexus network null warnings
  fix: battery time calc
  feat: nexus VPN section with provider management (caelestia-dots#1605)
  fix: add qtimageformats to nix qs dep (caelestia-dots#1716)
  ci: add nix build workflow (caelestia-dots#1715)
  fix: handle > INT_MAX player lengths overflowing in lyrics (caelestia-dots#1648)
  feat: hidden networks, per-network settings and IPv4 config (caelestia-dots#1604)
  fix: key ZFS filesystems by pool in storage service (caelestia-dots#1673)
  fix: support delayed "xesam:artist" for now playing toast (caelestia-dots#1700)
  fix: preserve unknown config keys on save (caelestia-dots#1675)
  fix: populate pipewire nodes immediately (caelestia-dots#1699)
  fix: launcher action searching (caelestia-dots#1695)
  chore: fix lint warnings (caelestia-dots#1705)
  [CI] chore: update flake
  [CI] chore: update flake
  fix: improve compact tray styling
  refactor: use Item instead of Loader for bar entries (caelestia-dots#1663)
  refactor: improve state handling & add component hooks (caelestia-dots#1661)
  fix: ethernet devices incorrect end rounding
  fix: text field outline outside of widget bounds
  feat: add lock howdy support (caelestia-dots#1515)
  fix: don't animate calendar today indicator
  chore: remove unused Tooltip component
  fix: menu/popup overlays overriding cursor shape
  feat: improve text controls (caelestia-dots#1647)

# Conflicts:
#	modules/bar/Bar.qml
#	modules/bar/BarWrapper.qml
#	modules/bar/components/Tray.qml
#	modules/drawers/ContentWindow.qml
#	modules/drawers/Interactions.qml
#	modules/drawers/Panels.qml
#	modules/lock/NotifGroup.qml
#	services/Players.qml
kongwoojin pushed a commit to kongwoojin/caelestia-shell that referenced this pull request Aug 14, 2026
* feat: VPN section with provider management and live stats

Adds a VPN block to the Network page mirroring the Wi-Fi group: a header
toggle, a connected-details panel (interface, live ping, protocol) or a
context placeholder, and a Manage-providers row. Adds a provider list page
and an add/edit page. Extends the VPN service with multi-provider config,
live stats (ping, data in/out, server, connected-for) and a more robust
WARP status parser.

* fix: sub pages order

* feat: add disabled state for switches

* fix: visually disable vpn toggle

* fix: add vpn cancel/confirm buttons

* delete VpnPage and registry

* fix: add vpn provider button label

* fix: show all providers on main network page

* feat: show vpn details when connected

* feat: use QtObjects for vpn providers

* feat: add delete provider button

* feat: add shape morph to provider cancel/save

* fix: refresh vpn on edit when connected

* fix: reset editing provider state on add

* fix: disable already active vpn provider

* refactor: give vpn both connecting & disconnecting

* fix: only watch disconnecting

* feat: don't reload vpn when only display name changed

* fix: handle vpn connect fail

* fix: handle connect/disconnect proc not existing

* fix: rename vpn provider active -> selected

* fix: preserve (dis)connecting state

Preserve connecting/disconnecting state between proc exit and 500ms
status check timer

* refactor: global vpn selectedProvider prop

Instead of per provider enabled, since there can only be one selected
provider at a time anyways

* refactor: thank you danny

Co-authored-by: danny <danny@atropos.cc>

* chore: add vpn to network page sublabel

* fix: defer setting selected provider on switch

Possibly fixes disconnect toast showing new provider instead of the old
one

* chore: rename id -> providerId

Screw qmlformat

* fix: null warning on provider destruction

* chore: fix section order violation

* fix: sync config vpn enabled with transient state

---------

Co-authored-by: Mestane <mestane@users.noreply.github.com>
Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Co-authored-by: danny <danny@atropos.cc>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants