# Get networking info about tailscale peers def "tailscale peer" [ hostname?: string get_field?: cell-path ]: nothing -> any { let get_field = ($get_field | default ([] | into cell-path)) let status = (^tailscale status --json | from json) let peers = ($status | get Peer | transpose key fields | flatten fields) let peers = ($peers | each { |peer| let ipv4 = $peer.TailscaleIPs | where { |ip| "." in $ip } | first let ipv6 = $peer.TailscaleIPs | where { |ip| ":" in $ip } | first { host: $peer.HostName, ipv4: $ipv4, ipv6: $ipv6, online: $peer.Online, active: $peer.Active, rx: ($peer.RxBytes | into filesize), tx: ($peer.TxBytes | into filesize), } }) if $hostname == null { $peers } else { $peers | where host == $hostname | first | get $get_field } } # SSH to a tailscale peer def "tailscale ssh" [ hostname?: string ...ssh_flags: string ]: nothing -> any { ssh -o $"HostName (tailscale peer $hostname | get ipv6)" $hostname ...$ssh_flags }