

## To confirm which local SSH key matches the SHA256 fingerprint shown
  on GitHub:

  Run this command for each public key you want to check:

   ssh-keygen -lf ~/.ssh/your_key_file.pub -E sha256

  Compare the SHA256 hash in the output to the one shown on GitHub




for nvim init.lua to ESC from fzf

-- Force ESC to close fzf popups immediately instead of entering Terminal Normal Mode
vim.api.nvim_create_autocmd("FileType", {
    pattern = "fzf",
    callback = function()
        -- 't' means terminal mode, <Esc> maps to <C-c> to kill the process
        vim.keymap.set("t", "<Esc>", "<C-c>", { buffer = true, silent = true })
    end,
})


%% download the install.sh and save to local file.
curl -LsSf https://astral.sh/uv/install.sh -o /tmp/uv.sh


pw-record --format=s16 --rate=16000 --channels=1 my-sample.wav

pw-play

    # arecord is old
    arecord -f S16_LE -r 16000 -c 1 my.wav

    # This not available on my Ubuntu Gnome
    parecord --format=s16le --rate=16000 --channels=1 my.wav


    # get android screen by adb

    scrcpy --stay-awake

    scrcpy --stay-awake --turn-screen-off

    adb shell settings put system screen_off_timeout 86400000


Control OBS

    $ sleep 2 && obs-cmd recording start
    $ obs-cmd recording stop

    # switch between sscenes
    obs-cmd scene switch "Desktop PiP" 

    obs-cmd scene switch "Big Camera" 


## ollama REST API

%% equal to: ollama run gemma3:1b "why sky is blue?"

curl http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
        "model": "gemma3:1b",
        "prompt": "why sky is blue?",
        "stream": false
      }'

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Why is the sky blue?",
  "stream": false
}'

Core API Commands, 
Generate a Response: Use the /api/generate endpoint to 
send a prompt to a specific model. 
Set "stream": false if you want a single JSON object 
instead of a streaming response.

    .../api/generate
    .../api/chat


```bash
curl -s http://127.0.0.1:11434/api/generate -d '{
  "model": "gemma3:4b",
  "prompt": "Tell me how to use curl for local ollama?",
  "stream": false
}' | jq -r '.response'
```

curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    { "role": "user", "content": "Hello!" }
  ],
  "stream": false
}'

curl http://localhost:11434/api/tags

OpenAI Compatibility: Ollama supports 
OpenAI-compatible endpoints, 
allowing you to use existing OpenAI tools by 
changing the base URL.

curl http://localhost:11434/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "llama3.2",
        "messages": [{"role": "user", "content": "Hello!"}]
    }'

    ## return/output vector embedding
curl http://localhost:11434/api/embed -d '{
  "model": "all-minilm",
  "input": "The quick brown fox jumps over the lazy dog."
}'

    ## install ollama
curl -fsSL https://ollama.com/install.sh | sh

    ## auth with env. variable
curl https://ollama.com/api/generate \
  -H "Authorization: Bearer $OLLAMA_API_KEY" \
  -d '{ "model": "gpt-oss:120b", "prompt": "Why is the sky blue?" }'





hostnamectl
lspci | grep -i nvidia

alias nvgpu='__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia'

find . -type f -size +100M

# Prevents the system from idling into sleep mode until you hit Ctrl+C
systemd-inhibit --why="Manual AI Task" sleep 1000d

# bring to UEFI/BIOS
sudo systemctl reboot --firmware-setup

apt -o Debug::pkgAcquire::Worker=1 update

aider --model  ollama/gemma3:4b  # local model, run 'ollama serve'

aider --list-models gemini/
aider --model gemini/gemini-2.5-flash
aider --model gemini/gemini-2.5-pro

#  Add 'za' to the group
sudo usermod -aG incus-admin za

#  Apply the change to your current session
newgrp incus-admin

incus image list images: | grep -i 26.04

incus exec ailab -- bash

# Push as root (UID 0, GID 0)
incus file push --uid 0 --gid 0 -r .vim ailab/root/

# this not work:
# Force IPv4 to avoid GFW IPv6 blackholes
apt -o Acquire::ForceIPv4=true updateu


# To add Nvidia GPU to incus

Step A: Enable the Runtime (Important)
The nvidia.runtime setting tells Incus to automatically 
map the host's NVIDIA libraries into the container.
Note: You must stop the container to change this setting.

    Bash
    incus stop ailab
    incus config set ailab nvidia.runtime=true
    incus start ailab

Step B: Add the GPU Device

    Bash
    incus config device add ailab mygpu gpu

Step C: Verify Inside the Container

    Bash
    incus exec ailab -- nvidia-smi

# Syntax: incus config device add <name>  \
#   <device_name> disk source=<host_path> path=<container_path>
incus config device add ailab hostrepo disk source=/home/za/repo path=/root/repo shift=true

# This tells Incus to transparently map the IDs so 'root' owns them inside
incus config device set ailab hostrepo shift=true

export http_proxy="http://127.0.0.1:9910"
export https_proxy="http://127.0.0.1:9910"


Command,What it does
incus list
,"Shows all containers, their status (Running/Stopped), and IP addresses."
incus exec <name> -- bash
,"""Drops"" you into a root shell inside the container."
incus start/stop <name>
,Powers the container on or off.
incus file push -r <src> <name>/<dest>
,Copies files from host to container. Use -r for folders.
incus file pull -r <name>/<src> <dest>
,Copies files out of the container back to your host.
incus snapshot create <name> <label>
"Saves the state of the container. Great before testing a ""messy"" script."
incus snapshot restore <name> <label>
,"""Time travel""—reverts the container to a previous snapshot."
incus config show <name>,"Shows current settings, mounted disks, and GPU configurations."
incus delete -f <name>
,Destroys the container. The -f forces it if it's still running.


# hangs of system

Before you leave your desk next time, try running this one-liner on your host:

    sudo nvidia-smi -pm 1 && sudo systemctl stop thermald

# Temporary test: disable deep sleep until reboot

    echo 1 | sudo tee /sys/module/intel_idle/parameters/max_cstate

The Fix: Force Persistence Mode so the driver never lets the GPU "relax."

    sudo nvidia-smi -pm 1

Strategy,Command / Action,Goal
GPU Persistence,sudo nvidia-smi -pm 1,Stops the NVIDIA driver from power-cycling.
CPU Performance,cpupower frequency-set -g performance,Keeps CPU clocks high and stable.
Inhibit Sleep,"systemd-inhibit --why=""AI Workshop"" bash","Tells the OS: ""Do not run idle tasks."""
Disable Screen Blank,Settings -> Power -> Screen Blank: Never,Prevents the GPU state transition.


## lxd lxc

sudo snap install lxd
getent group lxd | grep "$USER"
sudo usermod -aG lxd "$USER"
newgrp lxd
lxd init --minimal

lxc launch ubuntu:24.04 ailaba

    #sudo lxd init

    #lxc launch images:ubuntu/24.04 ailab0

lxc exec ailab0 -- apt update


    lxc config device add ailaba mygpu gpu

    Bash
    lxc config device add ailaba mygpu gpu

    lxc config set ailaba nvidia.runtime true
    lxc config set ailaba nvidia.driver.capabilities all

### Final Verification
Restart the container to apply the changes:

    Bash
    lxc restart ailaba

    lxc exec ailaba -- nvidia-smi


# may 9, 2026

    # To disable sleep/suspend
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

    # To re-enable it later
    # sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target

    # Disable suspension when on AC power
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0

    # Disable suspension when on Battery
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 0

# may 11



OLLAMA_HOST="0.0.0.0:11434" ollama serve

curl http://10.12.88.1:11434/api/tags

#lxc config device add ailaba any-name-not-used \
    disk source=/home/za/tmp path=/root/htmp


openclaw onboard --auth-choice ollama --custom-base-url http://10.12.88.1:11434

openclaw gateway run --force


rm -rf node_modules
pnpm cache clean
pnpm store prune
pnpm install --force --config.minimumReleaseAge=0 --config.blockExoticSubdeps=false

OPENCLAW_ALLOW_ROOT=1  openclaw onboard --auth-choice ollama --custom-base-url http://10.12.88.1:11434


sudo apt update
sudo apt install exfatprogs
udisksctl unmount -b /dev/sda1

sudo tune.exfat -L Extreme_SSD /dev/sda1

udisksctl mount -b /dev/sda1

# Kill any file manager processes
killall nautilus

# Force unmount via the terminal (this is more reliable than the GUI right now)
udisksctl unmount -b /dev/sda1
lsof +D /media/za/extremeSSD

# This saves your entire home directory to the external drive
# Replace /media/za/extremeSSD/ with your actual mount path
sudo rsync -aAHhvx --progress /home/za /media/za/extremeSSD/za_home_backup

rsync -aAHhvx --progress \
  --exclude='node_modules/' \
  --exclude='.git/' \
  --exclude='.venv/' \
  --exclude='.cache/' \
  --exclude='.gradle/' \
  --exclude='.cargo/' \
  /home/za/ /media/za/extremeSSD/asus


# This will delete anything on the SSD that is NOT in your current /home/za 
# (including the excluded folders from your first run)

rsync -aAHhvx --delete \
  --exclude='node_modules/' \
  --exclude='.git/' \
  --exclude='.venv/' \
  --exclude='.cache/' \
  --exclude='.gradle/' \
  --exclude='.cargo/' \
  /home/za/ /media/za/extremeSSD/asus


# may 12

    ```bash
    sudo mkdir -p /mnt/old_root /mnt/new_data
    sudo mount /dev/nvme0n1p7 /mnt/old_root
    sudo mount /dev/nvme0n1p8 /mnt/new_data


    sudo rsync -aAXv /mnt/old_root/home/za /mnt/new_data/

    # *Copy your custom workspace:*

    sudo rsync -aAXv /mnt/old_root/my /mnt/new_data/


    blkid /dev/nvme0n1p8

    sudo nano /mnt/old_root/etc/fstab

    sudo mv /mnt/system/home /mnt/system/home_old
    sudo mkdir /mnt/system/home
    ```

QT_QPA_PLATFORM=xcb kdenlive


# May 13

## the double quote in the cmd is ok, yes.

    OLLAMA_HOST="0.0.0.0:11434" OLLAMA_CONTEXT_LENGTH=8192 ollama serve

# May 15

    ip -br -6 addr show scope global | awk '{print $3}' | cut -d/ -f1 | head -n 1

# may 17

sudo apt update -o Acquire::http::Proxy="http://127.0.0.1:9910"
sudo apt install antigravity -o Acquire::http::Proxy="http://127.0.0.1:9910"

antigravity --proxy-server="http://127.0.0.1:9910" --ozone-platform=wayland --enable-features=UseOzonePlatform

## npm Global Listing Commands

npm list -g --depth=0
sudo npm list -g --depth=0

: Lists only the top-level global packages you explicitly installed, 
hiding their sub-dependencies.

npm list -g

: Shows every global package along with its entire dependency tree 
(this will output a very long list).

npm root -g

: Shows the exact directory path 
on your Ubuntu system where global packages are stored.


## Coc nvim

:CocDisable coc-rust-analyzer

:let b:coc_enabled = 0

:CocDisable
:CocEnable
:CocRestart

# may 21

cd ~/dev/orchestration/
git remote add origin git@github-pyramid:studythepyramid/orchestration.git
git remote -v
git branch --show-current

git push -u origin main #?

# 1. Rename your local 'master' branch to 'main'
git branch -m master main

# 2. Verify the change locally
git branch

# 3. Push your newly aligned main branch up to your GitHub backup remote securely
git push -u origin main

git config --global init.defaultBranch main

# Tell Git to stop tracking the file, without deleting it from your drive
git rm --cached tags

# Append 'tags' to your local ignore rules so it never gets added again
echo "tags" >> .gitignore

# Commit this layout tracking adjustment locally
git add .gitignore
git commit -m "chore: stop tracking giant tags file and add to gitignore"

git pull origin main --allow-unrelated-histories

git config --global pull.rebase false

git pull origin main --allow-unrelated-histories -X ours --no-edit

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch tags" \
  --prune-empty --tag-name-filter cat -- --all

# Delete the temporary backup references
rm -rf .git/refs/original/

# Expire all old reflog pointers immediately
git reflog expire --expire=now --all

# Force the garbage collector to aggressively shrink the database
git gc --prune=now --aggressive

git config --global pull.rebase true

## 1651

```bash
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y

```

```bash
sudo do-release-upgrade

```

If a brand-new LTS version was just released recently, 
the development teams often hold back the automated upgrade trigger 
for a few weeks until the first point release is deployed to 
guarantee absolute system stability. If you want to bypass this 
safety gate and explicitly force the machine to look for the
next available release path immediately, 
append the development flag:

```bash
sudo do-release-upgrade -d

```

## 1913 stop suspend and hibernate

# 1. Mask the suspend, hibernate, and hybrid-sleep targets
sudo systemctl mask suspend.target hibernate.target hybrid-sleep.target

# 2. Verify they are masked
systemctl status suspend.target

tmux display-message -p '#{pane_width}'

# May 26
pw-record --rate=16000 --format=s16 --channels=1 test_voice.wav

# June 9

gst-launch-1.0 -v \
  pipewiresrc stream-properties="props,media.role=Communication" ! \
  audioconvert ! audioresample ! \
  flacenc ! filesink location=mic_test.flac

gst-launch-1.0 -v \
  mp4mux name=mux faststart=true ! filesink location=combined_audio_system.mp4 \
  \
  audiomixer name=mixer ! audioconvert ! voaacenc bitrate=192000 ! aacparse ! queue ! mux.audio_0 \
  \
  pipewiresrc name=mic_stream stream-properties="props,media.role=Communication" ! queue ! audioconvert ! audioresample ! mixer. \
  \
  pipewiresrc name=system_stream stream-properties="props,media.class=Stream/Input/Audio" ! queue ! audioconvert ! audioresample ! mixer.


# June 10

## improved command for both audio recording

gst-launch-1.0 -e -v \
  mp4mux name=mux faststart=true ! filesink location=combined_audio.mp4 \
  \
  audiomixer name=mixer ! "audio/x-raw,rate=48000,channels=2" ! \
    audioconvert ! avenc_aac bitrate=192000 ! aacparse ! queue ! mux.audio_0 \
  \
  pipewiresrc name=mic_stream stream-properties="props,media.role=Communication" ! \
    queue ! audioconvert ! audioresample ! "audio/x-raw,rate=48000,channels=2" ! mixer. \
  \
  pipewiresrc name=system_stream target-object="alsa_output.pci-0000_00_1f.3.analog-stereo" \
    stream-properties="props,stream.capture.sink=true" ! \
    queue ! audioconvert ! audioresample ! "audio/x-raw,rate=48000,channels=2" ! mixer.

---

# June 14

WINIT_UNIX_BACKEND=wayland

# june 25

flatpak override --user --socket=wayland org.godotengine.Godot

# june 29

lxc exec ailab -- bash

# July 20

    unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY

    RUST_LOG=geph5=info /home/za/repo/geph5/target/release/geph5-client -c ~/.config/geph5/config.yaml

    sudo lshw -short
    cat /etc/lsb-release

# july 22


cargo run --release --package geph5-client -- --config ~/.config/geph5/config.yaml 

  ### The Permanent Fix for ailaba (Run this on the Host)

  The manually assigned IP address is temporary and will disappear
  if the container restarts or network services reload. Because UFW
  on the host blocks the DHCP protocol, the container won't be able
  to get an IP automatically on its own.

  To fix this permanently, run these commands on your host
  terminal:

    # Allow LXD bridge DHCP/DNS and routing traffic through UFW
    sudo ufw allow in on lxdbr0
    sudo ufw route allow in on lxdbr0
    sudo ufw route allow out on lxdbr0

# july 24


    systemctl --user restart wireplumber pipewire

# Aug. 6

## scrcpy (Camera Mirroring)

```bash
# Basic camera mirroring
scrcpy --video-source=camera

# Select back or front camera
scrcpy --video-source=camera --camera-facing=back
scrcpy --video-source=camera --camera-facing=front

# Set display orientation (portrait mode: 90° or 270°)
scrcpy --video-source=camera --orientation=90
scrcpy --video-source=camera --orientation=270

# Set camera aspect ratio (portrait: 9:16)
scrcpy --video-source=camera --camera-ar=9:16

# Combined: Back camera in Portrait mode (90°)
scrcpy --video-source=camera --camera-facing=back --orientation=90

# List available cameras on phone
scrcpy --video-source=camera --list-cameras
```

---

# Aug. 9, 2026

## System Troubleshooting & RAM Disk Cleanup (/tmp Bloat & ddterm GTK crash)

```bash
# Check RAM disk (/tmp tmpfs) and cache disk usage
df -h /tmp
du -sh /tmp ~/.cache

# Clean up GTK thumbnail/icon cache bloat (fixes Signal 6 ddterm GTK pixbuf crash)
rm -rf ~/.cache/thumbnails/*
rm -rf ~/.cache/icon-cache.kcache

# Clean up heavy temporary build directories from /tmp (e.g. mkdocs /tmp bloat)
rm -rf /tmp/mkdocs_*

# Restart ddterm GNOME Shell Extension
gnome-extensions disable ddterm@amezin.github.com
gnome-extensions enable ddterm@amezin.github.com

# Force kill stuck ddterm processes if locked up
pkill -9 -f ddterm

# Build MkDocs static site on disk without polluting RAM disk /tmp
uv run mkdocs build --dirty
```

---

# Aug. 10, 2026

## Android Camera Mirroring & Rotation (scrcpy & OpenCV)

```bash
# Query available camera IDs & resolutions on connected Android phone
scrcpy -s R5CT70V2JGJ --video-source=camera --list-cameras
scrcpy -s R5CT70V2JGJ --video-source=camera --list-camera-sizes --camera-id=1

# Stream front selfie camera (-90° / 270° counter-clockwise rotation)
scrcpy -s R5CT70V2JGJ --video-source=camera --camera-facing=front --orientation=270

# Stream front camera with horizontal flip (mirror) + 270° rotation
scrcpy -s R5CT70V2JGJ --video-source=camera --camera-id=1 --orientation=flip270

# Stream with specific resolution and FPS (e.g. 1080p @ 30 FPS)
scrcpy -s R5CT70V2JGJ --video-source=camera --camera-id=1 --camera-size=1920x1080 --camera-fps=30

# Keyboard shortcuts while scrcpy window is active:
#   Alt + ← : Rotate 90° counter-clockwise (-90°)
#   Alt + → : Rotate 90° clockwise (+90°)
#   Alt + Shift + r : Reset orientation to 0°

# Install v4l2loopback module on Linux (for piping scrcpy to /dev/video2)
sudo apt update && sudo apt install -y v4l2loopback-dkms
sudo modprobe v4l2loopback devices=1 video_nr=2 card_label="Android Camera"

# Pipe scrcpy Android camera to /dev/video2:
scrcpy -s R5CT70V2JGJ --video-source=camera --camera-id=1 --v4l2-sink=/dev/video2 --no-playback

# Process /dev/video2 with OpenCV Camera Studio filters:
uv run python cam_fx.py --device /dev/video2
```

#env -u LD_LIBRARY_PATH  ./Meshroom


env -u LD_LIBRARY_PATH /home/za/tmp/meshroom/Meshroom-2025.1.0/meshroom_batch     -p photogrammetry     -i /home/za/Videos/3d     --cache /home/za/Videos/3d/standard-cache     -o /home/za/Videos/3d/standard-output     -s /home/za/Videos/3d/umbrella-standard.mg     --paramOverrides DepthMap:downscale=2 Texturing:textureSide=4096 Texturing:useUDIM=false


    ffmpeg -i /home/za/Videos/obs/2026-08-20_13-46-34.mkv \
      -af "volume=2.0" \
      -c:v copy \
      /home/za/Videos/obs/2026-08-20_13-46-34_louder.mkv



scrcpy --video-source=camera --camera-facing=back --camera-size=1920x1080

---

# Aug. 26, 2026

## Audio stack troubleshooting (Focusrite Scarlett lost power / EasyEffects crash leaving stale processes)

```bash
# Check USB device is actually recognized by the kernel
lsusb | grep -i focusrite
dmesg | tail -30

# Restart the user-level PipeWire audio stack
systemctl --user restart wireplumber pipewire pipewire-pulse

# Check current audio graph / sinks / sources
wpctl status

# Find and kill stale/crashed EasyEffects processes
ps aux | grep -i easyeffects
pgrep -af easyeffects
pkill -f easyeffects
pkill -9 -f easyeffects   # only if the above didn't clear them

# Clear stale WirePlumber routing/priority state (last resort before reboot)
systemctl --user stop wireplumber pipewire pipewire-pulse
rm -rf ~/.local/state/wireplumber
systemctl --user start pipewire pipewire-pulse wireplumber

# Check EasyEffects service logs / crash reason
journalctl --user -u app-easyeffects* -b
```

arecord -D default -f S24_LE -r 48000 -c 1 raw_take.wav 

##List available sources/targets:

    pw-record --list-targets  # no such flag

This shows node names/IDs, so you can confirm you're grabbing the clip mic and not some other input.

## Record raw:

pw-record --target=<node-name-or-id> -P "resample.quality=10" --channels=1 --rate=48000 --format=s24 raw_take.wav



ffmpeg -i raw.wav -af arnndn=m=<model> clean1.wav 
ffmpeg -af loudnorm=I=-16:TP=-1.5:LRA=11 

---

# Aug. 28, 2026

## Diagnose Focusrite Scarlett USB power loss (external hub autosuspend)

```bash
# Check autosuspend setting for every USB device
cat /sys/bus/usb/devices/*/power/control

# Map each device's product name + power setting to its sysfs path,
# to find which one is the actual culprit (often the upstream hub,
# not the device itself)
for d in /sys/bus/usb/devices/*/; do
  if [ -f "${d}product" ]; then
    printf "%-60s %-6s %s\n" "$(cat "${d}product" 2>/dev/null)" "$(cat "${d}power/control" 2>/dev/null)" "$d"
  fi
done

# Get vendor/product ID of the offending hub (needed for a persistent udev rule)
cat /sys/bus/usb/devices/1-2/idVendor /sys/bus/usb/devices/1-2/idProduct
lsusb -s 001:$(cat /sys/bus/usb/devices/1-2/devnum)

# Temporary fix (reverts on reboot) - disable autosuspend on that hub
sudo sh -c 'echo on > /sys/bus/usb/devices/1-2/power/control'

# Permanent fix - udev rule targeting that hub by vendor/product ID
sudo tee /etc/udev/rules.d/50-usb-hub-no-autosuspend.rules > /dev/null <<'EOF'
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="35d6", ATTR{idProduct}=="2510", TEST=="power/control", ATTR{power/control}="on"
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger

# Verify it stuck
cat /sys/bus/usb/devices/1-2/power/control
```

---

# Sep. 11, 2026

## Check loudness of each audio track in a video (vaudiofix.sh verification)

```bash
f=/path/to/video.mkv

# list the streams and confirm how many audio tracks there are
ffprobe -v error -show_entries stream=index,codec_type,codec_name -of default=noprint_wrappers=0 "$f"

# measure loudness of each track by index (0, then 1, ...) - input_i is
# the number to compare; should land near -16 LUFS after vaudiofix.sh
for t in 0 1; do
  echo "-- a:$t --"
  ffmpeg -i "$f" -map 0:a:$t -af "loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json" -f null - 2>&1 \
    | grep -E 'input_i|input_tp'
done
```


# sep 17, 2026

Yes, two separate mistakes, both around the host/path separator:

**scp** — needs a **colon**, not a slash, between host and path:

```bash
scp local-files lightsail.a:/path-to-file
```
`lightsail.a/path-to-file` (with a slash) would be parsed as a literal local filename called `lightsail.a/path-to-file`, not a remote destination.

**rsync** — a **double colon** (`::`) means something different from what you want: it tells rsync to speak the standalone **rsync daemon protocol** (port 873, against a running `rsyncd` with configured "modules" in `/etc/rsyncd.conf`) — we haven't set that up, and don't need to. What we've actually been using all along is rsync-over-SSH, which is a **single colon**, same as scp:

```bash
rsync -az local-folder/ lightsail.a:/remote/folder/
```

So the rule of thumb: one colon = "go over SSH" (what you want, works with the `lightsail.a` alias in `~/.ssh/config` exactly like plain `ssh` does), two colons = "talk to an rsync daemon" (a different, unconfigured thing). Both of your commands should use the single-colon form.



adb -s 3283a939 exec-out screencap -p > /tmp/mi9.png
vim -u NONE -N --cmd "set rtp+=~/dev/linput/vim" -c "runtime plugin/zcinput.vim"  /tmp/random.md

# 2026 1005 0531 utc

    unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY


