diff --git a/users/tao/nushell/extras/alias.nu b/users/tao/nushell/extras/alias.nu index 75e083d..0f0167f 100644 --- a/users/tao/nushell/extras/alias.nu +++ b/users/tao/nushell/extras/alias.nu @@ -31,7 +31,7 @@ alias jp = jj git push alias js = jj status alias jw = jj workspace update-stale -def jm [...rest] { - jj bookmark set main ...$rest +def jm [-r: string = "@"] { + jj bookmark set main -r $r jj git push } diff --git a/users/tao/nushell/extras/nix.nu b/users/tao/nushell/extras/nix.nu index 4aae58d..d8c2ea0 100644 --- a/users/tao/nushell/extras/nix.nu +++ b/users/tao/nushell/extras/nix.nu @@ -1,7 +1,9 @@ alias nd = nix develop + def ns [package] { nix shell $"nixpkgs#($package)" } + def nr [package] { nix search nixpkgs $package } @@ -17,11 +19,13 @@ def rebuild --wrapped [subcommand, --builders: string, ...rest] { } toastify send rebuild done! } + def post-rebuild [] { rm -r ~/.config/helix/runtime/grammars/ hx --grammar fetch; hx --grammar build rustup update } + def bump --wrapped [...rest] { cd /home/tao/projects/NOflake/ jj new -m "bump" @@ -31,6 +35,7 @@ def bump --wrapped [...rest] { rebuild boot ...$rest jj new } + alias rb = rebuild boot alias rs = rebuild switch alias gc = nh clean all diff --git a/users/tao/nushell/extras/tailscale.nu b/users/tao/nushell/extras/tailscale.nu index 193b162..73810b0 100644 --- a/users/tao/nushell/extras/tailscale.nu +++ b/users/tao/nushell/extras/tailscale.nu @@ -1,11 +1,18 @@ +# see if others see us connecting from a mullvad exit node def check-mullvad [] { - loop { - print "checking connection status" - http get https://am.i.mullvad.net/json - | if $in.mullvad_exit_ip == true {break} else {print $in} - sleep 1sec + print -n "checking mullvad status" + mut check = false + mut j = null + while not $check { + print -n "." + $j = (http get https://am.i.mullvad.net/json) + $check = $j.mullvad_exit_ip } + print "" + print $"connected to ($j.city), ($j.country)" } + +# switch to a specific exit node, or none def tse [exit_node: string = ""] { if ($exit_node | is-empty) and (ps | find deluge | is-not-empty) { return "stop summoning first!" @@ -17,49 +24,52 @@ def tse [exit_node: string = ""] { } return "exit node set" } -def tsp [] { - tailscale exit-node list - | split row "\n" - | each {str trim} - | filter {is-not-empty} - | skip 1 - | last 19 - | first 17 - | split column -r '\s{2,}' - | reject column5 column3 - | rename ip addr city - | par-each { - insert ping { - |row| $row.addr - | str replace "mullvad.ts.net" "relays.mullvad.net" - | ping -c5 -q $in - | split row "\n" - | last - | split column "/" - | get column6? - | get 0 - } - } - | sort-by ping -n -r - } -def tsr [] { - tailscale status --json - | from json - | get Peer - | transpose nodekey node - | get node - | filter {$in.Location?.Country == USA} - | get TailscaleIPs - | each {get 0} - | select (random int 0..($in | length)) - | tse $in.0 - # tailscale status - check-mullvad + +# list all mullvad exit nodes +def tsx [] { +tailscale exit-node list + | detect columns --guess + | drop 3 + | skip 1 + | where HOSTNAME =~ mullvad + | reject STATUS } + +# sort mullvad exit nodes by fastest ping +def tsp [] { +tsx + | where COUNTRY == USA + | par-each { + insert ping { + $in.HOSTNAME + | str replace "mullvad.ts.net" "relays.mullvad.net" + | try { + print $"pinging ($in)" + ping -c5 -q $in + | lines + | last + | split row ' ' + | get 3 + | split row '/' + | get 1 + | into float + } + } + } + | sort-by ping +} + + + +# switch to a random mullvad exit node +def tsr [] { +tsx + | get (random int 0..($in | length)) + | tse $in.IP +} + alias ts = tailscale alias tss = tailscale status alias tsu = tailscale up alias tsd = tailscale down -alias tsx = tailscale exit-node list alias tsa = tailscale exit-node suggest -