diff options
Diffstat (limited to 'modules/scripts')
| -rw-r--r-- | modules/scripts/default.nix | 4 | ||||
| -rw-r--r-- | modules/scripts/vpn-connect.sh | 27 | ||||
| -rw-r--r-- | modules/scripts/vpn-disconnect.sh | 27 |
3 files changed, 46 insertions, 12 deletions
diff --git a/modules/scripts/default.nix b/modules/scripts/default.nix index 95d9298..e541f75 100644 --- a/modules/scripts/default.nix +++ b/modules/scripts/default.nix @@ -65,6 +65,10 @@ let SYSTEMD_RESOLVED = "${pkgs.openvpn}/libexec/update-systemd-resolved"; } ); + + vpn-disconnect = lib.mkIf (config.tools.openvpn.enable && config.tools.fzf.enable) ( + mkScript "vpn-disconnect" ./vpn-disconnect.sh { } + ); }; in { diff --git a/modules/scripts/vpn-connect.sh b/modules/scripts/vpn-connect.sh index 885796a..eb7256e 100644 --- a/modules/scripts/vpn-connect.sh +++ b/modules/scripts/vpn-connect.sh @@ -1,10 +1,10 @@ -# Define directories CONF_DIR="$HOME/.config/openvpn" CREDS_DIR="$CONF_DIR/credentials" SERVERS_DIR="$CONF_DIR/servers" CACHE_FILE="$HOME/.cache/openvpn/last_connection" +PID_FILE="$HOME/.cache/openvpn/vpn.pid" +LOG_FILE="$HOME/.cache/openvpn/vpn.log" -# Create directories mkdir -p "$CREDS_DIR" "$SERVERS_DIR" "$(dirname "$CACHE_FILE")" REFRESH=false @@ -12,7 +12,7 @@ if [[ "$1" == "--refresh" || "$1" == "-r" ]]; then REFRESH=true fi -# Try to load from cache +# Load cache if [[ "$REFRESH" == false && -f "$CACHE_FILE" ]]; then source "$CACHE_FILE" if [[ ! -f "$CRED" || ! -f "$SERVER" ]]; then @@ -22,7 +22,7 @@ else REFRESH=true fi -# Selection logic +# Select if needed if [[ "$REFRESH" == true ]]; then CRED=$(find "$CREDS_DIR" -type f | "$FZF" --prompt="Select Credentials > ") [ -z "$CRED" ] && exit 1 @@ -36,22 +36,25 @@ fi echo "Connecting to $SERVER..." -# Create a temporary config file that sudo can read TMP_CONF=$(mktemp /tmp/vpn-config.XXXXXX) -# Clean the config and save to the temp file sed -e '/up \/etc\/openvpn\/update-resolv-conf/d' \ -e '/down \/etc\/openvpn\/update-resolv-conf/d' "$SERVER" > "$TMP_CONF" -# Use a trap to ensure the temp file is deleted when the script exits -# (even if you Ctrl+C) -trap 'rm -f "$TMP_CONF"' EXIT +# Run in background +sudo -v || exit 1 -# Execute openvpn using the temporary file -sudo "$OPENVPN" \ +nohup sudo "$OPENVPN" \ --config "$TMP_CONF" \ --auth-user-pass "$CRED" \ --script-security 2 \ --up "$SYSTEMD_RESOLVED" \ --down "$SYSTEMD_RESOLVED" \ - --down-pre + --down-pre \ + > "$LOG_FILE" 2>&1 & + +VPN_PID=$! + +echo $VPN_PID > "$PID_FILE" +echo "VPN started in background (PID: $VPN_PID)" +echo "Logs: $LOG_FILE" diff --git a/modules/scripts/vpn-disconnect.sh b/modules/scripts/vpn-disconnect.sh new file mode 100644 index 0000000..ead912c --- /dev/null +++ b/modules/scripts/vpn-disconnect.sh @@ -0,0 +1,27 @@ +PID_FILE="$HOME/.cache/openvpn/vpn.pid" + +if [[ ! -f "$PID_FILE" ]]; then + echo "No VPN PID file found." + exit 1 +fi + +PID=$(cat "$PID_FILE") + +if ps -p "$PID" > /dev/null 2>&1; then + echo "Stopping VPN (PID: $PID)..." + sudo kill "$PID" + + # Wait for clean shutdown + sleep 2 + + if ps -p "$PID" > /dev/null 2>&1; then + echo "Force killing VPN..." + sudo kill -9 "$PID" + fi + + echo "VPN disconnected." +else + echo "VPN process not running." +fi + +rm -f "$PID_FILE" |
