diff options
| author | WriterV2 <primary-v2@protonmail.com> | 2026-10-18 23:47:22 +0200 |
|---|---|---|
| committer | WriterV2 <primary-v2@protonmail.com> | 2026-10-18 23:47:22 +0200 |
| commit | 189d2cdd113b2114489a6b1dd4de80d2ef6da702 (patch) | |
| tree | ec818718bcadd31cb2128ca0be5026aedb026096 | |
| parent | aa20a6359b46356c4347ad94889ec22eb5124f8f (diff) | |
Nushell: Add VPN connection commands
| -rw-r--r-- | .config/nushell/config.nu | 1 | ||||
| -rw-r--r-- | .config/nushell/vpn.nu | 51 | ||||
| -rw-r--r-- | .gitignore | 1 |
3 files changed, 53 insertions, 0 deletions
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<name: string, ip: string> +# 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)" + } +} @@ -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 |
