···2233Various scripts that I maintain.
4455+## rawrsync
66+Easily sync or deploy projects over rsync. Intended to somewhat replicate CLion's Deployment feature for use with other IDEs.
77+88+Configure with `.rawrsync.toml` in your project root. For example:
99+```toml
1010+[org-server-23]
1111+user = "username"
1212+address = "org-server-23.tailnet-name.ts.net"
1313+path = "/home/username/deployment/project/" # Destination path on the server
1414+1515+[vr-desktop]
1616+user = "username"
1717+address = "vr-desktop.tailnet-name.ts.net"
1818+path = "/home/username/vr/project"
1919+```
2020+2121+See `--help` for usage.
2222+523## adb-auto-connect
624Automatically find and connect to an Android device with Wireless Debugging over the local network.
725
+60
scripts/rawrsync.nu
···11+#!/usr/bin/env nu
22+# SPDX-License-Identifier: AGPL-3.0-only
33+# Copyright (c) 2026 MatrixFurry <matrix@matrixfurry.com>
44+55+use std log
66+77+const config_path: path = ".rawrsync.toml"
88+99+# Intended to somewhat replicate CLion's Deployment feature for use with other IDEs
1010+def main [
1111+ select?: string # Select a configuration by name
1212+ --continuous (-c) # Sync on file change
1313+] {
1414+ if not ($config_path | path exists) {
1515+ log critical $"Could not find configuration file in current directory \(($config_path)\)"
1616+ return 1
1717+ }
1818+1919+ let src: path = pwd | path expand
2020+2121+ let config = open $config_path | transpose name data
2222+2323+ let dest: record<user, address, path> = if ($config | length) == 1 {
2424+ $config | get 0.data
2525+ } else if ($select | is-not-empty) {
2626+ let selected_entry = $config | where name == $select
2727+2828+ if ($selected_entry | length) < 1 {
2929+ log critical $"Could not find selected configuration \"($select)\""
3030+ return 1
3131+ }
3232+3333+ $selected_entry | get 0.data
3434+ } else {
3535+ $config
3636+ | input list -d name "Sync to..."
3737+ | get data
3838+ }
3939+4040+ if $continuous {
4141+ # TODO: only run rsync on changed files
4242+ watch --verbose $src {|| sync $src $dest}
4343+ } else {
4444+ sync $src $dest
4545+ }
4646+}
4747+4848+def sync [
4949+ src: path
5050+ dest: record<user, address, path>
5151+] {
5252+ rsync ...[
5353+ -zar # Compress, archive (preserve permissions etc.), recursive
5454+ --exclude=.svn --exclude=.cvs --exclude=.DS_Store --exclude=.git --exclude=.hg --exclude=*.hprof --exclude=*.pyc
5555+ $src
5656+ $"($dest.user)@($dest.address)://($dest.path)"
5757+ ]
5858+}
5959+6060+