diff options
| author | Arpit Chakladar <arpitchakladar+git@gmail.com> | 2026-08-29 02:02:23 +0530 |
|---|---|---|
| committer | Arpit Chakladar <arpitchakladar+git@gmail.com> | 2026-08-29 03:50:32 +0530 |
| commit | 41bdeb88009dd232808edee9fc0e4ae94358d8d6 (patch) | |
| tree | c1a41f54e086064dac178ebed24d36ab34087c32 /modules/scripts/usque-warp | |
| parent | 530299d97926d45939f831dc3ea5e444d2839d08 (diff) | |
| download | home-manager-config-41bdeb88009dd232808edee9fc0e4ae94358d8d6.tar.gz home-manager-config-41bdeb88009dd232808edee9fc0e4ae94358d8d6.zip | |
refactor: moving script into modules that makes sense
- instead of collecting all scripts into modules/scripts we are moving
them to modules that makes sense (yazi-file-chooser.sh into yazi)
Diffstat (limited to 'modules/scripts/usque-warp')
| -rw-r--r-- | modules/scripts/usque-warp/completion.zsh | 17 | ||||
| -rw-r--r-- | modules/scripts/usque-warp/default.nix | 24 | ||||
| -rw-r--r-- | modules/scripts/usque-warp/script.sh | 223 |
3 files changed, 0 insertions, 264 deletions
diff --git a/modules/scripts/usque-warp/completion.zsh b/modules/scripts/usque-warp/completion.zsh deleted file mode 100644 index fbb340e..0000000 --- a/modules/scripts/usque-warp/completion.zsh +++ /dev/null @@ -1,17 +0,0 @@ -#compdef usque-warp - -_arguments \ - '1: :->cmds' \ - '*::arg:->args' - -case $state in - cmds) - local -a commands - commands=( - 'connect:Connect to WARP' - 'disconnect:Disconnect from WARP' - 'status:Show connection status' - ) - _describe 'command' commands - ;; -esac diff --git a/modules/scripts/usque-warp/default.nix b/modules/scripts/usque-warp/default.nix deleted file mode 100644 index 1831a44..0000000 --- a/modules/scripts/usque-warp/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit ((import ../lib.nix { inherit lib pkgs; })) mkScriptModule; - base = mkScriptModule { - name = "usque-warp"; - path = ./script.sh; - description = "Connect/disconnect to Cloudflare WARP via usque MASQUE tunnel"; - deps = [ - config.networking.usque.package - pkgs.bash - ]; - completion.zsh = builtins.readFile ./completion.zsh; - inherit config; - }; -in -{ - options = base.options; - config = base.moduleConfig; -} diff --git a/modules/scripts/usque-warp/script.sh b/modules/scripts/usque-warp/script.sh deleted file mode 100644 index 9d32872..0000000 --- a/modules/scripts/usque-warp/script.sh +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -CONFIG_DIR="$HOME/.cache/usque" -CONFIG="$CONFIG_DIR/config.json" -RUNTIME_DIR="${XDG_RUNTIME_DIR:-/tmp}" -PID_FILE="$RUNTIME_DIR/usque-warp.pid" -STATE_FILE="$RUNTIME_DIR/usque-warp.state" -IFACE_FILE="$RUNTIME_DIR/usque-warp.iface" -LOG_FILE="$RUNTIME_DIR/usque-warp.log" - -list_tun_ifaces() { - ip -o link show 2>/dev/null | awk -F': ' '{print $2}' | grep -E '^tun[0-9]+$' || true -} - -detect_iface() { - if [[ -f "$IFACE_FILE" ]]; then - cat "$IFACE_FILE" - return - fi - list_tun_ifaces | head -n1 -} - -is_running() { - [[ -f "$PID_FILE" ]] || return 1 - local pid - pid=$(cat "$PID_FILE" 2>/dev/null || true) - [[ -n "$pid" ]] || return 1 - sudo kill -0 "$pid" 2>/dev/null -} - -ensure_config() { - echo "Creating $CONFIG_DIR..." - mkdir -p "$CONFIG_DIR" - echo "Registering Cloudflare WARP account..." - usque -c "$CONFIG" register < <(yes) - if [[ ! -f "$CONFIG" ]]; then - echo "Failed to create config file: $CONFIG" - exit 1 - fi - echo "Config created successfully." -} - -remove_tun_default_routes() { - local dev="$1" - while ip route show | grep -qE "^default .*dev $dev"; do - ROUTE=$(ip route show | grep -E "^default .*dev $dev" | head -n1) - echo "Removing route: $ROUTE" - sudo ip route del "$ROUTE" || break - done -} - -connect() { - sudo -v - ensure_config - if [[ -f "$PID_FILE" ]]; then - OLD_PID=$(cat "$PID_FILE") - if sudo kill -0 "$OLD_PID" 2>/dev/null; then - echo "usque-warp is already running (PID $OLD_PID)" - exit 1 - else - echo "Removing stale PID file..." - rm -f "$PID_FILE" - fi - fi - - echo "Saving current default route..." - DEFAULT_ROUTE=$(ip route show default | grep -vE 'dev tun[0-9]+' | head -n1) - if [[ -z "$DEFAULT_ROUTE" ]]; then - echo "Could not determine current default route" - exit 1 - fi - echo "$DEFAULT_ROUTE" > "$STATE_FILE" - - echo "Recording pre-existing tun interfaces..." - BEFORE_IFACES=$(list_tun_ifaces) - - echo "Starting usque..." - sudo usque nativetun -c "$CONFIG" 2>&1 | sudo tee "$LOG_FILE" >/dev/null & - echo $! > "$PID_FILE" - - echo "Waiting for MASQUE connection..." - MASQUE_IP="" - for _ in {1..30}; do - MASQUE_IP=$(grep -oP 'MASQUE connection to \K[0-9.]+(?=:443)' "$LOG_FILE" 2>/dev/null || true) - if [[ -n "$MASQUE_IP" ]]; then - break - fi - sleep 1 - done - if [[ -z "$MASQUE_IP" ]]; then - echo "Failed to detect MASQUE endpoint" - sudo kill "$(cat "$PID_FILE")" 2>/dev/null || true - rm -f "$PID_FILE" - exit 1 - fi - - echo "Waiting for usque interface..." - TUN_DEV="" - for _ in {1..30}; do - AFTER_IFACES=$(list_tun_ifaces) - TUN_DEV=$(comm -13 <(echo "$BEFORE_IFACES" | sort) <(echo "$AFTER_IFACES" | sort) | head -n1) - [[ -n "$TUN_DEV" ]] && break - sleep 1 - done - if [[ -z "$TUN_DEV" ]]; then - echo "Failed to detect usque interface" - sudo kill "$(cat "$PID_FILE")" 2>/dev/null || true - rm -f "$PID_FILE" - exit 1 - fi - echo "$TUN_DEV" > "$IFACE_FILE" - echo "Detected interface: $TUN_DEV" - - GATEWAY=$(echo "$DEFAULT_ROUTE" | awk '{for(i=1;i<=NF;i++) if($i=="via") print $(i+1)}') - INTERFACE=$(echo "$DEFAULT_ROUTE" | awk '{for(i=1;i<=NF;i++) if($i=="dev") print $(i+1)}') - if [[ -z "$GATEWAY" || -z "$INTERFACE" ]]; then - echo "Cannot determine gateway/interface" - exit 1 - fi - echo "MASQUE_IP=$MASQUE_IP GATEWAY=$GATEWAY INTERFACE=$INTERFACE" >> "$STATE_FILE" - - echo "Allowing MASQUE endpoint outside tunnel..." - sudo ip route replace \ - "$MASQUE_IP" \ - via "$GATEWAY" \ - dev "$INTERFACE" - - echo "Removing old tun routes..." - remove_tun_default_routes "$TUN_DEV" - - echo "Switching default route to $TUN_DEV..." - sudo ip route add default dev "$TUN_DEV" metric 1 - echo "Connected" -} - -disconnect() { - sudo -v - echo "Disconnecting..." - local dev - if [[ -f "$IFACE_FILE" ]]; then - dev=$(cat "$IFACE_FILE") - else - dev=$(list_tun_ifaces | head -n1) - fi - - # Kill usque FIRST so the kernel tears down tun0 (and every route - # bound to it) as a single atomic operation, instead of us racing - # it by pulling routes out from under a device that's still up. - if [[ -f "$PID_FILE" ]]; then - PID=$(cat "$PID_FILE") - if sudo kill -0 "$PID" 2>/dev/null; then - echo "Stopping usque..." - sudo kill "$PID" 2>/dev/null || true - for _ in {1..20}; do - sudo kill -0 "$PID" 2>/dev/null || break - sleep 0.2 - done - fi - rm -f "$PID_FILE" - fi - - # Belt-and-braces: if the interface (or any of its routes) somehow - # survived, clean them up explicitly. No-ops if tun0 is already gone. - if [[ -n "${dev:-}" ]]; then - echo "Flushing $dev routes..." - sudo ip route flush dev "$dev" 2>/dev/null || true - remove_tun_default_routes "$dev" - fi - - if [[ -f "$STATE_FILE" ]]; then - MASQUE_IP=$(grep -oP 'MASQUE_IP=\K[0-9.]+' "$STATE_FILE" || true) - if [[ -n "$MASQUE_IP" ]]; then - echo "Removing MASQUE route: $MASQUE_IP" - sudo ip route del "$MASQUE_IP" 2>/dev/null || true - fi - - # Explicitly restore the pre-connect default route rather than - # assuming it's still intact. 'replace' is idempotent. - ORIGINAL_DEFAULT=$(head -n1 "$STATE_FILE") - if [[ "$ORIGINAL_DEFAULT" == default* ]]; then - echo "Restoring original default route..." - sudo ip route replace "$ORIGINAL_DEFAULT" \ - || echo "Warning: could not restore original default route" - fi - - rm -f "$STATE_FILE" - fi - - rm -f "$IFACE_FILE" - echo "Disconnected" -} - -status() { - local iface running=false - iface=$(detect_iface) - is_running && running=true - - if [[ -n "$iface" && "$running" == true ]]; then - printf '{"text":"%s","tooltip":"WARP connected via %s","class":"connected"}\n' "$iface" "$iface" - elif [[ -n "$iface" ]]; then - printf '{"text":"%s","tooltip":"Interface %s up, but usque-warp process not tracked","class":"connected"}\n' "$iface" "$iface" - elif [[ "$running" == true ]]; then - printf '{"text":"connecting","tooltip":"usque starting...","class":"connecting"}\n' - else - printf '{"text":"","tooltip":"WARP disconnected","class":"disconnected"}\n' - fi -} - -case "${1:-}" in - connect) - connect - ;; - disconnect) - disconnect - ;; - status) - status - ;; - *) - echo "Usage: $0 {connect|disconnect|status}" - exit 1 - ;; -esac |
