From 189d2cdd113b2114489a6b1dd4de80d2ef6da702 Mon Sep 17 00:00:00 2001 From: WriterV2 Date: Sun, 18 Oct 2026 23:47:22 +0200 Subject: Nushell: Add VPN connection commands --- .config/nushell/config.nu | 1 + .config/nushell/vpn.nu | 51 +++++++++++++++++++++++++++++++++++++++++++++++ .gitignore | 1 + 3 files changed, 53 insertions(+) create mode 100644 .config/nushell/vpn.nu diff --git a/.config/nushell/config.nu b/.config/nushell/config.nu index 3dff178..e662379 100644 --- a/.config/nushell/config.nu +++ b/.config/nushell/config.nu @@ -402,3 +402,4 @@ use reading-order.nu use japanese-helper.nu use coffee-recipe.nu use web-images-doc.nu +use vpn.nu diff --git a/.config/nushell/vpn.nu b/.config/nushell/vpn.nu new file mode 100644 index 0000000..63ab2e0 --- /dev/null +++ b/.config/nushell/vpn.nu @@ -0,0 +1,51 @@ +# Connect to one of the Mullvad VPN Servers via Wireguard and optionally filter by name +export def connect [ + --filter: string # Filter by VPN server config name, e.g. 'de' to filter German servers +] { + try { + let current_status = (status) + if ($current_status | is-not-empty) { + let connected_server_name = ($current_status | get name | get 0) + print $"You are already connected to ($connected_server_name)." + return + } + let servers = (sudo ls /etc/wireguard/ | lines | str replace '.conf' '') | where { |name| $name =~ ($filter | default '') } + sudo wg-quick up ($servers | select (random int 0..($servers | length)) | get 0) + } catch { + |err| + print $"Failed to connect to VPN...\n\nError: ($err.msg)" + } +} + +# Check if you are connected to a Mullvad VPN server. +# Return: +# If connected: table +# If not: nothing +export def status [] { + try { + let response = (http get https://am.i.mullvad.net/connected --max-time 5sec) + let result = ($response | parse "You are connected to Mullvad (server {name}). Your IP address is {ip}") + if ($result | is-not-empty) { + return $result + } + } catch { + |err| + print $"Failed to get response from status...\n\nError: ($err.msg)" + } +} + +# Disconnect the active VPN server connection +export def disconnect [] { + try { + let current_status = (status) + if ($current_status | is-empty) { + print "You are not connected to any Mullvad VPN server." + return + } + let current_server_name = ($current_status | get name | get 0) + sudo wg-quick down $current_server_name + } catch { + |err| + print $"Failed to disconnect active VPN connection...\n\n Error: ($err.msg)" + } +} diff --git a/.gitignore b/.gitignore index 36a3f6b..a514c4e 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ !.config/nushell/youtube.nu !.config/nushell/japanese-helper.nu !.config/nushell/web-images-doc.nu +!.config/nushell/vpn.nu !.config/nvim !.config/nvim/** .config/nvim/nvim-pack-lock.json -- cgit v1.2.3